技术招聘也是技术活。上下求索的不只是应聘者,面试官也同样绞尽脑汁。在本文中,作者先后回顾了身为应聘者和面试官两种角色的经历,带你一瞥国内外技术招聘的那些事儿。
年初加州求职不利,撰文《加州求职记》(http://blog.liancheng.info/job-hunting-in- california/)一篇,蒙列位看官抬爱,短短两天时间点击量破万。之后,收到《程序员》杂志编辑的约稿邮件,询问能否结合既往的招聘经历写一写国内外招聘的异同点。毕业至今,除去年初尝试的Google、Amazon、Facebook三大公司,身为应聘者参加的正式招聘面试就只有多年前加入百度 的那次而已。相较之下,在百度做了两年招聘,身为面试官的经验反倒是丰富多了。思忖了一下便应了下来,打算结合个人经历写写招聘面试这档事。需要说明的 是,这里记述的只是个人的一些经验,不具备通用性。文中面试官角度的意见不能代表百度乃至国内IT企业的普遍特点;同样,作为应聘者的意见也无法代表湾区 大公司的普遍特点。
面试官的心思
招聘面试,就是面试官和应 聘者之间的沟通和过招。通常情况下,在面试中占据主动地位的都是面试官。应聘者能否通过面试,便取决于能否在几十分钟内证明自己具备面试官所代表的组织需要的素质。俗话说知己知彼方能百战不殆,面试官大人们都在想什么呢?他们希望看到的素质,大体可分为软硬两类。
所谓硬素质,就是算法、数据结构、程序语言等基础技能及体系结构、操作系统、网络、数据挖掘、分布式系统等细分专业方向技能的掌握情况。硬素质之所以谓“硬”,便在于这些素质出题一考便知,应聘者基本上没有蒙混过关的可能。
所谓软素质,是那些虚无缥缈,难以通过普通考题判断出来的东西,如学习能力、抗压能力、沟通能力、逻辑思维能力、价值观取向等。这一罗列,是不是很眼熟?
不少应聘者都会在简历中加上“自我评价”一栏,其中列上“学习能力优秀”、“抗压能力良好”、“沟通能力佳”、“逻辑思维能力强”,我刚毕业时也未能免俗。 其实呢,这几句话写了也是白写:什么也证明不了,空占篇幅,甚至还可能会起反效果。简历上还是写些实打实的东西为好,软素质不妨在合适的时机通过推荐信等 方式表达,或者干脆留待面试时交由面试官亲自考察。
不难想象,软素质比硬素质要更难考察,甚至多少有点“跟着感觉走”的意思。不少面试官都 不擅长考察软素质,新手尤甚。逻辑思维能力和沟通能力倒还好说,面试时看你反应够不够快,说话有没有条理,基本上能给出比较靠谱的评价。这学习能力、抗压 能力、价值观之类的怎么考?说穿了就是三个字:挖细节。
诚然,判断一个人的软素质,往往需要长期的相处和观察。但我们最终的判断依据,实际上是发生在这个人身上的各种典型事例。因此,只要能在面试中让应聘者给出足以证明自己某种/某些软素质的事例,便可以达到考察的目的。而事例的真实性,便是通过挖掘细节来保证的——如果是瞎编的经历,最终多半会支支吾吾语焉不详。
刚当面试官时,曾经碰到这么一个反面案例。当时是一场社招面试,来应聘的是个刚工作不久的小伙子。起先我对他的评价挺好。后来,在叙述项目经历时,他提到自己曾经做过一套系统,而我刚好有类似系统的经验,便产生了 兴趣,兴致勃勃地接连问了几个该系统设计思路和实现细节相关的问题。
没想到几个问题下来,他越发紧张,最后突然红着脸说:“对不起,其实我没做过这套系统,只是为了丰富项目经验而虚构了一个,但实在编不下去了……”当时我实际上还不知道这种方法,只是一时兴起不断追问细节才让他露了马脚。后来,在参加校招面试时从公司组织的面试官培训中才学到了这招,学名唤作“STAR面试法”,专用于软素质考察,感兴趣的读者不妨搜上一搜。
强攻硬取闯湾区
就个人经验而言,湾区大公司的面试考察点偏硬,面试官出招普遍刚猛有力,没有点铁布衫之类的硬功夫还真是招架不住。这点突出体现在面试中的编程题上。
在四十五分钟到一个小时的面试中,根据应聘者的解题速度,面试官会抛出一至三个问题,应聘者不仅要迅速想出解题思路,还要在纸上或白板上写出完整且无错的代码(电话面试时则通过Google Docs、CollabEdit等在线协同编辑器,少数情况下也会让应聘者直接在电话里“说”代码)。因此,有ACM背景的应聘者会占据很大的优势。
相对于大部分国内IT公司的面试,这个要求还是相当严格的。不过,面试毕竟不是竞赛,相对于难度,考题的区分度才更为关键。所以这些编程题的难度普遍不高, 离ACM/ICPC竞赛题相去甚远。打个不恰当的比方,湾区大公司的面试多少有点儿像考研,都是书本上的知识点,就看考生掌握得扎不扎实。
在年初的两场面试中,我在解题时分别用到了C++标准库中的binary_search和partition,于是两位面试官分别要求我写出这两个函数的完 整实现。这两个算法可谓人尽皆知,就看你理解得是否透彻,边界情况处理得是否干净利落了。年初的面试经历已在《加州求职记》中详述,此处就不再赘述了。
湾区大公司的面试当然也不是只玩儿硬的,软素质考察一般交由HR以及专门的“behavioral interview”负责。不过总体来说,湾区大公司技术职位的这类软素质类面试的套路还是比较明显的,在Google上搜一下“60 behavioral interview questions”,很容易找到窍门。应聘者需要做的就是在面试前将简历中列出的各种项目经历的背景拾掇清楚,以求在面试中做到简明扼要、实事求是、恰如其分,博得面试官的青睐。
一开始,我对湾区大公司的这种面试风格是持有异议的。毕竟实际工作中没人会要求你在不借助调试器等工具的情况下一次性编码成功。而且,竞赛型算法题的代码和工业界的代码完全就是两种套路(在工业界干过几年的前ACM选手应该非常有体会)。
但反过来一想,周围能达到这个水准的,无一不是牛人、聪明人。再者这种考法对就是对错就是错,高度统一,易于判定,在大规模面试中更利于统一面试官的评判标准,从而达到严格把关面试质量的目的。当然,它的缺点也比较明显,比如对软素质考察不足,应聘者自由发挥余地较小,很难看出应聘者创造性的一面等。此外, 由于算法题的代码风格和工业代码风格迥异,这类面试也较难评判应聘者在实际工作中的表现。
需要强调的是,我年初参加的只是普通技术职位的面试,观察到的内容十分有限。上述结论完全基于个人经验,很难说有多少通用性。
刚柔并济战中关
反观当年自己操心招聘那些事儿的时候,我和同为面试官的同事们在面试中更为关注的则是软素质以及实际工作能力——尤其是社招。
我们一直信奉的一点是,只要能达到我们的基本要求,应聘者的技术能力等硬素质是比较容易培养和锻炼的,而沟通能力、学习能力、逻辑思维能力、抗压能力等软素质则相对较难培养。至于看中实际工作能力,那当然是因为希望应聘者入职后能尽快投入战斗。
本着这样的原则,我在面试中一般会交叉运用以下三种方式进行考察。
1. 聊项目经验。
2. 出较简单的基础试题。
3. 出较困难的渐进开放型试题。
对校招面试,由于应届生的项目经验往往比较单薄,可挖掘点不多,主要采用第二种和第三种;对社招面试,则三种并用。
聊过往项目经验是个很好的软素质考察手段。在这个过程中,往往可以捕捉到很多值得深度挖掘的典型案例。我一般喜欢让候选人挑过往经历中最为困难或最为得意的一个项目来讲。在候选人的叙述过程中,我会不断要求对方补充各种细节,例如关键设计背后的决策过程,难点攻坚过程中做过哪些尝试,寻求过哪些帮助,参考过 哪些资料,团队在项目中碰到过哪些问题,诸如此类,不一而足。
通过深入挖掘这些问题,应聘者的形象也会迅速丰满起来。例如,有些应聘者会在设计阶段多方尝试,或是在认为团队走入歧途时主动大声疾呼,也有人会因为“上面要求这么搞”而放弃原则消极遵从。孰优孰劣,一目了然。
聊完项目经验,应聘者的紧张情绪也基本平缓下来,这时就可以拿出一两道基础试题小试牛刀。基础试题的形式和作用与湾区大公司采用的编程题类似,但一般不要求写出完整代码。它的作用在于快速判断应聘者的基本能力,进而决定后续的面试节奏和时长。
如果应聘者可以比较顺畅地给出解答,那么便可以进入下一个环节。反之,如果应聘者给出的答案错得离谱,或者几经提示仍然没有丝毫进展,那么也就不太必要进行后续的面试了。
渐进开放型试题主要用于考察逻辑思维能力和沟通能力。这类试题难度较大,且不一定有唯一的标准答案,可逐层发散,一般不指望应聘者能独立给出完整解答。出难 题显然是要给应聘者设置障碍,但最终目的绝不是将应聘者难倒。这里是在考察应聘者在面对困难问题时能否对问题进行恰当的分解,能否在一团乱麻中找出最先要 解决的问题,能否将直接阻挡自己前进的障碍清楚地描述出来,是否敢于、善于提问,以及在得到提示之后,能否迅速运用提示中的线索翻越障碍。
如果应聘者在拿到题目之后因为没有头绪而不知所措,我便会向他解释这类试题的用意,鼓励他不要担心一时没有头绪,尽管大胆地和我交流自己当前的思路并寻求帮 助。于是,在这类试题的考察中,气氛往往会更趋向于讨论而不是面试。这样一来,应聘者会更为放松,我作为面试官也得以更为准确地评判应聘者的沟通能力和逻 辑思维能力,候选人最终找出答案后自己也会有成就感。某次社招面试中,曾经有一个没有什么分布式系统背景的小伙儿,在这样的讨论中自行总结出了CAP原理,让我很是惊喜。
还有一次校园招聘,我让候选人改进他自己的一个项目中的客户端自动升级机制,来回沟通了几次之后候选人思路泉涌,很快画出了若干种更加合理的设计。事实证明,在面试中能有类似表现的应聘者,多半都能成为中流砥柱。
这套路数看似刚柔并济、滴水不漏,却也有它的命门:那就是面试标准过于模糊,难以统一。如果组织不大,面试官人数少且精,倒还好说。倘若是员工数破万的大公司,那就很难保证所有部门、所有面试官的面试标准了。在百度时,整个招聘过程还会辅以各种流程措施和规范,以期尽量弥合面试官之间的个体差异。这个问题要 是解决不到位,其危害对校园招聘这种集中式大规模招聘活动是十分致命的。
伯乐的赌局
面试的最后一个环节十分敏感,那就是决定候选人是否通过面试。哪一匹才是千里马?这是伯乐们永恒的赌局。百度的面试是5分制,3分以上通过,2分以下不通过。有些面试官——尤其是新面试官——比较“仁慈”,对于一些落在及格线上的候选人总会很纠结,最后给出一个2.5分。一旦出现2.5分的候选人,我们就会问面试官一个问题:把这个人放到你的团队,你要不要?【注:百度的面试往往由不同团队的面试官交叉进行,每个面试官都经常对其他团队的候选人进行面试。】如果回答是肯定的,那么我们便再安排一轮面试继续考察,否则便终止面试流程。
“2.5候选人”分两种,第一种虽然就答题情况来看勉强可以通过,但就是给人的感觉不太舒服,或者说第一印象不够好。这实际上是候选人可能存在软素质问题的一个警钟。如果面试官本人不期望这个候选人加入自己的 团队,那么其他团队负责人多半也不愿意。这个判断看似过于严苛,但其背后却是历往惨痛经验的总结。
另一种则更为有趣,这类候选人虽然答题情况一般,但仍然让人想要给他一个机会。我就曾经碰到这样一个案例。当时我是二面面试官,一面面试官十分纠结,最后给出面试结果是2.5。我问他,给你,你要不?没想到他毫不犹豫地说“要”,于是我便决定对这名候选人进行二面。候选人挺年轻,双臂还刺着纹身,让我着实印象深刻。不过面试过程中,发现这个小伙儿对技术很有热情,非常有干劲,头脑也比较灵活。实际上他就是上面提到的在后续的面试过程中独立总结出了CAP原理的那个候选人。后来这个“2.5候选 人”果然没有让人失望,成长迅速,很快就成了骨干。所以说,面试这档事,无论对应聘者还是面试官,都是个碰运气的事儿。
关于招聘面试的文章一抓一大把,不过同时站在两个角色上进行总结的似乎不多。希望我的这点片面的经验能给你带来一些启发和帮助。
连城,前百度资深工程师,技术译者,函数式语言与分布式系统爱好者。