心得:New Grad高效刷题找工作全攻略

Master在美国找工作实在是太不容易了。

相对于本科生和博士生,Master的上学时间只有一年半到两年。这意味着最多只有一次实习机会,有一些春季入学的同学甚至实习机会都没有。要想把握这次实习机会,意味着一入学就要开始找工作,完全没有缓冲的时间。对于大部分本科毕业、没有工作经验就直接出国的同学而言,生活上、学习上、就业上的压力一起袭来,滋味真是妙不可言。

更重要的是,找工作是一个高消耗的过程,对于时间、精力的要求都很高。如果没能把握节奏,让自己处在一年到头都在刷题、找工作的状态,压力太大,就容易出现一鼓作气,再而衰,三而竭的情况。写这个帖子,是希望以我个人微薄的思考和经验,启发更多的人规划好timeline,以最高的效率拿到心仪的Offer。

本帖子与Cracking the Coding Interview, Leetcode Discussion和地里的其他大佬讨论结合效果更佳。当然,一家之言并不能当作万能宝典,欢迎各位坛友看了之后提出建议。


我把新人找工作分为三个准备部分:

  • 简历(behavior question)
  • 刷题(technique question)
  • Networking(内推及信息收集)

接下来就按照这三个部分进行阐述。重点还是放在刷题这个部分,毕竟这是最多人头疼的,其他两个部分就讲讲自己的体会了。


一、简历
简历已经是一个宏观概念了,包括你的Resume、linkedin、Handshake、Piazza Career等等。这些东西都要记得保持同一版本、同步更新。

我们可以拿起自己的简历检查一下,有没有满足下面两点

  1. 格式清晰,重点突出
    我自己是习惯用Latex写简历的,至少永远不用操心对齐了没有、间距一致不一致这种问题。就这两点已经甩了word几条街了。即使没用过Latex,学习一下也很快。
    网上有很多Latex简历模板了,有兴趣可以挑一挑: http://www.LaTeXTemplates.com
  2. 内容精炼有重点,不浪费一个字
    首先,不能有错别字和语法错误,这是最基本的。每一次更新完内容,都要检查一遍。我曾经有一个时间写错了,投了好多家公司才发现,悲伤。
    其次当然就是内容。要想有好的内容,最简单的就是不断找人修改简历。Career center的老师,已经工作的前辈,同龄人,外行人,每一种都要找人帮忙看看。
    但是每一个人的角度和见解都是不同的,尤其是Career Center的老师。同一份简历,这个说关键字要加粗,那个说加粗不好看,反反复复改来改去,很烦人。 我找了十几个人看简历之后,觉得如下的方式是最高效的
  • 找一个/一群正在找工作的小伙伴,互改简历。方法是你把自己的project用最详细的方式叙述一遍,让小伙伴提建议怎么写、哪几点最值得写。最理想的简历,要包含技术关键词,并且每一个bullet point都是“我做了什么+一个量化的结果”,比如:我写了个网页+访问量达到1000/天
  • 找一到两个前辈,最好已经有审简历经验的,检查你的内容重点够不够吸引人、能不能写得更吸引人。
  • 重复前两点,直到前辈们看过都说好。
  • 找一到两个Career Fair老师改简历,主要改的是格式、语法和用词。

每次有了大的成就(上完一学期课、实习完、研究阶段性结束),都应该第一时间重复以上步骤,更新好自己的简历,这样可以有效避免因为简历没写好而带来的拖延症。

然而,还有很多人烦恼的原因是自己的简历上没有啥东西可以写 。这种情况,可以按以下几个步骤处理:

  1. 不管怎样,先凑出一页简历
    秘诀包括:加大页边距,加大字体,能写成两行的不写一行,写各种奖学金,把所有有关课程的全名都完整写上去,把所有课程project甚至作业都完整写上去(还可以加上全班100个人我第6这样看起来很威风的话……)
    凑的时候坚持两个原则:
  • 要写相关的经验。不相关的经验哪怕含金量再高,也只会让HR觉得“你不该来这个岗位”。
  • 不要简历造假!不要简历造假!不要简历造假 !每一个瞎拼凑甚至抄袭来的经历都是在给自己埋雷!有些事儿不上称没有四两重,上称了千斤也压不下来。
  1. 疯狂积累相关经验
  • 学校相关课程是效率最高的途径 。选择几门有课程project或者作业设计得好的课,一学期下来就能积累3~4个不错的project。千万不要小瞧学校的project,也不要觉得大家都做过的作业就不能脱颖而出——很多HR也不懂这些。我一个很好的朋友,是那一届的面试王,拿到了Apple, LinkedIn,Pure Storage的Offer,而她的简历上有三个Project都是学校的课程Project。
  • 积极当TA。没有相关的工作经验或实习经验,就当TA或者RA。未必要学习成绩很好才能当TA,主动联系教授表达自己想当TA的热情,多talk几次,成功率很高(很多教授也缺TA)。如果能当上经典课程的TA,HR青睐的几率大大提高,Career Fair遇到校友也会对你另眼相待。
  • 学习网上的相关课程。不过这是我觉得效率最低的途径。一来这会占用你本身学业的时间,二来网上课程质量良莠不齐,缺乏自制力的人也只是交钱买安心罢了。

简历写好之后,更关键的问题就出现了——Career Fair talk和Behavior Question
强烈建议大家左手拿起自己的简历,右手拿起Cracking the Coding Interview或者学校Career Center列的经典BQ问题清单, 一条一条写答案 。每一篇答案就是一篇小作文,围绕:

  • 我的看法(总)-> 我的简历中的某一项project相关的经历,以及我的处理方法(分)-> 再一次强调我从该问题中得到的启发(总)

最好所有简历上出现的经历都准备几个小故事,避免面试官有“你怎么说来说去都是这一段经历的故事”这种想法。

这才是效率性价比最高的部分。 天底下的公司BQ都是一样的,一份答案可以用一整个求职季,一份准备好的自我介绍可以用一整个career fair,这是送分题啊同学们!(敲黑板)
对于重要的面试,要花心思量身定制一份答案,能留下最高的印象。比如同一个问题“你的偶像是谁”,面Facebook你就要说扎克伯格,面Amazon你就要说Jeff Bezos,面微软你就要说Bill Gates。而且要有理有据有例子,让面试官觉得你真心就是这么想的,这就是你的dream company

二、刷题
刷题是大部分基础不好的同学最头疼的部分,也是最容易出现误区的部分。 我总结了三大影响刷题效率的误区

  • 不管三七二十一,撸起袖子就刷题。只要我有决心,一定可以铁杵磨成针!
  • 刷题就是要看量大,只要刷满300题,Offer随我挑!
  • 刷题就是啃硬骨头,不会的题想一天也要想出来! vs 刷题就是背题,把题目背下来有一天自然会懂!

针对这三大误区,我有如下心得:

1. 刷题是以“数据结构和算法”相关知识为基础的
我看过很多地里的“刷题心得”,鼓吹勤奋至上论,号召一切找工作的人每天刷三题,坚持下去就有offer。我相信过,但实践效果很差。仔细思考之后,我认为是一种典型的不科学学习法。
我们学了这么多年习,都是先讲课再写作业。写作业从来都只是课堂知识的巩固。课堂知识是系统的,有层次递进的,相当于给房子打好地基和框架结构,而写作业是添砖加瓦。刷题就是写作业,对基本的数据结构和算法理解不深,只是知道个大概就刷题,实在是效率低。
我们可以先做一个大致的评估:请人在Leetcode所有分类tag里都随机抽取三道easy题(你并不知道题目类型),尝试一下:

  • 题目都能做出来么?
  • 如果做不出来,能看出来该用什么数据结构和算法么?
  • 如果看不出来,到discussion看一遍高票回答,能看懂么?看懂了能独立再写一遍么?

如果做到了第一层,可以直接刷题,在刷题中学习;做到了第二、三层,还应该再复习一遍Cracking the Coding Interview或者相关资料,再动手刷题;第三层也做不到,应该在学校里面选一门经典入门的数据结构与算法相关课程,认认真真上一遍,再来刷题。

事实上,我认为第二层及以下,都可以考虑再上一遍数据结构与算法相关课程,有一个坚实的基础。没有拿到A,都不能算是学通了这门课。
2. 刷题和量没有任何必然关系
我直到找到正职,一共只刷了162道题,其中Easy 64,Medium 83,Hard 15。这当然是有运气成分在里面的,但也侧面说明数目不应该被拿来衡量刷题的掌握程度。 我个人认为按照这样的原则刷题是效率最高的:

  • 刷一道题,会一道题。会一道题,是指这道题再出现在你面前千万次,你都能顺利的写出来,并且能够 准确的分析时间复杂度和空间复杂度
  • 刷一道题,掌握一道题。掌握,不仅是能AC,而是要掌握 最优解和经典解。 比如一道题DP是最优解,你还应该用DFS写一遍,因为这也属于经典解。我身边有不止一个人面试的时候想写DP,被面试官要求用DFS,或者想用DFS,被面试官要求写DP。如果做题的时候没有融会贯通,这个时候就容易卡壳,追悔莫及。
  • 针对薄弱类别集训。我刚开始刷题的时候,就是打开Facebook tag,按频率题。刷了一定量之后,发现自己的Tree和DP特别垃圾,又将这两个tag下的题集训了一波,每一题都想:这个Tree题跟上一个Tree题都什么不同?为什么不能用相同的方法?坑都在哪里?之后遇到这两个类型,解题率就高了很多。

如果按照以上原则,每天啥也不干就刷题,也不可能刷很多道。我状态不好的时候一天只能刷三道题,状态好的时候也就能刷七、八道。虽然刷题量很可怜,但我能感觉到我的AC率在以很快的速度上升。

3. 刷题不能死磕,也不能硬背
对不起说了一句废话……这其实因人而异啦,我觉得 最适合我的高效刷题流程是这样的

  • 看题后思考5~10分钟:用什么数据结构?用什么算法?空间和时间复杂度是多少?是不是最优解?
  • 如果有信心能写出最优解,或者觉得自己的解法值得一试:写题10分钟,debug最多5分钟
  • 如果写不出来或感觉没想清楚:立刻看Discussion里面的最优解和经典解:分析空间时间复杂度,为什么是最优解,为什么能想到用这样的数据结构和算法
  • 看完解答之后独立写一遍,不设时间,写到AC为止。期间如果想不清楚了,再重复上一步骤。
  • 写完还是觉得懵懵懂懂,加入一个list,准备二刷

另外,背题也是可以有很大作用的,但硬背的效率就太低了, 我的背题方法如下

  • 实在连解答也看不太懂,就照着最优解敲一遍,或者一步一步的过一遍代码
  • 在重要面试的前一天/几天疯狂背做过的tag题:不是背答案,是把每一题的思路和坑都过一遍,相当于在脑子里重新做一遍。这个方法对我来说相当管用。有些做过的题乍一看又不会了,但只要提醒一小点我就能想起来,那这“一小点”就是这题的关键,一定要记住。我面Facebook前一天背了一百五十多道做过的题,背到凌晨两点半,感觉比我刷半个月的题学得还多……毕竟温故知新嘛。

4.讲题比刷题更重要

光会做题不会讲,面试就容易出现“我的题目都做完了,也没有bug,但是没拿到offer”这样闻者伤心听者流泪的悲伤故事。讲题是有套路的, 坚持以下这个流程

  • 拿到题,先问问题。没有问题也要憋出问题,比如数据类型,要不要考虑corner case,数据量多大,有没有时间要求blablabla
  • 分析题:一般是暴力解 + 最优解的分析顺序。先说你拿到这道题之后的直觉解法,说完之后再“灵光一现”,说出最佳解法。如果你不确定这题怎么做,这个过程就更加宝贵,你要充分和面试官讨论这道题,征求他的意见和建议,直到讨论出一个双方都满意的解法。
  • 写题:千万不要埋头苦写,每写完一个子模块都要跟面试官说一遍写了啥,为什么这么写。我曾经还用过一个小trick:有一道原题,之前刷题的时候有一个很细节的bug,我思考了很久才想清楚为什么要这样处理。写题的时候,我想像面试官展示这个细节的精妙之处,就故意写了bug,写完这个小模块之后假装沉思一下,再一副恍然大悟的样子跟面试官说“我突然发现这样处理虽然看起来是对的,但其实有个corner case……”。面试官其实根本就没注意到这有个bug,我解释了一会儿,还举了例子,他才发现这个处理的有趣之处。我相信这样他对我的印象更深刻了。
  • 主动跑test case:写完之后,不要让面试官开口,而是主动说“那么现在我写完了,让我们来跑几个test cases,看看这个算法对不对”,面试官好感度立刻增加。

三、Networking
这其实是很多人都忽略、但非常非常重要的部分。没有绝对的实力优势时,做好这一点是与他人拉开距离、高效率找工作的关键。
1. 列出target公司,找到refer
一般来说,target公司要列30~50家,需要掌握的信息包括公司地理位置、职位名称、投简历链接、面试进程、refer人联系方式等等。在美国的职场环境里,refer是非常非常重要的。如果有亲近的朋友或认识的学长学姐可以refer,务必量身定做一封refer信。如果没有,在地里和LinkedIn上厚着脸皮也要求到refer,大部分公司,无论大小,refer大概率可以帮你度过简历关,甚至免去OA
2. 关注公司Headcount,不到高峰期不轻易投简历
很多时候,阻止你进入一家公司的不是简历和实力,而是head count。一家只打算招1个人的公司,你简历再强面得再好也未必能进去。一家打算招2000人的公司,你就做了两轮OA也能进去。大部分公司都有半年到一年的冷冻期,如果因为headcount被拒了,就浪费了大好的机会。
可是,headcount这种信息作为一种“潜规则”,是不会被摆到明面上的。如何高效掌握这一动向呢?

  • 与一起找工作的小伙伴密切的联系。可以建立大群,在群里共享各种信息。
  • 看一亩三分地的面试板块,如果有一家公司频繁有人报OA和Offer,就赶紧投投投
  • 通过学长学姐或career fair等各种渠道掌握各大公司负责本校的HR是谁,然后LinkedIn和邮箱都毛遂自荐,争取有headcount的时候他能想到找你

我深深的记得,去年秋招能过Facebook简历关的都是学霸级的人物,能拿到简历的更是凤毛麟角。然而今年春季,HR都会主动在LinkedIn上reach out了,内推的通过率几乎是100%。

我更深深的记得,去年因为Amazon不开headcount,无数师兄师姐叫苦连天,深陷找工作泥潭。然而今年春招亚麻爸爸似乎是想要把两年份的都招回来,身边两轮OA+一轮VO顺利上岸的不计其数。
所以说, 一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的进程。我忍不住念起了两句诗……
3. 关注LinkedIn上的工作更新
如果能做到一发布工作职位就投简历,拿到面试的几率会大很多。我身边有学长学姐通过坚持在LinkedIn上第一时间投递相关职位拿到了Google和Airbnb的Offer。

举个小例子来说明Networking可能带来的影响。去年的秋招,LinkedIn采用的是大量发return offer的方式招new grad,正常的申请链接根本就不开放。九月中旬的一天,晚上九点钟,我找同学请教作业,对方回答“等等,我投完LinkedIn回复你”,我一问她才知道,她在校车上听到在LinkedIn实习的同学打听到New Grad申请链接开了,投完立刻发OA。我正在犹豫要不要等两天面经再投,另一个消息很灵通的同学跟我说“赶紧投,说不定过几天就关了”。于是我赶紧去找内推,很快找到了愿意帮忙的师兄,师兄说“我吃个晚饭就推你”。正在等师兄吃晚饭的时候,拿了LinkedIn return offer的同学又跟我说“别等内推赶紧投,名额可能很快就满了。”于是我就咬咬牙,立刻海投简历并且做OA。等我凌晨一点做完OA的时候,链接就已经关了。
第二天去看这个申请的数据图,一共开放了四个小时链接,收的简历有一半来自匹兹堡,另一半来自湾区,估计都是大家口耳相传的。虽然我OA就没过,但是有同学就通过这次海投拿到了Offer。


其他事项

  • 凡事预则立,一定要好好利用大段假期(入学前、寒暑假)准备好材料和刷题。如果你能在入学前就认认真真刷了一百题,有什么面试难得住你呢?
  • 控制好面试时间,尽量在相近时间段(比如两周内)大量投简历,然后把面试时间集中安排在两周内,这样大概率结果也会在两周内先后出。这样做一方面是方便自己空出时间,这两个月全心全意找工作,另一方面拿到Offer之后也可以compete,有效避免撕Offer、签完之后觉得工资低等无奈情况的出现。将求职期控制在三个月内,才能真正做到一鼓作气,效率最高。
  • 即使你做了所有能做的,Offer还是迟迟不来,此刻的你跟刚开始找工作的你也不可同日而语了。有没有Offer只是一瞬间的事,厚积而薄发,要相信自己一定行!

真心祝福大家都能收到心仪的Offer!

PS 写的时间太长,估计有错别字,请大家谅解。欢迎各位大佬的建议,精华建议我会补充在下面。

补充内容 (2019-6-19 21:18):
除非有特别熟悉的语言,不然强烈建议刷题用python,写题简短,白板编程流畅。
另外,我是不是应该循照惯例求加大米哈哈哈
谢谢你们看完!

补充内容 (2019-6-20 04:18):
刷题另一高效刷法:与进度和目标类似的小伙伴一起刷题,经常讨论。尤其如果有大佬愿意跟你讲题,一道题就可能受益匪浅。我很幸运,身边的朋友水平都比我高:joy:没想清楚的题跟他们讨论,不仅使人豁然开朗,甚至能达到领会一整个类型的题的效果!

5 Likes

谢谢楼主分享,受益很多!!!

真的非常感谢作者的分享,刚开始找工作,地里也看了一圈,这一篇攻略是最有帮助最详细的,如果能认识作者就好了 :smirk: