美国CS PhD Research Scientist找工作经验总结
点击下方卡片,关注“CVer”公众号
AI/CV重磅干货,第一时间送达
作者:刘壮 | 已授权转载(源:知乎)编辑:CVer
https://zhuanlan.zhihu.com/p/537028803
过去小半年的时间主要就在找工作和决定去向,趁着还没入职工作的间隙,在这里发一篇文章总结一下经验,希望对后面找工作的朋友有帮助,也算是对这段经历的一个记录。
我找的是CV/DL方向美国Research Scientist的岗位。根据我的了解,Research Scientist主要是做研究的地方有FAIR, Google Research, MSR, NVIDA Research, Snap Research, OpenAI, DeepMind, 其他的地方除了一些较小范围的组,可能有更多的工程或者产品上的工作职责;但是划分也不是绝对的,而且同一个组每个人可能也不一样。我投的是前一种为主,但是面试下来两种的形式是基本共通的。下面我抛开具体公司的流程,按照环节来总结一下整个过程中的经验。
投简历:
根据我的经历和听闻,RS的招聘一般都是面试前先具体定位到组:你想加入对方组,对方组的manager也觉得你的背景比较适合他们组,才会安排面试。一般不会是先通过公司层面的面试,再去匹配组。当然如果是多个组对你都感兴趣,可以协调安排一起面,通过之后会再有一个匹配组的过程。简历在公司官网海投的效果不太好 ,尤其是大公司。找人推到公司内部的内推系统这种,也不推荐;因为这种情况一般不会匹配到组,可能很久之后才有人会看到你的简历。我有非常厉害的同学,因为只是找了一般的公司系统内推,而没有拿到面试。
对于真正考虑去的地方,建议先定位想要去的那个组,然后通过组里面或者临近的组里面认识的朋友师兄师姐来向manager推荐。这样可以保证对方manager能看到你的简历,而且对manager来说,有人推荐的一般比去打捞简历靠谱很多。我非常幸运,很多朋友和前辈在这里帮助了我非常多。我通过这种方法投的基本都拿到了面试,官网海投的大部分没有音信。根据我过往的经历,PhD找实习面试也是一样的道理,通过官网之外的渠道找靠谱一些。
通过这种方法投了,但是如果对方没有招人名额的话那肯定也是不行了。20-21两年疫情严重的时候这个就是个问题,21年末/22年初的市场貌似开放了很多名额,很多组都在招不少人,但是22年下半年似乎情况又急转直下了。如果有名额,给面试的可能性看研究方向和成果。一般来说成果没有办法短时间优化,所以找工作肯定是越合适的组成功几率越高。但也不是一定要求小方向上严格匹配,尤其是在做研究自由比较大的组和公司。有时候一些我以为并不是竞争特别激烈的非头部大厂,但是实际上他们需要的方向和技能并不匹配我的,我就没有收到消息或者面试。关于研究成果,理想情况是对方听说过或者读过你的工作;我就听说有人文章很少,但是有一个工作非常牛,然后找到很好的研究岗位的。数量质量兼备可能是理想情况,这样从manager和公司角度来说,你既能保持效率,又有机会搞大新闻。如果简历关顺利通过,就到了面试环节,下面按照几种面试种类分类来说。
电话面 (0-1场):
英文"Phone Screen",一般半个小时,是看到简历觉得ok,但是onsite面的成本太高,所以需要通过电话面来刷掉一些人。一般是简单了解下你的研究背景,也有的公司是其他的形式,比如很短的一个presentation,也有少部分很简单的coding的。过了电话面就进入所谓onsite,一般是5-10个面试安排在同一天或者有时候在相邻的两天。虽然叫onsite,但是历史原因了,现在为了方便都是远程面。下面介绍的都是onsite面试中不同的内容。
Research talk (1场):
onsite当天第一场,一般是45分钟的research presentation,加上10-15分钟问答时间。这个某种程度上可以给onsite的一天定调,如果讲的效果比较好的话,应该对后面的面试会有帮助。一般后面要面试你的人会去视频会议里直接看。大部分情况下都被录像了,后面在公司内部会公开被更多感兴趣的人听到。大概要做的就把自己过往的重点工作用一条主线串起来,讲一个好的、能被听众听懂的故事。不需要用到所有的工作;我认为一般重点讲的不超过3个工作,太多了可能会显得没有重点。我认识的有两个同学都是只重点讲了一个最近的工作,然后拿到了非常好的offer。网上有很多如何做好research talk的教程和建议,我也参考了很多。但是我的准备也是有一个问题,就是没有把讲的过程练习到很流利。这部分准备的时间取决于之前的材料有多全,有些同学就是把之前做的就很好的PPT拼接起来。每次讲完,我也会看看有没有什么可以改进的地方。research talk虽然很多公司是不会显式打分的,但是应该是所有面试中比较重要的一环。
Coding面 (1-2场):
Leetcode类型的coding题,其实没有我想的考的那么多,平均每个公司不到一题。我没有被考超过Leetcode中等难度的题;就算是中等,也是其中比较简单的。所谓的AI coding可能更多一些,就是numpy, pytorch或者是ml/cv的一些基本操作(比如nms, iou, filtering, tensor操作,但没有手写back-propagation这种)。这个因公司而异,有个别公司从头到尾一道coding题都没考。
我以前没有搞过信息学竞赛,大概准备Leetcode类型题我花了一个月左右的时间。我买了个Leetcode会员,刷了可能200道左右Leetcode简单和中等的题 (看到自己账号2014年大一大二刚注册的时候就刷了几道困难题,还在论坛上和别人发过帖讨论,有点感叹自己老了)。每一个基本的考点,比如DFS, BFS, DP, 链表等等,都至少做了几道题。比较熟练之后,不用做到每个练习题都写完整,想出思路即可,可能我在这里又看了100道题。coding面也是有技巧的,比如如何在不会做的情况下做出一些分析,让面试官给你一些提示,等等,网上也有很多教程。可以对着公司的常见题刷,好像出现重复题的概率还是挺高的,我在Meta前几次实习面试就被一直问同一道题。
当然这里我说的主要是偏研究岗位的;如果是偏工程的岗位的话,coding肯定是会更多,或者可能全部是coding,可能难度也会更高。
ML/Math(0-1场):
有一些公司会考一些机器学习基础知识。比如解释overfitting的定义,如何判断overfitting了,Adam和SGD的区别。还有一些大一的数学知识,比如矩阵的特征值分解,如何判断正定,泰勒展开,梯度,导数相关的知识点等等。不是很多,大概有三分之一的公司考了,一般不会太难,稍微复习一下应该就能比较好地应对。没有手推SVM这种。
Research面(2场或者更多,有的6,7场也是有可能):
这个大家找过实习的应该都会面的。总结介绍一下自己的过去的研究,挑出一两个重点讲一下,自己做了哪些贡献。常见问题有:对自己过往的工作回过头来怎么看,还有哪些地方可以改进的;将来打算做什么方向;对某个小领域做个简单的概括/怎么看;我想做一个东西能不能这样做,可能出现什么问题;做一个东西总是做不好,有可能是哪些问题等等。也有那种设计问题,给你一个场景,问你怎么开始解决这个ML的问题,设计系统,一般是从如何整个pipeline角度来说,收集划分数据,设定metric等等。也有那种问一个题目,看看你有什么思路,有些就是他们工作中碰到的问题。Research面可能是面试的主体部分,应该占了所有比例的一半以上,所以得做好多次重复说一样的内容的准备。也有很多面试官会在这个环节中留很多时间让你提问,或者介绍他们组的情况。如果你本来就认识面试官,在这一关有可能也没有太多严格的考察内容,都是在聊天,或者给你介绍他们组的情况。这轮如果面试完了,对方觉得从你这学到一些新的视角或者insight,那可能是最好的。也有Research面和coding面混合的,前半部分Research后半部分coding.
Behavior面(0-1场):
问一些过往的经历/场景,你的处理方法,学到什么,想看一看你工作中的性格品质。比如介绍一个工作中和别人意见不同的情况,以及最后是怎么解决的。有些公司是有专门的一场面这个,有些是在其他面试中穿插着的,也有不面这个的。这个部分也需要准备一下,参见网上很多教程。准备过程基本上是,回想一些过去工作学习中发生的一些有趣的经历做为素材,然后可以应对不同的问题做为答案。虽然我准备了,但是发现很多时候还是即兴回答的。一般人可能很难面的很差,当然想出彩应该也比较难。这个按照亚马逊的标准来准备,应对其他的就比较简单了。
补充:
每一家公司面试的方式和轮数不同,但是research talk和research interview一定是有的,我的理解也是在其他几项过关的情况下,对方比较看重的。不同的公司面试也不一样,这个在拿到onsite面试之后,有些公司会和你介绍面试大概面什么,前期总体准备来说不太需要具体到每个公司
希望本文可以帮到后面毕业找工作的同学们,国内找工作的同学也欢迎参考。
(转载须取得本人同意,谢谢阅读)
▲点击上方卡片,关注CVer公众号
整理不易,请点赞和在看