这篇主要分享我在过去的几个月中是如何一边工作一边刷题准备面试的
每个人的时间分配跟可用时间都不一样 所以可以自行调整
我会细节到每天的时间分配 以供各位参考
我总共刷了800题左右(6000多次submission)
但根据面试下来的经验 我觉得其实400题就绰绰有余了
所以刷不到800的人 刷400其实足以
我是从去年10月开始刷的 但中间其实有两个月因为爸妈来美国玩所以没刷
第一刷+第二刷: 照题号顺序刷 包括hard都一起刷
周一到周五 一天10题+做笔记 (5天共50题)
周六跟周日 一天25题+补全笔记 (重做一次过去一周刷过的50题)
周一到周五时间分配:
每天早上5:30-6:00am左右起床 刷到9:30am左右出门上班
争取早上有2-3hr的刷题时间
一般来说每天10题中会有4~5题easy 2~3题medium 跟2~3题hard
早上时间我会把当天目标10题中的easy题先拿出来做 尽量能在上班前把easy全做完
早上这样一班可以刷4~6题
中午大约11:45am把饭吃完后 12:00pm-2:00pm 我会找间会议室刷2hr
一开始其实我是在自己车上刷题 后来才转移到会议室
中午刷medium的题 大约可以刷3~4题左右
晚上5:00下班 买便当回家吃完后到图书馆刷题
6:00pm-9:00pm 这三个小时一般会用来刷当天剩下的medium或hard 大约也是3题左右
9:00pm回家洗澡之后会再花1~1.5hr把当天刷的10题做一下笔记
此时也可以帮助自己加深印象 统整一天做过的题
大约10:30~11:00pm睡觉
由于每天有一定的题量要刷
所以过程中 我一般看到题会先想1~2分钟 没思路就直接上网看答案解法
有思路我也不太会写 只会大概想一下 然后看答案解法 验证自己的想法
也学习更简洁的写法 这么做是为了避免浪费多余的时间
因为有时候自以为自己写的出来 于是就写 结果坑坑碰碰地过不了AC 就又改
然后终于过了以后看了别人答案又觉得自己的不如人 反反复复时间就浪费太多
我看解法的网站主要有两个:
https://www.cnblogs.com/grandyang/p/4606334.html (会先看)
第二个就是LC上的解法讨论 会看高票解法跟讨论
各种解法都尽量看懂 然后自己写一次
周六周日时间分配:
早上大约9:00am到图书馆 刷到晚上9:00pm左右
这两天主要把过去一周刷过的题再重刷一次
这时候一定会有些题忘记 这很正常 再刷一遍的作用就是加深记忆
由于都是已经做过的题 而且才在不久前做的 所以一天25题其实不难
这两天也可以把一些新的想法或写法加入到笔记里
以这样的进度来说 一个月就可以刷200题x2遍
然后每个月(200题) 我会把自己的笔记在从头到尾看过一遍
这遍我只用看的 然后看自己有没有什么忘了的
这遍一天可以看约30-50题
所以以时间分配的角度来说
可以用大约4~5个星期的时间 刷过200题两遍+看过200题一遍
就以这样的进度跟速度持续 大约4~5个月便可以把800题做完2遍+看过一遍
在这之后我又花了大约两三周(每天50题) 把自己的笔记从头到尾"看"一遍
这一次我还顺便把题做分类
第三刷:照分类刷题 一天30~50题 照分类刷
经过以上的过程 其实到第三刷的时候 一个题目已经反反复复的看过4次了
很多题早就背下来了 这时候重要的就是分类刷 因为很多题很相似
在短时间把所有相似的题都刷到 还可以帮助完善笔记跟总结 达到举一反三
分类刷在此时也会因为同一天都刷一样的类 所以大大提升刷题速度 一天30题不是问题
这一刷其实就是彻底验证自己到底题目是不是真的是自己的
所以在第三刷的时候 一定要确定是自己写出来的 不要看答案
万不得已再去看 确保每题都是自己完整地写出来并通过AC
如果真的写不出来或忘了 也只能看答案 但要把这些不能自己完整写出来的题做记号
这一刷千万别放过自己 不会就是不会 写不完整就是写不完整 即便只差一点点
第三刷我大概花了三周左右就刷完了 其中有大约120题左右是被我做记号的(多半是hard)
第四刷:把第三刷自己没办法完整写出来的那些题在做一次
至此我觉得准备刷题的部分已经够了
可以进入System Design
其实System Design的部分我前前后后才花了大约一个月
有时候是利用上班时间偷看的(不是刷题时间)
我的准备方法是先把以下这个网站的材料都过一次
https://github.com/qiu-hanqiao/system-design-primer/blob/master/README.md
包括这文章中link到外部的阅读资料及视频都看过一次
看完后会对系统架构有个大致的概念
然后我又看了九章的系统设计视频 由于这个有版权问题 不能公开分享
有需要的人请寄站内信给我并"提供信箱"
我每晚会统一把下载连结寄给你们
我自己对系统设计的部分就准备这样而已
不过如果有更多时间 还有一本书值得一看
Designing Data-Intensive Applications: The Big Ideas Behind Reliable,
Scalable, and Maintainable Systems
https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-
Maintainable/dp/1449373321
我有这本书的pdf档 由于也是版权问题 不能公开分享
有需要的人也请寄站内信给我并"提供信箱"
我每晚会统一把下载连结寄给你们
准备到这里 就可以开始投简历 找人内推了
然后一边练练白板写题目(每天2~3题) 一边上一亩三分地看看面经
面经里也会有很多LC的题 这时候就再回去看看自己的笔记
根据不同的公司 准备不同的面经跟LC上tag该公司的题
大概就这样
整个过程其实就是坚持 刷题不难 但给自己订了进度就务必做到
不要一天打鱼三天晒网
我承认我的准备方式跟过程有点高强度 极度考验一个人的耐力跟毅力
但是如果想要有好的结果 就要有破釜沈舟的勇气 不要给自己偷懒的借口
祝所有想转领域或正在找工作的人 终能透过一步步实践自我的过程 如愿以偿