Facebook面试官聊聊面试

作者@qianshu0503
发布在一亩三分地

欢迎大家点击左下角“阅读原文”到原帖与作者交流讨论哦!

写在前面

在FB陆陆续续面了几十个人了。因为身处ML Track,除了general pipeline的人会面以外,也碰到了很多ML Track的人。所以说, 基本上常见的技术面,coding,ML,software design都会面一些。属于救火队员的角色,什么面试官缺就会帮忙补上。这几年ML大火,ML Track的申请者越来越多,但成熟的面试官很少,最近主要都在面ML track的人,主要是coding和ML,software design面的少了一些。

这几周刚刚面了几个国人,有一些感触,换时间整理一些思路,和大家共同探讨一些常见的问题。因为data point可能不够多,文采有限,若有什么缺失或者不当的地方,还请大家谅解,欢迎大家指正。

还这篇主要关于coding 面试,不过其中的一些思路也可以应用于别的面试。有一些像地里面已经讨论的比较多的内容,像怎么刷题写简历啊,我就没有在这里赘述了。大家有什么其他感兴趣的问题,也可以回复在后面,我会找时间统一回答一些比较常见的问题。要是对别的种类面感兴趣的人多,后面也可以再开一个帖子讨论ML或者design轮一些特有问题。

FB。校招主要是Intern,new grad的名额非常的少。社招主要面对5年以上工作经验的,E4的HC常年空缺,E5的bar又特别高,所以经常会出现E5或者更高level的candidate被压level。Intern,new grad基本只有coding 面试,PhD除外。Software design 和 behavior一般会用来决定你的level,除非有特别差的signal,一般不会直接拒绝,很多会加面或者降level。

ML轮稍微不太一样,ML轮不过基本意味着ML track的面试没过,不过有转别的track的可能。但coding面试不过,一般很难拿到offer。我见过很多很厉害的candidate,都挂在了coding面试上,特别是长期不碰代码的tech lead和EM们。

怎么做好时间掌握?

这里给大家分享一个时间掌握心法

第一层:天下武功 唯快不破

coding的题其实并不难,如果LC刷的熟练的话,哪怕是Hard,给足够多的时间,很多的candidate也能做个八九不离十。但面试的难点就在于时间是有限的。能不能在短时间内整理出思路再写出来决定了你能不能再众多面试者中脱颖而出。这种时候,速度就是非常重要的。面试的时候,如果面试官准备了两道题,就算你完美的做出了一道,基本这轮也跪了。但相反,你快速做对了两道,哪怕有些小瑕疵,说不定是个weak hire。所以在尽量短的时间里面,输出尽量多的内容,是你制胜的关键。

第二层:兵不在多而在精

当你发现自己已经无法以更快的速度去deliver相同的内容的时候。你可以考虑精简你在面试中的输出。比如,你知道最优解,就不要假惺惺的先说个平常的解。能一句话解释完,就不要用两句话。写code也是如此。有好的包装什么的当然是锦上添花,但没有必要因此拖慢你整体的节奏,因小失大。

第三层:知己知彼 百战不殆

面试官的责任是在同样的时间里面收集到尽量多的关于你的信息。当你了解面试的流程后,你可以影响面试官,确保你完成了所有的流程,给面试官留了足够的信息。拿一个20min的一题举例子,一般2min读题,3min讲思路,10分种coding,5分钟和面试官过代码,debug。但当你发现,你花了五分钟还没想出最优思路的时候,如果你继续思考,哪怕你想出来了,你也知道自己可能没有时间完成后面写码和测试的环节了。这时,一个理智的决定是停止想,快速的把已有的解法先写出来。

谁决定面试过和不过?

首先有没有offer并不是某一轮可以决定的,也不是某一个面试官可以决定的。面试官会把自己的feedback和建议交给一个lead去决定。如果过了,会交给HR,然后HR去找HC.如果没有HC,那面试再好也没有。但这种情况一般HR会告诉你,让你之后再来申请。

面试是一个信息收集的过程。如果面试官收集到了足够的信息,并且有足够的positive signal,那一般会vote一个hire,反之没有收集到足够的信息,或者没有足够多好的signal,一般都会谨慎一点。你不论和面试官是聊的热火朝天还是尴尬的一问一答,最后起决定作用的都是面试官从面试中收集到的信息。很多时候,很多人聊的自以为很好,但其实输出很有限,面试官转手就给了个no hire。又有的时候,面试官问的很刁钻,觉得自己答得不好,但其实面试官给了过。大多数面试官其实都是会自己calibrate一下的,你其实不需要答得绝对好,比大多数人好就很不错了。

我题目做出来了,是不是基本就过了面试了?

并不是。做出题目,只能说拿到了四分之一的分。常见的题目做出来了也没过的,主要有这么几个原因。

1.会做不会说。很多人,特别是非母语国家的人,做题都还可以,但不擅长解释自己的思路。这个其实是很扣分的。因为在工作中,你很多时候都需要你和别人交流,而不是一个人在角落里面写代码。level越高越是这样。

2.不会测试和debug。很多人写出来解法结束了。或者一味的追求第一遍就bug free。其实这并不可取,有bug是很正常的,重点是你能不能有很好的测试思维,可以考虑到一些可能的bug,并测试你的代码正不正确。

3. 和你说的解题思路不一致。有的时候,你在写的过程种发现你想的有一些问题,或者有一些更优的解法,于是来回修改,这其实很容易越改越错,而且很难有效沟通,会使面试官对你解决问题的能力提出质疑。那怎么办呢?先想清楚,让面试官了解你的思路,再动手。

Coding最后问面试官问题,问什么?

首先,一般就算问的再好,也不会加分。但其实是值得一问的。一般问一些你想知道的,但外界查不到的。比如公司对员工的grow plan是什么啊,短期长期的vision是什么啊,team之间怎么合作之类的。这个环节不要出错就行。

虽然说FB的bar有时会很高,package不一定比的过一些小公司。但我还是推荐大家有机会多来FB。除了成长快等等知名的原因意外,FB的员工有很好的选择权,甚至很多跨背景的跨专业的机会。像ML track,很多大公司只给专业的PhD机会,但FB内部其实有很多本科或者研究生毕业的ML researcher和tech lead。很多人其实没有ML背景,但FB这个平台给了很多人成长和选择的机会,现在很多都成了一方大佬。

最后,祝大家都能拿到理想的offer。

大家如果还有相关的问题和看法,欢迎点击“阅读原文”到一亩三分地讨论