2019美国CS求职经验分享(Part 1)

15718
24
自我介绍
本人本科毕业于清华大学计算机系,研究生毕业于CMU硅谷校区软件工程专业,2019年暑假在谷歌实习,2020年2月入职苹果公司。2019年秋招拿到的offer有Apple,Google(return),Bloomberg,图森,C3.ai,Datavisor。

自从去年年底上岸以后就一直想写一篇在美国找工作的经验分享,无奈懒怠未曾动笔。2月初仓皇回到美国,在入职前居家隔离时期反而多了些闲暇时间,便成了此文,也算是对自己漫长求职季的一个回顾总结。若是能对学弟学妹有任何参考借鉴作用,也便十分荣幸了。

与找实习有关的内容在之前所写instant.1point3acres.cn里面已经总结过,有兴趣的朋友可以点击查看,本篇就主要集中在美国全职程序员的求职总结。我个人认为找工作主要可以分为以下几个阶段:

准备 -> 投简历 -> 面试 -> Offer谈判

由于涉及到的内容较多,便分拆成几篇文章来写,Part 1主要来讲准备工作和投简历的部分。

Step 1: 准备
这里的准备指的是在投简历之前所做的所有和找工作有关的内容,大致包括课程学习,项目实战,算法与数据结构练习(刷题),写简历,实习等。

课程学习与项目实战
对于CS科班的同学来说,本科学习的内容其实已经足够应对找工作的需要,大部分面试的内容都集中在算法与数据结构的部分,也有部分公司在面试的时候会考察操作系统、计算机网络、系统设计等方面。但对于New Grad来说这几方面的考察会比较基础,只需简单准备即可。对于转专业的同学来说,比较重要的课程也是上述的几门。

在学校的另一个很重要的方面就是积累项目经验。以我自己为例,在Master的前两个学期的6门课中,几乎每一门课都有对应的项目。在找全职工作的简历里面,我一共写了五段经历,其中有两个就是研究生阶段的课程项目。我建议大家至少完整参与过一个全栈的项目,包括前端和后端的开发。在CMU SE-SV项目的必修课Foundations of Software Engineering(FSE)里面,配套的就是这样一个全栈的在线即时通讯平台的项目。一般学校的软件工程课程的项目就可以满足要求。在CMU另一个找工作神课是Cloud Computing(CC),整个学期有10个个人项目和一个大项目,非常适合缺乏项目经历的同学。关于以上两门课的介绍可以参考我之前所写instant.1point3acres.cn

还有一个可能会比较困扰人的问题是花在课程和找工作上面的时间分配问题。以秋季学期入学,3学期或者4学期毕业的项目为例,第一年的秋季学期重点任务是找第二年暑假的实习,第二年的秋季学期重点任务是找全职工作,所以这两个学期建议少选或不选任务量非常大的课程,而春季学期没有很大的找工作压力,就比较适合夯实基础和积累项目经验。

算法与数据结构练习(刷题)
刷题被大家广泛认为是找工作最重要的准备,毫无悬念是正确的。我自己是在大四下学期开始在Leetcode上面做题,当时是保持每天做1道题,把前100题做完了一遍。我的建议是对于数据结构和算法不是很熟悉或者基础稍弱的同学,可以先完整地学习一遍,配套进行刷题。这里推荐一个我觉得蛮好的在线课程,是慕课网上Bobo老师的coding.imooc.com。这门课基本涵盖了面试当中涉及到的各种常见数据结构与算法问题,难度也比较适中,每一节课都会布置几道leetcode上面的题目作为练习。我自己是从研究生第一个学期开始断断续续跟着学,在春季学期才全部学完。

关于如何刷题,我有以下几点建议:
  1. 质量比数量更重要。我最后在Leetcode上面一共做了200多道题,其中Medium难度的居多。
  2. 前两百题是出现频率比较高的题目,建议优先选做。
  3. 对于二叉树、递归、动态规划、优先队列与堆这些专题可以选择集中做,即每一个专题做10道以上,熟悉基本的套路和方法。
  4. 在面试前一两周可以多做一些要面试的公司的高频题目,尤其是偏小一些的公司,题库不大可以全部刷完。
  5. 每周的weekly contest是一个比较好的锻炼机会,一个半小时做4道题。虽然我自己只参加过一次,但建议大家有空可以多多参加。
  6. 对于hard的题目不会做是很正常的,在自己想了1个小时以上还是不会的时候可以看答案然后尽量在理解的基础上自己再做一次。
  7. 做过的题目忘记是一件很正常的事情,所以对于高频题目,可以时常做做练手,比如Leetcode 200 Number of Islands及其变种,二叉树的遍历,拓扑排序等等。
  8. 对于一道题目如果有多种最优解,建议掌握至少两种解法。
  9. 和别人讨论,给别人讲题或者Mock interview都是比较好的练习手段。


我自己是用Java来刷题,我所有的题目解答和部分题目的记录总结都放在了我的github.com上面,可以做个参考。还有两个比较好的资源推荐是Leetcode Meet Me(有iOS App和cnblogs.com),上面有大部分题目的讲解。对于比较难的题目,可以搜索花花酱的视频讲解来学习。

写简历
我们在申请学校的时候都有过一份英文简历,求职的简历其实大同小异,一个比较明显的区别是在于在求职简历中可以把自己的技能(包括编程语言、平台、软件和工具等)列在比较明显的位置上,这样方便HR与职位介绍上面需要的技能做匹配。

简历的主体部分是过往的经历,这就要和之前所说的课程项目实战联系在一起,过往实习经历、科研经历也都可以写。写完之后的修改也比较重要,因为简历是在不断修改,不断变化的。可以找同学或者已经工作的学长学姐,或者学校的就业指导老师,也有一些平台提供简历提升服务,比如vmock.com。我个人这些途径都尝试过,也可以学习简历写得比较好的同学的。

另外有一个可能容易被忽视的点就是简历的外观,即格式、排版、专业术语的大小写等,这些是体现我们专业性的一个细节,也是HR或者面试官愿意阅读我们简历的一个前提。

实习
秋季入学且项目时长为一年半以上的同学,大部分会考虑在第二年的暑假在美国的科技公司进行暑期实习。暑期实习一个非常直接的优势就是干得还不错的话可以拿到return offer,这样春招心态会好很多。基本上除了Google的转正需要面试,其他公司都是直接根据实习表现决定是否发return offer。春季学期入学且三学期毕业的同学只能回国实习,可以选择国内的美国公司分部如谷歌、微软、苹果等。

简历里有美国实习经历的话,会大大提升全职通过简历筛选的可能,所以建议可以在美国实习的同学都不要错过。

总结
《论语》有言“工欲善其事,必先利其器”,可见准备工作是非常重要的。但有一点要注意的是不是说所有准备都完成得特别满意了才能开始下一步,即投简历。因为没有人能够说自己准备得完美了,大多数拿到Offer的同学也不是说所有遇到的算法题都能够做得很好。我个人认为面试本身也是为未来做的一种准备,所以准备工作尽早开始,也会贯穿整个找工季。

Step 2: 投简历
这里的投简历不只是只去公司官网找到招聘链接海投,而是包括各种可能的投递简历途径,以下一一列举:

内推
内推就是找公司内部员工进行推荐。内推的话一般有两种,一是找自己的学长学姐,无论是之前就认识还是在LinkedIn上现加的,一般客气一点对方还是愿意帮忙的。二是在一亩三分地或者其他论坛找内推帖,绝大多数还是比较靠谱的,但是也有部分因为发的人太多就石沉大海了。

在内推的时候经常需要我们提供一段第三人称的自我介绍,大约100-150字就好。我自己的第三人称介绍突出了一些个人优势,比如学校、专业、实习经历、感兴趣的方向、熟悉的编程语言等。如果和内推人在专业上有交集的话,也可以在这里介绍,比如一起做项目等。也有人建议在这里写一些简历里没有提到的内容,仅供参考。

需要注意的是内推人往往是抱着帮忙的心态的,因为真的通过他的内推去到公司的人还是少之又少,所以我们在发邮件或者发消息的时候还是抱着一个感恩的心态比较好。如果较长时间没有回复可以再提醒一下但不要觉得帮忙是对方的本分。

内推的公司也有例外,比如微软的内推有的时候比直接投还处理得慢,所以对于微软来说建议直接网申或者Career Fair投递。另外如果和内推人比较熟的话,假使直接被简历拒了也可以找他帮忙询问一下原因看看能不能捞回来。

Career Fair
这个就是基本上学校都会有的招聘会,CMU来说每年在本校有大规模的招聘会,大中小公司都会来,也有部分会现场面试。SV校区也有小型招聘会,但只有一晚上且公司只有一二十家。如果有朋友在其他学校也可以考虑去蹭别的学校的招聘会。据说苹果比较喜欢从校园招聘会上发面试。
本帖隐藏内容需要登录后才能查看。
那我们下次再会啦。
  • 272
24条回复