第一步就是按照 tag 把知识点分成不同的 list。一定要根据自己的算法掌握情况来定制知识点 list,随便从其他地方的舶来品基本没用,因为只有自己才最了解自己的复习情况。这里我的做法是额外分一个 basic list,意思是所有基础的数据结构/算法都覆盖一遍。这些内容是一定要会的,基础的基础。
第二步就是著名的艾宾浩斯记忆曲线的运用了。考过托福/雅思的细心的同学可能发现了,这个实际上和记忆英语单词有异曲同工之处 -- 先做 list,第二步我们要干嘛?按 list 不断复习,每天循环学习!
最后一步也是最重要的一步:总结。我们需要随时记录下当前学习的状态,然后每天在练习时做到有的放矢:已经掌握的知识点略过即可。总结需要注意的关键点:
· 总结 tag -- 对于一个知识点,我会哪些方法哪个是最优
· 总结笔记 -- 记录下来当时学习此知识点的方法
· 总结类似知识点
· 总结关键思考步骤
· 总结 tag 大致意思是说:某个知识点大概有哪些思路以及我自己最喜欢的方法。
总结笔记,很多的知识点复习好多遍也不太会。那没有办法,我只能把这个笔记单独拿出来,写到纸质的笔记本上,有空就看一遍,推一遍,敲一遍。谁叫我笨呢 :(
总结类似知识点,这个也很有用,因为往往类似知识点都有一致性。只是越往难越是在基础算法/数据结构上糅合了其他的算法技巧。可以参考网上大家分享的建议,然后把所有的先总结出来,每次练习一起练,找出基本差异。
最后一点,总结关键思考步骤。这一点很有意思,主要是说我在遇到困难时,看完大神的思路之后自己总结出几点关键步骤,这样下次要是再卡壳了就可以直接看这个,想想之前自己的思路,而不是再去看其他讨论。这样循环往复个 2-3 次就能熟练记下来。
具体可以看这里 LeetCode按照怎样的顺序来刷题比较好?
系统设计
系统的话就比较容易搞,有工作经验的小伙伴可以基本上直接略过。我个人是按照 STAR method 准备。没有工作经验的同学也不用太着急,在各大网站上好好上和自己职位相关系统设计的课程,可以好好学习。
个人觉得系统设计就相当于是知道/不知道类型的题目,有过工作经验的自然就很好说。如果你是 new grad 也千万不要本末倒置,因为随着实习/工作的进行,如论如何都会积攒越来越多的系统设计经验,所以在算法/数据结构没有夯实基础之前,个人认实在是没有必要花时间在这上面。没有好的算法和 CS 功底,基本都不会遇到系统设计的题目。
Brush up on Computer Science fundamentals.
这是 Google 面试指南的准备第一条,只有这条 crack 之后,社招的候选人才有可能会遇到系统设计。
Mock Interview
这期间除了准备算法 + 系统设计,mock interview 也非常有必要。我当时最厉害的时候每周 3-4 个 mock interview,基本上正常情况也是在 2-3 个/周。我主要是在 pramp 上准备,当然 pramp 本身比较简单,即使是选择最难的档,也还是有不少水题。这就要求我尽量答得要好,基本上 90% 的全部(Problem solving / Coding / Comunication) 4 星(满分)。等这个练习得差不多了,20-50 次左右就可以去更难的 interviewing.io 上试试啦。基本上能在 interviewing 上拿到 2-3 个 pass 那我觉得就很不错了。
上岸时间线
毕业前 3 个月:开始找工作
毕业一定选择夏季:确保有充足的时间找到工作
一定要在来年 2 月前签:这样就能把握住 4 月份的抽签
准备的第一步肯定绕不开身份问题。只要有身份在,随时可以准备,然后跳槽去大厂。
我当年刚毕业时首战 flag 失败,但距离成功很近。根据 recruiter 的反馈:
We are not confident enough to make a decision (either pass you or fail you), we'd like to make another additional interview...
我感觉他们的套路是:如果发现 pass 你或者 fail 的证据不足,会一直要求增加面试。可惜,在最后的加试中挂掉了。于是从那时候就在心里中下来默默刷题/来年再战的种子。
果不其然,来年我还没咋准备好,就来骚扰我了。只要有身份,随时都可以翻身。因为你可以不断准备,多次出击你的梦想公司。
毕业前倒推 3 个月,就可以开始找工作了。如果你打算 2020 年 5 月份毕业,那最好在年初的时候就开始各种活跃,开始投简历、关注求职信息和勾搭 recruiter 小姐姐了。
将 OPT 的生效时间设置在毕业后 2-3 个月最好。这样可以安安心心地找工作,签了 offer 后还可以非常轻松地来个全球毕业旅行。时间一点也不赶,刚刚好。
这期间除了投简历还要不断刷题,确保自己有足够的灵活度。
根据目前掌握的情况,一般建议 new grad 至少要刷 300 题,社招要刷到 4-500 题。大多数题目都要不止刷一遍,而且要弄懂这些题目背后的数据结构和算法。再多基本上就是换汤不换药,在没有充裕时间的情况下可以不用太追求数量。质量其实更重要。