北美2020届应届生software developer上岸经验

b
boter
楼主 (未名空间)

毕业七个月后终于上岸了,楼主很幸运的第一个live interview就接到了一个应该算是中厂的offer,想跟大家分享一下我的心路历程以及我是怎么准备面试的。希望对各位
还在找或者准备找工作/实习的朋友有帮助!

背景介绍—————————

加拿大某草原省大学2020届CS本科毕业。投的简历一般都是software developer/
engineer, Front-End Developer 这类。毕业之前有一份四个月的web developer的实
习经验加三到四份志愿的经验。

心态篇—————————

刚毕业的前四五个月心态特别崩,特别容易焦虑、睡不着。一个是在加拿大的工签需要录指纹,但是指纹中心一直没开,不知道工签什么时候才能下来。还有就是受疫情影响job market不太好,看似很多posting但大部分都不招应届生。但这时候我因为在等工
签所以并没有怎么投简历或者准备面试。我想着到时工签差不多下来了再准备也不迟(太天真了)。但是后来我发现我其实只是用疫情和工签做借口,什么都不干,所以才会焦虑。后来我开始基本每天都尽量刷题,学习。虽然这个时候我投的简历并不多,我知道我自己在努力刷题,那这样等我有面试机会的时候,不至于什么都不知道。然后我焦虑的情绪得到了大大的缓解,睡眠质量也提升不少。所以把自己每天过的充实一点,也许会帮助缓解焦虑不安的情绪。当然像疫情这种东西没办法,但还是尽人事听天命吧。这样至少等机会来到的时候,是已经有充分的准备的。

对于被拒,其实我心态不是崩,而是因为不够自信害怕面试时会丢脸导致每次投简历都很害怕。我的解决方法就还是逼自己尽力多投。千万不要宁愿错过机会也不愿意走出自己的舒适圈。我有的OA感觉做的不好,觉得丢人,但想想就算丢人又怎样,反正OA没过也不用见面试官,过了就说明做的还不错。

简历篇—————————

对于简历我没有太多准备,基本就是写了一些自己做过的project是什么,我负责的部
分,用了什么technology之类的。然后志愿经历这也是大概是什么title,做什么,我
得到什么soft skills。我记得组里有朋友给的建议是比较全面的,各位有需要的可以
去找一找。我记得比较重要的一点就是根据JD(Job Description) 去改你的简历,尽量match他们要求的skills。

题外话:如果有在校的朋友在看这篇帖子,觉得自己简历太空,我当时的解决方法就是找了很多volunteer的机会。是不是真的加分我不太清楚,但是确确实实可以锻炼你的
soft skills,而且这样简历也不至于空得慌。

cover letter篇—————————

cover letter我基本就是写了一个模版,根据不同公司再带入不同的关键词。大致结构就是首先简单介绍自己,然后后面就根据JD来写你自己的经验(比如JD要求会HTML,那就写某个project,我用HTML做了什么,然后天花乱坠彩虹屁吹自己)。最后结尾就根
据上述,我认为我是一个great fit,也非常喜欢贵公司之类的话展开写一小段。然后
感谢hiring manager。如果大家还是不确定怎么写,可以上网找一找模版。

PS: 如果投简历是通过邮件,而且没有要求cover letter的话,那邮件的内容就是
cover letter。 不要错过每一个推销自己的机会啊。

刷题篇—————————

算法题

刷题刚开始的时候其实是非常劝退的,这也是我为什么没有早点开始刷题。感觉题目看似简单但怎么都不过。我就总结一下我自己刷题的方法。

1. 按题型刷 - 这个大家应该都知道了也没什么需要解释的了。

2. 看答案 - 刷到新题的时候,如果实在没有头绪或者一直过不了,别纠结,直接看答案找思路。但是不要背答案,我一般是大概知道了是个什么思路之后再试着不看答案做一遍。

3. 理思路 - 如果你的思路很清晰的话,那proof of correctness跟time complexity
应该是信手拈来。但是如果不太清晰的话,我个人认为非常有必要理一理思路然后重做。这样能够更加了解这个解法,也巩固记忆。

4. 找最优 - 一定要找最优解法,不要得过且过。还要多了解不同的解法以及他们的优势劣势是什么。

5. 记笔记 - 记笔记的效果可能会因人而异,但对与我来说感觉帮助很大。我一般会记下自己尝试的解法,思路跟time complexity,如果我写的答案有错,我会记下我犯的
什么错。然后看别的解法,写下思路和time complexity。在把答案代码转换为思路记
下来的时候,其实是在更好的理解跟消化这个解法。

我刷题基本就是这些步骤。虽然刷题真的很难,但一定要坚持。我刷了大概一个月之后才慢慢开始觉得上手了,所以一定要坚持呀!

system design题

system design的话一定要把理论上的知识掌握好。比如像proxy、load balancer、不
同的data storage等等。拿到题目之后第一反应是问, 问面试官这个system 的
global scale还是local, 要求什么availability/latency, data storage的size是
什么,等等等等。 我看了很多别人是怎么做system design interview的视频,见得够多之后其实题目都是大同小异。

github上的system-design-primer里面介绍的挺全面的也有例题,不知道从哪里开始的朋友可以看看这个。

技术面试篇—————————

总结如下:

1. think aloud - 一定要把你的想法说出来,这样一是面试官可以更加了解你的
thought process,二是如果你方向不对,面试官也有机会纠正。

2. 审题 - 一定要认真审题。我就吃了没有认真审题的亏,面试的时候把题目理解错了,虽然后面救回来了,但是感觉还是扣分项吧。很多题目其实是类似的,我当时就是看到题目之后,就想“啊 这道题 我会”, 然后急急忙忙就开始写代码了。写完之后面
试官来了一句 - “is that what we’re asking for?” 当场社死,太尴尬了。

3. 跟面试官确认 - 确认input output, 确认edge cases, 确认range,等等。所有你不确定的因素都跟面试官确认一遍。我面试的时候没有这一步,如果有这一步,也许就不会把题目搞错。

4. 理思路 - 又是理思路哈哈哈。在开始写代码之前,可以把大概的思路先一边说一边写出来。这个其实应该是think aloud的具体化例子。也是如果方向不对,面试官可以
把你救回来(但是要看面试官,我的面试官就没有)。还有就是后面写代码的时候如果train of thought突然被打断,可以refer回这里。

5. 写代码 - 如果思路已经写过了,那么这一步会轻松很多。但是仍然要注意,不要缺步骤。多写comments。然后虽然不知道会不会有影响,但我觉得还是要尽量注意typo跟syntax,这种比较细节的错误也最好不要犯。

6. test cases - 最后写完代码之后,可以主动问能不能work through some test
cases。这个时候你就可以用到上面提到过的edge cases,input output example等。
这个也是在面试官还没有机会告诉你你有bug之前,先发制人,debug的好机会。然后在work through的时候可以留下test history,这样如果搞错了,还可以追溯。

我在接到面试通知之后的几天重温了一遍以前刷过的比较重要的题,刷的过程中我就是尽量按照上面的流程。主要还是练习think aloud,听起来简单但我觉得边打字边说话
挺难的。有条件的朋友们多找朋友mock interview。我当时虽然已经按上面的流程二刷了一些题目,但是我真的跟朋友mock interview的时候还是非常紧张,一紧张就容易出错,做了三四道题目才勉强合格。所以还是要多练。没有朋友可以mock的可以看看网上的资源,有些网站会帮用户pair up,然后就可以mock interview了。

软面试篇—————————

指路:

当面试官让你做自我介绍时,ta到底在问什么...
(https://www.bilibili.com/video/av542870159/?dt_dapp=1)

我笔记上我感觉比较重要的两点:

1. the tell me about yourself question - 这一题呢,视频里的嘉宾小姐姐提到的
公式就是present + past + future,tailor your answer 以及 use supporting
example。 我面试的时候说的大概就是我是应届生,想找个什么样的工作,讲我以前的project、经历是怎么提升了我hard skill,soft skill,最后找到这个公司在招聘这
个职位非常激动,又吹一波公司的彩虹屁,希望以后可以和公司共同成长。 时间控制
在2分钟左右。

2. behavioural questions & situational questions - 套万能公式STAR, Situation Task Action Results。重点放在你的action有什么impact,是怎么produce positive result的。 时间也是控制在两分钟左右。

面试之前可以先想一想自己的经验,有什么事件然后怎么套到不同的题目,跟考雅思口语的时候有点像。有些公司可能会问一些比较技术的题,比如what do you know about OOP 或者某个framework之类的,这种一定要做好功课。看看简历上写了什么东西,不太记得的东西一定要再research一下。我还搜了热门面试题目,大概心里过了一遍自己会怎么答。

最后再次墙裂安利这个视频,还有很多东西我没有提到的,大家有时间的话一定要看!

邮件篇—————————

在email里面重复的最多的两件事。一个感谢面试官或者hr,另外就是表达你对这个行
业,公司,职位的热情。投简历的时候可以说,交OA的时候可以说,schedule 面试的
时候可以说,面试完了follow up可以说,总之就是见缝插针。然后对自己英文不太自
信的小伙伴(比如我)可以多看看网上的模版,基本上job application email,
interview follow up email搜一搜看看别人都怎么说的然后结合自己的情况就差不多
了。如果有英语好的朋友可以找他们帮你proof read一下,确保你的email不会
aggressive而且有礼貌。

—————————

最后祝大家早日上岸!每个申请每个面试都过!最后一定会有满意的offer的!