康奈尔CS求职经验
-
Part.1 康奈尔就读体验
Hello大家好,首先自我介绍一下,我是YZ学长,本科是伊利诺伊香槟,读的也是计算机,毕业之后去了旧金山湾区的一个中厂做了两年的软件工程师,然后又去了康奈尔大学读了一年的CS Meng。目前就职于谷歌,工作重心偏向data infra。考虑大家可能会对康奈尔大学有兴趣,所以我先和大家简单聊一下我的就读体验。
关于选课
首先在选课方面,我的最直观的感受就是康奈尔的课程数量不多,至少相比于我之前读的UIUC来说会少一些,但是它的课程的比较专精,每一系列的课程会比较深入一点,尤其是在计算理论、形式化验证、计算机语言设计等方面,这些课的教授往往都是这些领域的大牛。
我在康奈尔的就读期间,选了4~5门的形式化验证和符号计算相关的计算机和数学课程,这些课程很好地满足了我对于这个方向的好奇心。
项目长度
康奈尔CS有两个track,一个是 CS Meng,还有一个是CS MS,大部分情况下录取CS的都是Meng,每年只有极少数的同学会录取MS。一方面原因是MS录取难度会比较高一点,它会需要你有一些研究经历,读MS的同学一般都会想走PhD的track,因此大部分想找工作的同学可能会直接选择Meng,因为它不需要完成论文。
Cs Meng的项目长度是9个月,这对于想要快速毕业的同学来说是很大的优势,9个月时间就可以攻下来1个master学位,这极大地节省了你的时间和金钱成本。
生活成本
康奈尔有两个校区,一个是纽约校区,另一个就是它的主校区伊萨卡,伊萨卡可以理解成是一个山区里面的村子,它的生活费在一般的村里面算是较贵的,村里面的住房是一室一厅一卫配置的公寓,每个月价格在1400~2400美元之间,停车费水电费另算,但如果你能够接受合租的话,可以把房租成本控制在800刀左右。每个月的生活开销根据大家的生活情况会有所不同,每个月大约是在1500美元到4000美元之间。
最后在交通方面,伊萨卡离雪城大概有45分钟车程,离纽约有4个小时车程,因此你想去附近城市转一转的话,它的交通成本还是比较高的。Part.2 面试经验
接下来我分享一下的关于软件工程师面试的经验。我去年找了大约40家公司的内推,大约20家公司直接默拒或简历拒了,剩下的公司里3家公司面试挂了,最后有16家公司进入了最终轮,包括谷歌、微软、苹果、Meta等大厂(其实大部分最终轮在接了一些offer之后就被我推了),最后再通过compete offer来谈薪酬,那时候我手里大约有5个offer,其中Meta和tiktok的offer起了较大的compete作用。
上面这张图是软件工程师的基本面试流程,大概有两种类型。
大厂标准流程
第一种是FAANG(Facebook、Apple、Amazon、Netflix、Google)等大厂的标准面试流程。
第一步一般来说你会把你的简历找员工内推,或是你直接上公司网站海投。
第二步简历会被HR审阅,你可能会收到一份OA(online assessment)链接,它是一个你点进去可以做题的网站,在限定时间完成题目,会根据你的表现来决定是否进入下一轮。
第三步会给你一个1~2轮的电话面试,HR会找你约一个电话时间。虽说是电话沟通,但他会问你一些算法问题,你得把电脑带着,在他提供的网站上给他实时解释并写算法。
如果一切顺利的话,就会进入第四部on site的阶段,之前新冠的还比较流行的时候视频面试会比较多,随着疫情的消退,大部分公司已经恢复真人on site,他会邀请你去公司总部,进行一轮时间长达4~8小时的面试,通过的话就会进入到下一阶段:Team Match,你可能会挑选一些心仪的小组,然后如果说这个组也对你也感兴趣的话,你们就match上了。然后顺利的话你就可以拿到offer,这就是一般性的大厂的流程。
小厂标准流程
还有一些小厂,比如一些创业公司或者一些规模较小的公司,它还没形成一套标准流程,可能会在前三轮的时候直接给你发一个coding assessment,它内容就是让你去完成一个小产品或小项目,然后根据你的代码的能力来评估是不是可以进入下一轮,
小厂和大厂的标准流程还是有不太一样的点,它在team match阶段可能直接对接公司职位比较高的,比方说CTO,且小公司会更喜欢考你一些语言上的东西,比如c++的一些技巧,还有一些计算机概念。Part.3 面试准备
CS就业越来越卷的大背景下,我们在面试前需要着重准备的以下几点:一是简历,然后是电话面试的算法算法题以及现场面试里的系统设计,接下来我会就这几点逐一分享我的一些心得。
简历准备首先是简历准备,简历是公司决定是否愿意投入资源进行面试的一个关键材料,我认为简历最重要的一点是匹配性,不管是之前的实习或工作经历还是做的研究项目,你提炼出来的亮点都得和你投递的工作岗位相匹配。
举个例子,比方说你想面微软的windows系统工程师就,你最好把你的操作系统相关经验放在简历最醒目的位置,如果你想面的是移动端的岗位,就最好把自己关于APP的开发经验放在最醒目的位置。
还有一点是包含关键词,这个和匹配性其实有点类似,很多时候公司会用一些软件来筛选候选人简历,所以这时候你的简历里面最好包含公司的JD,即工作描述里的一些关键词,这样才能保证你的简历不会在第一轮还没被人看到的时候就被算法给筛掉。
第二步简历会被HR审阅,你可能会收到一份OA(online assessment)链接,它是一个你点进去可以做题的网站,在限定时间完成题目,会根据你的表现来决定是否进入下一轮。
算法面试接下来是我想说的是算法面试,如果HR或是一些组里的工程师对你的简历感兴趣之后,他们就会跟你沟通进行算法面试。我准备算法面试的时间其实并不长,因为我在读康奈尔的第一学期时还在兼职做之前公司的项目,所以说我真正开始刷题是是从第一学期结束之后的寒假开始的。目前LeetCode是最主流的算法练习网站,现在他已经有2700多道题,题量绝对充足。
我自己大概集中精力刷了两个月,总共刷了大约500题,很多人包括我自己都会觉得刷题很难,归根结底还是因为算法的技巧比较繁杂,一个初学者会经常看到从没见过的技巧,同时因为这些例子上的题目太多,所以没有办法把那些技巧总结起来。
我想说在一个理想的面试状态下,面试官向你提出算法题后,你的脑海中就应该能够浮现出很多算法技巧,我可以举个例子,比方说在LeetCode里最常见的一类题就是数组题,当我比方说我们说到力扣里面的数组题的时候,你的脑海中能浮现出哪些算法技巧?我觉得至少应该想到以下几种,比方说二分查找,快慢指针、左右指针、滑窗、滑动窗口,前缀和数组插翻数组,这些技巧就好比是工具库里的工具,当你能遇到一道算法题时就能迅速识别它的特征,找到对应的算法技巧。
系统设计接下来是系统设计,这是非常考验一个工程师基本素质基本能力的环节,它经常会出现在我们之前说的 on site,即现场面试环节,他会给你一块可以在上面画图的白板,然后边画图边说明你对系统的理解情况,一般来说系统面试会持续大概一小时左右。
面试官会给你一开始会给你提出一个非常比较宽泛的要求,比方说他会问你怎么设计一个推特,前5~10分钟你会跟面试官进行一个交流,把问题给阐释清楚。比方说他让你你设计一个类似于推特的服务或系统,你得先跟他确认用户数量,用户数据,用户画像等等,总之前5~10分钟你需要理清系统设计的一些基本需求。
接下来你可以按照你的工程经验和你对计算机系统的理解,尝试着去解决这个问题,在解决这个问题的时候,你会设计很多子系统,而这个时候面试官就会根据他自己的工作经验向你刨根问底其中的某一个子系统的细节。如果此时你能应对自如,答出他想要的回答,并展现出你对系统的深度理解,那么你的面试可以说是十拿九稳了。
我觉得系统设计的准备,可以分成两部分,一部分就是平时的基本功,这里我比较推荐《Design Data Intensive Application》(简称DDIA)这本书,这是一本非常经典的好书,它写于20年前,但放在今天依旧毫不过时。我还推荐一些YouTube,上手面试最快的方式就是看别人怎么面试,比如博主X code,我当时就看了他挺多系统面试的视频。
Team Match到了Team Match的阶段也就意味着你进入了一个和你将来的工作组互相选择的状态。如果说你想要在组里工作得开心的话,你可能就得认真考虑一下组里的工作内容是不是你感兴趣的。
其次组里的work balance也很重要,尤其是work life balance,不管你是一个比较卷的工程师,还是一个比较佛系的工程师,工作和生活平衡对你都很重要。原因是对于一个比较卷的工程师,它可以帮助你脱颖而出,获得领导的赏识;而对于一个比较佛系的工程师来说,你就可以更好的享受生活。另外就我个人观察而言,组里的diversity比较好的话,一般来说工作氛围都会比较好。Part.4 CS未来就业前景
最后我想聊一下CS未来的就业前景。正如大家可能所担心,有些人认为现在是行业寒冬,因为在2023年初的时候,谷歌、微软等各大厂都有大规模裁员。这确实是不争的事实,而且很多厂已经在上半年冻结了head count。
不过据我观察,目前整个招聘流程正在慢慢复苏,两周之前谷歌又开始重新招实习生,然后据我所知,Meta也开始已经开始招聘少量工程师,所以说行业寒冬的问题现在正在慢慢缓解。
我们现在正处于一个AI爆发期,各种AI正在不断生成人类可以消费的内容,我觉得这将会是未来的数年里的一个主题,令人兴奋的点是各个大厂都在探索把AI大型模型打包成云服务,这也意味着在这个趋势下会惠及越来越多的中小厂,这也意味着各互联网公司会愿意去招聘更多人,去把这些AI模型转化成实际可用的产品。在这种情况下,我个人对于未来行业的就业招聘扩张还是比较乐观的,感觉未来还是有很多工作可以做。