左村爆破兵
近来几个月,一直在努力寻找前端战友,未果,一路的招聘经历下来,心生不少感慨, 一直都很小心翼翼的,怕错失了高人,又更加怕失误把关不够招到不合格的同学进来公司,对公司对项目造成某些影响。面试前端工程师对我来说是一件非常有意思的事,因为面试过程很大程度上也是自我提升的过程。无论大公司还是小公司,之所以在如何招聘到真正有能力的 前端工程师方面会遇到同样的问题,就是因为负责招聘的那些人不知道自己公司需要什么样的人,结果问问题时也问不到点子上。经过这几年在行业里的摸索,我总 结出了自己的一套很有效的面试前端工程的方法。有的应聘者说我不好对付,但留给他们这样的印象也并非我所愿。我觉得之所以他们说我不好对付,主要是因为我问他们问题时问得太细了。以前我曾专门写过一些 东西,告诉应聘者怎么才能通过我的面试(Surviving an interview with me)以及优秀的前面工程师应该具备什么样的素质(What makes a good front end engineer?),而我的面试可以说完全是按照那两篇文章的标准进行的。我不会问一些特别偏门的问题,也不认为出几道逻辑题就能考出人的真实水平。我 唯一的想法就是确定你能否胜任我们要招的这个职位。为此,我需要简单地考察如下几个方面。基本知识我们生活在互联网时代,你想知道的任何事情几乎都能在15分钟内找到相关信息。可是,能找到信息并不等于你会使用它。我认为所有前端工程师至少都应 该掌握某些基本的知识,才能有效地完成自己的工作。如果一遇到问题,就停下工作上网四处搜索解决方案,怎么可能保证按期完成工作呢?听听,还有谁在说“我 不知道,但我可以上网搜到。”请这些同学把手举起来,让大家认识一下(immediately raises a flag for me.)。下面我列出一些基本的知识点,这些都是我认为一名前端工程师(无论工作年头长短)在没有任何外来帮助的情况应该知道的。DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。DOM操作——怎样添加、移除、移动、复制、创建和查找节点。事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。严格模式与混杂模式——如何触发这两种模式,区分它们有何意义。盒模型——外边距、内边距和边框之间的关系,IE 8以下版本的浏览器中的盒模型有什么不同。块级元素与行内元素——怎么用CSS控制它们、它们怎样影响周围的元素以及你觉得应该如何定义它们的样式。浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。JSON——它是什么、为什么应该使用它、到底该怎么使用它,说出实现细节来。重申一下,上述这些知识点都应该是你应该“想都不用想”的东西。我一开始问的所有问题都是想摸清你对所有这些领域知识的掌握程度。虽然上面列出的这些知识点并没有面面俱到,但我觉得你至少应该掌握这些,才有可能跟我坐到一间办公室里来。少量提问我非常赞同面试者问的问题越少越好。反复问应聘者各种问题既不公平,也很无聊。我在任何一次面试中,通常只问三个大问题,但每个问题又会涉及我所能想到的多个方面。回答每个大问题一般要经过几个步骤,这样我就可以在每个步骤中穿插着问一些小问题。比如说: 现在有一个正显示着Yahoo!股票价格的页面。页面上有一个按钮,你可以单击它来刷新价格,但不会重新加载页面。请你描述一下实现这个功能的过程,假设服务器会负责准备好正确的股票价格数据。这个问题牵扯到一组我想要考察的基本知识点:DOM结构、DOM操作、事件处理、XHR和JSON。如果我要求你对换一种处理股票价格的方式,或者 让你在页面中显示其他信息,就可以把更多的知识点包括进来。对于经验比较丰富应聘者,我也可以自如地扩展要考察的知识范围,最简单像JOSN与XML的区 别、安全问题、容量问题,等等。我还希望应聘者给出的任何解决方案中都不要使用库。我想看到最原生态的代码,你就当页面中没有包含任何库。你说你对哪个库了解多少多少,但我不能把 关于库的知识作为评判能力的因素,因为库是会随时间变化的。我需要的是真正理解库背后的机制,特别是能够徒手写出一个自己的库的人。解决问题做为一名前端工程师,最值得高兴的事莫过于解决同一个问题会有很多种不同的方法,而你要做的就是找出最合适的方法来。我在提问的时候,经常会在应聘 者解释完一种方法后问他们还有没有第二种方法。此时我会跟他们说,假设你的这个方法由于种种原因被否决了,那么你还能不能给出另一种方法。这样做可以达到 两个目的。首先,可以测试出他们是否在毫无意义地复述书本中的东西。不能不承认,某些人确实有过目不忘的天赋,听他们在那里滔滔不绝地讲,你会觉得他们什么都 明白。可是,只要一跟这些人谈到怎么查找方案无效的原因,以及能否拿出一个新方案来,他们往往就傻眼了。这时候,如果我听到“我不明白这个方案为什么不够 好”之类的反问,心里立刻就明白我的问题已经超出了他们的能力范围,而他们只是想拿自己死记硬背的结论来蒙混过关。其次,可以测试出他们已经掌握的(还是那句话,“想都不用想”)浏览器技术知识。如果他们对浏览器平台的核心知识有较好的理解,想出解决同一问题的不同方案根本没有那么难。对一名前端工程师来说,这绝对是最重要的能力。前端工程师在工作中遇到本该如此却并未如此的难题(说你啦,IE6),应该说是一件很平常的事。一个方案无效就无计可施的人,做不了前端工程师。考核应聘者解决问题能力的另一层原因,与我的个人喜好有关。在搞清楚应聘者知道什么不知道什么之后,我就会想着问一个他们知识领域之外的问题。这样 做的目的,就是想看看他们怎样运用已有的知识解决新问题。在解决问题的每一步,我也准备了一些提示,以防有人会卡壳打艮(在我面前15分钟一言不发,对我 评价这个人毫无帮助)。我真正感兴趣的,是他们能够从上一步前进到下一步。我希望看到一个人就在我眼前学到新知识。注意:所有问题都与浏览器技术相关。我不相信出几道抽象的逻辑题,就能够考出某人解决Web技术问题的能力。在我看来,这无异于让素描大师画肖像(或者让刘翔跟博尔特同场竞技),没有意义,也得不到任何有价值的信息。有激情要成为一名优秀的前端工程师,最重要的莫过于对自己做的事要有激情。我们技能都不是从学校中或者从研讨会上学来的,因此前端工程师必须具备自学能 力。浏览器技术的变化可谓日新月异,所以也只有不断提升自己的技能才做得到与时俱进。我虽然不能强迫谁必须多看博客、不断学习,但想应聘前端工程师的人恐 怕还是必须这么做的。你怎么知道谁对这种工作有没有激情?实际上非常简单。我只问一个简单的问题:“目前你对什么Web技术最感兴趣?”这个问题永远不会过期,而且也几 乎不可能出错……除非你答不上来。就眼下来说,我希望你对这个问题给出的技术中包括WebSocket、HTML、WebGL、客户端数据库,等等。只有 对Web开发充满激情的人,才会坚持不懈地学习新知识、掌握新技能;这些人才是我真正想要的。当然,我会让他们详细解释自己提到的技术,以保证他们不是随 口说了几个时髦的新词汇。最后一点计算机科学或者Web设计方面的知识当然也有用,但那都是基本知识之外的东西。只要基本知识在那儿了,一切就都有了基础,想扩充知识面也不难。可 是,如果等到正式上班以后,还得从头学习基本技能,那种难度是不可同日而语的。另外,高级前端工程师与一般工程师相比,肯定需要掌握更多的技能。而面试几 乎没有经验大学毕业生,同样也会有一套完全不同的程序。我在这篇文章里列出来的都是一些最基本的东西。对于那些还没有多少面试经验的人,我总是喜欢告诉他们,面试完了只要问自己一个问题就行:你想以后跟这个人在一起共事吗?如果不管为什么,回答是不,那就是不。
张小繁繁繁
将这些问题作为参考。希望你的面试官有点经验,不会用以下这样的问题开场。以防万一,还是准备一些答案。1.为什么选择程序员这个职业生涯?2.截至目前,你所从事的项目中最喜欢的是哪个?3.描述一下你梦想中的研发项目。另外一些面试官会问一些通用的技术问题,来测试你的技术能力。有可能部分人不知道这些问题是什么意思,而仅仅是在考察你的能力/竞争力。基于面试官的技术能力级别的不同,你的答案也会有所不同。这些问题简单易答,因此把这些问题记下来。1.描述一下创建一个新网页的过程2.怎样减少页面加载时间?3.标准和标准体(standards and standards bodies)为什么重要?4.你使用怎样一个过程来组织代码?5.你喜欢用什么工具来测试代码性能?[page]既然你从事前端工作,理解CSS会非常重要。因此这里为你准备了一些常见的CSS问题。这是展示你知识储备的重要开始。这些并不是最尖锐或者重要的问题,如果不能回答出来,将对你很不利。 中的 resetting 和 normalizing 之间的区别有哪些?2.什么是floats,它是如何工作的?、relative、fixed 和 static 定位的区别是什么?4.解释visiblity hidden和display none之间的区别5.你是如何修复特定浏览器默认样式的问题?6.你是否用过网格系统?目的是?7.如果计算CSS权重?8.解释如何优化CSS选择器。9.为什么需要使用预编译器?10.你是如何测试网站的跨浏览器兼容性?现在我们最基本的任务完成了。谁都能死记硬背这些答案来应付以上问题。即使是新手前端开发者也能出色地回答大部分问题。然而如果想真正让你的面试官印象深刻并证明你的功底深厚,就把下面这些问题牢记在心。1.前端开发的框架是什么?2.响应式web app和原生应用程序的区别是什么?3.原生app相对web app的优点是什么?4.客户端和服务器端开发的区别是什么?5.什么是SASS和LESS?它们是如何工作的?面试官会更多关注你是如何表达对这些问题的解释。他们会追问支持你的答案的工作案例。前面的问题你可能可以通过记忆而过关,你可能还会遇到这些问题的扩展,但这些答案的深度,将让你与众不同。通过你参与过的实际项目,来展示你的思考过程。
a田艳恒
作为一名HTML5前端工程师,为了工作,为了就业我们免不了要参加各种各样的面试。为此总结了面试前的注意事项:
第一:注意自己的仪容仪表
面试之前,一定要再次从头到脚地将自己的仪容仪表检查一遍。检查时主要包括,自己的牙缝是不是还有食物残渣,所以你需要就近找一个卫生间,如果没有卫生间就近找一个角落也是可以的,但是切记一定不要在大庭广众之下。因此,为了给自己整理出着装的时间请在约定时间前20分钟到达。
第二:再次检查面试时所需的资料是否都已带全
这些资料主要包括:身份证明、学历文凭证明、个人简历、以往作品等等,如果这些东西齐全之后,需要对这些资料做一个整理与排序。因为没有哪个面试官希望看到面试者拿出一堆“莫名其妙”的东西塞给他,让他自己再一页一页的翻找自己需要的内容,如果说这些资料在面试官手中不小心散落一地,结果可想而知。这样的求职者在面试官眼中也一定不是一个让人放心、有条不紊的员工。当然如果检查时发现资料没有带全,也不要紧张。反而你要庆幸幸亏及时检查,也有足够的时间组织语言去向面试官解释。
第三:面试之前将通信工具调成振动或关闭状态
虽然说面试者与面试官之间是一个平等的关系,但毕竟你是去人家公司求职的,始终处于一个被动的状态,所以最起码的尊重还是要做到的。曾经有调查显示,对于面试过程中接电话或是被电话打断的求职者,会被HR减分。
第四:等候面试官时,仔细观察多了解面试公司
在等候面试官时,可以暗自观察一下公司的大体情况比如员工的着装风格、公司的LOGO或是贴在墙上的企业文化、公司的环境等等,一来可以在接下来的面试过程中表现出自己对公司的认同感,二来也可以让自己对求职公司多些了解,以确定是否要接受这里的工作。如果你身边有公司的资料宣传架,不妨取一本翻看一下,也会增加HR对你的好感。
第五:放松心情,保持自信
面试时一定要保持一定的自信,这样也会给面试官留下很好的印象。面试只是你步入工作的第一步,即便是失败了那也是人生重要的经历。失败是为了更好的迎接下一个挑战。
作为一名web前端工程师千万不要觉得懂技术面试就能万事大吉了,像以上五点细节性的东西也是一定要掌握的。
面试题系列:
网页链接
WJH卡琪屋
面试Web前端,一般会给个设计图给你做上半部分的内容,然后根据你所用时间和代码质量,去评估你的能力。另外大部分会问你未来3-5年的职业规划,这个可以根据你实际情况来说了。如果你想一直做前端,那么你可以说3年内成为一名专业的Web前端开发工程师,开发更加健壮、规模更加大、性能更加高、用户体验更加优质的应用。如果你是想做全盏工程师的话,你可以说业余会继续学习服务程序的开发、数据库等。
芯是酸的
2.提前了解所面试的企业,做到知己知彼。
3.巩固所学知识
前端工程师至少应该掌握些基本的知识,才能有效地完成自己的工作。一名前端工程师(无论工作年头长短)在没有任何外来帮助的情况应该知道的。
DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。
DOM操作——怎样添加、移除、移动、复制、创建和查找节点。
事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。
XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。
严格模式与混杂模式——如何触发这两种模式,区分它们有何意义。
盒模型——外边距、内边距和边框之间的关系,IE 8以下版本的浏览器中的盒模型有什么不同。
块级元素与行内元素——怎么用CSS控制它们、它们怎样影响周围的元素以及你觉得应该如何定义它们的样式。
浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。
JSON——它是什么、为什么应该使用它、到底该怎么使用它,说出实现细节来。
4.看前端开发面试题
目前网上有好多的前端开发面试题,有时间可以看一看,这些题有助于你对相关知识有一定的了解,最主要的是,面试碰到了相关的题,你不会太紧张,你会有些许的自信。
不管是面试官或被面者都需要有一定的时间观念,不能迟到。如果你有事情会耽搁,应该事先通知彼此。没有时间观念,一个简单的细节,有时会让你错失一个机会。
2.真诚面对
当你的技术不能达标时,只要你的人品达标,也能为自己增加不少分数。
3.尽量展示自己的实力
每个人都有自己好的一面也有自己不足的一面,在面试的时候,应该尽量展示自己优秀的一面。对于校招生或实习生而言,面试官真的不太在乎你所掌握的技术如何?而更再意的是你是不是有发展的潜力。你处事的能力,学习的能力,解决问题的能力等等。而自己问题都是在和你聊天的过程中去掌握的,所以你应该借此机会,向面试官展示你这方面的软实力。
做过最满意的项目是什么?
项目背景
为什么要做这件事情?
最终达到什么效果?
你处于什么样的角色,起到了什么方面的作用?
在项目中遇到什么技术问题?具体是如何解决的?
如果再做这个项目,你会在哪些方面进行改善?
面试总结会让自己更认识自己。虽然你有面试的机会,但这并不代表你能通过面试,那么每一次的面试失败就是你下一次面试成功的铺垫。
技术:技术方面缺少什么?面试官看重的是什么?
软实力:自己拿分项是哪些?自己丢分项是哪些?自己面试过程的沟通能力如何?
失败原因:面试失败原因是什么?是由于技术不足?还是其他原因造成自己面试失败?还可以去思考更多的为什么?…
精灵酱酱儿
前端工程师不一定需要懂设计方面。倘若有这等要求,前端工程师岂不是一项除其本身特征性工作外还包含用户界面设计、视觉设计、业务逻辑及交互动画设计师等工作的职称了么!前端工程师,主要工作内容与用户界面的表现紧密联系,但均为在图形上或以其为基础通过某种实现方式去正确、准确呈现什么。之所以以“主要工作”修饰,是因为 / 的出现与发展致使前端被引入服务器端性质的工作内容。在能力方面:对 HTML / CSS / JavaScript 具有专家级别的知识;有较熟练使用 AngularJS / / jQuery 或者其它类库的经验;较熟悉第三方组件(插件)生态环境及具体案例;有较熟练使用 Jade / Swig / Handlebars / Mustache 或者其它模板引擎的经验;有较熟练使用 SASS 或者其它 CSS 预处理器的经验;有较熟练使用 CoffeeScript 的经验;对 CSS / JavaScript 设计模式有很好的认识及应用;对常用数据结构和算法熟悉;有使用 GruntJS / GulpJS 任务运行器的经验;有使用 Yeoman 生成器的经验;有诸如 Bower / Volo / JSPM 等前端静态资源包管理器使用经验;熟悉本地及远程(真机)调试操作;有 Git 的使用经验;意识驱动行为,所以:有自己的技术信仰;有渴望尝试新技术的强烈愿景及较强的主观学习、客观探索能力;拥有令人难以置信的关注细节的精神;在诸如 Github、Sitepoint 等这样的技术社区活动;因为你不是一个人工作,并且要对一个产品付之责任心,所以:有良好的编程风格和文档习惯;对模块化开发及相关标准有很好的认识及应用;有对网页标准和标准制定机构重要性较深刻的理解;建站过程中考虑其它诸如UI、安全性、高性能、SEO、可维护性以及技术因素等方面;有跨浏览器(主:兼容性)、跨设备(主:响应式)开发并测试页面的经验;对网格在WEB设计中的应用有深刻的理解,以及具备系统(有组织)地实现出来的能力;能够独立工作并做出正确的抉择;能够适应不断变化的更新 / 扩展 / 改版需求,同时处理多个项目;能够提供准确的定时估计工作(适应准时交付管理法则);有与服务器端程序开发人员协同工作的经验;能够(熟练)阅读英文资料;有一定的工作压力承受能力;然后再为自己从长远打算及加分:有 NodeJS Web / 服务器 / 客户端应用程序设计、开发、优化经验;有 MangoDB / Redis 等No SQL 数据库设计、实现、维护经验;有使用 PhoneGap / Apache Cordova 进行移动应用开发经验;有浏览器 Addon 扩展(以扩展的形式添加一些为提高用户体验的附加功能)开发经验者;
优质工程师考试问答知识库