在顺利通过电话技术面试后,我即将面对的是一系列的onsite现场面试。

现场面试

我参加的这系列Onsite面试一共有四场,我按照我面试的顺序来写:

1 Architecture / Design

2 Coding

3 Coding

4 Career & Culture

Coding的内容是算法题和编程题目。Architecture / Design则是设计一个简单的App。Career & Culture 主要是和一资历比较深的工程师聊天有可能是技术主管,可能会涉及到一些编程问题,但是我当天没有。

我的准备

Onsite的面试形式是在白板上面写代码。为此我买了一个白板来练习,题目还是以Leetcode上面的为主。主攻easy和medium题型,hard很少出现。另外我还准备了一部分Architecture / Design,由于网上面经大多数提到的设计都是后台的,导致我看了好多后台架构设计,实际上的面试内容却是App设计。这里有点坑,不过涨知识也是好的。

面试当天行程安排

FB对于面试出行的费用都是全部报销的。Onsite的时间确认以后FB会有专人帮你购买机票,定酒店。这里要注意一下,机票是通过国外途径购买的,这跟我们用身份证购买的机票不一样。所以要保证提供给FB名字拼音要和身份证保持一致,不然登机的时候可能会有麻烦。例如张三应该为San Zhang。 面试地点定在北京,我在前一天从深圳起飞。酒店虽然是定好的,但是入住的时候也遇到了一些状况。我建议把HR发来的重要出行说明都打印一份,在必要的时候可以给相关工作人员看。我入住酒店的时候,可能酒店一些工作人员不清楚这个流程,差点刷了我的卡。我在邮件里面翻出一份说明给工作人员看避免了误操作,差点刷了我几千块啊!FB毕竟有钱,面试都是下榻五星级酒店。

面试当天与内容

面试从下午两点开始到六点。 第一面Architecture / Design,面试官是一个美国小哥。先各自自我介绍,然后开始做App设计题。题目要求设计一个简单的类似Facebook News Feed的App。面试过程中需要你去思考App所有模块,自上而下进行设计,以线框图的形式在白板上面呈现。

第二面是Coding,其中一个题目是经典算法题目二叉树的Lowest Common Ancestor。第二个题目是双向链表和HashTable的应用。对于LCA我一开始想用一种递归的方法实现,写到一半写不下去了,之后重新写了一种更直接的方法。

第三面还是Coding,第一题经典题目Move zeros,把一个数组所有非零数移动到左边,零全部移动到右边,要求时间复杂度O(n)完成。第二题二叉树的copy和中序遍历。

第四面和技术主管聊天,聊一些问题例如:你遇到的最大挑战是什么;你最值得骄傲的成就是什么;你怎么解决和别人的冲突。这种问题就看自己自由发挥了。

结果补充

面试的题目都不难,面完以后自我感觉良好。大概一个星期以后得到结果,悲剧了,做了一段时间的美国梦也醒了。我仔细想了想,题目光做出来是不够的,还要快,正确,最优解。一句话,细节决定成败。不得不说,FB的工程师非常注重细节,疏忽大意是我的主要问题。我跟HR要了一些反馈,里面我看到了一些对我面试表现的评价。有一个问题我知道好几种解法其实复杂度都差不多,但是我硬是选择了一种自己不熟悉的递归解法,最终也没写出来硬是换了一种更直接,这里导致了Coding的悲剧。另外设计面试也有很多细节没有想到位,有一些问题也没有解释得足够清楚。说白了还是自己的经验不足,能力还需要提升。有志于出国的同学,我从这次经历给出两个建议:

  • 平时写代码多注意设计,设计能力真是总结积累出来的,平时不注意很难有好的表现。

  • 注重每一个细节,不要因为问题简单而掉以轻心。不怕问题难以解决。就怕简单的问题细节没做好导致大问题。

虽然结果让我失望,但是这次经历本身是美好的。我对自己不足有了深入的认识,也增长了自己的见识。以后如果还有类似的机会,我想我还是会尝试。感谢所有在这次面试准备过程中给我帮助的朋友!