Facebook工程师CarlosBueno在Facebook官方工程页面发了一篇文章,详细阐述了如何准备Facebook的面试。文章指出,无论对于面试官还是应聘者,技术岗位面试都不是一件容易的事情。面试官会对应聘者简历上的内容一一核查。如果你简历上有“精通某某方面”,那么Facebook就会安排一位该领域的专家与你会谈,所以一定要有所准备。如果你并不精通某一领域,就最好不要往简历上写。相比好几页的应聘者的经历,Facebook面试官更倾向于应聘者能提供一份清单列出自己擅长或精通的领域。以下是Facebook技术岗位内幕详情。
第一步通常是与应聘者进行45分钟的谈话。这个谈话的目的就是了解应聘者各自的专业领域。面试官会就应聘者的简历、技能、动机、兴趣等方面进行询问。但是这第一步的主要时间还是花在了编程测试。面试官会给应聘者一个链接,应聘者可以进入测试自己解决编程问题的能力。
提示:对于电话面试,请确保通话时你周围环境安静,并且网络通信良好。电话面试时耳机就显得很有帮助。在我第一次面试Facebook工作时就忘记了这一点,于是我就不得不一边敲写代码,一边将手机夹在肩膀和耳朵之间进行电话面试。
“循环”测试
Facebook的“循环”测试指的是在同一天对应聘者进行多次面试,通常中间有个午餐休息时间。除了在文本编辑器里写代码外,面试官还有可能要求应聘者在白板上写代码。在此期间,应聘者有时间可以向面试官询问任何感兴趣的事情。
下面这些就是Facebook对理想应聘者的期望…
在道出面试官期望或青睐的一系列优点之前,Bueno就先指出了这样一条提醒:“这些优点并不是我们所寻求的全部,也不是我们关心的全部内容。但是它们确实会影响面试官们最终做出的决定。”
文化融合是关键
Facebook希望应聘者有理解和解释一些复杂观点的能力。同大多数公司一样,Facebook希望应聘者对工作充满热情、好奇心和动力。Bueno指出,“Facebook有着一个很极端的用户工程师之间的比例,并且一周5天都要反馈代码。”Facebook希望接收那些能够带来巨大影响,行动迅速、果断,并且清楚理解他们所做工作的人。
Facebook需要能够迅速适应多角色工作环境的人
Facebook需要各种各样的专家,但是同时它也需要在关键必要时能够承担其他角色任务的员工。Bueno说到:“这意味着应聘者应能够理解其专业范围外其它一些知识。”Facebook更青睐精通多个专业领域的应聘者。在Facebook,你会经常看到员工先在机器学习领域工作,然后就转到了网页性能,搭建、维护一个新的后端工具,之后又在类似照片应用的产品特性方面工作一年。
提示:一个很值得培养的技能就是能够随意地改变自己的固定的现有观念。有时你可能会遭遇到一个问题,看起来应该有简洁解决方案,但实际上这个问题只有一个粗糙或者模糊的解决方法。如果你卡在了这个问题上,那就尝任何其他方法来解决,无论这个方法是多么笨拙或者低效。然后在这个方案上加以改进。总之,能够解决问题总比解决不了问题强。
高端软件设计中,“架构”至关重要
Bueno这样问到,“面对不寻常的约束,你能否找到解决方案?”Facebook想考察应聘者想像整个问题以及解决方案余地的能力。同时Facebook也希望看到你尤其对这家公司以及其面临的独特问题有多少思考。你会怎样构建一个全球视频分享系统?或者一个Facebook聊天网络?
提示:磨刀不误砍柴功。对于那些你并不是每天都用到的技术知识也要重温,因为当你需要的时候它们就显得十分有用了,比如递归、图论、树遍历、组合问题等等。
代码才是王道
Facebook并不喜欢提问一些难题,但是就这一点你要知道一些小技巧。你被问到的问题也许听起来很做作,而且这些问题实际上就是为了特定目的而人为设计的。这些问题通常很简单,能够在几分钟内解释清楚,并在10到30分钟内能够得到解决。但是这些问题的解决也都需要一定的知识、技能和集中精神。
优秀的编程问题本质上是分形的。这些问题能够被任意地扩展以用来测试你的知识水平。比如,他们可能要求你用任何你喜欢的方式来解决一个问题。然后就会要求你固定空间或者次线性时间内再次解决同一个问题。顺便说一下,无论一个问题起初听起来是多么的基础,全神贯注地关注这个问题才是Facebook密切关注的。你对于一个问题如何下手至少与这个问题的答案一样重要。
在面试过程中,Facebook面试官会让应聘者写很多代码,因为这种编程能力往往与作为一个Facebook员工的表现如何直接相关。Facebook甚至还有专门设计的一套问题供应聘者在家里研读。Facebook认为应聘者最好能够看一下这些问题,而且鼓励能够在提交简历前解决一些。
提示:另外一种编程问题可能是要求应聘者分析一些数据类型或者迷你语言。这些问题测试能够锻炼你对极端案例的推理能力,同时控制协调头脑中的各种状态想法。
Facebook面试官并不是唯一的有着良好面试理念的人,他们从谷歌这样的竞争对手那里也学习到了很多
Bueno说到,“来自谷歌的SteveYegge几年前曾发表了一篇关于面试准备的优秀文章。如果你没有读过的话,那就一定要读一读;如果以前读过,那就再读一遍。虽然我从未见过任何人像Yegge建议的那样带着自己的白板笔去面试,但是Yegge列出的一些小技巧还是是十分有用的,。”
慢慢来,练习、练习、再练习
多花时间准备面试。与朋友一起做一些代码训练,并排练一下面试。尝试做一下我们网站上的面试问题。看一下我们的技术论坛,感受一下我们是如果做事,以及我们在试图解决的问题的深度和广度。
多在简单文本编辑器里练习写代码,不要用句法高亮或者自动完成宏功能。千万不要在面试期间出现小的意外惊喜,以免影响你的面试。
用你所掌握的最熟悉的编程语言来打动Facebook面试官。不要因为某种编程语言流行或者认为某种语言能够取悦面试官而在面试期间用你相对不太熟悉的编程语言。这是一个十分常见的错误。
不要忘记问问题
Bueno说到,“一定要问问题!充分利用面试的时间向你的面试官询问一些工作生活、训练营地、面试过程本身、公司组织结构、或者任何其他的事情。最近我在一个面试中就我们公司数据处理中心的电力效率问题聊了好几分钟。那位应聘者对这个问题很是真诚地好奇,而且我也尽力回答。千万要记住不仅我们是在面试你,你也是在面试这家公司。”
放松,给出反馈
最重要的一点,放松!如果你想跃跃欲试来Facebook工作的话,那就一定要记住这一点。
Bueno说他曾经在各种各样的公司工作过,无论是2人型的创业公司还是亿万资本的政府项目。Facebook虽有着一个大公司应有的资源和影响,但是作为一名工程师,你在这里有着那些典型大公司里所没有的自由和责任。此外,还要给出反馈。Facebook会定期就面试过程调查应聘者,并对反馈结果很重视。