2012年6月1日星期五

理想的技术面试过程

作为面试官

从在大学里面试社团大一新生,到加入百度后帮公司面试候选人,我觉得我对面试这件事一直不得要领。百度提供面试培训,也允许参考或使用题库,但我还是觉得不知道如何判断给不给一名候选人通过我这关。偶尔我会遇到非常优秀的实习生候选人,我能十分确定我要给他过,甚至想方设法确保他能来。其它时候,我觉得我的判断随机性太大,或许还不如一枚硬币做得好。

在百度做二面的时候,我往往会问一些组合问题,就是候选人需要有扎实的基础加上一定的解题能力才能做出来的。我假设一面的面试官已经问过基础问题,所以我不会再问基础问题。结果通常是,候选人的基础不够扎实,会作出一些错误的假设,甚至面对组合问题就无从下手,不知道如何分解为更小的问题然后再一步一步来解决。我不知道是否应该期望候选人全部答对,但答对小部分的状况让我无从判断。

为此我开始跟其它人讨论面试经验。Acumon 说应该针对候选人说他擅长的领域来提问,而且使用开放性问题以便了解候选人的思考方式,但我发现我遇见的大多数候选人都不清楚自己擅长什么,或者是他们自认为的强项无法达到我的预期。后来在上海跟 Winter 和 Hax 聊天时发现一个可怕的现实:大多数前来应聘的前端工程师都无法回答「position 属性取值都有哪些」以及「display 属性取值都有哪些」。随后我尝试在我的面试中先问这两个问题,发现确实有些人回答不出来取值,更多人则是无法准备描述常见取值的作用。(我甚至不把 inline-block 和 fixed 归类到常见取值里面。)遇到如此基础的问题都回答不出来的候选人,我通常会跟他告诉他正确答案,再问一些基础问题然后给他一些学习建议,最后很礼貌地送他走。

状况在我到达豌豆荚后有所改善。不是来应聘的人都非常优秀,而是我开始有感觉了。关键原因我觉得是我们不着急招人。现在我们还能应付手头上的工作,也没有快速扩张的需求,所以我们只有在遇到最合适的人选时才邀请他加入。我相信我前面的两位面试官做得足够好,然后我可以放胆地去考量「懂不懂」之外的其它方面。准确来说,这甚至不是一种考量,我只想知道我跟这个人一起工作是否会很愉快。我会以工作上遇到问题时同事跟同事间讨论的方式去跟他进行讨论,有可能是工作上实际遇到的问题,也有可能是刻意设计出来的有趣问题。(我觉得在一个充满活力的工作环境中,同事之间互相找些稀奇古怪的问题来讨论是很正常的,大家也会享受这类挑战。)如果我感觉跟他讨论问题是很愉快的过程,他能够提出有趣的想法,甚至能告诉我一些原本我不知道的事情,我肯定会给他很正面的面试评价。

作为面试者

换个角度来说,如果你作为面试者发现自己在面试的过程中能够进入这种状态,感觉如同跟同事讨论问题一样放松,那么你应该对面试结果充满信心。至少根据我个人的经验来说,感觉如同轻松愉快讨论的面试我都能得到面试官不错的评价。我明白要做到这一点很不容易,很多人在面试时都会很紧张,甚至会假设面试官一定会用各种难题来考自己,这种心态其实会把自己放在不利的位置上。我过去的经验是,我越不在乎的面试,往往我越能放松地跟面试官随便聊,结果反而越好。我很在乎的面试,反而有时候会高估面试官问题的难度,结果简单的问题没给出简单的答案,最后得到的评价反而不好。

在百度大厦的时候,我喜欢穿越二层平台,因为那里有很多小圆桌,也有很多人会选择在那里进行讨论或者面试。如果你对肢体语言有点最基础的了解,或者你就是在这方面有感觉,你会发现在那里很容易看得出哪些桌是同事间的讨论,哪些桌是在面试,以及谁是候选人。同事之间的讨论,往往大家都会很放松;面试的话,面试官也会很放松,但面试者通常处于比较紧张的状态,身体会略为前倾,就算不需要写字也会把手放在桌子上,用于支撑上半身的重量。对于有经验或者有感觉的面试官来说,这种肢体语言会传递一种不好的信号,那就是你太想要这份工作了,就算更深入的沟通后可能你会发现这份工作不适合你,但你还是会追求这个机会。

类似的场景也会出现在异性之间,下次去餐厅吃饭时你可以观察一下隔壁桌的异性交互。就算你完全不知道谈话内容,你也可以尝试从面部表情和肢体语言去判断谁在追谁。为什么有时候你追的人各种虐待你,还有充足的信心你不会放弃?因为他们看得出你把自己摆在什么位置上。在统计学的角度来说,我觉得女人在这方面比男人有优势,因为女人看的电视剧都不是白看的,她们在逛街吃饭时还无时无刻地在观察身边发生的各种剧情。就如同资深前端工程师可以只看 CSS 片段就猜出遇到了什么浏览器 bug 以及作者尝试如何解决一样,有经验的女人(又或者是面试官)要看明白你的立场太容易了。

因此,首先你要把面试看作一个平等的双向选择过程,不仅仅公司在选择你,你也在选择公司。如果面试官问的问题显得他很没有品味,或者是 HR 的某些安排让你觉得这家公司的文化很有问题,你随时可以提出说你没兴趣聊下去。这时候你反而可以比较好的发挥出来你真实的实力。对于你真的不知道的问题,你就直接说出哪部分你不知道或者不确定。同事间讨论也会遇到你不懂的问题,你平时是怎么处理的在面试时就怎么处理,面试官不会因为你直率地表达不懂某个点而鄙视你的,他应该帮你把这个点绕过去然后继续。

我觉得最好的面试建议就是 Changhao 跟我说的那句,「Be yourself」。(其实这也是很好的追女建议。)

改善面试流程

既然技术面试应该平等地讨论问题,通过感觉这个人是否能成为一名你喜欢的新同事来做出判断,那又应该如何衡量他的技术能力呢?这其实应该放在面试流程尽可能靠前的部分来做。很多外企的标准做法是,通过首轮(或前两轮)电话面试来判断一个人的技术,随后通过多轮的面对面讨论来判断这个人是否适合这家公司这个团队。我相信这套方法在美国执行起来没什么问题,因为空缺和候选人的数量差不多。

当然,上述流程来到中国后就必然会发生变化。中国有能力来做这份工作的人太多,同时还有更多的人想要来浑水摸鱼,这就导致了招聘成本大大提升。如果在中国还是用首轮电话面试来根据候选人的技术能力做一个初步的筛选,我想面试官就要疯掉了,所以大多数大公司都会在此之前加上一轮笔试。(对应届生可能是多轮笔试,否则面试官就阅卷都足以疯掉。)

有些公司会选择通过 ACM/ICPC 竞赛经历做出筛选,尽管无法保证获得最优结果,但至少能获得次优结果。招聘本来就是个搜索问题,一个在美国能有效求解的算法到中国来发现搜索空间大小增长了几个数量级,自然要想办法调整算法提高性能。这是非常理性的做法。当然它会带来一些外部性,例如说使得更多中国学生在可能不适合或不喜欢参加竞赛的前提下选择参加竞赛。

这些方法确实能把想要浑水摸鱼的人筛掉,不过能通过的人有时候还是太多了,所以接纳候选人过多的大公司往往会无端增加面试难度,问一些纯粹刁难人的题目。我觉得这没什么意思,也没在应届生面试以外的场合遇到过。既然应届生及格的太多,我觉得就直接随机抽签好了,这是最公平的做法。抽签可以通过公证过的算法来做,这比问一些候选人可能随机地知道或不知道的问题可靠多了。

最后说一下,为什么我觉得平等讨论的面试方式比问一堆问题要好。不同的面试方式,取决于你把候选人看做一个人力资源单位,还是一个有个性的人。如果你把候选人看做一个人力资源单位,他只要能完成你给出的任务就可以了,那确实是能力测试更重要。如果你把候选人看做一个有个性的人,你就需要知道他的个性能否很好地融入团队当中,这使得你在面试过程中必须把他当做一名未来的同事来看待。

3 条评论:

  1. Cat go you are so pro and so tech. I cannot even answer your question...

    回复删除
  2. 很有启发,谢谢。

    回复删除