面试对于大多数开发者来说是一项非常主要的技能。
一次失败的招聘会造成非常严重的长期的后果,二流的人会把三流的人带进公司(一流人才雇一流人才。二流人才雇三流人才)。
还有一方面,把优秀的应聘者拒之门外更是一种伤害。
一场技术面试至少包含三部分。
首先验证简历的真实性,然后评估应聘者的经验价值,最后測试应聘者的技术能力。
1: 验证简历
简历上的不论什么东西都是假的,除非被证明。简历中实际有价值的两个部分就是“技术特长”和“项目经验”,所以验证简历环绕这两个部分进行。应该重点关注哪些入职后会用得上的技术和经验,其它项目用作对诚实度的考察,只是适当的“文学修饰”应该被当作自我营销手段而接受。“熟练”和“精通”的差别是非常难定义清楚的。
关于技术特长:
能够依据对方擅长的方向由浅入深循序渐进的询问技术细节,以便考察应聘者的掌握程度。除非是精确的定向招聘。否则不要仅通过询问你自己擅长的、仅仅涉及某个狭窄领域、方向的技术细节来确定对方价值。
有些人能够通过CPU针脚输出各种电信号。可是却无法在屏幕上打印”hello”。
也有非常多前端一直使用代码布局而从来不用可视化布局工具。掌握这些技术对他们来说易如反掌,回答不上来你的问题仅仅是由于使用习惯不同而已。能够通过技术趋势或技术社区等方向来考察一个人对某个技术的了解程度。这些问题并没有正确的答案,可是通过交流能够了解到对方对此技术的关注程度。
对这个技术的看法。这个技术的未来发展趋势?
与竞争技术对照有哪些优缺点?
此技术(或开发环境)有哪些点能够吐槽?
此技术的主要社区或blog有哪些?针对某一阶段,有哪些书籍能够推荐?
关于项目经验:
不要通过对方非常久曾经的项目技术细节来考察对方诚实度,1~2年以上的项目技术细节或架构是非常难有完整记忆的。可是项目背景、应用领域、人员结构、开发中遇到的重大问题以及大的技术方向选择对方应该十分清楚。
项目背景。客户群体是如何的,为什么开发这个项目?
项目人员组成,你负责哪部分?
你负责的部分使用了那些技术,为什么不用其它(详细)技术?
项目遇到过哪些重大问题(或有趣的事),怎么解决的?
2: 经验价值
经验不等于工作时间。除非你是真正的天才。否则永远不要低估经验的重要性。
一个有经验的优秀程序猿仅凭直觉就能够预測出需求是否合理。经验和工作年限并不全然成正比,一个人可能在一年的时间里经历从0基础程序猿到项目总监的变迁。
也可能一生都投身于公司内部软件中某个模块的维护,学不到不论什么新东西。一个人可能仅利用业余时间就开发出一款优质的产品。
也可能集公司之力也仅写了一些DEMO,业余时间全然不关心技术。
真正的经验价值取决于个人经历,能够通过对方的技术成长路程获得大致的了解。比方(注意验证真实性):
什么时间、什么原因增加这个行业?
学习过哪些技术、编程语言。详细应用在那些项目中?
是否有个人项目,或业余时间研究过哪些技术?
是否做过主要开发者。在哪个项目中?
是否有分享总结习惯,是否有技术blog?
3: 技术能力
假设简历和经验价值满足招聘要求,可是相应聘者依旧不放心。能够通过实际编码来验证一下对方的技术能力。只是想在非常短的时间内了解一个人的技术深度是非常困难的。对于优秀的程序猿,条件同意的情况下针对职务定制面试主题更为适合。不要把重点放到某个函数/參数或使用方法。更不要一味的学习google/apple问一堆算法问题(取决于:你的项目是否须要程序猿对算法有深入的研究)。重点是对方对相关技术的理解程度。多考察一些原理和技术应用场景,在这些方面没有捷径也非常难事先造假,在对方回答的过程中问一下答案纲要。能够防止浪费太多时间。一些基础的问题方向可能包含:
数据结构和算法。
线程、进程。
内存。
设计模式。
计算机原理。
操作系统。
以上做法主要针对有经验的程序猿。对于那些经验有限但潜力十足的应聘者并不公平。而对于非常多非常优秀的高级开发者来说,招聘方应该把重点放在“怎么吸引对方过来”的问题上。毕竟,能遇到优秀的人本身就是一种运气。
转载注明:http://blog.csdn.net/cuibo1123
个人观点,如有建议,欢迎指正。