即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

该怎么样面试Web前端开发工程师

微信 JavaScript 37℃ 0评论

转自:http://blog.csdn.net/zjut_acm/article/details/44944831

   近来几个月,一直在努力寻找前端战友,未果,一路的招聘经历下来,心生不少感慨, 一直都很小心翼翼的,怕错失了高人,又更加怕失误把关不够招到不合格的同学进来公司,对公司对项目造成某些影响。

   面试前端工程师对我来说是一件非常有意思的事,因为面试过程很大程度上也是自我提升的过程。无论大公司还是小公司,之所以在如何招聘到真正有能力的 前端工程师方面会遇到同样的问题,就是因为负责招聘的那些人不知道自己公司需要什么样的人,结果问问题时也问不到点子上。经过这几年在行业里的摸索,我总 结出了自己的一套很有效的面试前端工程的方法。

   有的应聘者说我不好对付,但留给他们这样的印象也并非我所愿。我觉得之所以他们说我不好对付,主要是因为我问他们问题时问得太细了。以前我曾专门写过一些 东西,告诉应聘者怎么才能通过我的面试(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设计方面的知识当然也有用,但那都是基本知识之外的东西。只要基本知识在那儿了,一切就都有了基础,想扩充知识面也不难。可 是,如果等到正式上班以后,还得从头学习基本技能,那种难度是不可同日而语的。另外,高级前端工程师与一般工程师相比,肯定需要掌握更多的技能。而面试几 乎没有经验大学毕业生,同样也会有一套完全不同的程序。我在这篇文章里列出来的都是一些最基本的东西。

   对于那些还没有多少面试经验的人,我总是喜欢告诉他们,面试完了只要问自己一个问题就行:你想以后跟这个人在一起共事吗?如果不管为什么,回答是不,那就是不。

转载请注明:CodingBlog » 该怎么样面试Web前端开发工程师

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情
(30)个小伙伴在吐槽
  1. 好文
    宋文斌2017-02-14 03:13 回复
  2. 总算看到一个要求低的了
    我快睡醒了2017-02-14 03:15 回复
  3. 然并卵,最后还得看脸蛋和胸脯。
    张京涛2017-02-14 03:16 回复
  4. 五年前的我还停留在纠结前端技术,现在的我回头看觉得那时门都还没入。这年头自己不具备独立搭建一套前端框架的能力,我真的谈都不想谈
    熊啸天2017-02-14 03:16 回复
  5. 受教了
    小吴同志2017-02-14 03:19 回复
  6. nazazheng
    小菜2017-02-14 03:19 回复
  7. 碰到这样的面试官,面试就是一场享受/憨笑
    黑麒麟2017-02-14 03:20 回复
  8. 这次真的要点赞
    追忆昔年2017-02-14 03:25 回复
  9. 应聘者就算说得天花乱坠,关键是他能不能把代码写出来?
    斑斓五彩石2017-02-14 03:25 回复
  10. 哈哈,看完后有种英雄所见略同的感觉;虽然我现在还只是一名没有能力作为面试官的面试者,但是正如文中所述,假若是我来面试,我想我也会面试这些。最基本的才是最重要的,框架用的再好;不如把语言本身理解有深度。在我心中一直留有一种想法,是否在开发这个功能的时候能否不适用框架API而是适用语言本身的API来写。。。/可爱
    Sdays丶杰2017-02-14 03:26 回复
  11. 很不错!谢谢作者的分享。追求技术就不应该本末倒置,基础才是一切的关键,任何新生事物都建立在这之上,只有把握了深层规律才会有更多的可能
    三生烟火2017-02-14 03:30 回复
  12. 哈哈,毕业前两年可能会被问的比较多,毕业三年后,基本上都是在聊聊基本思路和方法,甚至更多是聊生活和工作,哈哈
    永永的黄2017-02-14 03:31 回复
  13. 真是受教了
    佳宝宝2017-02-14 03:40 回复
  14. 受惊了!如此好的面试官应该是BAT的吧!
    @AGen2017-02-14 03:44 回复
  15. 受教了,对于刚毕业的我来说,还有很长的前端探索之路要走
    王捷2017-02-14 03:44 回复
  16. 碰到这样的面试官,大小牛就是一种享受,菜鸟就是一场灾难
    PI2017-02-14 03:51 回复
  17. 其实面试问那么多高大上的技术,也没什么用,毕竟工作时用的还是这些最基础的!
    李文昊2017-02-14 03:53 回复
  18. 说得很好,受教了/强
    Dylan&杨2017-02-14 04:00 回复
  19. 这种要求比较高,基本功要好扎实,也会忽略掉一批人,例如我只在乎思路方法,其他东西用到知道该找什么方法看看使用就行了,起码我认识的大部分人都这样,基础的确重要,但是实际中真的有几次机会用到么。例如严格模式什么的,都是固定使用这个的了
    No2017-02-14 04:01 回复
  20. 总结起来就一句话:我看不看好他?
    范愚2017-02-14 04:11 回复
  21. 现在这个年头,良心面试官已经很少了/呲牙
    Siming2017-02-14 04:15 回复
  22. 等会到2:30第一次去面试,自学转行过来的,还没任何工作经验,谢谢。一直学习加油中。
    贺朋强2017-02-14 04:27 回复
  23. 期待已久的内容好棒好棒/鼓掌/鼓掌/鼓掌/鼓掌/鼓掌 1.掌握必要前端技能 2.足够热爱 3.遇到问题,要相处至少三种以上解决方案,择优选择。
    熊宝2017-02-14 04:45 回复
  24. 领导,我就问下你们这标准开多钱,我不面试。就问问。
    Pixel2017-02-14 05:01 回复
  25. 作为一名大二在读生,自学前端一年多了,想知道没有什么经验,只有理论知识这些,面试通过率高吗?真的喜欢前端,因为觉得很有成就感,每一次接触到新知识都会令人觉得好像发现又一个新世界……但是楼主上面提到的有一些要求,好像如果没有亲身实践过,根本就不能完全掌握,那应该怎么办呢?
    俊哥儿乐___2017-02-14 05:11 回复
  26. 文章写的很好,大赞一个!面试的时候一定要提前做好充足的准备工作!合理的有效利用好路途坐车时间,多看几遍知识要点,把握好平稳乐观的心态去沟通,以便顺利的面试和应对!伙伴们加油吧!
    博易前端 崔新2017-02-14 06:30 回复
  27. 很细~但能提现功力
    红色星期天2017-02-14 10:56 回复
  28. 大部分人是招去使用各种工具干活的,不是每个人都是去做框架开发的。 如果一个人会用jquery,ng快速高效解决的问题,非要花时间用原生的去做,那世界上不需要框架了,并且js这种语言原生的真的差劲,没有其他哪一门语言像JS这样诞生了好多cs,ts等第三方替代者。 重要的不是他会什么,而是他怎么解决优化问题的方法和思路。 如果一个人把js练得再熟再好,不会解决问题,有什么用呢?
    书记的马甲2017-02-14 11:34 回复
  29. 激情、作者说的这个很重要
    小花朵2017-02-15 01:01 回复
  30. 关键有的面试官你说多了,面试官会有一种不耐烦的样子,这就尴尬了
    💋 姜先森'2017-03-19 10:32 回复