Nicholas C. Zakas如何面试前端工程师
2010年01月8日 Web开发, 原创, 翻译
Original Post:Interviewing the front-end engineer
Nicholas C. Zakas,2010年1月5日
翻译完成:2010年1月7日,最后更新:2010年1月10日
面试前端工程师对我来说是一件非常有意思的事,因为面试过程很大程度上也是自我提升的过程。无论大公司还是小公司,之所以在如何招聘到真正有能力的前端工程师方面会遇到同样的问题,就是因为负责招聘的那些人不知道自己公司需要什么样的人,结果问问题时也问不到点子上。经过这几年在行业里的摸索,我总结出了自己的一套很有效的面试前端工程的方法。
有的应聘者说我不好对付,但留给他们这样的印象也并非我所愿。我觉得之所以他们说我不好对付,主要是因为我问他们问题时问得太细了。以前我曾专门写过一些东西,告诉应聘者怎么才能通过我的面试以及怎样才能成为优秀的前端工程师应该具备什么样的素质,而我的面试可以说完全是按照那两篇文章的标准进行的。我不会问一些特别偏门的问题,也不认为出几道逻辑题就能考出人的真实水平。我唯一的想法就是确定你能否胜任我们要招的这个职位。为此,我需要简单地考察如下几个方面。
基本知识
我们生活在互联网时代,你想知道的任何事情几乎都能在15分钟内找到相关信息。可是,能找到信息并不等于你会使用它。我认为所有前端工程师至少都应该掌握某些基本的知识,才能有效地完成自己的工作。如果一遇到问题,就停下工作上网四处搜索解决方案,怎么可能保证按期完成工作呢?听听,还有谁在说“我不知道,但我可以上网搜到。”请这些同学把手举起来,让大家认识一下(immediately raises a flag for me.)。下面我列出一些基本的知识点,这些都是我认为一名前端工程师(无论工作年头长短)在没有任何外来帮助的情况下就应该知道的。
- DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。
- DOM操作——怎样添加、移除、移动、复制、创建和查找节点。
- 事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。
- XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。
- 严格模式与混杂模式——如何触发这两种模式,区分它们有何意义。
- 盒模型——外边距、内边距和边框之间的关系,IE < 8中的盒模型有什么不同。
- 块级元素与行内元素——怎么用CSS控制它们、它们怎样影响周围的元素以及你觉得应该如何定义它们的样式。
- 浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
- HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。
- JSON——它是什么、为什么应该使用它、到底该怎么使用它,说出实现细节来。
重申一下,上述这些知识点都应该是你“想都不用想”就知道的东西。我一开始问的所有问题都是想摸清你对所有这些领域知识的掌握程度。虽然上面列出的这些知识点并没有面面俱到,但我觉得你至少应该掌握这些,才有可能跟我坐到一间办公室里来。
少量提问
我非常赞同面试者问的问题越少越好。反复问应聘者各种问题既不公平,也很无聊。我在任何一次面试中,通常只问三个大问题,但每个问题又会涉及我所能想到的多个方面。回答每个大问题一般要经过几个步骤,这样我就可以在每个步骤中穿插着问一些小问题。比如说:
这个问题牵扯到一组我想要考察的基本知识点:DOM结构、DOM操作、事件处理、XHR和JSON。如果我要求你换一种处理股票价格的方式,或者让你在页面中显示其他信息,就可以把更多的知识点包括进来。对于经验比较丰富的应聘者,我也可以自如地扩展要考察的知识范围,最简单像JOSN与XML的区别、安全问题、容量问题,等等。
我还希望应聘者给出的任何解决方案中都不要使用库。我想看到最原生态的代码,你就当页面中没有包含任何库。你说你对哪个库了解多少多少,但我不能把关于库的知识作为评判能力的因素,因为库是会随时间变化的。我需要的是真正理解库背后的机制,特别是能够徒手写出一个自己的库的人。
解决问题
做为一名前端工程师,最值得高兴的事莫过于解决同一个问题会有很多种不同的方法,而你要做的就是找出最合适的方法来。我在提问的时候,经常会在应聘者解释完一种方法后问他们还有没有第二种方法。此时我会跟他们说,假设你的这个方法由于种种原因被否决了,那么你还能不能给出另一种方法。这样做可以达到两个目的。
首先,可以测试出他们是否在毫无意义地复述书本中的东西。不能不承认,某些人确实有过目不忘的天赋,听他们在那里滔滔不绝地讲,你会觉得他们什么都明白。可是,只要一跟这些人谈到怎么查找方案无效的原因,以及能否拿出一个新方案来,他们往往就傻眼了。这时候,如果我听到“我不明白这个方案为什么不够好”之类的反问,心里立刻就明白我的问题已经超出了他们的能力范围,而他们只是想拿自己死记硬背的结论来蒙混过关。
其次,可以测试出他们已经掌握的(还是那句话,“想都不用想”就知道的)浏览器技术知识。如果他们对浏览器平台的核心知识有较好的理解,想出解决同一问题的不同方案根本没有那么难。
对一名前端工程师来说,这绝对是最重要的能力。前端工程师在工作中遇到本该如此却并未如此的难题(说你啦,IE6),应该说是一件很平常的事。一个方案无效就无计可施的人,做不了前端工程师。
考核应聘者解决问题能力的另一层原因,与我的个人喜好有关。在搞清楚应聘者知道什么不知道什么之后,我就会想着问一个他们知识领域之外的问题。这样做的目的,就是想看看他们怎样运用已有的知识解决新问题。在解决问题的每一步,我也准备了一些提示,以防有人会卡壳打艮(在我面前15分钟一言不发,对我评价这个人毫无帮助)。我真正感兴趣的,是他们能够从上一步前进到下一步。我希望看到一个人就在我眼前学到新知识。
注意:所有问题都与浏览器技术相关。我不相信出几道抽象的逻辑题,就能够考出某人解决Web技术问题的能力。在我看来,这无异于让素描大师画肖像(或者让刘翔跟博尔特同场竞技),没有意义,也得不到任何有价值的信息。
有激情
要成为一名优秀的前端工程师,最重要的莫过于对自己做的事要有激情。我们的技能都不是从学校中或者研讨会上学来的,因此前端工程师必须具备自学能力。浏览器技术的变化可谓日新月异,所以也只有不断提升自己的技能才做得到与时俱进。我虽然不能强迫谁必须多看博客、不断学习,但想应聘前端工程师的人恐怕还是必须得这么做。
你怎么知道谁对这种工作有没有激情?实际上非常简单。我只问一个简单的问题:“目前你对什么Web技术最感兴趣?”这个问题永远不会过期,而且也几乎不可能出错……除非你答不上来。就眼下来说,我希望你对这个问题给出的技术中包括WebSocket、HTML、WebGL、客户端数据库,等等。只有对Web开发充满激情的人,才会坚持不懈地学习新知识、掌握新技能;这些人才是我真正想要的。当然,我会让他们详细解释自己提到的技术,以保证他们不是随口念叨了几个时髦的新词汇。
最后一点
计算机科学或者Web设计方面的知识当然也有用,但那都是基本知识之外的东西。只要基本知识在那儿了,一切就都有了基础,想扩充知识面也不难。可是,如果等到正式上班以后,还得从头学习基本技能,那种难度是不可同日而语的。另外,高级前端工程师与一般工程师相比,肯定需要掌握更多的技能。而面试几乎没有经验的大学毕业生,我也会有一套完全不同的程序。我在这篇文章里列出来的都是一些最基本的东西。
对于那些还没有多少面试经验的人,我总是喜欢告诉他们,面试完了只要问自己一个问题就行:你想以后跟这个人在一起共事吗?如果不管为什么,回答是不,那就是不。
你可以在这里留言,也可以在你自己的站点上发送一个引用通告。
延伸阅读




为之漫笔(李松峰),本博客专注于Web前后端技术、移动平台开发技术、交互设计和技术翻译。声明一下,因为时常需要外出审稿,而且基本不带笔记本,所以有时可能会迟一点回复大家的留言。
好,收了,下次用这个面试看看效果。。。
[...] 引用地址 http://www.cn-cuckoo.com/2010/01/08/how-nicholas-c-zakas-interviewing-the-front-end-eng... [...]
[...] 对于那些还没有多少面试经验的人,我总是喜欢告诉他们,面试完了只要问自己一个问题就行:你想以后跟这个人在一起共事吗?如果不管为什么,回答是不,那就是不。 via(this) [...]
[...] From:为之漫笔 Tags: 前端, 前端工程师, 职业规划, 面试 [...]
[...] Nicholas C. Zakas文章为之漫笔的译文:http://www.cn-cuckoo.com/2010/01/08/how-nicholas-c-zakas-interviewing-the-front-end-engineer-1332.ht... [...]
[...] 特别提示:由于目前正在抓紧时间翻译Professional JavaScript, 2nd,预计春节之前没有时间翻译CSS之父的论文了。对自己,也对大家,更对“CSS之父”说声抱歉吧! 前一篇: Nicholas C. Zakas如何面试前端工程师 [...]
[...] 今天读到为之漫笔翻译的一篇文章——《Nicholas C. Zakas如何面试前端工程师》,反省了一下,自己距离前端开发工程师的目标还有很大的差距。这篇文章中总结的前端开发工程师面试时涉及的基础问题,我想,是很有必要再回头总结下了。 我们生活在互联网时代,你想知道的任何事情几乎都能在15分钟内找到相关信息。可是,能找到信息并不等于你会使用它。我认为所有前端工程师至少都应该掌握某些基本的知识,才能有效地完成自己的工作。如果一遇到问题,就停下工作上网四处搜索解决方案,怎么可能保证按期完成工作呢?听听,还有谁在说“我不知道,但我可以上网搜到。”请这些同学把手举起来,让大家认识一下(immediately raises a flag for me.)。下面我列出一些基本的知识点,这些都是我认为一名前端工程师(无论工作年头长短)在没有任何外来帮助的情况应该知道的。 [...]
[...] Nicholas C. Zakas如何面试前端工程师 [...]
[...] Nicholas C. Zakas如何面试前端工程师 [...]
[...] Nicholas C. Zakas如何面试前端工程师 [...]
[...] 航母建造的历史最显著的一点是航母越造越大,从40年的xxxxx吨,到现在的xxxxxxxxxx吨。以至于后来已经很少有那么大型的船坞来建造这些庞然大物了。分工复杂,建设周期长,一环扣一环是航母建造的特点。 上周看了一篇帖子《Nicholas C. Zakas如何面试前端工程师》,里面前端基本技能这些我觉得没什么说的,是该这样,不过还有一点他没有提出来,这点也是我本文主要阐述的。 [...]
拜读了,严重推荐给大家!
不错 记录下了。
非常不错,YAHOO的工程师看确实考到了实处.
[...] Nicholas C. Zakas如何面试前端工程师 [...]
[...] 引用地址 http://www.cn-cuckoo.com/2010/01/08/how-nicholas-c-zakas-interviewing-the-front-end-eng... [...]
[...] http://www.cn-cuckoo.com/2010/01/08/how-nicholas-c-zakas-interviewing-the-front-end-engineer-1332.ht... [...]
不明白博主为什么不把那些转载博文没用的评论删除了?他们留下来的意义呢?
非常感谢博主的分享!谢谢!
[...] 原文地址:http://www.cn-cuckoo.com/2010/01/08/how-nicholas-c-zakas-interviewing-the-front-end-engineer-1332.ht… [...]
[...] 来源:Nicholas C. Zakas如何面试前端工程师 [...]
看来细至的东西是不能马虎的!受教了!
[...] Nicholas C. Zakas如何面试前端工程师 [...]
This can be the fitted blog site for everyone who is wishes to check out this subject matter. You observe a lot it’s practically difficult for you to state together with you (not that I absolutely will need?HaHa). You actually certainly fit a brand new spin and rewrite over a subject matter how been recently written about for many years. Pleasant stuff, simply just great!
You can still publish something that has no absorption of waste minutes of your life that sees a host of other sites. This is very interesting and will be returning for more. Thanks for sharing.
I enjoyed reading, can be a great writer. I promise not to play favorites for the blog and finally, at a time. I encourage them to continue their good work, have a good weekend!
sfdsfdsfdsrtyrytryryryryryryryr
Nice piece, i remember looking somewhere else to do with this. Made me want to do another search in yahoo for more info and found your blog post. Great piece
Thanks for such a nice article. It includes very informative information about the article.
计算机科学或者Web设计方面的知识当然也有用,但那都是基本知识之外的东西。只要基本知识在那儿了,一切就都有了基础,想扩充知识面也不难。可是,如果等到正式上班以后,还得从头学习基本技能,那种难度是不可同日而语的。另外,高级前端工程师与一般工程师相比,肯定需要掌握更多的技能。而面试几乎没有经验的大学毕业生,我也会有一套完全不同的程序。我在这篇文章里列出来的都是一些最基本的东西。
Oh, this is quite interesting. Actulally, I found your blog on google search. I will tell my friend about your blog later.
Hi, the article is so wonderful, I am interested in it. I will pay attention to your articles.
Thank you for your articles
Recently, Moncler Jackets are on hot sale. Its popularity owes to its cheap price as well as fashionable style. There are some certain types of jackets that would be worn in every season. To many of the people, it is a worthwhile thing to buy a Moncler Men Jackets. It is an honor of you having Cheap Moncler Jackets, which represent your patriotism as well as statue. Why not buy one since it has so many advantages. Well, there are many Women Moncler Jackets around you. Choose the nearest Moncler Jackets Women to go.
I am happy to find this post very useful for me, essay help as it contains lot of information. I always prefer to read the quality content and this hing I found in you post. Thanks for sharing
如果你想减肥,那么你必须提交一个良好的有氧锻炼意味着你将有30分钟到1小时锻炼每周至少三到四次。