HardBirch

以小见大、由浅入深-谈如何面试Javascript工程师

时间:11-11-14 栏目:HTML5移动开发 作者:张飞不张,文采横飞 评论:77 点击: 20,991 次

        面试Javascript工程师难吗?Javascript工程师的水平参差不齐,如何评定他们技术水平的高低?如何确定Javascript工程师适合承担哪方面的任务?我在腾讯时的面试经验是,通过不同纬度的结构化问题、由浅入深的进行考查。

        基础

        如何判断一个对象是方法?这个问题简单有简单的答案,复杂有复杂的答案,但可能都不是最好的答案。

        页面加载和渲染的过程:简单一点只考查JS、CSS、IMG的加载顺序和过程,复杂一些则涉及内核间的差异以及并发处理。对于这个问题是否理解是写出高效率代码和结构的必须。

        冒泡与捕获:它们的定义,它们的区别,如何阻止冒泡?基础知识,经典题目。但是不是每个人都能完整全面的回答出这个问题,面试者需要对DOM tree有自己的理解。

        闭包:闭包是一个很好的面试题目,能够很好的考查出不同水平的面试者。了解什么是闭包、如何使用闭包、闭包的原理、闭包的真正原理,只有对JS的作用域链、垃圾回收机制有深入了解的工程师才能正确无误的完整回答这个问题。

Scope Chain是了解Closure原理的关键

    

        工具库

        jQuery:考查编程习惯和经验。jQuery作为现在使用最为广泛而且最简单的JS库,能够很好的测出使用者的开发经验和JS水平。一个有着真正开发经验的工程师,应当能正确的写出各种类型的选择器,回答为什么用bind来进行事件绑定、mouseover和mouseenter的区别。如果这些考不倒他,别急,live方法的实现原理、ready方法的实现机制这两个问题足以考查出他对DOM、浏览器差异的认识。

        extJS、YUI、Prototype:这些工具库或框架都有各自的特点,可以采用像上面类似的问题从浅入深进行了解。

        实际问题

        解决实际问题考查的是你把知识融会贯通的能力、解决问题的能力、理解能力以及学习能力,这对综合素质的考查是一种很好的方式。第一次面对一个问题,面试者是否能迅速给出思路、由过程推导出结果,能否在一些提示下一步步得到最终的完整答案,这都是很好的考察点。

        Autopager:自动翻页功能(实现方式参考http://blog.csdn.net/hfahe/article/details/5827483)是一个由浅入深考查面试者能力的好例子。对滚动条事件的了解,pageHeight、windowHeight、scrollY的区别和关系是两个关键点,而最后对于事件的clearTimeout优雅处理是隐藏的考查点。

        Lazyloader:许多人见过图片延迟加载的产品,但是他们是否有了解过背后的实现原理?从功能抽象到具体实现,onresize的考虑、延迟触发的考虑,这道题目有一定难度,和上面的例子也有一定相似之处。

        经过了前三个方面的了解,你应该已经对这个面试者的基本水平有了一个大致的判断。下面的步骤可以让你了解这个人能够承担什么样的工作,他的发展潜力多大。

        项目
        通过之前的项目经历可以认识他的Team work能力、解决问题的能力,在项目中的角色和承担的责任也可以反衬他的个人能力。

        如果他没有做过跨浏览器开发,那么这种需要长期积累的任务就不适合分派给他来解决;如果他曾经有浏览器插件的开发经历,那么浏览器App的工作也许能够利用他的现有经验;如果他用过jQuery Mobile、sencha touch或者XUI,那么他可能适合开发移动Web App。作为管理者高明的地方在于,把合适的人用在合适的地方。

        技术视野

        具有技术视野的人一般具有很大的发展潜力,他们未来不会仅仅只是一个普通的工程师,而有可能会成长为技术专家或者技术管理者。

        在HTML5方面应当对新的语义标签、Canvas、Webworker、Drag & Drop有所经验或者了解;在CSS3方面,应当或多或少尝试过Radius、Gradient、Transform。当然,如果能够了解Mask,甚至能够知道Flexible Box的使用方法和原理,那么这个人对盒子模型的理解和对新知识的学习能力可以得到很好的体现。

        JS开发工程师是最容易的职位,也是最难的职位。新的技术和框架层出不穷、浏览器版本日新月异、越来越多API的出现,好的JS开发工程师需要随时学习和更新许多知识,包括后台(Webworker、Websocket、Node.js)、UI(Canvas、Transparent)、动画(Transform、Transition、Animation)等方面。面试者是否有自我更新意识,他的技术视野多高决定了他能够涵盖的范围多大,他的未来发展潜力多大。

HTML5已经战胜移动Flash,前途无量

        如果能够把以上所有问题清楚、顺利的回答完整,我相信他的表达能力、沟通能力应该是相当优秀的,同时值得欣喜的是,我们又找到了一位优秀的同伴。

以小见大、由浅入深-谈如何面试Javascript工程师:目前有77 条留言

  1. 0楼
    force2002:

    这么多东西,要全部知道,可能还有点难度,知道80%差不多是同行了

    2011-11-15 13:54 [回复]
  2. 0楼
    minjun0901:

    lz也是玩这块的?

    2011-11-16 08:19 [回复]
  3. 恩,js确实有好多东西需要熟悉~!

    2011-11-16 08:27 [回复]
  4. 0楼
    Joinzheng:

    确实,要玩好js不容易!!

    2011-11-16 08:36 [回复]
  5. 0楼
    lybykw:

    厉害了。

    2011-11-16 08:51 [回复]
  6. 0楼
    custom1234:

    全面而有深度

    2011-11-16 08:59 [回复]
  7. 0楼
    luzhen328:

    如果通过了楼主的面试,那么这将是一个不可多得的非常优秀人才。

    2011-11-16 09:21 [回复]
  8. 0楼
    shilei_nb:

    差距很大,平时只是在用 ,没想过那么深的问题。

    2011-11-16 09:22 [回复]
  9. 0楼
    ldwang:

    很全面,哈哈,我都很多就知道名字。不知道干什么的。

    2011-11-16 09:43 [回复]
  10. 0楼
    jcl007_:

    其实我们很多时候更多的是关心这个功能能否实现,如何实现更好,解决了应用为先,这些所谓的鸟原理不一定得非要弄得彻头彻尾。如同我的一高中同学,修车很厉害,原理不一定都明白,别妈的把原理当圣旨。

    2011-11-16 10:12 [回复]
  11. 0楼
    jcl007_:

    看不惯动不动拿原理说事的人,如同中国的应试教育

    2011-11-16 10:13 [回复]
  12. 0楼
    jcl007_:

    lz就不用jQuery和其他第三方工具,只用纯js脚本,照样可实现常见的功能,全部纯js脚本,维护起来容易,

    2011-11-16 10:17 [回复]
  13. 0楼
    Aniao:

    [reply]jcl007_[/reply]
    对于腾讯的需求,jquery估计不太够看,很多时候必须得发明自己的轮子。小公司待多了根本不知道大公司怎么搞的。你知不知道别人会把网页渲染的每一步的耗时作为量化测量,浏览器的渲染原理等都是必须的知识,只有知道这些才能优化网页。没做过海量用户的就别评论海量用户的应用。

    2011-11-16 10:25 [回复]
  14. 0楼
    kele5213:

    这文章很不错,这才是为公司招人不是为项目招人,反过来看也能学到一个人应该如何为自己的职业道路做计划。

    顺便围观10,11,12楼……

    2011-11-16 10:32 [回复]
  15. 0楼
    lzo_ozl:

    哎~~

    2011-11-16 10:33 [回复]
  16. 0楼
    hfahe:

    有一点我在文章里没有提到,大家讨论到了,也是经常问到的:关于页面的加载和渲染过程,对于这个问题有充分理解,才能写出高效率的结构和代码。

    2011-11-16 10:35 [回复]
  17. 0楼
    yl5960904:

    [quote=Aniao][reply]jcl007_[/reply]
    对于腾讯的需求,jquery估计不太够看,很多时候必须…[/quote]
    ——————
    lovewhatilove 2011-09-07 23:31:01
    我很无聊,用C++写了遍东西,然后完了之后发现思想受到限制,不知道该做什么了,算了再重新写一遍,但得有点新意,怎么搞呢?哦,用C,创新。接下来,完成了,又无聊了,怎么办,哦,汇编,更牛B了。

    我想说的是,如果一个人到了一种限制就应该更多的去学习,学习不是把C++折腾的有多深,对汇编有多么的熟悉,写代码都可以用二进制,我从来不觉得这样的人有多牛B,反而,我更佩服像cryteck那些人,他们总是创造出轰动的东西出来,比如全局光照(LPV),他们看的专业论文,他们的积累,那才是牛人。我的理解是千万别拿工具当成了自己钻研的目的,而应该想着如何挥舞工具。
    ————————

    整天“ 海量用户、原理、算法” 不是大忽悠就刚刚飞跃出某个院。说这个显得你比人家高级么?整天得瑟原理 有意思么。

    2011-11-16 10:41 [回复]
  18. 0楼
    healer_kx:

    原理很重要,这个就是大牛和码农的区别。

    2011-11-16 10:43 [回复]
  19. 0楼
    dxx1988:

    支持一下,有同感- -~~ 虽然自己也是个被面试者。

    2011-11-16 10:45 [回复]
  20. 0楼
    hfahe:

    如何判断一个对象是否为数组。这个问题很简单,但是也很有意思,也可以深度挖掘。

    2011-11-16 10:47 [回复]
  21. 0楼
    Kezhongke:

    先顶个!为日后学习定下目标

    2011-11-16 11:25 [回复]
  22. 0楼
    to_ma:

    中国程序员缺少个性,共性太多,个性不足.所以创新人才与从业的人数不成正比.
    楼主不足就是找人才的标准是看这个人才被多少概念给玩弄,而不是这个人才玩弄了多少概念,按你这个方法人事经理就不要休息了,天天给你安排面试,呵呵!

    2011-11-16 12:06 [回复]
  23. 0楼
    pzl:

    比较适合中国的教育体系,那种啃书背题的人对于这种考试是可以得到高分。

    2011-11-16 12:17 [回复]
  24. 0楼
    yayoec:

    [reply]jcl007_[/reply]
    水平暂且不说 就是没明白 原理 跟中国应试教育有什么内在逻辑联系
    求解

    2011-11-16 12:18 [回复]
  25. 0楼
    rocLv:

    楼主能介绍一下javascript的进阶路径吗?可以推荐些书之类的

    2011-11-16 12:22 [回复]
  26. 0楼
    dxx1988:

    [quote=to_ma]中国程序员缺少个性,共性太多,个性不足.所以创新人才与从业的人数不成正比.
    楼主不足就是找人才的标准…[/quote]
    我觉得,实现一个页面或者一个功能对前端来说是基本要求,更重要的应该是对性能优化上,而性能优化方面,JS没有编译器的帮助,所以了解幕后原理才对优化有帮助。否则,做个页面,很多自动生成代码的工具就足以完成,又何必大费周章的专门招收前端工程师?

    2011-11-16 12:31 [回复]
  27. 0楼
    disburden:

    如果楼主找到这样的人才,那么我要恭喜你找到一位好码农.
    同时我对这位同学感到悲哀,因为他再也没机会坐上管理者的位置了,因为这是在中国

    我个人觉的最重要的人才是他知道项目需要用到什么样的技术,而他知道哪些技术可以用,而不用所有技术的原理都知道,但是当他需要知道原理的时候又能很快知道原理,这才是人才.就好想字典你需要的时候才去查,没需要你有必要把整本字典被下来吗(好像这个比喻不是很恰当)?

    2011-11-16 13:12 [回复]
  28. 0楼
    fxs_2008:

    写的不错,可很少有人有这么高的水平。程序员很多,但境界不一样。而且很少有管理者能准确地评价别人的境界。
    js是web中比较难的。但和php一样,会的人多,精的人少。
    除了游戏外,一般的web应用,能实现两点就不错了:一是尽量少写js;二是封装对象。少用类库,更少用插件。

    2011-11-16 13:23 [回复]
  29. 0楼
    jennyvenus:

    博主长得有点像钱小豪。

    2011-11-16 13:38 [回复]
  30. 0楼
    dxx1988:

    [quote=disburden]如果楼主找到这样的人才,那么我要恭喜你找到一位好码农.
    同时我对这位同学感到悲哀,因为他再也没机会坐…[/quote]
    原理都搞不清的,还能知道项目应该用什么技术? 原理都搞不清的,才会成为一个码农。

    2011-11-16 13:39 [回复]
  31. [reply]dxx1988[/reply]
    哥们,你好好了解一下javascript, HTML5 和 CSS3 你就不会这么想了。哪来那么多自动生成代码的工具给你用?只要你稍微想要修改一下,或优化一下,不懂原理就像给自己做了五花大绑一样,完全被限制。不了解原理,不注重细节,永远没有办法成为了不起的程序员,甚至管理者。

    2011-11-16 13:40 [回复]
  32. 0楼
    huicaier:

    现在也在学习js的一些东西,但是还不曾上升到那个高度,努力。

    2011-11-16 13:52 [回复]
  33. 0楼
    hyylohas:

    呵呵,有前端开发的朋友意向换个环境,我们团队需要新鲜血液的加入,地点,杭州,欢迎你们的加入啊。。。

    2011-11-16 14:42 [回复]
  34. 我想程序员是需要有艺术细胞的,一个对技术有热忱的同事比一个有经验却厌烦代码的同事更有价值。在什么位置做什么事,程序员最重要的是学习能力。

    2011-11-16 15:17 [回复]
  35. 0楼
    njl_041x:

    楼主的这篇文章真是为自己敲响了警钟啊!没想到自己连码农都算不上,才只是一个码奴隶!哎!要翻身就要奋斗了。。。

    2011-11-16 16:22 [回复]
  36. 0楼
    njl_041x:

    顺便问一下,如果能通过楼主的面试,这样的web工程师月薪能达到多少???2W有木有?

    2011-11-16 16:24 [回复]
  37. 0楼
    jcl007_:

    我同意原理很重要,但我还是觉得做程序也好,学编程也好还是先入为主,最重要的是学习能力和快速解决问题的能力,其实很多时候问题解决了,程序实现了,不一定所有的原理都彻头彻尾地明白,楼主的文章有一定的深度,但也很容易误导一些人,以为面试就是玩这些,其实面试的内容远远不只这些,或许楼主列举的这些不一定最重要。本人多次在此发表看表最终是想表明一个想法:肯定很多人都觉得楼主是个牛人,牛人往往都是公众人物,公众人物话没讲妥很容易误导一些人的。

    2011-11-16 16:46 [回复]
  38. 0楼
    sbwwkmyd:

    如果这些原理都知道,确实很牛了。
    但是我觉得刻意强调工具库这类东西的应该不是牛人。

    2011-11-16 17:09 [回复]
  39. 0楼
    wanghy2008:

    很同意33楼的分析;原理有时候了解即可,真正需要的是一个人的学习力和操控力

    2011-11-16 17:36 [回复]
  40. 没看完一篇文章,都有责任心地顶一下!谢谢这些前辈的付出···共同学习,共同进步!

    2011-11-16 17:48 [回复]
  41. 搞清原理的人都是码仔

    2011-11-16 18:24 [回复]
  42. 0楼
    winsonlei:

    写得不错

    2011-11-16 18:33 [回复]
  43. 0楼
    mdjcfan:

    跟楼主学习了,不知道要能达到楼主的标准的,能拿到多少的薪水 啊?

    2011-11-16 19:21 [回复]
  44. 0楼
    sssschenyi:

    extJS、YUI、Prototype 这些都要会么?难道就会一个JUQERY 也不行?
    什么是闭包?

    2011-11-16 19:35 [回复]
  45. 0楼
    dxx1988:

    [quote=jcl007_]我同意原理很重要,但我还是觉得做程序也好,学编程也好还是先入为主,最重要的是学习能力和快速解决问题的…[/quote]
    我认为你的因果关系搞错了,原理搞清了,才能快速解决问题,才有更好的学习能力,JQ之父为何能写出JQ? 若不懂这些原理能写出JQ? 我们为何用框架? 因为需要快速开发高稳定性的产品。

    是否有听过:一流的公司做标准,二流的公司做框架,三流的公司做产品这句话?

    一直依赖于第三方框架,依赖其的易用性,快速开发性和稳定性,不想着去弄清楚原理,永远只能活在框架的规则之下。
    为什么我们做的是产品,用的是别人的框架,而别人是写框架给我们用,是否有知道这是什么原因?

    2011-11-16 20:13 [回复]
  46. 0楼
    carter0851:

    需要好好学习啊!

    2011-11-16 20:52 [回复]
  47. 由此可见,基础知识的重要性。

    2011-11-16 21:22 [回复]
  48. 学习了…

    2011-11-16 23:04 [回复]
  49. 学习了

    2011-11-16 23:57 [回复]
  50. 0楼
    wqh_2011:

    很有难度,不过发现经常看看面试题很有帮助

    2011-11-17 00:37 [回复]
  51. 0楼
    wquanchao:

    牛B啊,哈哈,终于知道JS有难度

    2011-11-17 07:51 [回复]
  52. 0楼
    iocfy:

    原理?原理有很多,框架的原理,JS语言的原理,汇编的原理,机器码的原理,集成电路的原理。。。。。原理要知道的多了海了去了,都去研究原理,谁来做产品,分工不同,研究方向不同,木匠设计家具,难道还要去研究锤子、槽子是如何制造出来的,君子善假于物也,善于利用一切可以利用的工具一样也是大牛~~~~~~

    2011-11-17 08:13 [回复]
  53. 0楼
    majiedota:

    犀利犀利

    2011-11-17 08:20 [回复]
  54. 0楼
    jikeytang:

    只有深,没有看到浅。

    2011-11-17 09:02 [回复]
  55. 0楼
    abc7797005:

    LZ能说说一些比较基础的例子么

    2011-11-17 10:50 [回复]
  56. 0楼
    dxx1988:

    [reply]tigertim719[/reply]
    不好意思,你或许没认真看我的回复,或者误会我的意思了。我的观点和你是一致的

    2011-11-17 23:05 [回复]
  57. 0楼
    net_yuhai:

    [reply]pzl[/reply]
    别说中国教育体系一无是处,很多人不屑学习原理,多渴望能直接上手操作,换句话说,你对中国的教育"原理" 可能也不太了解

    2011-11-18 09:12 [回复]
  58. 0楼
    net_yuhai:

    顶楼主

    2011-11-18 09:13 [回复]
  59. 我就当好玩!

    2011-11-18 11:44 [回复]
  60. 0楼
    lin_hailun:

    涨见识了。

    2011-11-18 12:10 [回复]
  61. 文章应该叫面试前端程序员,因为你考察的不仅仅是Javascript知识。楼主必定知道Javascript不是仅仅用于浏览器的,ASP和WScript都可以使用Javascript。DOM、CSS这些都超出Javascript的范畴了。

    2011-11-18 21:38 [回复]
  62. 0楼
    Bruce_NUAA:

    确实,真正理解框架和原理对于JS的理解也会更深刻。

    2011-11-20 20:42 [回复]
  63. 0楼
    miniflycn:

    这些题目基本上是考前端工程师平时是不是去深扣实际中遇到的问题。如果深扣过,至少60%-70%应该做得出来吧。

    2011-11-21 14:26 [回复]
  64. 0楼
    seajean:

    When Chuck Norris codes with jQuery, he doesn't use .live(), he uses .notyetkilledbyme().

    2011-11-21 18:26 [回复]
  65. 估计我一个问题都回答不出来

    2011-11-22 14:04 [回复]
  66. 0楼
    fgwf1:

    高深

    2011-11-22 17:19 [回复]
  67. 0楼
    makezyb:

    我最讨厌研究原理的人,天天研究原理就是转牛角尖。你把原来研究那么透彻有什么用,IT是一个很广博的行业,技术层出不穷,没有时间去研究每个技术的原理,但是你一定要知道这个技术有什么特点他的利用价值在哪里。知道他的优点,就可以了,如果要用代码都是现成的,改改就能用。变成自己的东西才重要,技术最终的目标是搞出产品来,不是让你做研究。

    2011-11-23 17:03 [回复]
  68. 0楼
    seraph5186:

    这已经超出JS的范围了吧,能全部回答这些问题只能说你平时地于这方面比较钻,也能反应你平时的工作范畴比较窄,现在的一个程序员要掌握的东西太多了,实际开发中JS只是一个很小的部分.当然人才肯定有.

    2011-11-24 15:28 [回复]
  69. 0楼
    zxdii:

    改天楼主教教我哈。

    2011-11-24 15:56 [回复]
  70. 0楼
    sheroheroT:

    看了才知道自己的js有多浅陋

    2011-11-28 10:26 [回复]
  71. 0楼
    arui20088:

    ok

    2011-12-10 11:14 [回复]
  72. 0楼
    likef2e:

    -看起来比较像是front-end的面试
    -如果回答8~10成满意的,年薪约略为? (是否>=一流的公司做标准的年薪?)

    2011-12-22 10:44 [回复]
  73. 我正好有同事在腾讯做JS。
    腾讯JS做得很好,但只能说在国内。
    还不到标准如何,最多只能算看法

    2011-12-28 09:51 [回复]
  74. 0楼
    jane3love:

    读了此文发现,javascript比我想象中高深多了…敬畏中..

    2011-12-28 14:38 [回复]
  75. [reply]iocfy[/reply]
    支持,以前听台湾一个PHP大牛说过,所有的语言只是一种工具,你是要用这些工具去创造人们适用的东西,不是去研究这些工具,感觉楼主跑偏了,呵呵!

    2011-12-28 15:27 [回复]
  76. [reply]iocfy[/reply]
    支持,以前听台湾一个PHP大牛说过,所有的语言只是一种工具,你是要用这些工具去创造人们适用的东西,不是去研究这些工具,感觉楼主跑偏了,呵呵!

    2011-12-28 15:27 [回复]
  77. 0楼
    AllinShang:

    努力加油。。嘿嘿

    2012-03-16 11:41 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐