這篇主要分享我在過去的幾個月中是如何一邊工作一邊刷題準備面試的
每個人的時間分配跟可用時間都不一樣 所以可以自行調整
我會細節到每天的時間分配 以供各位參考
我總共刷了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該公司的題
大概就這樣
整個過程其實就是堅持 刷題不難 但給自己訂了進度就務必做到
不要一天打魚三天曬網
我承認我的準備方式跟過程有點高強度 極度考驗一個人的耐力跟毅力
但是如果想要有好的結果 就要有破釜沈舟的勇氣 不要給自己偷懶的藉口
祝所有想轉領域或正在找工作的人 終能透過一步步實踐自我的過程 如願以償