《打造Facebook》试读:第三节 Facebook工程师面试聊什么

   Facebook面试工程师时都安排四位面试官,主要考察编程的能力,也就是技术性问题,还需要考察文化适应性问题和系统设计。    我在Facebook接受的第一次电话面试,是由我后来的老板(黄易山,一位很聪明的ABC[ ABC即出生于美国的华人(America Born Chinese)。 ],现在是美国著名社交新闻网站Reddit[ Reddit允许用户提交网络上的新闻链接或者自己的原创信息。用户可以评论或者对链接进行好或者差的投票,得好票高的链接会排名靠前。通过这种互动形成一个在线社区。黄易山于2012年3月出任该公司CEO。 ]的CEO)进行的。时间在30~40分钟,会花10分钟左右谈之前都做过什么,对什么东西感兴趣,来Facebook有什么想法、有什么顾虑等。其余的时间都聚焦在技术性问题上,一般会有一个比较大的问题,需要你给他讲算法,甚至在电话里告诉他一行行代码怎么写(后来Facebook开发了这类工具,应聘者在这边的电脑上做,面试官那边就看得到你写的程序,像collabedit.com或sync.in)。还会有一些知识性的基础问题,看看你在技术积累方面怎么样。通过电话面试后,我就接到了去公司面试(一般电话面试要进行两轮,我是只做了一轮,不知道为什么)的通知,那次见了五个人(后来的标准程序改成只要四个人)。下面我要讲到的内容,基本都是后来的通行做法。    这几个人都是工程师(当时Facebook还没有专门的产品经理,都是工程师兼任。现在Facebook已经有了专门的产品经理,所以在招聘产品类型的工程师时,产品经理也有可能参与面试,后台型的工程师则无此必要),包括我的老板,同组里的三位工程师,还有其他组的一位工程师。当时Facebook的员工在150人左右,工程师有六七十人,客服人员也有六七十人,其余的是人力资源、行政等职能部门的。    在很多公司,招人是一个组的事,针对特定职位招过来的人员直接进某个业务部门开始边做事边熟悉情况。Facebook招聘工程师时,很少是针对特定职位进行具体招聘的(这个招聘概率应该小于10%),大部分都是招进来之后放进新兵训练营(编者注:后面会讲到相关内容),然后再确定具体的工作职责。所以,进行正式面试时,一般都是根据应聘者的大致背景和特点(比如侧重后台开发还是前台开发、熟悉哪些编程语言等),挑出与其情况比较吻合的几位工程师来参与,双方有共同语言,这样就会有比较良好的沟通,避免“驴唇不对马嘴”的现象。当然同样会避免这几位面试官的背景完全一致,因为这样也会有局限性,容易发生偏见。Facebook在招聘中最关心的是如何考察应聘者对一些通用问题的解决能力和交流能力。比如广告后台必然需要数据系统的支撑,所以在面试官中会找对数据存储和读取熟悉的人来提问。他们不大关心广告后台本身的细节,但关心要解决问题所需要的系统知识和应对方案,说不定双方对一个Facebook内部的老问题可以聊出新的火花。Facebook在挑选面试官方面已经形成了一定的机制,原则和目标比较明确,就是找出有甄选能力的人,能与应聘者进行顺畅、有效的沟通,可以验证他的长处和优势。    目前Facebook招聘工程师时都安排四位面试官,每人45分钟时间,其中有2.5人会集中考察编程的情况,也就是技术性问题,0.5人考察文化适应性问题,1个人专注于系统设计方面。    先谈谈文化适应性问题。关注应聘者的性格特点是不是能和Facebook的文化兼容。不求完全共鸣,但不能存在极大差异。这些讨论,基本上基于对应聘者以往项目的讨论。下面是我主导的文化适应性面试的典型过程。    1分钟:我大致描述下本次面试。    4分钟:我先花1分钟介绍自己,什么时候加入Facebook,做过哪些东西,目前在Facebook哪个部门,负责什么。然后给应聘者3分钟进行自我介绍。    3~5分钟:让他回答“为什么对Facebook感兴趣”的问题。我们最不想听到的就是强调潜在的财务回报,虽然大家都知道这肯定是一个因素。但在如此宝贵的时间里去强调这一点,而不是其他更有意思的方面,会让面试人员产生反感。如果Facebook的财务表现在短期内不符合他们的想象,这些人会很快走掉。    10~15分钟:让应聘者谈谈之前最让他感觉骄傲的一个项目。然后我会深入追问很多跟这个项目相关的问题。比如“这个项目最大的挑战是什么”“几个人完成的,你在里面的角色和贡献”“有没有出现你的想法和其他人不同的情况,你是如何应对的”“这个项目让你学习了什么东西,或者锻炼了哪些地方”,我们还会挑一些相关的技术细节提问,等等。    20分钟:文化相关性问题只占一半时间。所以这里我们还是会集中在一个具体的技术问题上。    5分钟:留给应聘者来提问,针对Facebook或者针对我在Facebook所做的事情。我们希望应聘者较为关心的是公司文化、产品或技术,而非财务上的。    说到文化性问题,可能有人会有疑问,认为这样招聘来的都是一种风格的人,会不会限制了公司内部文化的多元化,反而不利于创新?其实,Facebook追求的只是在核心价值上想法一致,如果这方面有冲突,这样的人招过来可能会麻烦不断。Facebook的核心价值,比如把事情完成比完美更重要,这是最关键的,又比如,要做整体上对公司最有影响的事情,而不是做那些可有可无的事情;愿意进行团队合作,而不是习惯于单枪匹马;不要永远只会听你老板的话,要做一些你自己的决定和判断……至于说你喜欢用某种调试工具,他喜欢某种程序编辑器,这都不会造成什么影响,完全依据你个人的喜好。    整个面试流程里最多的要数技术性、编程性相关的问题,比如说很简单的Atoi(ASCII整数Integer的转换),用一段程序将英文字母换算成对应的数字,或者是反过来实现。很多典型的编程问题在网上都能查得到。但需要注意的是,不是所有人都能适应在白板上或纸上写程序,跟你直接在电脑上写并不太一样,最好事先练习一下,研究几十道类似的题目。这样不至于在白板上或者纸上写程序的时候手生。编程问题不仅仅是考察解决问题的能力,还有很重要的一点是沟通能力。我一般希望应聘者和我先谈谈他的思路,如果这个思路靠谱的话再去写程序。最不想看到的就是一上来就写,然后遇到困难就愣在那里。在谈论思路的时候碰上思维的断点不要紧张,可以把困扰说出来,把面试当作一个探讨的机会,而不是考试。在这个探讨的过程中,我们会慢慢地推向正确的解法。如果探讨在某点上僵住的话,我会直接给明显的提示,如果这个提示没有办法被应聘者接受的话,这个面试对他来说就失败了。在有了解决的思路后,接下来最重要的就是把程序写出来。不要求百分之百无漏洞,但基本上要没有大问题。通常我会要求他在写完之后自己再检查一遍,然后向我解释每一行程序要做的事情。往往在这时,他们自己会发现程序中的漏洞并修正。如果这样还有大问题的话,通常这个面试也是失败的。总而言之,在技术讨论中,我是把应聘者当作同事,如果讨论之后留给我的感觉是我不想和他共事,那我就不会给他积极的评价。    设计方面的问题主要是让应聘者针对某个大系统提出自己的设计方案。比如要让你来做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个人,结果见了两个人就结束面试这种情况。然而,在其他一些公司,这种做法会被当作有效利用时间的方式来推崇。
3人

>打造Facebook

打造Facebook
作者: 王淮, 祝文让
副标题: 亲历Facebook爆发的5年
isbn: 7514207635
页数: 248
定价: 39.80元
出版社: 印刷工业出版社
出版年: 2013-2-1
书名: 打造Facebook