记得我刚做技术面试官的时候,还比较单纯,别人说什么就信什么。这本来也没多大的错,虽然有些候选人会夸张自己的技能,但毕竟大多数候选人都是比较诚实的,相信绝大多数的技术面试官也像我这样,会以君子之心度人的。
但我面试了一阵后,有项目经理向我反映,经我手面试通过的一些候选人有存在实际技能与简历上描述不符的情况,比如简历上写的是熟悉Linux操作,但实际也就会几个命令,又如简历上写的是熟悉Spring Cloud,也有实际项目经验,但后来发现他其实没做过Spring Cloud的实际项目,简历上的项目是从网上下载的。
项目经理还说,像我还算好,经我面试进来的人好歹只是能力上的问题,而且能力的偏差尚在可以接受的范围,像有些面试官甚至会让一些无法正常和别人沟通沟通,干活偷奸耍滑得过且过等的刺头通过面试。
于是我对面试别人的方法和技巧做了总结,在这方面也和其它资深面试官做了沟通。在本文里,不仅会讲到如何甄别一个人真实能力的方法,还会在此基础上对大家提些面试方面的建议。
一、从候选人的谈吐和沟通表现方面,看他是否适合这个岗位
其实,我从接到候选人这一刻起,面试就开始了。在面试过程中,团队协作能力和沟通表达能力甚至比技能还重要,如果候选人出现如下的情况,我是一定要在评估报告里写上对候选人非常不利的评价。
1 候选人迟到,且没主动说明,或非常轻飘地把迟到归结成客观原因。
如果候选人预期会迟到,应当事先打个电话来说明,比如确实是因为交通等因素,这不会成为扣分因素。或者在迟到后,主动说明原因并表示歉意,这也没什么。
但如果候选人迟到,但就当没事人一样大大咧咧地直接来面试,我就会写上,“候选人迟到且没说明,没时间观念”。或者候选人虽然有说明,但一口把迟到原因归结成交通等客观原因,同时不表达歉意的,那对不起了,我估计就得写上“候选人没担当,平时工作中有可能会推卸责任”。
2 候选人谈吐举止不稳重
说通俗点就给人感觉轻飘飘,比如说话很随意,得理不让人,或者在交流时随意打断别人,或者交流时自说自话引导话题,或者交流时抖腿等。这类人有可能会和组内成员沟通有问题,所以情况严重的,甚至会无视技术亮点直接排除。不过话说回来,候选人的面试时间估计也就半小时,在这半小时里,装得职业化些稳重些,这应该不难吧。
3 过于以自我为中心
比如候选人目中无人或者说话很“亏”(太自我),比如经过多次深入发问后会不耐烦,或者大谈特谈自己的优势,或者太“作”。其实有时候,候选人的能力比面试官确实要强,资历也要比面试官丰富,但哪怕在这样的场景下,也得做到从语气和举止上尊重面试官,哪怕面试官反复问到同一个问题,或者问的问题在你看来很简单,你也得态度好地认真回答。
二、如何在简历上归纳可疑点(这会在面试时着重问)
其实大多数IT技术人员都是老员工了,而且平时哪怕有缺点,在面试时也会尽量隐瞒,所以我在面试过程中,在上述第1方面淘汰掉的候选人虽然有,但不多。在大多数情况下,候选人会在简历上有所夸张,甚至作假,下面来看些具体的情况。
1 候选人把不是相关的经验写成相关的经验。
比如候选人虽然有3年工作经验,但前两年是做测试的,第三年才做java。但在简历中,他把3年经验都写成Java相关的。
这样的话,他前两年的java经验看上去会非常像学习项目,而非商业项目。而且,他在简历上所写掌握的技能,一定很肤浅,没法看到有工作3年的程度。
2 候选人的项目描述看上去像毕业设计或课程设计
真实公司里的项目,多少会用到当前比较热门的技术,比如Java项目里可能会用到Redis或Dubbo等组件,而且公司一般不会做个明显没商业前景的项目。
所以如果我在简历中看到有候选人写,xx教务系统,xx财务系统或人事系统之类的,(它们一般和网上能下载到的案例名很相似),这就很明显是课程设计的项目,因为这类系统都有现成成熟的,公司一般不会开发。或者是xx电商系统,除非是某公司亏钱推广自己的产品,否则一般不会自行开发,这类项目我也会在面试时着重甄别。
3 在项目中提到的技术都是过时的,而且出现明显会亏本或应用场景明显不符合的技术.
比如还在用Struts MVC,或者明明流量比较大需要分布式部署的系统,在项目里还仅仅用到Spring MVC,没有用到Redis等分布式组件。又如,一个明明工期比较短而且访问量不大的维护项目,还大量用到了Spring Cloud等成本比较高的技术。
4 在某个时间点,某培训学校有大批学生毕业时,我就经常会看到不少简历里的项目描述很相似,这往往是培训学校里的学习项目,而不是商业项目。
我会认可该候选人在培训学校里的学习经历,但毕竟学习项目的含金量要比商业项目里要小,所以我会把这部分的项目经验排除在实际的相关技术年限之外。
5 简历上的项目经验里,描述某个技术的文字和上下文非常不匹配,感觉像是后来加上去的,这类技术我就要详细问些细节,因为有可能候选人其实没在项目里做过,而是只有学习经验,但拼接在现有的项目里。
三、如何从发问中判断候选人对技术的掌握程度
在我面试前,我一般会通读候选人的简历,在发现有第2部分所述的可疑点的时候,会通过如下的问题来确认。
1 针对候选人的相关技术年限,比如java 3年,我会预先给候选人划定个应该达到的程度,比如得熟悉虚拟机熟悉多线程等,然后在面试时,就围绕这个尺度来问,一般来说,能甄别出夸大相关技术年限的情况。
2 如果候选人在简历中出现类似学习项目,我就会问些在项目里一定会用到的技能,比如项目如何通过ant等工具打包,如何通过jenkins等来打包和部署,或者问项目的细节,比如多少个人做了多久?客户是谁?然后再提出自己的质疑:这个产品市面上有现成的,为什么你们公司还要掏钱再开发?如果候选人想用学习项目来冒充商业项目经验,这些细节一定答不上来。
3 如果我看到候选人简历上的某些项目里,出现了比较突兀的技术,那么我就会盯着这个技术问,比如明明用单个Oracle实际即可完成的项目候选人说用了集群,那我就会首先核实集群的配置细节,然后再问,为什么要用集群?这时候,候选人往往只能尴尬地说,这是由项目经理安排的,他也说不上。
除了上述情况之外,如果候选人在简历中写了一些比较热门的技术,或者是亮点,我就会对此深入提问,如果问题也回答非常好,那绝对是个加分项,反之就还不如不写了。
比如,某候选人在简历上写,掌握数据库性能调优的技能,也在项目里用过,那么我就问怎么用的,采用了哪些技术,用的前后大概能提升多少性能。也有候选人能很好地回答上,比如说用执行计划看性能耗在哪方面,然后对应地改,或者分库分表,或者用with等语法改善SQL语句,这就能证明他确实掌握这块技术。但有些候选人只能停留在建索引的层次,那么这就不能说是熟悉数据库调优了。
又如,有些候选人在简历上写,在某某项目里用到了Kafka做消息中间件,这也是个亮点,这时我就会问,kakfa如何做消息持久,如何实现消息分组等问题,总之只要做过kafka,一定能知道。这时就有些候选人说不上了,再一细问是只配置过,没用过。也有些候选人只会泛泛而谈,没法结合项目说,这样的话,只能证明候选人有理论经验,而没在实际项目里用过。
四、候选人该如何准备简历
1 千万别在学历年龄等关键因素造假,在入职时会提交学历证身份证等,这类造假很容易看出。
2 我知道有些候选人如果照直写,估计连面试的机会都没,这里只能说,比如你把前几年的测试经验写成java开发经验,你就得后果自负的,假设你是3年测试加2年java,但你写成了5年java,面试官在无法查证的情况下,是按5年经验来问的,你就的自行承担风险了。
3 在写简历时,一定得了解市场上对你这个工作年限所必备的技能,如果不知道,自己去看招聘广告上你这个年限的职位要求,再不清楚的话,自己通过面试去试错。
如果你的简历给面试官的感觉是,达不到你这个工作年限,那么面试的机会就很少。这里倒也不是让大家不切实际地写,而是请大家得挖掘自己的项目经验,其实有很多技能,你用过,但没注意,所以没往简历上写。比如数据库调优,你一定改写过SQL,也或多或少用过执行计划查看性能,这类容易忽视的但非常值钱的经验得写上。
4 写简历时,一定得准备些亮点,比如精通linux,能在linux上部署程序或查看日志,或者用过些分布式中间件,又如有过大数据的经验等等,这类经验,最好结合实际项目写,比如在xx项目的xx模块里,我用到了消息中间件RabbitMQ,它是怎么部署的,如何发消息等,然后,你得事先准备好针对该技术的相关问题。
5 在写简历上的项目时,可以一笔带过客户方是谁,用了多久,这样就能显出这个项目是商业项目,而不是学习项目,尤其这个项目看上去很像学习项目。
在准备简历方面,我根据我的一些经验,总结出了一本书,Java Web轻量级开发面试教程,尤其在最后一章,写了如何准备简历和面试,自认为还算详细,大家感兴趣的话可以看下。
五、候选人该如何准备面试技术问题
1 针对你工作过的公司以及项目经验,你得非常清楚,说的时候别和简历上不一致,比如具体某个项目的时间段以及用到的技术框架,用到的数据库等,毕竟这个是你做过的,你再说错就有些说不过去了,如果说错,面试官会怀疑你简历的真实性。
2 针对你简历上提到的技术框架,尤其是亮点,你一定得逐一准备,首先,你得讲清楚这个技术是如何在项目里用到的(结合项目的实例讲解技术,可以讲些配置参数的细节),其次,你可以到网上看下这个技术的相关描述,加深对这个技术的理解。比如nginx,你可以了解配置反向代理的细节,以及如何在其中写lua脚本,最后,你可以说下对这个技术的理解,比如引入这个技术后,对你的项目有什么帮助,或者在使用这个技术时,你遇到过哪些坑,然后是怎么逐一解决的。
3 然后可以刷题,刷题的时候,最好能结合底层代码来说,比如你被问到Spring里的IOC,你可以事先阅读些底层代码,在面试时通过纸笔向面试官讲述,这样面试官就会认为对这个技术很精通(你都深入底层代码去看了,怎么可能不精通)。
4 在简历上你可以写一些亮点,然后在面试前准备说辞, 在我另一本书Java核心技术及面试指南里,我写了关于虚拟机和设计模式方面的准备说辞,并在最后一章给出了抛出这些说辞的技巧,自己感觉,也是我面试别人和自己面试的经验之谈。
5 最好了解下你平时用到的项目打包部署测试等的工具,比如用ant打包,用jenkins部署,用Sonar做代码质量管理,用哪种技术做性能压测等,这类技术一旦你说出来,那么第一能向面试官证明这个项目是商业项目,另外,还能证明除了代码开发之外,你还有项目实施部署的相关经验。
六、版权说明,总结和求推荐
本文欢迎转载,转载前请和本人说下,请全文转载并用链接的方式指明原出处。
本人自认为,上述经验是根据面试了大量技术人员总结而来,对大家多少有些帮助,虽然有些泛,但里面不乏可以实施的改进点。如果大家在面试方面想了解哪个细节,请和我说,我会在后继博文里介绍。
感谢大家读完本文,祝大家十一愉快,我是不可能出去玩了,我有一大堆事,比如准备书的大纲,完成我另一本书等,不过这些都是我自找的,所以我也会很愉快。
如果大家感觉本文多少有帮助,请点击下方的推荐按钮,您的推荐是我写博客的最大动力。