FAANG 高级工程师面试终极指南(二)

  编者按:关于 FAANG 面试流程的指南有千千万。但这是最彻底、最详细的一份指南,因为这是面试官为面试者制作的唯一一份 —— 编撰者花了数百个小时,与数十位现任及前任 FAANG 面试官讨论了他们的面试流程。在本指南中,你会看到对这些面试官的大量直接引用,他们用自己的话描述了每家公司流程和标准的特质,这些第一手的资料是特别有价值的。文章来自编译,篇幅关系我们分七部分刊出,此为第二部分。

  

  Meta/Facebook(为简单起见,后文统称为“Facebook”)的面试流程包括以下步骤:

  Facebook 招聘人员电话面试

  技术电话面试(可能还有第二次技术电话面试)

  现场面试

  在我们详细介绍每个步骤之前,这里有一些关于 Facebook 招聘流程、评估标准和面试官的一般说明。

  Facebook的口号就是他们面试官的行动指南:快速行动。所有的人类群体都有自己的隐喻,那是他们的运作方式。 Facebook 不是家庭或者军队。Facebook是一支结构有序的一级方程式车队;他们花费了大量的精力来落实保障措施,然后全力以赴。在 Facebook这里,要靠速度取胜。

  在 Facebook这里,鉴于流程是集中式的,所以没法像其他一些科技公司那样有同时跟多支团队进行面试访谈的机会。你大概每 3 到 6 个月可以有一次面试机会,具体要取决于表现。

  Facebook 面试官的提示

  “如果你通过了 Facebook 的现场面试,但没有接受offer,那么你的“现场面试通过”状态有效期为一年。如果你不接受他们的offer,之后又选择在一年内重新加入,请告诉他们的招聘人员‘我已经通过了现场面试’,并尽量跳过之前的步骤,因为这样通常是可以的。”

  摆脱困境的秘诀

  去 Facebook 面试时,要仔细聆听面试官给你的那些微妙的线索和暗示。 Facebook 是FAANG里面唯一一家对面试官有很好要求的公司——除非能给出好的提示,否则就无法成为面试官。

  请参阅第一部分“有关招聘人员电话面试的说明”。

  Facebook 的技术电话面试是编码面试,时长为 45 分钟,重点关注数据结构和算法。

  Facebook 的技术电话面试通过CoderPad进行。如果你没用过的话,最好在真正开始面试之前先去他们的沙箱里面玩一下,熟悉熟悉环境。 Facebook 用CoderPad来面试会有个问题,那就是在面试期间,他们会关闭代码执行 - 如果你以前用过它,并且习惯于在面试期间通过运行代码来测试代码的话,那你需要通过练习来适应这种情况。

  在面试开始时,面试官会问你一两个与简历及最近所做工作相关的问题。这些问题对面试结果没有任何意义——那只是为了打破僵局并让你开口说话的一种手段。关键还是技术部分。

  典型的 Facebook 现场面试一般包含以下内容:

  至少两次的编码面试

  两次系统设计或产品设计面试

  一次行为面试

  如果你申请 Facebook 的工程职位,你会遇到四种主要类型的面试:编码面试、行为面试以及系统设计或产品设计面试。以下是每一轮面试当中预期会出现的事情。

  Facebook 的流程高度标准化,因此编码面试问题和主题往往会重复。编码问题要经过预先批准的,但这并不意味着面试官没有自由。

  Facebook 面试官的提示

  “ Facebook 会提供可提出或修改的问题(给面试官)。但他们不会在面试维基里面告诉你答案。他们让你设计问题的路径:怎么问怎么答由你定。”

  Facebook 面试官的提示

  “面试官之间会有些差异,但一般每个问题大概 20 分钟左右,而且一般很简单。他们希望你就知道用什么算法,并实现基本的解决方案。

  可以接受的bug是空输入以及超出范围的输入,比方说空数组/null。但 Facebook 一般不接受不完整的算法。他们希望你能够快速完成任务,为此你可以牺牲一点整洁性。”

  Facebook 面试官的提示

  “我认为这里的一条规则是,在编程面试时,面试官必须问两个问题。而且提出的问题必须平衡。第一个的问题应该比较有趣,测试的是解决问题的能力,作为面试官,可以允许实现过程中出现一点错误。从算法的角度来看,第二个问题相对容易,但这个问题目标是评估应聘者可以写出多少未经调试并能完美测试通过的代码。如果应聘者不能搞定这两个问题,就算他们在其中一个问题上表现出色:也会被判定为‘不聘用’。”

  这并不是鼓励出bug的意思,而是说他们是唯一一家给出自上而下的明确指示的公司:有时候,在某些轮次当中,出现bug是可以接受的。其他公司没有一家是这样的。 Facebook 放宽了对无错误代码的要求,为的是应聘者编码可以更快。

  最后一点,Facebook 不问动态规划问题,事实上,他们禁止提出这些问题。

  Facebook 会招两种类型的后端工程师(理论上):系统通才与产品通才。系统通才要接受系统设计面试,而产品通才要接受名称令人困惑的产品设计面试(在大多数其他情况下,产品设计指的是 UI/UX)。

  你接受哪种面试是由招聘人员根据你的经历决定的。如果你开发过很多产品功能,那么你将接受产品设计面试。如果你曾经从事过大规模分布式系统的工作,那么你就要接受系统设计面试。

  Facebook 的产品设计面试与系统设计面试类似,但存在一些关键区别:

  系统设计更注重高层架构及规模,而产品设计更注重服务之间的交互。比方说,系统设计面试对API设计的预期只是能弄清楚高级参数/数据的传递,而产品设计更注重细节,也就是更全面的参数列表以及响应结构。

  产品设计更关注数据是如何以及有哪些数据流经整个系统的,要具体到不同服务之间的交互。

  数据模型在产品设计面试当中所占权重要比系统设计高得多。预期要了解得更加彻底和详细。

  Facebook 面试官的提示

  “产品设计跟数据库不大,更关注数据流,会把更多的时间花在 API 细节上(比方说要传递的参数)。系统设计更关注数据库,对 API 细节不那么注重,更多的是关于扩展性。”

  Facebook 面试官的提示

  “很多人认为 Facebook 只会问高级系统设计问题,比方说“设计 Twitter”或“设计 Facebook Feed”。但事实并非如此。他们也会问低级问题。在 E6 或以上的面试中,你很可能会被问到“设计 Redis”、“设计 Kafka”或“设计 Memcached”。在极少数情况下我甚至看到 E5 应聘者会被问到低级系统设计问题;低级问题在 E5 及以下的轮次中不太常见。”

  Facebook 面试官的提示

  “你必须提出一些需要粗略估算的问题。很多高级工程师都不愿意这么做。其实我也讨厌这个。这是在浪费时间。我要问是因为‘有规则要求我必须做这件事。但这么做是没有意义的。我们应该用 5 分钟来讨论一下真正的系统设计。假设我们必须将系统从 0 扩展到谷歌那种级别,所以说估算只是在浪费时间。’”

  摆脱困境的秘诀

  去问你的面试官:“你真希望我花几分钟做测算吗?跳过这个环节我是可以接受的,但如果你需要了解的话,我也可以测算一下。如果我们跳过这一步,也许可以花几分钟讨论一下如何扩展这个系统,这也许是一场更有趣的对话。”

  摆脱困境的秘诀

  如果你不知道在 E5 Facebook 系统设计回合该讨论什么东西,那不妨谈谈用户体验。讨论一下你可以做出的两个选择,然后深入解释首选的那一个,因为它能提供更好的用户体验。

  Facebook 面试官要求你回顾一下自己过去做过的一个系统也是很常见的,这又叫做逆向系统设计面试。

  与技术问题不同,Facebook 的行为问题并没有标准化:面试官可以问你任何他们想问的问题。在 Facebook,行为面试的重要性为中/低;其重要性不如技术面试,但确实还是有一定的分量的。

  以下是帮助你入门的问题列表。

  “你最引以为傲的项目是哪一个?为什么?”

  “告诉我你最近哪一天的工作是很棒及/或很有趣的。”

  “你有没有过想改变某个超出你正常工作范围的事情?说说你的经历。”

  “你有没有过必须快速做出决定并接受结果的经历,请说说看。”

  “告诉我你需要克服外部障碍才能完成任务或项目的一次经历。”

  “你有没有过项目完工超出预期的经历?说说看。”

  “告诉我你认为合作起来最具挑战性的一个人或团队。”

  “告诉我一次你与同事意见不合的经历。”

  “告诉我两支团队无法就前进道路达成一致的情况。”

  “描述一下你一次犯错误的情况,以及你从中学到了什么。”

  “告诉我一些你从经理或同事那里收到的建设性反馈。”

  “告诉我你从同事或导师身上观察到的一项技能,一项你想在未来六个月内学会的技能。”

  Facebook 的候选人审核流程和反馈流程通常完全是异步的。有时候,他们也会现场汇报,但这种情况很少见。这意味着面试官为应聘者“争取”资格的可能性很低。具有社会影响力的面试官在这里不会走得太远。

  在填完现场面试后反馈表时,Facebook还会要求面试官给出信心分数,在 FAANG 公司里面这是独一家。因此,Facebook 的流程对于失败的面试轮次会更宽容些,因为信心分数较低意味着失败轮次的权重较小。还有,Facebook 是唯一一家直接询问面试官是否要将应聘者降级的公司。

  Facebook 面试官的提示

  “编码用来决定‘我们该不该录用这个人?’系统和产品设计用来决定“我们该如何给这个人定岗?”

  对于编码面试,面试官首先要给出一个结论:“雇用”还是“不雇用”。然后在评论中,他们要对所下结论的信心如何。 “雇用”或“不雇用”是官方指标,但信心分数不是。

  至于系统/产品设计面试,面试官也要先给出“雇用”或“不雇用”的结论。然后他们还要说一下是否应该考虑把应聘者放进另一个岗级。

  所以,最终的决定可能是这样的:“不雇用”为E5,但对该结论信心不足。‘聘用’为E4,对该结论很有信心。”

  如果招聘小组定不下来的话,他们可能会要求再进行一次后续面试,以帮助他们获得更多信号。

  Facebook 面试官的提示

  “面试反馈主要由系统设计和行为面试官讨论,这些面试官对聘用决策和应聘者岗级最有发言权。如果面试官觉得他们还没有获得足够的信号,并且应聘者最终持观望态度,招聘人员还会推动再进行一轮面试。参考提示:如果后面你还需要额外面试,说明面试官意见可能有分歧。”

  Facebook 面试官的提示

  “对于资深(Staff)及以上级别,应聘者如果没有通过两轮系统设计面试的话是不能被录用的。”

  Facebook 面试官的提示

  “对于E6及以上岗级的应聘者,如果你某一轮系统设计面试失败了,但在其他轮次的表现良好,你还可以有一次机会。他们可以让你重新参加一轮系统设计面试。不过行为面试就不是这样了:如果你面试失败了,就再也没有机会了。如果你在行为面试轮次失败,结论将是‘不予录用’。”

  与其他 FAANG 公司不同,在 Facebook 这里,通常你会在知道最终将与哪支团队合作之前就收到offer。接受offer后,你将参加为期 6 周的“训练营”,接受有关 Facebook 工程基础设施与系统方面的培训。训练营结束后,还会有为期两周的团队匹配期。

  Facebook 面试官的提示

  “在大多数公司,你开始第一天工作之前就会有机会认识自己的团队了。 但在Meta这里, 需要先经历所谓的 Bootcamp。你先是加入 Meta,然后跟团队会面,并决定为谁工作。我发现这种做法比跟招聘经理聊 30 分钟的电话要好——这就是谷歌就是这么选择团队的。我更喜欢 Facebook 的做法,因为在你挑选团队之前可以获得更多的数据;你可以见到他们的宠物,你可以查看他们的代码等等。”

  团队匹配过程有点像速配约会。你跟招聘经理会面,去衡量匹配度和化学反应。为了推进,你们俩都必须选择加入。

  Facebook 面试官的提示

  “市场情况好的时候,你可以在 Bootcamp 同时与 20 支不同团队交谈。”

  也有例外——有些具有特殊技能的人可能会在进入训练营之前被某支特定团队聘用,但他们仍然必须参加训练营,只是不需要再进行之后的团队匹配。

  Facebook 面试官的提示

  “虽然整体流程并没有太大变化,但对于 E6 及以上级别(级别越高,这种情况发生的可能性越大),应聘者可能会在流程开始之前就被分配到一个团队。比方说,你可能会面试到特定团队,而不是通才型的软件工程师。在E6及以上较为常见。

  就我的经历而言,在训练营选择团队而不是在开始之前就被分配到某个团队的E6工程师我只遇到过一位。”

  举报/反馈