拿到五家硅谷顶尖公司Offer

机器学习

机器学习面试能够分为理论和产品设计两个方面。面试

除非你有机器学习研究经验或者机器学习课程学得很好,那么阅读一些教科书是颇有帮助的。经典教材如《The Elements of Statistical Learning》和《Pattern Recognition and Machine Learning》都颇有帮助,若是你对特定领域感兴趣,你能够阅读更多相关内容。算法

确保你理解如误差/方差权衡、过分拟合、梯度降低,L1/L2 正则化、贝叶斯定理、协同过滤、降维等基本概念。熟悉经常使用公式与模型推导,如贝叶斯定理,如逻辑回归和支持向量机。尝试实现简单的模型,如决策树和 K 均值聚类。若是你在简历上提到一些模型,确保你对其彻底理解并能评价其优缺点。 
对于机器学习产品设计,要了解构建机器学习产品的通常过程。我是这样作的:编程

  • 找出目标是什么:预测、推荐、聚类、搜索等。
  • 选择正确的算法:监督与无监督、分类与回归、广义线性模型/决策树/神经网络等。为作出的选择给出缘由。
  • 根据可用数据选择/设计相关功能。
  • 选择模型性能指标。
  • 能够考虑如何为生产优化模型。

我想再次强调保持好奇心和持续学习的重要性。不要仅仅用 Spark MLlib 或者 XGBoost 简单地调用 API 训练出一个模型,我更推荐去研究为何 Stochastic gradient descent 适合分布式训练,又或者了解 XGBoost 和一般的 GBDT 有什么区别,包括对 Loss Function 的定义有何特别之处,为何用到二阶导等等。api

面试过程

最开始我在 LinkedIn 上回复 HR 的留言,并请其给我推荐职位。在某家明星创业公司求职失败后(我稍后会谈到),我努力准备了好几个月,在 HR 的帮助下,我在湾区安排了整整一周的现场面试。我周日抵达湾区,在世界上最好的几家科技公司五天面试了大约三十位面试官,很幸运地,获得了这五家的工做机会。网络

电话面试

全部电话面试都是标准的。惟一的区别是面试时间:LinkedIn 面试 1 小时,而 Facebook 和 Airbnb 则是 45 分钟。session

熟练程度是电话面试的关键,由于时间有限,一般你只有一次机会。你必须很快判断出问题类型,并给出一个宏观解决方案。必定要和面试官沟通你的思路,说明你的意图。这可能一开始会让你速度慢一点,但沟通比任何事情都重要,会对面试有很大帮助。不要死背答案,由于面试官确定会一眼看穿。机器学习

对于机器学习的职位,一些公司会问机器学习相关问题,所以面试前温习巩固一下机器学习方面的知识与技能。分布式

为了更好地利用个人时间,我在同一个下午约了三个电话面试,每一个之间间隔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 的工做人员坚信其公司愿景,并为他们正在建设的东西感到自豪。做为一个拥有 5 万亿市值还在不断成长的公司,Facebook 是你职业发展的绝佳地点。

工资谈判

不少人以为本身不擅长谈判,或者不少时候很差意思开口。我我的以为求职其实是在出售本身的时间,而时间对于一我的来讲是惟一不可再生的资源,若是你本身都以为你的时间不值钱,那么别人也不会以为它值钱。 
这是一个很大的话题,这里我不打算深刻讨论,但我发现这篇文章很是有帮助。

有几点我以为值得注意:

  • 保持职业风度。
  • 了解你的筹码。
  • 显示出你对团队和项目的兴趣。
  • 保持耐心和信心。
  • 态度坚决,但要有礼貌。
  • 绝对不要撒谎。

我在 Databricks 失败的面试

这里写图片描述

全部的成功始于失败,包括面试。在我开始面试这五家公司以前,我五月份在 Databricks 的面试失败了。

早在四月,当时是 Spark MLlib 组的经理 Xiangrui 在 LinkedIn 上联系我,询问我是否对 Spark MLlib 团队中的某个职位感兴趣。我当时受宠若惊,认为这是一个绝佳的机会。

  • 我使用 Spark 工做,很喜欢 Scala;
  • Databricks 的工程师实力是一流的;
  • Spark 正在给整个大数据世界带来变革。

这是一个我不能错过的机会,因而简单地准备了两天就开始了面试流程。

Databricks 的水平要求很是高,整个过程至关长,包括一个初筛问卷、一个电话面试、一道 coding 大做业以及最后的现场面试。

我得到了现场面试邀请,并参观了位于旧金山市区的办公室,能够看到海湾。 
个人面试官很是聪明但一样谦逊。在面试中,我常常感到本身被 push 到了极限。下午有一轮是针对机器学习算法理论,一方面本身实力不足,另外一方面准备不够充分,整个环节是一场灾难。最后和 Xiangrui 简单聊了聊。

几天后我收到了拒信,这是预料之中的,但我仍是郁闷了好几天。虽然没有机会在 Databricks 工做,但我相信他们能够继续创造出更大的影响和成就。

后记

  • 生命短暂,职业生涯更短。在正确的时间作出正确的举动。
  • 集中面试很累,但也会给你很大优点。
  • 面试不只仅是个找工做的过程,更是个交朋友的机会。硅谷圈子就那么大。
  • 平时有机会也要多交朋友,好比开会就是个很棒的机会。Databricks、Salesforce、Airbnb的面试机会都源于我去过的Spark Summit和Scala Days。
  • 拿到 Offer 仅仅表明你达到了公司的最低标准。最高标准没有上线,因此要保持持续进步。

从五月的第一次面试到九月底的最后一次面试,我完成了职业生涯的第一次跳槽,期间过程漫长且不易。

准备过程仍是很辛苦的,由于我还要继续本职工做。有一段时间天天晚上都是准备到凌晨一点才睡,次日早上八点半起床全身心投入工做。

五天面试五家公司也是高度紧张有高度风险,除非你时间很紧,不然我不建议这样作。但若是你拿到几个 Offer 会在谈工资时有很大优点。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------