Here is the article.
Tips for me:
- Leetcode premium
- Google tagged algorithms
- Google team match is hard and it depends on luck sometimes
个人背景
美国University of Maryland CS PhD, 浙大计算机本科,PhD主要研究方向是deep learning/ information retrieval/NLP. 之前有过一些实习经历,在Google/Microsoft/Comcast AI Lab呆过。总体再回头看实习经历对找工作非常加分,基本上所有的面试都对我在Comcast实习的一段经历非常感兴趣,有时候一轮面试就只聊我实习期间做的项目(语音搜索和NLP相关)。还有一些IR/NLP领域灌水论文。另外最近几年ML/AI/NLP/IR 方向确实很火,能拿到这些不错的Offer很大程度上跟自己做的方向很有关系。
简历也是很重要的一关,基本保证了你的面试官对你的第一印象,建议大家可以去参考一些大神的简历看看。保证重要的Project/Publication/Experience写在最前面,这些也是你可能要重点准备的面试经历,我有好些电面基本上一轮就只聊我简历上的经历。
Coding
虽然我自己拿的大部分offer都是research scientist title, 但是无论是swe还是rs, coding真的很重要!!我面的这些偏research职位(Google, FB, MSR)都有几轮是coding面试,好的coding能力基本算是基本功了。我的准备过程也基本上靠leetcode了,从去年10月份开始刷题,刷到陆陆续续1月份,总共刷了大概前400道题的样子。在一边实习一边赶论文的情况下刷题确实非常痛苦,那段时间基本都是晚上十二点到家,不过坚持下来再回头看看还是非常值得,也希望和大家共勉。。
个人经验是刷题不一定要全刷完,但是保证自己完全理解一道题很重要,每次AC了之后我会对比下别人提供的参考解法,看看怎么样能从coding style/思路上优化自己的code, 基本保证每道题的写法是最优的,和最后AC的时间都是在前20%的样子。另外强烈建议买一个leetcode会员(这点钱和你最后拿到的offer实在是算不上什么),在每个公司面试前期有针对性的刷完有这个公司tag的所有题,这个对某些喜欢考题库的公司太有帮助了。。。我刷题总共刷了两轮,第一轮是每一道题老老实实做,第二轮选择性的挑了一些题做,其他题基本是在脑里过一遍,觉得有思路了就不写了。还有一点建议是刷题的时候记录一些你觉得非常经典或者自己一开始没做出来的题,方便你在第二轮刷题的时候有针对性的复习。
面试经验
Facebook: fb的面试流程还是非常中规中矩的,基本上是一轮电面+onsite, onsite总共五轮。我是两轮coding+一轮ML system design+一轮research+一轮和manager聊天。可能因为我的简历比较match,面我的面试官全是Facebook Research下面NLP组的人,可能正常来看大部分人是三轮coding。面试时候放轻松,能够和面试官很自然的沟通,碰到不会的题面试官会给一些hint,确保自己理解了这些hint。还有一个面试技巧可能会比较有用,可以善于和面试官拉进距离,我当时FB面试manager就是我们实验室毕业的,还有一个面试官是JHU毕业的来UMD给过talk,还有一个认识我导师,面试的时候有的面试官可能会主动和你透露这个,你可以顺便聊一下你们可能会有的一些共同经历,对于调节面试氛围还是很有帮助的。。
Google Research: 因为我之前在google实习过两次,所以没有电面直接onsite了。当时我的HR一度不回我邮件,本来想早点安排onsite的,结果拖了将近一个月才安排上,直到我FB offer deadline当天晚上十点才拿到google offer。。。Google给Offer的流程和其他公司不太一样,onsite -> team match -> committee decision. 所以即使你过了onsite并不能直接拿到offer, 可能要额外安排个2-3周team match的时间,保证自己能Match上想去的组。建议大家安排google面试多预留一个月左右。
Google面试我是先过了一轮technical onsite, 四轮coding+1轮research,基本上碰不到leetcode原题,有两轮应该是leetcode hard难度。碰到不会的不要太紧张,我有一道DP题没答上来最后还是拿到offer了。后面又和google research聊了一轮,主要是research+ML面了。因为当时FB催的紧,只聊了一个组就接offer了,所以也导致当时没match上特别想去的组。
----
面试准备:
主要参考了之前的两篇帖子(https://zhuanlan.zhihu.com/p/35435776和https://www.1point3acres.com/bbs/thread-530358-1-1.html),写得都非常棒,到今年也非常适用。ML/DL/NLP的基础需要好好复习一遍,我个人主要看Stanford CS229的lecture notes和李航老师的书。然后就是老老实实练习coding,熟练掌握各种二分,理解递归,bfs/dfs,双指针,树/堆/队列/图,DP等等。以二分为例,一定掌握模板,清楚二分的条件可以用各类计数条件(i.e. 大于/小于)来表示。最后再准备一下自己的research,如果面试官对你发的paper感兴趣,那基本都聊具体的实现和intuition,外加怎么结合到他们工作中。举个例子,如果你做过一些text generation,可能会从基本的language model,copy mechanism问起,过渡到怎么增加diversity,怎么引入knowledge,怎么做control。如果不聊paper,那就会考ML/DL基础知识,比如花式问一下BERT,Optimizer,Logistic Regression,EM。下面详细说一说对每个公司的体会。
No comments:
Post a Comment