Ivan's 寻职系列(一):找实习 (Facebook, Google, Apple, Twitter, Palantir)

avatar 3412
iveney
31644
56
*首发一亩三分地,未经授权请勿转载*

## 前言 ##
这篇东西真是 long over due。我是去年去的 Facebook 暑期实习,今年转正的 full-time。本来应该实习完马上总结,但无奈回来后一直太忙,拖到现在入职前夕,终于感觉不能再拖必须得写出来。一来为了纪念自己终于结束了长达 11 年的大学生活,二来我喜欢分享,希望自己的经历能帮助到人。我预计会写一个系列共三(or 四)篇文章,首先是找实习经历(这篇),其次是实习经历,三是找工经历。最后如果有我时间,我会介绍一下full-time 后与 PhD 的对比。虽然我看过有不少 FB 的实习经历,但貌似没有 PhD 背景的,我可以来添砖加瓦一下。

## 背景 ##
先来点个人背景:国内 SYSU CS B.Sc,香港中文大学 CSE M.Phil, 美国 UIUC ECE PhD (fun fact,地里那篇早期的 fb 实习经历作者是我本科同学)。我的背景比较特殊一点,所以有必要介绍一下。我虽然就读于 ECE,但是个人的知识体系是建立在 CS 上的,还是偏理论那方面(我最感兴趣的是 Computability Approximation Algorithms 这些,不过充其量只是兴趣,自己没有那个天赋在这些方面有成就 :p),MS 和 PhD 阴差阳错地做起了 VLSI CAD (Computer-aided Design, a.k.a. Electronic Design Automation) 的东西,具体历程不表。别人看起来我是『做硬件的』,但我的 focus 主要是设计解决电路设计问题背景下的算法,EE/CE 的知识倒是其次。所以找起实习/工作来,总是要先跟别人解释一番。用我自己的话来说,就是 EE 壳 CS 心。这给我找回『老本行』的工作带来一点困难,因为别人看见我是 ECE 的,总是不自觉会 question 我的 match。这里的 take away 就是,找到自己的 niche point,合理包装自己。现在很流行 EE 转 CS,事实上不少 EE major 的人编程和算法能力比一些 CS major 的要扎实,但他们跟我 share the same pain point,就是如何 convince 别人(recruiter, interviewer)你拥有 CS 的 skill set。我的做法是,有一份 CV 和 一份 resume。CV 就是没有修饰过的,最平实的个人履历,找 research related positions (postdoc/faculty) 用的。而简历我有很多份,是面向 industry 的。简历和跟面试官的自我介绍里尽量强调跟 CS/IT 工作性质相关的经历与技能,(Plus: 如果可以,职位相关的技能),把别人的思路引到你想要的地方。举栗:如果你上过 Data Mining 的课,并且在找 DM 相关职位,那么完全可以把 DM 和 这门课放在简历靠前,并且和 interviewer 介绍时早点提到自己 looking for/interested in a DM related position。

## Timing ##
找实习的 timing 很重要,我这一次找得太迟,很多地方都几乎到了 close 的时候。最理想的找实习时间是 fall semester,因为种种原因,我秋季总是很忙,所以一直没有找。等到了二月底时,fellow TA 跟我说要去 FB 实习了,我才匆匆想起该找实习了,于是临时让 FB 的朋友 refer 了一下。这里真要感谢我的 recruiter Mikel,我那么 late notice 都能给我安排面试。相比之下隔壁实验室的哥们就没那么幸运……这种时候,以及后来找工作的过程中,我还是能感觉到在 prestigious 的大学就读,reputation还是有那么点作用的。我个人的 viewpoint,是比较偏向找工作侧重看实力的,但无可否认几乎所有我碰到的 recruiter ,都让我感觉非常重视我们学校的学生。至少,学校名声是一个很好的敲门砖

## 公司 ##
这次的实习我一共投了 Facebook, Google, Twitter, Palantir,Apple。投的不多,一方面我个人风格比较喜欢小而精,focus usually gives the optimal outcome for me,另一方面由于找的时间迟,选择也不如别人多,而且我希望简历都是让别人给 refer 的。因为直接递简历的话,到 recruiter 手上的 turnover time 太长,除非是在 career fair 上直接递的。所以平时如果可以积累人脉,就尽量积累。我的 connection 主要来自校友或之前去实习时认识到的朋友,感谢他们,让我不需要去 career fair 上排队。我去过一次见识就再也没去了,比较火的公司都要排半小时队,感觉不是最有效率的方法(准确来说我后面去了几次 Engineering fair,不过都是搜刮 freebies 而不是投简历...)。这几间公司里,twitter 是给我印象最差的:这次的实习完全没有回音,而后来的找 full-time 过程也是回应非常慢或没有,面了两轮电面后就没消息了。这个年头竟然还是采取的『默拒』(说到这里我就想发个微信里抠鼻的表情。。。)。Palantir is just slightly better,recruiter 都是模板 email,面试官则给人比较傲慢的感觉(印度人?Anyway,咱不以最大的恶意揣测别人,而且我也有不少好朋友是印度人)。为 Google 点个赞,recruiter 异常迅猛。我跟他们解释我的 time frame 很 tight,他们就给我安排了一周后同一天的两个电面。面完非常体贴地第二天就给我消息说 pass 进入 host match 了。可惜可能是找的时间太迟(面完已经三月多了),一直没有 match 到 team。FB 则是大赞,整个 recruiting team 都让人感觉非常 professional,一直很有礼貌也很积极,让人感觉是真心为 candidate 设想。Apple 比较特殊,是我一个同学的推荐,因为比较 match,跟 manager 打了个电话就发 offer 了。虽然我是个忠(nao)实(can)用(guo)户(fen),考虑到苹果的 notorious self-censoring,我比较喜欢去一个能自豪地跟别人说自己做了什么东西的公司。题外话:苹果的 offer package 真心高大上,寄过来的 package 纸质、包装把其他公司碾成渣渣… 但是它家的 recruiter非常 push,一直在催我签 offer,很符合 Apple 那一贯的高冷傲娇感。

## 准备 ##
正如上面所说,我找实习的时间比较尴尬,所以准备时间不大充分。但是现在回想起来,准备不充分总好过不行动。我秋季没有找的一个原因,就是觉得自己没时间准备,但如果不去找,那就甚至没有机会了,只能像这次一样很惊险地 rush。话说回来,这种时候是很能体现一个人基本功扎实的时候,包括 coding skills,basic algorithms,CS fundamentals。对于前两者,如果平时都有 keep coding,那么准备起来就不会那么辛苦。我自己做的 research 需要 implementation & experiment,所以对我来说不是大问题。对于后者,我主要指的是像操作系统、编译原理、并行计算、软件工程等的 CS 核心课程。如果你是 CS 科班出身,并且本科学习时有认真学好这些课程,心中有建立起 systematic 的 syllabus,那么 review 起来应该是很简单的事情。这里值得一提的就是刷题,虽然我个人觉得这样非常应试,从长远来看会使得整个 field 鱼龙混杂。对于个人来说,如果是刷出来的结果,那么未来注定是要”还"的,而对于面试官而言,也越来越难设计好的题目。但毋庸置疑的是,在所有人都刷题的大背景下,你不刷题,只会 put yourself at an inferior situation。顺应潮流,我刷了 leetcode。大概每天花3-4小时根据 AC 率切10-15题,前后一共10天,这么做下来大概 130 题左右。虽然不多,但是我会每道题尝试做不同的解法,比如很多题目也提示你可以写递归+迭代两个 version。中间看了一点amazon.com,里面的题目我不是特别喜欢,但是里面提到的解题思路非常不错(use an example, draw a simple case, pattern matching 等)。amazon.com 的题目我超级喜欢。尽管可能偏难,但对于学习来说,是一个非常好的资源。另外,我还花时间 review 了一下前面提到的 fundamentals。最后,我侧重复习了 Machine Learning 相关的内容,把 Andrew Ng 的 notes 和 programming exercise 过了一遍(我之前上过偏理论的课,感觉没有 Ng 的讲得 practical 和接地气),因为我这次实习想找类似的 position。

Practice makes perfect! 准备得差不多了,你可以跟你的同学进行 mock interview。学校一般有提供这么个服务,缺点是比较 general 而无法针对专业(或者不够真实)。我们专业的一个 honor society 则有提供专门的 technical interview,反馈还不错。我也 sign up 了我们系的 grad mentoring program,给小盆友们提供过类似的服务,回报社会ヽ(✿゚▽゚)ノ (其实还蛮好玩的,严重考虑做个 part-time)

## 流程 ##
因为最后去的 FB,所以来详细说一下。PhD 的实习招聘流程跟 BS/MS 有点不一样,会让你先选择三个你的 top choice 方向/组。因为我兴趣是 ML (以及 CV),自然而然地就选择了 Ads, Feed, Image。接下来就是标准的两轮电面。没有什么很特殊的东西,就是基本的算法,以及 ML 相关知识。其中 ML 算是 domain knowledge,更大的情况下考察 PhD 时出现的几率会多点。老实说我有点 surprise,我并没有表现得我理想中的好,稍微有点磕磕碰碰,但最终还是很快就拿到了 offer。我感觉主要可能是以下几个原因:think out loud, 学校与个人背景, 面试官比较 nice (中国人). 后两条只是猜测,我觉得不用想太多,茶余饭后笑笑就好。而第一点,则是经过我的实践证明过的,我详细介绍一下。

在这么多的面经里,我觉得最有用,并且我也一直坚持实践的就是本帖隐藏内容需要登录后才能查看。

Suppose 你已经有了第一阶段的 code。如果面试官同意你的 implementation,而其实存在更好的算法,本帖隐藏内容需要登录后才能查看。

值得一提的就是,think out loud 有一个前提,就是你的英语口语要过关。如果你不能流利表达自己的想法,那么你是很难 fit in 一个 team work 的环境的。我比较惭愧的是在美国生活那么久,结识到的 native friends 寥寥无几,而实验室也没有 native speaker。所以我只能平时一有机会,都抓紧时间跟别人多用英语交谈。我比较喜欢纯正的美音,所以我有时间我也会看看 youtube 上的短视频纠正一下。想系统地学,则推荐 American Accent Training。我觉得有 Chinese accent 不是坏事,但是这很容易跟发音错误混淆。

相比之下,Google 的题目则非常 interesting,很合我口味。虽然短短两小时面试,却涉及到了 OOP design, probability, statistics, linear algebra, math (real analysis), algorithm & data structure, multi-thread 等,不可谓不广博——一般别的公司 45 mins 面试也就问一题而已。后来找 full-time 的时候,google 的面试题也的确让我感觉是设置得在深度和广度上都是最好的。

Pass 面试之后,就是标准的 team match 流程了,大概就是再跟你确定一下 interest,然后就是看看能 match 到什么 team。这个貌似没什么好说的。发了 offer 后,我稍微等了一下 google 的 host match。虽然今天的 google 已经不是 10年前那个,但huaren.us在本科时留下的光环还是让我决定等它一下。虽然最终没等到 match,现在看起来也不能不说其实是一件『幸运』的事情,因为没去 FB 之前,我不太了解这间公司,直到去了才被它的文化所感染并且喜欢上它(I am not alone,最近FB还被评为 #1 best company to work in, glassdoor 上员工的评分也一直很高)。正所谓祸兮,福之所倚。要真 match 到了,估计又要纠结好一阵(谁叫你丫选择困难)。

## 总结 ##
我在美国一共找过三次实习,教训就是,找实习一定要早做准备,be active,这样依赖运气的成分就会少点。我提倡注重平时积累总结,这样 review 起来就不会那么辛苦。这其中也包括口语,这样表达交流起来会更流畅,也是你能 think out loud 的大前提。最后,你可以尝试 mock interview 来 test 自己的 ability。

写着写着没想到能写这么长,本来想连着实习经历一起写的,只能分成两篇。看来不小心解锁了 PhD 职业的写 paper 的技能……
  • 120
56条回复