Facebook面试小记

在美国实习期间我同时也在寻找留美正式工作的机会。于是我把简历给了在脸书工作的 Cat Chen 大牛,之后他表示愿意帮助我。虽然今后应该不会入职脸书,但在此我真诚地感谢他的相助。

由于面试签署了保密协议,文章不会透露具体的面试内容,因此我只简述大致的流程并谈谈自己的一些看法和建议。本篇是关于 Facebook Front End Engineering Intern 的文章,因为签证的一些问题,我不得不转成实习岗位。

其实早在前年寻找赴美实习的机会时,我就投递过脸书的实习岗位,但当时的背景无法满足要求,最后也就不了了之。好在这次有了 Cat Chen 的帮助,加上自己也丰富了一些经历,于是很快就收到了 Recruiter 的邮件。

前提

在我看来,国外企业的面试机会也不是很难拿,但前提是:

  • 英语水平过关,会基本的英文书信,以及一定的口语交流能力。
  • 最好有人内推,这样增加你简历被查看的几率;不过Facebook即便是内推,也不保证一定有面试机会,因为有专门的 Recruiter 会进行第一轮的简历筛选,据我所知这一轮通过率也不是很高;
  • 因此,需要你有较好的背景,比如名校,突出的实习经历或其他背景;
  • 基础技术水平过硬,比如刷好Leetcode,并掌握你相应面试岗位的相关技术。

对于我个人而言,由于我大学是在国际班,也在美国待了半年,因此基本的交流还可以保障。个人简历和技术也比较有信心,加上在美国实习的经历,还有 Cat Chen 这样的牛推,也就顺理成章地拿到了面试机会。

在准备面试的过程中,我把 Leetcode 刷了大概两百题,付费顺带把相关的 Tag 也给完成了。其实最后我也没被问到 Leetcode 上面的题,但历时两三个月的刷题经历,让我在编码能力上有了不小的提高。

Phone Screen

在邮件中一切谈妥之后,Recruiter 安排了第一轮面试,即 Phone Screen。面试的时长大致为20-30分钟,由 Recruiter 询问一些基本情况,例如:个人经历、技术情况等。最后 Recruiter 会提出5题左右的与岗位相关的技术问题。由于我申请岗位是 Front End Engineer,显然这些问题都是前端相关的。通过这样的提问,Recruiter 可以筛选掉一些明显不合格的候选人,从而节约技术面试官的时间。

面试过后,Recruiter 会很快告知你结果,如果通过,将安排下一轮的技术面试。

一面

脸书的技术面试通常是45分钟,形式为视频面试,面试官首先会介绍该轮面试的安排,基本流程是:自我介绍、Coding、询问问题,其中 Coding 占面试85%左右的时间。

然后面试官会让你进行自我介绍并谈谈实习项目或向你提出一些其他的问题。这一部分我觉得需要提前进行准备,比如通常的问题可能是:

  • Why Facebook?
  • Why Front End Engineer?
  • Describe a difficult challenge you faced.
  • What do you do during your internship?
  • and so on…

紧接着面试官会让你切换到 Coderpad 在线协作编辑器,然后抛出一至两道的技术问题,它可能是关于前端方面的编程问题,也可能是关于数据结构及算法这样的基础问题。脸书的出题套路大多还是从题库中抽取的,因此你可以在面试前做好充分的准备。

一面的这道题是一个非常基础但考察点比较详尽的题,基本上囊括了设计模式、数组的用法(可变与不可变)、闭包、JavaScript 上下文切换(call、apply)以及哈希表等知识。

其实这道题早在几年前阅读《JavaScript设计模式》的时候我就已经写过,但在面试特定设计的题目环境下,我还是写出了一个 Bug 。好在有面试官的提示,我很快把它修好了。

最后问了他一些问题,就结束了面试。

对于这一面,我其实没有提前进行太多准备,就随口问了一个关于脸书前端工程化方面的问题,其实也没有得到特别满意的答复。

抱着比较随意的心态完成了第一轮面试,总体感觉一般,还写出一个 Bug。正要打算 Move on 的时候就收到 Recruiter 的邮件,表示面试通过将继续安排下一轮的面试。

二面

在吸取一面的经验教训之后,这次我做了比较充分的准备。提前想好了需要提问的问题,查看了近乎所有的面经,也复习了基础知识。

这一轮面试跟一面的大体流程是一样的,但比一面难度高出了许多,这次我被问了两道题,题目涉及的知识点有:递归与迭代、栈及数组、多叉树、DOM原生API、性能优化、ES2015 相关的细节等等。

但这些题其实如果对前端基础知识有了解,并且有比较好的学科基础和编码能力还是不难解决的。

这样的面试题往往需要在较短的时间内完成编码,且需要保证完成的质量。因此其实对候选人的动手能力及基础知识有一定的要求。

我在这一面表现得还算不错,因此很快收到了 Recruiter 关于下一步安排的邮件。

经过这两轮的面试之后我发现,虽然题目可能来自于题库,但考察的知识点非常详尽,因此我的建议是应该把重点放在基础知识上,而不是仅仅针对特定的题目。另外,面试往往看重你综合的表现,除了把代码写好以外,尽量把自己的软实力也展现给面试官。

总结

最后回过头看看这次的面试,其实也没有想象中的那么困难。但我觉得这样的面试至少能保证候选人有较好的基础知识和编码能力,同时,面试的沟通交流能力也是很重要的考察部分。

通过这次面试,我也收获了很多宝贵的经验,虽然最后因为签证的问题没有谈妥,加之自己在美半年的一些体验,最终决定暂时搁置这个实习机会。我觉得也未必需要舍近求远,在哪里一定都能找到合适的机会和成长空间。最后,希望这篇文章能帮助到国内有志于赴美工作的小伙伴,共勉!