设计方面的问题主要是让应聘者针对某个大系统提出自己的设计方案。比如要让你来做Facebook的“动态消息”(News Feed),你会怎么实现,需要哪些部件(Components),数据如何传输,你的设计会有什么优点和缺点,等等。我会希望应聘者先谈论这个系统可以提供的一些性能要求或特点(Specification),因为这些要求会决定设计上的不同。比如动态消息系统是设计成方便读还是方便写,这会让实现方式大不同。每个人都有不同的方式,这没有问题,但这中间的交流可以体现出一些设计思想的深度,这才是面试的目的。系统设计能力考察的权重对于不同职位也不相同,比如后台的要多一些,前台的就少一些;刚从学校出来的要轻一些,有多年经验的要重一些。而Facebook的面试会回避类似脑筋急转弯那种所谓智力型题目,因为那根本体现不出什么智商,重点都放在具体的编程问题上。
还有一点,是对应聘者学习新东西的意愿和能力的判断,这个要求非常高。比如我们希望他知道一些新的技术,即使他不知道,但是在聊的过程中,也能从表情和反应中看出他是否有兴趣去学习。
面试结束后,面试官都会给应聘者打分,依强弱程度分别为:Strong Hire(强烈推荐),Hire(推荐),Weak Hire(一般推荐),Weak No Hire(一般不推荐),No Hire(不推荐),Strong No Hire(强烈不推荐),还会写出具体的评价以及理由(比如,我问了什么问题,应聘者如何回答)。一般要求面试人员在面试的当天提供反馈。这样Facebook可以在尽可能短的时间内完成对应聘者的评估以便给他们一个面试结果。这可以显示出对应聘者的尊重,也同时希望这种高效率能够给应聘者留下好的印象,如果给Offer的话,更能说服应聘者接受。在Facebook,招人是当作第一优先级的工作来对待的。
最理想的评价结果是所有面试官都给出“Hire”以上,其中还带“Strong Hire”。如果有两个面试官觉得不太好的,那就基本没戏了。像我在参与面试时,一般会无视所有带“Weak”的选项,因为我的理念是不需要平庸的同事。针对一段时间内面试的情况,公司每周会召开一个招聘决策会议,所有相关的面试人员和人力资源部门的代表都会参会,所有的应聘者都会被讨论,大家一起讨论应聘者的去留,明显不行的最快,明显行的也比较快,比较费时间的是那种所有人都说行、但没有一个人被震惊到,或者有人说不行、有人说很行的情况。这时候,如果有一个人愿意站出来力挺,一般不会被砍掉,可能会通过,也可能被安排一次后续的面试,再见上1~2个人,专门针对他上次面试中暴露出来的弱点提问题,来看他是如何解决的。总之,整体上的思路就是“请拿亮点来说服我”。
当然,对于到公司面试的应聘者,无论他的表现是否与我们的预期相符,面试官都会很尊重他们。毕竟他们是已经经过挑选的,很多是名校毕业的,而且他们给了Facebook一个雇用他们的机会。另外,他们的朋友当中可能有适合Facebook的优秀工程师,我们希望看到即使应聘者本人不适合Facebook,但他们愿意推荐自己的朋友来试试。所以,尊重每一个应聘者非常重要。因此,在Facebook不会出现原定要见4个人,结果见了两个人就结束面试这种情况。然而,在其他一些公司,这种做法会被当作有效利用时间的方式来推崇。