第一次参加公司校招面试,还是比较有感触的。在此之前我理解的校招面试大多得考运气,因为大家普遍认为校招进来的学生什么都不会,需要从零培养,所以我也一直认为 TW 的校招无非就是挑选一些看起来比较聪明的孩子,技术方面没有过多要求。今日一见,发觉相去甚远,公司凭借稍长的面试周期,从技术,性格,成长多维度的考察,可谓是360度无死角地最大限度保证了应届生质量。

这次校招主要分以下几个阶段:HR电话面试 -> Homework -> 技术面试 -> HR 终面,笔者作为 Developer 参加了看作业和技术面试两个环节,从和资深面试官结对面试到听 HR 们对候选人的评价分析,不但学习到如何辨识优秀应届生,对自我审查也是大有裨益。

基本上应届生中有以下几种能力是比较被看重的:

扎实的基本工

考察基本功第一个点就是家庭作业,Homework 实现起来其实都不难,考察点主要在代码质量,处理逻辑,和工程实践上,这些考察点均要建立在平时有足够的编码实践,有扎实的基础知识的前提下。基础稍弱的候选人在作业上表现往往表现出读题不仔细,功能实现不完整,未按题目要求作答,例如题目中明确要求要面向对象,而交上来的作业却只有一个类,这样的代码显然不能通过作业审查。扎实的基础还会表现在现场面试时针对作业的交流上,平时在学校写代码可能很少有用语言去解释代码的机会,面试的时候对实现细节的描述就很容易暴露候选人对语言特性和实现机制是否了解。

扎实的基本功并非一朝一夕可以练就,需要从平时的学习中来,还需要候选人有强烈的好奇心不断地钻研,实现功能的同时不但要知其然还要知其所以然,最好还能列出几种实现方式,并说清楚他们的优势劣势。这一点我想对所有的程序员都适用。

熟练的编程技能

说起 ThoughtWorks 的现场面试,最容易让人脸红心跳的可能就是结对编程环节,这个环节除了处理好情绪上的问题之外最重要的还是平时的积累,一句话就是要多写。这一点差距是很明显的,不太写代码的候选人拿到题目就会咬指甲、紧张、沉思很久,写起代码来磕磕绊绊,IDE 频繁报错还不知道错从何来。而编程技能熟练的候选人除了能做到流畅书写代码之外甚至还能够边写边解释,这一步是在做什么,为什么这样做,对面试官提出的提问还能做出深入的解释,快速响应面试官提出的修改意见,这都离不开平时的练习。

这一点主要还是要靠平时跟着老师做项目,研究生会比较占优势。或者凭借自己的兴趣写点小工具解决自己生活中的问题,要是有参与过开源项目就更出彩了。

实事求是的简历

这次面试比较多的遇到了这种情况:从简历上看,这位候选人很优秀,学霸,项目经验丰富,各种技术齐全,落坐也是自信满满,可一到提问环节,越深入问下去越是伤痕累累,一问到细节就答不上来或者想蒙混过关。这其实反应出后选人在平时编码过程中缺乏思考,没有理解透彻,尤其对习惯于“项目驱动学习”或是“老师驱动学习”的同学表现明显,好的程序员不但应有主动学习的习惯,还应掌握一定的学习方法,具体可以参考我司同事写的这篇 写给自学者的入门指南。另外对于蒙混过关这种行为着实不可取,参与面试的考官平均工作年限也有七八年,一些没吃透的知识点其实很容易就被看出来了。

这一点还是要求候选人要对自己简历上写的东西负责,“精通”,“熟悉”这类词要慎用,尤其不要想显得什么都会,还是要突出重点,再有就是选择投简历的时候看着点方向,尽可能去吻合自己熟悉和感兴趣的领域。

不要把面试太当回事,秀出你自己

一些候选人在面试的时候会比较紧张,尤其到根据简历提问的环节,会显得畏首畏尾,这样的候选人除了可能面试经验不足,我推测在他们心里一定还把面试当成了一场考试,时时想着“千万不要考我不懂的地方”,“千万不要问我去年那个项目因为我没做点啥”,可是越是畏惧越是漏出破绽(根据墨菲定律,如果你担心某种情况发生,那么它就更有可能发生)。其实可以换种思路,面试是让你秀出自己,说你擅长的,聊你想聊的。在众多后续人让你脱颖而出的一定是你的自信和你的闪光点,考官并不会像试卷一样为难你(其实考试也不是,只是人往往更容易记住那些让你绞尽脑汁的体验,就跟老师同学会上总会对班上的差生印象深刻一个道理),相反考官其实很想看到你擅长的地方地方是什么,他们会小心翼翼地提问,哪个项目是你映像最深刻的,深入细节前先问问这个技术是不是你熟悉的,如果不是那我们就换一个也没关系,目的就是要看到候选人在自己擅长的领域究竟有多擅长,对自己“喜欢”的技术究竟有投入多少去学习。这一点可能是 TW 和别的公司不太一样的地方,产品公司技术面试一般会偏重公司用到的技术,因为大部分时候他们在发布招聘启事的时候已经想好怎么用这个人了,而 TW 因为项目类型繁多各式技术都有涉及,所以会更关注候选人自己的兴趣和技术方向,候选人应该充分利用这一点,引导考官来到自己擅长的领域,我们会非常乐意看到出彩的你。

面试之前问问你自己:你真的喜欢编程吗?

很多考生在来之前会做很多功课,了解公司面试流程和喜好偏向,甚至为心仪的公司准备定制好的简历,这是聪明的做法。但我认为有一类人在面 TW 前可以说几乎不需要准备,那就是他真正热爱编程。如果你热爱编程,你一定会投入时间和经历去学习,如果你经常写代码,你一定会遇到很多问题并自己动手解决,在此过程中自然会积累扎实的编程技能,如果你有丰富的编程经验,必然会有一份拿得出手且不需要过度美化的简历。如果你以上都满足了,面试的时候不用太紧张,聊你想聊的,秀你想秀的,你会和面试官成为朋友并获得他的强烈推荐的。