求职记

叨逼叨

山重水复疑无路,柳暗花明又一村。 — 《桃花源记》

马上就要入职了,感觉还是想总结下自己这半年的艰苦求职路,希望对后来的人有所帮助吧。

我是18年5月份毕业的,那个时候还是有想读博的冲动,所以最后一个学期一直在找老师,想做ML/DL的research。大概是5月底,我找到了我们系的无人车老师Raj(CMU DARPA challenge的元老之一、Aptiv founder之一,现在已经卖给了Delphi),并开始在他的Phd. 炜劲师兄的带领下开始做Research。在此,我要谢谢实验室炜劲师兄、孟文师兄,还有CIC的众Phd. 们,松鼠山车神辰哥(祝贺辰哥喜发CVPR2019)、天龙师兄、龙嫂、淼哥(前饿了么第四号员工),淼嫂、星哥、星嫂、小唐、小恬恬、GAN神子南,还有我的室友亚飞、小宏、小易,还有谢谢学妹小雷同志(下文会讲到很多她的例子)。

在实验室干了一段时间,然后大概是在6月底,我渐渐开始有了找工作的想法(对,我就是善变的人),感觉真要做无人车这个方向还是去工业界比较好。

In summary, 一共投了几百封简历,拿到30多个面试,6个终面,其中5个onsite,最后只有一个offer(当然由于心累,拿到不错offer后,有个onsite就取消了),历时半年。

选一个方向

虽然有人说,找工作还是要多投,不同的岗都投,但是我感觉还是需要一个focus。另外,不同的岗位要求也是不一样的,你应该没有那么多精力去准备不同的岗位。当然,大公司,基本是统招SDE (software development engineer)。但,总的来说,还是要focus一点。所谓“子曰:吾道一以贯之。”我的话,我SDE就投了google,其他就只投deep learning/computer vision相关(或者无人车相关公司的perception engineer/deep learning engineer)的岗。这样子做有一个好处是,面多了,发现其实这些公司考察的东西就比较类似,可以重复利用的面经了。

投递的sources

投递的源,有很多,careerfair/TOC,找校友内推,找linkedin 内推,官网海投,还有一些帮助找工作的网站handshake(CMU的找工作平台)、indeed、一亩三分地等等。

我感觉最重要的应该还是careerfair/TOC,就是校招。
如果走校招的话,对比正常的面试,进度会更快点。一般来说,一个公司从一面,二面,到onsite(也许有三面)至少也要一个月吧。一般来说走校招,有on-campus面试顺利的话,可能两周时间你就能拿到offer了。当然如果公司on-campus面了你一二轮,你后面onsite的话轮数也比正常onsite的轮数会少点。你也可能听过一些疯狂的轶事,就是on-campus当天面,当天发offer(我面过国内两家公司校招,就是on-campus一轮给我offer,当然国内和美国这边的面试流程还是会不一样的)。

然后是找内推。
找内推有一点要注意,就是你海投了,应该不方便找内推了,因为你的简历已经在他们公司的简历pool里面了。
然后,找内推的话可以联系自己的校友。校友资源这点上,CMU还是很有优势的!多联系,多加微信,多social,多认识认识很重要!他/她可能是你上这门课的TA,也可能是和你一起上课的坐你身边的同学,也有可能是一起和你去office hour的问问题的人。他/她如果比你早毕业,那在你毕业的时候,他/她入职工作一段时间了,就可以refer你了。

下面我重点讲讲linkedin的使用。
对我来说,linkedin真是求职神器啊,我有三个onsite(两个computer vision research岗,一个和推荐有关的data scientist岗,虽然都挂了QAQ)是从linkedin找的。
一般来说linkedin有两个用途,第一个就是linkedin上面会有po岗位,这个让你对这个公司的招聘会有个数,会知道“哦,这个公司现在还招人”。你可以关注你感兴趣的公司,他们如果有你感兴趣的岗位po出来,你第一时间就会收到提醒,然后去投递。
然后,更一般的用途是加人内推。你也可以联系你感兴趣公司的engineer,manager,recruiter,当然包括你的校友。你去ping他们,和他们说你对他们公司感兴趣,好好自我介绍一下。如果这个公司的这个recruiter没有回你,你就ping他们公司的其他人。
这里提一下linkedin的小技巧,就是你可以在search bar搜“hiring”、“hire”。你就可以看到一些recruiter名字上面有“we are hiring!”的字样,这样子的recruiter我感觉ping他们成功率会高点。

技术面试的准备

一个技术面试的考纲应该就是这个公司这个岗位的job description了。
具体在面试考核的时候会考察基本的coding能力、专业知识基础知识和做过的项目(简历)。还有一些公司会考察你的应变能力,他们会根据他们公司的场景给你出个题,看你如何去解决这个问题。

coding能力的一般体现就是刷题。
关于刷题主要是两点,一点是数量,另外一点是质量。
数量的话,我感觉200道是一个底线吧,到了300-400的话差不多面试就不虚了。然后是质量,这点主要是需要你对基础的算法和数据结构有很好的掌握,对不同类型的题目都有很好的总结。你也会有一些常见题目比如:dfs,bfs,binary search,two pointer等的解题模板。遇到新题目的时候,你可以根据这些去解。

对于一段时间没有刷题想找感觉的tips是可以先刷老题和刷easy题找找感觉。

然后关于刷题话很重要的一点是mock interview,你最好找一个和你一起找工作的partner,regular地进行mock interview,比如一周一次或者两周一次之类的。mock interview的好处是,你能发现自己临场的一些不足和一些刷题上面的盲点,和积累一些communication的经验,这将对未来的onsite起到重大的帮助。

专业知识的考核,我感觉准备起来主要是两点,一点是你需要系统的复习一下你上过的这个方向的课程内容,抓出主要的知识脉络;另外,就是找下面筋看看这个方向面试常考的问题,比如在考察Deep Learning的时候,面试官很喜欢问BP,gradient descent、LSTM、drop-out、batch normalization等,面object detection,需要知道RCNN,Fast RCNN,Faster RCNN,YOLO,SSD等。我的话,在CMU是上过相关的课,然后在准备的时候也在coursera上面刷了一些Andrew Ng老师的系列课程,他不愧是一个普及AI的教育家。如果,你没有上过相关的课,可以上coursera找找课,或者时间特别不够,那就只能看看面经了。

当面试官考察你简历上面项目的时候,就有很多可以讲的了:
他/她可以考察知识的深度,抓住你项目涉及的知识点,往深里面问这个知识的基本原理、假设、适用的范围等等;他/她可以考察知识的广度,就是你项目要解决的这个问题,常见的有哪些其他的方法,或者你可以想到哪些其他的方法,让你比较这些方法的异同、优劣等等。对此,我的对策是把项目上涉及的所有论文都好好看了一遍,整理了一遍,都是锦绣文章!!!特别是CV男神凯明的文章,简直美如画!!!
对项目的考察除了考察知识,还有会考察很重要的一点problem solving的能力:
面试官会问你在这个项目里面遇到了什么问题,你又是如何去解决的。如何你本身就好好的参与到这个项目里面,去当担,去解决,那在考察这个点的时候,你就不会虚。你能细致入微的讲出你是在什么情景遇到什么问题、你是如何分析这个问题找出原因、你找出原因到你如何思考解决方案以及你又是如何去实施你的解决方案,那你就可以很好的体现你的problem solving的能力。

我上面也提到面试官也会给一个他们公司场景的问题来考察你。这个和考察项目有一定的相似之处,会看看你problem solving的能力,但更看你临场应变以及和“同事”交流的能力。毕竟,考察项目是一个你已知的,临场给的问题可能是你未知的。

简历的准备

上面提到一个技术面试的考纲应该就是这个公司这个岗位的job description(JD),对简历来说也是。
你的简历和JD 越match越好!!!写简历和改简历都应该参考JD。

这里有几个原则:
顺序:就是越重要的projece或者experience月需要放在前面。然后skill list里面的language和技术栈也是,JD里面明确要求的,就放在前面。比如JD里面说,proficient in c++,那你本来language list是Java、Python、C++,就应该调成C++、Java、Python这个样子。
详略:越是重要的project或者experience,就要用多一些篇幅去介绍。要讲清楚自己用了什么技术栈,什么模型解决了什么样子的问题,得到了什么样子的结果(最好有一些数值指标)以及自己在这个项目里面起到了什么作用。如果不重要或者和JD不相关的项目,可以去掉或者很简略地去介绍,不要喧宾夺主。
还有,注意写明自己的毕业时间,这点会让招聘的人对你什么时候能入职心里会有个数。

简历的修改:
JD虽然是一方面,但是你也会有其他的途径。
其实,面试就是一个很直接的update简历的“tool”,在经历一些面试后,你就会知道对于这个方向,这些相关的公司更喜欢什么,你可以根据feedback去及时修改简历。
给你投的这个岗里面的engineer看看(一般最好找熟人),要一些feedback,他会和你说他们公司技术栈的倾向,比如你在简历里面提到自己用go写项目,但是他们公司不是很喜欢go,那你就可以去调整这个简历了。
(感觉在careerfair的时候,应该也可以和manager、engineer、HR他们聊,要一些feedback。)

一般你简历拒,那就是要改简历了。另外,改简历其实是永无止境的,你不要感觉自己这版简历就很好了,一定总是会有瑕疵的。就我个人而言,一共改了100多版简历吧。到后期,我准备了一个project set,把自己做过的project都放在这个文档里面,然后根据不同公司不同要求,去选或调整自己的project,在去生成一个specific的简历,这样子会省一些操作的时间。

关于简历的模板,我感觉九章算法的模板和Leap.ai的模板就挺好的,大家感兴趣可以去看看。

校招的一点建议

个人对校招的理解是,公司对target学校招人,然后他们希望在短时间内,在campus中找到符合他们expectation的在校学生
有些公司,对于new graduate,甚至只有校招的渠道
你在校招的expectation就是拿到你心意公司的面试,甚至直接on campus的面试
所以你需要尽可能多的,有效率的投简历,同时需要在你的同学当中脱颖而出

  • 校招前
    查公司的信息,你可以找几个同学组个队,一起share一个google doc查来校招公司的信息
    准备一下自我介绍可以和同学练一练,以期短时间把自己介绍给recruiter
    针对target公司,target岗位,要事先准备好简历,当天去打印简历的话,排队排死你
    我之前是会准备几套简历,web相关的简历,computer vision岗相关的简历,以期拿到更多面试
  • 当天
    早点去排队
    先排之后排队会巨长的大公司》心意的其他公司》不是很想去的其他公司
    像我找无人车的岗,我就可能大公司投一下google,剩下就是zoox、nuro、tusimple、cyngn、deepmap等等,
    然后再是其他的公司
    要下recruiter的联系方式(名片),以方便follow up,如果是中国人,直接要微信
    结束了还可以跟上去帮个忙聊一聊啥的,套套近乎
  • 如果拿到面试
    网上搜一搜面经和同学一起准备一下,behavior question短时间也可以适当准备一下,详细可以参考我下面的的section:
    HR面/behavior questions
  • 校招后
    因为,对于公司而言时间很短,他们不可能在这么短时间内面完所以的candidate,他们只可能会面完他们最感兴趣的人,
    所以你只要投了简历,就还有可能拿到面试,你上面的follow up就可能会起到作用,
    如果这个recruiter没有那么nice,你可以找校友,上linkedin里面找这个公司的人去follow up,问下进度

找内推前你需要做的事情

为了方便找内推的人,当然包括我,我特意在这里加了这个section,希望你在找内推前先:

  • 在target公司找到target岗位,找到job ID还有job的title
  • 根据这个具体的岗位的job description(JD)先自己改一遍自己的简历,突出JD里面需要的技术栈,详细可以参考我上面那个section: 简历的准备
  • 写一个第三人称自我介绍,大概讲一下自己的背景,内容就像电面的时候面试官问你让你简单自我介绍一下
  • 把job ID/job title, 简历,第三人称介绍发给你要内推的人

HR面/behavior questions

这里的话,有个建议就是,好好了解这家公司。
如果临近面试,你突然感觉不想刷题,也不想准备基础知识了,但是还想做点啥,那就了解这家公司吧,因为短期刷题不一定遇到原题,复习基础知识也不一定考到,但是短时间的话就可以好好了解这家公司,性价比反而是最高的。你要想啊,这是诚意的体现:如果你是HR或者面试官,面一个人,对自己的公司都不了解,你是不是感觉即使这个人很厉害,招进来,之后也可能留不住他/她。了解这家公司,本质上是去寻找对这家公司的认同,认同他们的商业模式,认同他们的文化等。
既然讲到了要了解这家公司,那我们从哪些渠道去了解呢?首先是官网,你好好看一看,可以看一看这家公司的slogan,面试的时候说出slogan也许会给面试官或者HR留下好印象,当然有朋友和我说,会有面试官问解释一下slogan的含义,这个可以注意一下;其次,是看看这家公司的新闻,google一下就行了,浏览一下也很快的。
总之,了解这家公司应该是准备behavior questions最重要的一点了。

time schedule

Time schedule 其实很重要,自己之前有一周面了11家公司,结果有两个特别想去的因为时间太紧了没有准备好(or状态不好)挂了,特别桑心 (~_~)。这里,自己把自己push太紧了。其实,很多人都会这么做,赶紧投,赶紧面。但是,既然你拿到一个面试了,就是一个好的机会,就要好好地去珍惜她/他。特别是,在校的学生,当你有courses(exams、homeworks),如何去协调这些和面试,就将会一个大问题。举一个我学妹小雷同志的栗子,她那一阵子找工作上面了有ebay onsite,亚马逊的VO,Bloomberg的offer DDL,课业上面,先是我们ECE学院的一门期中,之后还有一门重课parallel programming的due。然后我给了一点建议给她,讨论了一下。

过程是这样子的,先看课程相关的这两个的时间点,然后建议她给一下bloomberg HR推一下的DDL,最后推了两周。然后再在里面插空,插入ebay onsite时间和亚麻的VO,然后和这些之间间隔不要太近。最后的schedule是:

然后她最后就5杀(下面一个section会继续说哈)。

当然,既然提到time schedule,courses和找工作的balance也要提一下。courses主要是学东西,有些同学来到CMU就迷失在课程的海洋里面了。学东西自然重要,但是找不到工作不是都白搭吗,有的同学最后一个学期会选了很多重课(当然不排除大神),导致自己没有很多时间去投简历和准备面试。但其实,你只要上岸了,海阔天空了,什么诸子百家、四书五经,随便你学!!!!

communication

关于这点,我感觉你需要明白,你communication能力体现的是你未来如果成为彼此的同事时,你有没有更好的合作意识,以及能不能相处的舒服。我感觉如果你比较刺头,让面试官不舒服,同等条件下面试官应该更倾向于招那个让她/他感觉相处起来更舒服的那个人吧。

offer negotiation

提到offer negotiation就有意思了。下面还是以我学妹小雷同志为栗子,如何骑驴找马,从拿到校招bb offer最后到拿到fb offer的,最后疯狂compete的。她是先校招拿到bb的offer后,推迟ddl,然后后面,就是面ebay也好,亚麻也好,还有oracle也好就是和hr说自己有pending offer,然后她的case就process特别特别快,像滚雪球一样。然后,关于fb,其实她之前简历被拒了,但是我和她说改个邮箱换个名字再投,然后是找我房东fb大哥重新refer,refer的时候就业提到她有拿到好几个offer了。然后后面她去面,其实当天她面完和我说,面的不好,小姑娘还哭了。然而,之后还是拿到offer了,也许是前面的这么的pending offer起到了作用。总之,努力的人,是上天不会亏待的。一路能看到她为了fb付出了多少多少。

实习

H1B

心态

我感觉找工作的过程是对心智的一个磨炼。你会患得患失,你会想放弃,你会自己一个人自闭,你会想哭,你会开始抱怨生活,特别是我这样子的人,同学已经工作半年了,学弟学妹们都找到工作了,我才开始找工作,还要做research,一边申请博士。我就开始常常心情不好去投篮,我很喜欢球进的那个应声入网的声音,很清脆,会在操蛋的生活里面给我一点点安慰,还有自己在家里压抑的时候,就会来学校,学校空间大,师兄弟姐妹们都在这里,陪我说话吃饭,还有回家有室友会陪我说话吃饭,还有父母常常和我打电话。自己心里才能坚持下去。渐渐的,自己开始不去看得失了,只在意自己今天收获了什么,进步了什么,总之自己是一直在进步的。火候到了,时候自然会到。坚持下去不是很有趣的一件事情吗。