从 2017 年 7 月 24 号到 28 号的五天,我面试了 LinkedIn ,Salesforce Einstein ,Google ,Airbnb 和 Facebook ,并拿到了所有五家公司的 offer 。html
这是一段神奇的经历,我很幸运由于个人努力获得了回报。因而我决定写点什么来说述我是如何准备,面试的过程以及分享我对着五家公司的感觉。前端
我在 Groupon 混了近三年了。 这是个人第一份工做,我一直在和很牛逼的团队作着了不得的项目。
咱们团队一直在作很酷的事情,在公司内部颇有影响也发表了一些论文等等。
尽管我一直渴望学习更多但我以为个人学习速率开始降低了。做为一名芝加哥的软件工程师,湾区的那么多伟大的公司老是强有力的诱惑着我。react
人生短暂,职业生涯更短。在跟个人老婆交谈并获得她的全力支持后我决定采起行动开始了我职业生涯的第一次跳槽。android
尽管我一直着迷机器学习的职位,可这些职位在上述五家公司的名称和面试流程有着些微的不一样。其中三家的职位是机器学习工程师,Salesforce 是数据工程师,而 Airbnb 职位里则是普通的软件工程师。由此我不得不许备三个不一样领域的知识:编码, 机器学习和系统设计。ios
我还有个全职的工做,这使我总共花费了两三月的时间准备。下面将给出我是如何准备这三个领域的。git
尽管我也认同编码面试可能不是最好的方式来评估面试者的技能,但无可争辩的是没有比这更好的方法在短期内来证实面试者是否是一个好的程序员。
在我看来,想要获得程序员的工做编码测试是不可避免 程序员
我主要使用 LeetCode 和 Geeksforgeeks 来练习。 Hackerrank 和 Lintcode 也是不错的练习工具。
我花了几周的时间过了下常见的数据结构和算法。而后重点关注了我以前不熟悉的领域,最后作了一些常见问题的练习。由于时间所限一般一天我只作两题。github
谈谈的一下想法,面试
这个领域更多的和实际工做经验相关。许多问题会在系统设计面试中被问到,包括但不限于系统架构,面向对象设计,数据库设计,分布式系统设计,高扩展系统等。算法
有不少线上资源能够帮助咱们练习。大部分时候我是经过阅读关于系统设计以及分布式系统设计面试的文章和一些设计案例的分析。下面我给出一些有用的资源供参考。
尽管系统设计面试涵盖不少主题,一些经常使用的套路能够帮助咱们解决这些问题。
说了这么多,应对系统设计面试最好的方式仍是坐下来实际设计一个系统,例如在你的平常工做中不要总作些表面工做,能够试着深刻了解使用的工具,框架和第三方类库。
再好比你用 HBase ,与其简单的使用客户端执行些 DDL 和查询操做不如试着去搞懂它的总体架构,读写的流程,HBase 如何保证了强一致性,有哪些主要或细小的封装,系统是如何使用的 LRU 缓存和布隆过滤器来提高效率的。
你甚至能够去比较 HBase 和 Cassandra 在设计上的相同和不一样之处。这样当你在被问到设计一个分布式 key-value 存储时,你就能够从容应对了。
许多博客也是好的知识来源如 Hacker Noon 以及一些公司的技术博客,还有不少开源项目的官方文档。
最重要的是保持谦虚和好奇心,像海绵同样吸取一切有用的知识。
机器学习面试一般分为两部分:理论和产品设计。
读一些机器学习相关的书籍是颇有帮助的,除非你有机器学习研究的经验或者ML课程学的很好。比较经典的书如 《机器学习之路》,《模式识别》和《机器学习》都是很是不错的选择。若是你对特定领域感兴趣能够选择更多该领域的书籍。
要确保你懂得那些基本概念,例如误差方差平衡,过分拟合,梯度降低,L1/L2 正则化,贝叶斯理论,集成学习,协同过滤,降维等。
熟悉常见的公式如贝叶斯方程和流行的推导模型,如逻辑回归和 SVM 。试着去实现如下简单模型如决策树和 K-means 聚类。
若是你放了一些模型在你的简历上,那务必确保你彻底懂得并能给出这些模型的优缺点。
关于机器学习的产品设计,懂得构建一个机器学习产品的通常过程,这里给出了个人作法。
这里我想再次强调保持好奇心和持续学习。不要仅仅是调用 Spark MLlib 或者 XGBoost 的 API ,
要试着去弄懂背后的原理。例如为何随机梯度降低适合于分布式训练,
为何 XGBoost 与传统的 GBDT 不一样,它的损失函数有何特殊之处,为何它须要计算二阶导数等等。
从回复 Linkedin 上 HR 的消息和寻求推荐开始。在尝试一次申请某明星创业公司失败后(后文中我会谈到),
我开始了几个月的艰苦准备。在招聘人员的帮助下,我安排了在湾区一周的现场面试。
我周日飞往硅谷,这样我有五天时间和世界上那些最牛的技术公司进行约 30 场面试。
很是幸运地是,我拿到了他们中的五家公司的录用通知。
电话面试是这些公司的标配,不一样的是面试时长。一些公司如 LInkedin 要一个小时,而 Facebook 和 Airbnb 则是 45 分钟。
专业性是电面关键。由于你只有的有限的时间并且一般只有一次机会。你必需要很快的识别出问题的类型并给出高水平的解决方案。
要确保告诉面试官你的想法和意图,在一开始这可能会下降你的速度,但沟通是面试中最重要的也是最有帮助的。不要背诵你的答案这很容易让面试官看穿。
对于机器学习岗位有些公司会问 ML 的问题,若是你被面试这些确保你准备好了这些技能点。
为了更好的利用个人时间,我在同一下午安排了三个电话面试,每一个间隔一小时。
这样的好处是我一直处于手热的状态,很差的地方是若是第一个没发挥好可能会影响接下来的表现。因此我不推荐你们都这么作。
同时面试多家公司的一个好处会给你带来必定的优点。一次电面之后我就成功的跳过了 Airbnb 和 Salesforce 的第二轮电面由于我已经得到了 LInkedin 和 Facebook 的现场面试
更让人惊喜的是 Google 在得知我下周有四个现场面试后居然让我跳过了他们的电面直接安排我现场面试。我知道这将使我很是劳累,不过没有人可以拒绝 Google 的现场邀请。
这是我在 Sunnyvale 的第一个现场面试,这里办公室老是窗明几净人们看起来很是专业。
每轮面一个小时,编码问题中规中矩,但 ML 的问题有点难度。尽管如此,我从 HR 哪里收到的准备资料起到了很大的帮助。直到面试结束,并无让我太吃惊的问题。
我据说 Linkedin 有着硅谷最好的伙食,如我所察若是不是真的,也差不远了。
被微软并购之后,看来 Linkedin 甩掉了财政负担,他们开始甩开膀子作真正酷的事,让人心动的新特征如视频,专业广告等。做为一个关注专业发展的公司,Linkedin 优先增加它的员工。
不少团队如广告和订阅相关的都在扩张,因此抓紧行动若是你想加入。
Salesforce Einstein
明星团队作的明星项目。这是个至关新的团队,感受像一个创业公司。产品是构建在 Scala Stack 上的, 因此在那里类型安全是实实在在的。Matthew Tovbin 在 Scala Days Chicago 2017,Leah McGuire 在 Spark Summit West 2017 进行过伟大的演讲。
个人面试是在 Palo Alto 的办公室。 他们团队有很强的文化凝聚力和很是好的工做生活平衡。每一个人都对在作的事情充满激情很真正喜欢。四轮面试下来,总体上比其余公司要短,但我多但愿我能待得再长一点。面试完后,Matthew 甚至带我到惠普的车库转了一下。
绝对的行业老大,无需多言妇孺皆知的 Google 。但它真的很是很是的大。 花费了我 20 分钟的时间骑车去见个人朋友。 排队点餐的人也不少,对程序员而言这永远是一个美好的地方。
我在 Mountain View 园区众多楼宇中的一座里进行的面试,我不知道具体是哪个,由于实在是太大了。
个人面试官们看起来很聪明。当他们开始谈论的时候你会发现他们更加聪明。若是和这帮人一块儿工做那将是多么的愉悦。
Google 的面试我以为一点特别是对时间复杂度的分析特别重要。确保你真的明白大 O 的涵义。
Airbnb
迅速增加的独角兽企业,有着独特的企业文化和号称湾区最美的办公环境。新产品如餐厅预约,高端细分市场,中国市场的扩张等都预示着公司光明的前景。若是但愿快速成长和 pre-IPO 的体验,并能忍受风险,这将是一个完美的选择。
Airbnb 的代码测验有一点特别,由于你将在 IDE 上而不是白板上写,因此你的代码要可以编译并给出正确答案。有些问题确实很是困难。
他们还有所谓一种跨职能面试。这是 Airbnb 重视公司文化的方式,仅仅技术上优秀并不能保证被录用。两轮跨职能面试让我飞常愉悦。我和面试官进行了轻松的交谈,会话结束后咱们都很愉快。
总体上我以为 Airbnb 的现场面试是最难的,由于问题很难,时间也很长而且有跨职能的面试。若是你有兴趣,务必了解他们的文化和核心价值。
和 Google 相比,Facebook 另外一个还在快速增加的巨头,小但快节奏。它的产品线垄断了社交网络,而且重点投资了 AI 和 VR ,显然将来 Facebook 有着巨大的增加潜力。和大牛们如 Yann LeCun 和 Yangqing Jia ,这机器学习人士工做的乐土。
我在 20 号楼进行的面试了,那里有楼顶花园和美丽的海景。扎克伯格的办公室也在那里。
我不肯定面试官是否是获得指示,但我没有获得明确的提示关于个人答案是否正确。我仍是相信公司指示他们不要评价候选者答案的正确性。
前四天的劳碌给我身体带来了影响,中午我开始头疼,我坚持把下午的面试进行完。我以为本身一点没发挥好。当收到他们给的录用通知时我确实有点小吃惊。
整体上我以为这里的人相信他们公司的愿景,也都为他们作的事情而骄傲。做为一个市值五千亿美金而且快速增加的公司,Facebook 是开始你职业生涯的理想公司。
这是一个宏大主题,在这我不去谈论。 有兴趣的能够参照这篇文章。
一些我认为重要的事:
失败是成功之母,固然也包括面试。
在开启上述硅谷面试之旅前,五月份时我面试 Databridck 失败了。
四月的时候, Xiangrui 经过 Linkedin 联系我,问我是否对 Spark MLlib 团队的职位有兴趣, 这让我很是心动。由于 1) 我使用 Spark 热爱 Scala, 2) Databridck 的工程师是最一流的,
3) Spark 完全改变了整个大数据世界。这是一个不能错过的机会,因此几天后我开始了此次面试。
Databridck 的门槛至关高处理流程也至关的长,包括一次初审问卷表,一次电话面试,一次代码测试和一次现场面试。
我成功的得到了现场面试的邀请,并访问了他们在三藩市市中心的办公地点,在那咱们能看到金银岛。
个人面试官是个极具聪明才智又同等谦逊的人。面试过程当中我常常感受被逼到了极限。面试还算进行的顺利直到一轮灾难性的面试,我彻底搞砸了由于技能不过硬和准备不充分,最终惨败。
Xiangrui 真的很善解人意,面试结束后陪我走了一段,我很是感谢和他的交谈。
几天之后我收到了拒信。和预想的同样,尽管如此这仍是让我沮丧了好几天。虽然错去了在 Databricks 工做的机会,我仍是衷心的但愿他们可以继续取得更大的影响和成功。
从五月的第一次面试到最终九月底拿到录用通知,个人第一次跳槽是这么漫长和不易。
这对我真的不容易,由于我须要保证我如今的工做定期完成。连续几个周我都是准备面试到凌晨一点而后次日早上八点半起来全身心准备一天的工做。
五天面试五家工做很是的有压力和冒险,我不建议你们这样作除非你日程特别赶。可是这样作也确实有一个好处,就是在手握多个 offer 时,你会在谈判的时候更具优点。
我在这里要感谢我全部的招聘者,感谢他们耐心的帮我安排全部的流程,感谢他们的时间跟我交流并安排面试的机会以及最终给我录用通知。
沁人心扉
最后也是最重要的是,我要感谢个人家庭,感谢他们对个人爱和支持。感谢个人父母,他们一直在关注我迈出的每一步。感谢我亲爱的老婆为我作的一切还有我亲爱的女儿和她暖人心扉的微笑。
也感谢这篇长文的读者们。
Xiaohan Zeng
10/22/17
译者更新:做者最终选择了 Airbnb 的 offer , 并将于 11 月入职。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、React、前端、后端、产品、设计 等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。