金九银十,每年9、10月份各大互联网公司都会周期性地发生人事变动,无论是刚进社会的职场菜鸟,还是准备跳槽的老手,都将在这个时候获得新工作,或迎来晋升涨薪的最佳机会。
程序员如何在面试过程中介绍自己的项目经验呢?本文给出的一些方法不是拍脑袋想出来的,而是从面试上百个候选人的经历中抽取出来的。
其中有不少血泪,也有不少人成功的途径,希望对大家(尤其是经验不满 3 年的程序员)有帮助。
在面试时,经过寒暄后,一般面试官会让你介绍项目经验 。最常见的问法是,说下你最近的(或最拿得出手的)一个项目。
根据我们的面试经验,发现有不少候选人对此没准备,说起来磕磕巴巴,甚至有人说出的项目经验从时间段或技术等方面和简历上的不匹配。
这样就会造成如下的后果:
第一印象就不好了,至少会感觉该候选人表述能力不强。
一般来说,面试官会根据候选人介绍的项目背景来提问题,假设面试时会问 10 个问题,那么至少有 5 个问题会根据候选人所介绍的项目背景来问。
候选人如果没说好,那么就没法很好地引导后继问题了,就相当于把提问权完全交给面试官了。
面试时7分靠能力,3分靠技能,而刚开始时的项目介绍又是技能中的重中之重,所以本文将从“介绍”和“引导”两大层面告诉大家如何准备面试时的项目介绍。
在面试前准备项目描述,别害怕
面试官是人,不是神,当他拿到你的简历的时候,是没法核实你的项目细节的(一般公司会到录用后,用背景调查的方式来核实)。
更何况,你做的项目是以月为单位算的,而面试官最多用 30 分钟来从你的简历上了解你的项目经验,所以你对项目的熟悉程度要远远超过面试官,因此你一点也不用紧张。
如果你的工作经验比面试官还丰富的话,甚至还可以控制整个面试流程(笔者在面试方面成精后也经常干这种事情,大家一定也能行)。
既然面试官无法了解你的底细,那么他们怎么来验证你的项目经验和技术?下面总结了一些常用的提问方式。
准备项目的各种细节
一般来说,在面试前,大家应当准备项目描述的说辞,要自信些,因为这部分你说了算;并且也要流利些,因为你经过充分准备后,可以知道你要说些什么。
而且这些是你实际的项目经验(不是学习经验,也不是培训经验),那么一旦让面试官感觉你都说不上来,可信度就很低了。
不少人是拘泥于“项目里做了什么业务,以及代码实现的细节”,这就相当于把后继提问权直接交给面试官。下表列出了一些不恰当的回答方式。
在避免上述不恰当回答的同时,大家可以按下表所给出的要素准备项目介绍。如果可以,也请大家准备一下用英语描述。
刚毕业的学生,或者工作经验较少的人,英语能力都差不多,但你说了,这就是质的进步。
面试前,你一定要准备,一定要有自信,但也要避免如下的一些情况。
不露痕迹地说出面试官爱听的话
在项目介绍的时候(当然包括后继的面试),面试官其实很想听一些关键点,只要你说出来,而且这些相关问题回答的比较好,这绝对是加分项。
我在面试别人的时候,一旦这些关键点得到确认,我是绝对会在评语上加上一笔的。
下面列些面试官爱听的关键点和对应的说辞:
一定要主动
我去面试应聘者的时候,往往会特别提问:你项目里有什么亮点?或者你作为应聘者,有什么其他加分项能帮你成功应聘到这个岗位。即使这样问,还有些人直接说没有。
我这样问已经是处于角色错位了,作为面试者,应当主动说出,而不是等着问。但请注意,说的时候要有技巧,找机会说,通常是找一些开放性的问题说。
比如:在这个项目里用到了什么技术?你除了说一些基本的技术,比如 Spring MVC,Hibernate。
还有数据库方面的常规技术时,还得说用到了 Java 内存管理,这样能减少对虚拟机内存的压力,或者说用到了大数据处理技术等。
也就是说,得找一切机会说出你拿得出手的,而且当前也非常热门的技术。或者找个相关的问题做扩展性说明,比如被问到:你有没有用到过一对多和多对多?
你除了说基本知识点以外,还可以说,一般我还会根据需求适当地设置 cascade 和 inverse 关键字,随后通过一个实际的案例来说明合理设计对你项目的帮助,这样就能延伸性地说明你的技能了。
相反如果你不说,面试官一定会认为你只会简单的一对一和一对多操作。
面试的时候,如果候选人回答问题很简单,有一说一,不会扩展,或者用非常吝啬的语句来回答我的问题。
那么我一般会给机会让他们深入讲述(但我不敢保证不是每个面试官都会深入提问),如果回答再简洁,那么也会很吝啬地给出好的评语。
记住:面试官不是你的亲戚,面试官很忙,能挖掘出你的亮点的面试官很少,而说出你的亮点是你的义务。
在面试别人过程中,根据不同的情况一般会给出如下的评语:
1、回答很简答,但回答里能证明出他对框架等技术确实是做过,我会在评语里写些“对框架了解一般,不知道一些深层次的知识(我都问了多次了你都回答很简答,那么对不起了,我只能这么写,或许你确实技术很强,那也没办法,谁让你不肯说呢?)”。
同时会加一句“表达能力很一般,沟通能力不强”,这样即使他通过技术面试,后面的面试他也会很吃力。
2、回答很简单,通过回答,我没法验证他是在项目里做过这个技术,还是仅仅在平时学习中学过这个技术。
我就会写“在简历中说用过 XX 技术,但对某些细节说不上来,没法看出在项目里用到这个技术”,如果这个技术是职务必需点,那么他通过面试的可能性就非常小。
3、回答很简单,而且只通过嗯啊之类的虚词回答,经过提醒还这样,我会敷衍几句结束面试,直接写“技术很薄弱,没法通过面试”。
4、虽然通过回答能很好地展示自己的技能,但逻辑条理不清晰,那么我会让他通过技术面试,但会写上“技能很好,但表达能力一般(或有待提高),请后继面试经理斟酌”。
这样通过后继综合面试的机会就一般了,毕竟综合面试会着重考察表达能力、交往能力等非技术因素。
不管怎样,一旦回答简单,不主动说出你的擅长点,或没有条理很清楚地说出你的亮点。
就算我让你通过面试,也不会写上“框架细节了解比较深,数据库应用比较熟练”等之类的好评语,你即使通过技术和后面的综合面试,工资也是比较低的。
一旦有低级错误,可能会直接出局
面试过程中有些方面你是绝对不能出错,所以你在准备过程中需要尤其注意如下的因素。
下面列了些会导致你直接出局的错误回答:
准备些加分点,在介绍时有意提到
在做项目介绍的时候,你可以穿插说出一些你的亮点,但请记得,不论在介绍项目还是在回答问题,你当前的职责不是说明亮点而是介绍项目,一旦你详细说,可能会让面试官感觉你跑题了。
所以这时你可以一笔带过,比如你可以说,“我们的项目对数据要求比较大,忙的时候平均每小时要处理几十万条数据”,这样就可以把面试官引入“大数据”的方向。
你在面试前可以根据职位的需求,准备好这种“一笔带过”的话。比如这个职位的需求点是 Spring MVC 框架,大数据高并发,要有数据库调优经验,那么介绍以往项目时,你就最好突出这些方面你的实际技能。
再给大家举个例子,比如 Java 虚拟机内存管理和数据库优化是绝大多数项目都要遇到的两大问题。
大家都可以在叙述项目经验时说,在这个项目里,我们需要考虑内存因素,因为我们的代码只允许在 2G 内存环境中运行,而且对数据库性能要求比较高,所以我们经常要监控优化内存和数据库里的 SQL 语句。
这样当面试官深入提问时,就能抛出自己准备好的虚拟机内存优化和数据库优化方面的说辞。
实在不行,你也可以说“我除了做开发,也做了了解需求,测试和部署的工作,因为这个项目人手比较少,压力比较大”,这样你也能展示你有过独挡一面的经历。
我在面试过程中,一旦听到有亮点,就会等到他说好当前问题后,顺口去问,一般技术面试最多半小时,你把时间用在回答准备好的问题点上的时候,被问其他问题的时间就会少了。
你可以引导,但不能自说自话
面试的时候,也会遇到些有准备的人,其实如果你真的想应聘的话,一定要事先准备。
这点能理解,甚至赞同。你只要别露出太明显的痕迹,就不会写上“似乎有准备,没法考察真实技能”这种话,更何况未必每个面试官都能感觉出你准备过。但你不能凭着有准备而太强势,毕竟面试是面试官主导的。
我遇到个别面试的人,他们说话太多,一般会主动扩展,比如问他数据库用什么,他不仅回答数据库是什么,自己做了什么,甚至顺便会把大数据处理技术都说出来。
其实过犹不及,面试官就会重点考察你说的每个细节,因为他怀疑你说的都是你从网上看的,而不是你项目中用到的。
甚至会直接威胁:“你先和我说实话这个技术你真在项目里用到,我后面会重点考察,一旦被认为你项目里没做,这个性质就是蒙混过关了”,往往这些人会主动坦白。
不过话说回来,他如果仅仅说,数据量比较大,但点到为止,不继续说后面的话,就会深入去问,自然他就有机会表达。
同时请注意,一般在面试过程中,一旦你亮出加分点,但面试官没接嘴,这个加分点可能就不是项目必备的,也不是他所关注的,那么你就别再去说了,或者等到你提问题的时候再说。
总结
给大家两句话:
第一,面试前一定要准备。
第二,本文给出的方法,不是教条。大家可以按本文给出的方向结合自己的项目背景做准备,而不是死记硬背本文给出的一些说辞。
当大家介绍好项目背景后,面试才刚刚开始,哪怕你说得再好,哪怕你把问题引导到你准备的范围里,这也得应付 Java Web(比如 Spring MVC,ORM 等)、Java Core(多线程、集合、JDBC 等)和数据库等方面的问题。