「面霸实战」五天拿下Google、Facebook等硅谷五家公司Offer

【新智元导读】一位华裔技术工程师曾笑寒连续面试了 linkedin、salesforce、google、airbnb 和 facebook 五家硅谷科技巨头,最终全部都拿到了 offer。作者分享了在面对五家不同的科技公司及不同的岗位,所做的准备工作、面试技巧以及自己的一些实践经验,希望可以为正在准备跳槽的工程师提供一些帮助。
在 2017 年 7 月 24 日至 28 日的五天里,一位华裔技术工程师曾笑寒(http://highscalability/虽然系统设计面试会涵盖很多主题,如何回答这些问题还是有一些通用思路的:
先明白需求,然后考虑大框架,最后是具体设计。不要马上跳到细节上,而不弄明白需求是什么。没有完美的系统设计。根据需要做出取舍(trade-off)。尽管如此,准备系统设计面试的最好方法就是坐下来设计一个系统,深入探索你平时使用的工具、框架和库。举个例子,要是工作中用到 hbase,有的人可能就只是简单的用一下 client 跑一些 ddl,做一些 get,但有的人可能就会摄入一些了解整个系统的设计,包括整个读 / 写流程、如何保证很强的一致性、次要 / 主要压缩起到作用、lru 缓存和 bloom filter 的作用等等。你甚至可以将 hbase 和 cassandra 进行比较,看看它们设计上的相似点和不同之处。面试时如果要求你设计一个分布式的键值存储,你就不会觉得太突然。
许多博客也能提供很多知识,比如 hacker noon、一些公司的工程博客以及开源项目的官方文档。
最重要的是要保持好奇心和谦虚。像海绵一样吸收知识的养分。
机器学习
机器学习面试可以分为理论和产品设计两个方面。
除非你有机器学习研究经验或者机器学习课程学得很好,那么阅读一些教科书是很有帮助的。经典教材如《the elements of statistical learning》和《pattern recognition and machine learning》都很有帮助,如果你对特定领域感兴趣,你可以阅读更多相关内容。
确保你理解如偏差 / 方差权衡、过度拟合、梯度下降,l1/l2 正则化、贝叶斯定理、协同过滤、降维等基本概念。熟悉常用公式与模型推导,如贝叶斯定理,如逻辑回归和支持向量机。尝试实现简单的模型,如决策树和 k 均值聚类。如果你在简历上提到一些模型,确保你对其完全理解并能评价其优缺点。
对于机器学习产品设计,要了解构建机器学习产品的一般过程。我是这样做的:
找出目标是什么:预测、推荐、聚类、搜索等。选择正确的算法:监督与无监督、分类与回归、广义线性模型 / 决策树 / 神经网络等。为做出的选择给出原因。根据可用数据选择 / 设计相关功能。选择模型性能指标。可以考虑如何为生产优化模型。我想再次强调保持好奇心和持续学习的重要性。不要仅仅用 spark mllib 或者 xgboost 简单地调用 api 训练出一个模型,我更推荐去研究为什么 stochastic gradient descent 适合分布式训练,又或者了解 xgboost 和通常的 gbdt 有什么区别,包括对 loss function 的定义有何特别之处,为什么用到二阶导等等。
面试过程
最开始我在 linkedin 上回复 hr 的留言,并请其给我推荐职位。在某家明星创业公司求职失败后(我稍后会谈到),我努力准备了好几个月,在 hr 的帮助下,我在湾区安排了整整一周的现场面试。我周日抵达湾区,在世界上最好的几家科技公司五天面试了大约三十位面试官,很幸运地,得到了这五家的工作机会。
电话面试
所有电话面试都是标准的。唯一的区别是面试时间:linkedin 面试 1 小时,而 facebook 和 airbnb 则是 45 分钟。
熟练程度是电话面试的关键,因为时间有限,通常你只有一次机会。你必须很快判断出问题类型,并给出一个宏观解决方案。一定要和面试官沟通你的思路,说明你的意图。这可能一开始会让你速度慢一点,但沟通比任何事情都重要,会对面试有很大帮助。不要死背答案,因为面试官肯定会一眼看穿。
对于机器学习的职位,一些公司会问机器学习相关问题,因此面试前温习巩固一下机器学习方面的知识与技能。
为了更好地利用我的时间,我在同一个下午约了三个电话面试,每个之间间隔 1 小时休息。这样的做法不一定适合所有人,好处是可以趁热打铁状态好,坏处是如果一个没面好,后面的面试可能会受到影响。
同时面多家公司的一个好处是有时候能够省去某些环节。有些硅谷公司规定对于湾区以外的面试人要进行两轮电话面试。我之所以能够省去 airbnb 和 salesforce 第二轮电话面试,是因为对方得知我一轮电话面试就拿到了 linkedin 和 facebook 现场面试的机会。
更令人吃惊的是,google 甚至没电话面试就请我参加现场面试,这也是因为对方得知我下周要来湾区参加四个现场面试。我知道这会让我很累,但是,没有人会拒绝 google 的现场面试邀请!
现场面试
五家公司虽然都是 it 公司,但处于不同的领域,文化上也各有千秋。我简单说一说自己对它们的感觉。另外虽然不算是吃货,但作为民以食为天的中国人,自然也要对午饭进行一下评价。
linkedin
这是我第一个现场面试,我在 linkedin 的 sunnyvale 办公室。作为专注于职场社交的公司,linkedin 的特点是端庄、大气、职业化,内部文化也相应地非常专业。员工的穿着都是商务休闲装,整体给人一种职场精英的感觉,与他们的宗旨非常契合。
面试方面,编程和机器学习各 1 小时。编程面试都是标准问题,但机器学习面试可能会有些困难。尽管如此,我之前收到 hr 的电子邮件,里面包含了非常有用的准备材料,因此面试中没有太出乎意料的事情。我听说 linkedin 有硅谷最好的食堂,从我的实际体验来看,这差不多是真的。
linkedin 被微软收购以后少了经济压力,使其可以放开手做非常酷的事情。linkedin 新添加的视频和专业广告等功能令人兴奋。作为一家专注于职业发展的公司,linkedin 优先考虑其员工的职业成长。目前包括 ads relevance、feed ranking 在内很多组都在招人,所以如果你想加入,那就赶快行动。
salesforce einstein
einstein 是 salesforce 近几年主推的明星产品,拥有一个明星团队。这个团队非常新,感觉非常像初创公司。团队主要是使用 scala,tech stack 都是 akka/play/spark 那一套,这也是最吸引我的一点。我最初接触到 einstein 是在 2017 年 4 月的 scaladays 上听了 matthew 以《type safety in machine learning》为题的演讲,之后又在 spark summit west 上听了 leah 的演讲。喜欢 scala 的人一定不要错过。
面试地点是 salesforce 位于 palo alto 的办公室。这个团队很有凝聚力,能保证工作生活平衡。每个人都热爱并真正享受自己做的东西。与其他现现场面试相比,四场 session 总共时间略短,总体侧重于 data engineering 和 system design。另外需要注意的是,coding 也是要上机跑的。面试后,matthew 甚至带我参观了惠普的车库。
google
当今业界领头人,没有什么可说的。最重要的印象就是大,非常非常大。去见我 google 的朋友的时候骑自行车骑了 20 分钟。中午吃饭排队人很多。
我在 mountain view 的许多楼里的一幢进行面试。我不知道具体是哪一幢,因为 google 真的非常大。
面试官看起来都很年轻,他们一说话就显得很聪明。和他们一起工作一定是非常愉快的。
值得注意的是 google 特别强调算法的复杂度,确保你真的明白时间和空间复杂度,能够针对瓶颈进行优化!这一点与别的公司不同。
airbnb
快速扩张的 unicorn 公司,拥有非常独特的公司文化以及可能是硅谷最美丽的办公室。推出了新产品包括 “体验” 以及餐馆预订服务、在高端小众市场进行尝试、以及进入中国市场,这些都为 airbnb 的前景增添了积极因素。如果可以承受高风险,并希望获得快速增长的 pre-ipo 经验,那么 airbnb 是完美的选择。
airbnb 的 coding 面试有点独特,要求上机,并且每个 session 只有 45 分钟时间,某些题目的难度也相当大,所以压力还是不小的。
airbnb 独树一帜的跨职能面试,这也是我最享受的,我和面试官轻松交流。airbnb 认真对待公司文化,技术上优秀并不能保证拿到 offer。
总的来说,我认为 airbnb 的现场面试流程最长,环节最多,题目很难,总体感觉最累。如果你有兴趣,一定要了解他们的文化和核心价值观。
facebook
另一个仍在高速发展的巨人,与 google 相比规模更小,速度更快。在社交网络市场铺开了全面产品线,处于垄断地位,以及在 ai 和 vr 方面的大量投资,未来 facebook 只有更多的增长潜力。有像 yann lecun 和 yangqing jia 这样的明星,如果你对机器学习感兴趣的话,这是一个完美的地方。
我的面试是在楼顶有花园的海景房 building 20,也是扎克伯格办公的地方。
facebook 的整个面试过程我自己感觉是最不好的,一方面是因为已经是第五场面试,整个人已经很疲劳了,另外可能是 facebook 的规定,面试官都没有对我的答案给出特别明显的好与不好的信号,虽然我觉得自己的答案没有错,但也稍微有些拿不准自己的表现。
两场 coding 还算是正常,两道题都在面试官的提醒下总共给出了两种解法,有一场还问了两道题。下午我已经感觉自己生病了,头疼得厉害,最后硬撑着完成了面试,出来以后感觉不太好,没想到最后竟然也拿到 offer 了。
总体来说,我觉得 facebook 的工作人员坚信其公司愿景,并为他们正在建设�...