CS PhD 2019北美找工作经验总结

avatar 108950
larry516
41499
64
PhD最后一年总算进入尾声,这一年刷了五六百道LeetCode算法题,面试了七八家公司,赶了好几篇paper,做了一个TA,准备毕业论文和答辩,一直是累成狗的状态,不过一直痛并快乐着。最近有点空挡时间,把之前找工作的经验总结一下,希望为未来在北美找工作的同学提供一点帮助。
先报一下offer情况
Offer: Google, Microsoft, Amazon Alexa, Facebook, Alibaba Seattle
Rej:Apple, Tencent AI lab
Withdraw: Twitter等
去向:Google

个人背景
美国 CS PhD。之前在微软美国Redmond研究院实习过三次。一直对IR和NLP相关的方向,比如问答系统,对话系统,文本排序和匹配系统非常热爱。发表IR及NLP相关top conference papers 20多篇。当然,我们lab的某个同学可以每一年都可以发十几篇top conference papers,经常感觉自己应该还得更加努力,争取做得更好。虽然我们学校位置偏僻了一些,但是读博士关键还是跟一个好老板,以及有好的做学术的环境,位置偏僻也只是暂时的。位置偏僻其实也有利于回避一些诱惑和干扰,未必是个坏事情。

面试准备
不论在国内还是美国找CS相关的工作,基本流程都是投简历,面试(有些公司可能有笔试或者OA),on site,谈offer和决定去向。北美这边的公司基本除了MSR,都会非常注重coding面试,当然我听说MSR也面1-2轮coding。因此,还是有必要花时间刷刷LeetCode好好准备一下的。一般投简历和刷题可能持续一个月到两个月时间,然后on site面试一个月,谈offer 一个月。我是从2018年9月份全面启动全职工作申请的,直到圣诞节完成了所有on site面试。秋季是校招高峰期,建议大家把握住这个时间窗。

推荐面试准备资料和面经贴
面试准备的过程我主要参考了Jingfeng Rao写的总结知乎帖, "CS PhD 2018 北美找工作小结" zhuanlan.zhihu.com ,总结的非常好,对我帮助很大。感觉基本要准备的东西比如coding和机器学习这篇面经贴中都有提及,我这里可能主要针对我个人情况补充一些资料和信息。

Coding
不论是申请Software Engineer, 还是Research Scientist或者Applied Scientist,coding面试是必不可少的。不需要面coding的估计只有大学的AP职位以及MSR和Google研究院纯研究类的researcher职位。但是这样的职位一般bar非常高,偏爱CS四大毕业的phd,而且基本很有竞争力的候选人常常博士刚刚毕业就citation过千甚至好几千了,都是学术界的rising star。如果申请工业界的职位,就得认真准备LeetCode这类平台上面的面试题。目前LeetCode平台已经有1000多题,基本不太可能每题都做到(当然如果特别有毅力的童靴可以做到肯定是毅力可嘉),可以用LeetCode session这个功能(我有买会员,感觉这个投资还是很值得的),过多遍算法题:
第一遍:1-200题每题老老实实做,自己想解法,不断对比自己的算法和实现与最优算法和实现的差距,改进思维过程和解题方法,加深对各种算法和数据结构的理解。前200题cover了大部分基本的算法面试题的套路和类型,比如字符串,DFS/BFS,DP,双指针,二叉树,贪心,栈和队列,二分查找,位运算,分治法,union-find,基本排序算法,链表,堆等等。如果这些东西可以深刻理解,熟练掌握,相信对于大部分中等难度的算法面试题都可以做到胸有成竹。这些内容在本科数据结构和研究生算法课程中一般都有涉及,算是作为一个程序员必须修炼好的基本内功了。
第二遍:可以根据题号刷200以后的题目或者根据马上要面试的公司tag来刷题。我是采用根据公司tag来刷题的,基本保证在面试这家公司前刷完带这家公司tag的所有题目。Google的题目尤其多,我重点刷了中等难度的,hard选做了一些。我的感觉是大部分公司面试还是以medium难度的题目为主,考察基本功和对基本算法的理解。这一遍很重要的一个trick在于,要把自己没有做出来的题目放在一个专门的list中,方便在第三遍的时候有针对性的复习。
第三遍:专门做list中搜集的疑难题目以及看看一亩三分地里的面经题,这一轮属于查漏补缺,保证自己所有的基本知识点都真正熟练掌握了。刷题的时候真正自我严格要求,不要看任何题解和参考code,自己写。如果第一遍不能bug free,可以加入list,重做第二次第三次。熟能生巧,相对做题目对于大部分中国学生而言并不是很困难的事情。

以上方法仅供参考。

机器学习,深度学习,IR/NLP相关
由于我的背景的原因,我申请的岗位几乎都和IR/NLP,机器学习相关,Google是software engineer,但是也是一个偏研究的组。其他公司都是research scientist或者applied scientist的岗位,因此机器学习,深度学习,IR/NLP相关的知识点也考得很多。一般面试会从简历入手,对你项目中涉及的基本模型算法来对你发问,可能会考概念,可能会要求推导公式,可能会要求现场design feature或提一些关于模型设计的想法。具体怎么问,完全看当天面试官的个人风格。Jingfeng推荐了李航老师的《统计学习方法》作为准备资料,我也很认同。但是如果时间太紧,可能看看之前上机器学习和深度学习课的课件,看看网上的技术博客,看看网上经典的公开课,也会很有帮助。这里必须要推荐下斯坦福大学的深度学习和机器学习网上课程,包括:
" Stanford CS231n Convolutional Neural Networks for Visual Recognition. by Prof. Fei-Fei Li, Dr. Andrej Karpathy, Dr. Justin Johnson
" Stanford CS224N Deep Learning for Natural Language Processing by Dr. Richard Socher and Prof. Chris Manning
" CS 230 Deep Learning by Prof. Andrew Ng
" CS 229 Machine Learning by Prof. Andrew Ng
课程讲义,推荐的paper list,作业,notes全部在课程网站上。课程视频在youtube可以看。难怪斯坦福会成为CS学习的圣地,向这些教授在网上系统分享这些高质量的学习资料致以崇高敬意。这些都是斯坦福研究生课程的现场视频,所以如果可能掌握其中大部分内容,应该可以从容应对关于深度学习和机器学习的面试。另外coursera上面曾经也免费分享很多高质量的公开课,不过可惜最近开启了商业化进程。最近亚马逊Li Mu大神推出的Dive into Deep Learning (d2l.ai )的教材和网上课程也非常值得推荐,感兴趣的同学可以搜索一下看看之前和将门合办的课程斗鱼直播视频。

面试经验总结

本帖隐藏内容需要登录后才能查看。

最后要感谢一直以来帮助我的老师同学和朋友们,找工作期间也得到不少师兄师姐和朋友们的推荐答疑等热心相助,家人尤其是我老婆也一直在背后支持,默默付出,非常感谢。先总结到这里了,欢迎对北美找工作面试有问题的同学给我留言,我会尽量回复
  • 349
64条回复