系統設計(System Design)應該怎麼去應對面試?
首先 系統設計面試考你什麼?
考對問題的分析,trade off, 考對一項技術的瞭解。
怎麼樣回答才比較好?
最理想的情況:題目給出來,你就知道這個系統大概的結構會是怎麼樣的,所有的考點在哪裡。
如何去做才能達到這種回答的比較好的情況?
你得看過這些結構並且知道它所有的tradeoff,知道它用到的所有技術等等,現場憑藉經驗想是隻有大牛才能做的活。我等憨憨還是老實學習現有的系統把。
如何知道考點在哪裡?
想想如果你是面試官你會問什麼?在看其他人設計的結構的時候帶著問題去看帶著問題去看帶著問題去看,設想哪裡你可以提出什麼樣的問題,這樣慢慢你就會有體會了。
舉個例子,系統設計要用到message queue,大半會提到kafka。這個時候你得知道面試官會問kafka什麼?他八成會問用kafka有什麼問題。有啥問題?kafka只保證at least one time delivery。你最好給每個message加sequence number來防止duplictes
(是的我知道kafka後來promise了exact one time delivery的feature。不過沒人用)
類似這樣,你得在面試官問出來之前就知道問題是啥。這是可以做到的。只要你總是帶著問題去看。
看什麼,或者說學習什麼會讓你知道考點在哪裡呢?
educative.io
但是並不能應付所有的面試(當然了 沒有什麼東西可以應付所有的面試)
因為:
- 它最大的問題就是它是作者的一家之言。作者所描述的系統很多其實並不是真實的在生產環境下的系統的樣子
- 看完了你還是不知道會被問到什麼問題
- 很多考點作者沒有展開,比如考的最多的tinyurl,作者並沒有提到cache部分的設計的考慮。在生產環境中如何refresh cache?如何invalidate一個cache中的url?用memcache還是redis?作者並沒有說但是真的會有人考(我就被考到了)
但是這們課的好處也有很多:
目前來看它是最好的入門教材。建議看五遍,建議把每個不懂的詞都google出來完全完全看懂。比如常常常常考到的bloomfilter,發現很多新手沒看這個之前也許你還沒見過這個詞。請google出它的pro/con和怎麼用什麼時候用等等。以此類推。
還有什麼學習資料?
4. 看Design Data Intensive Application這本書。請買這本書。有空就看。請一定把第二部分全部看完。有精力請看第三部分。第二部分請看3遍。第二部分能夠解答40~50%你遇到的跟data有關的設計
5. 最重要的而且並沒有多少人提到的,請看各個大公司的engineer blog。非常非常非常重要非常非常非常重要非常非常非常重要非常非常非常重要非常非常非常重要非常非常非常重要非常非常非常重要非常非常非常重要非常非常非常重要非常非常非常重要非常非常非常重要
為什麼要看blog?
- blog提到的系統就是現在在生產環境的系統
- blog會提到各種tradeoff以及做這種設計的原因
- 好的blog會給出各種詳細的細節,甚至原始碼(當然你不需要閱讀原始碼這麼深入)
- blog提到的系統很容易拿來舉一反三
舉例: https://eng.uber.com/cherami/
請仔細閱讀這一篇文章。如果讀懂了並且在讀的過程中不停的問自己考點,那麼這一篇文章可以解決不下10個不同的system design問題:如何設計一個job queue?如何保證job一定執行?deadleatter咋設計(uber blog裡還有單獨一篇講這個)如何設計一個分散式爬蟲?等等等等。
哪裡有好的blog?
uber,airbnb的我看的很多。我時間少。你可以把大公司的都看了。
我才深入看了10來篇高質量的就覺得融會貫通了。
有one more thing麼?
有的。多看看經典的presentation presentation presentation。請去youtube搜,
例如: https://www.youtube.com/watch?v=UEJ6xq4frEw&t=667s
例如: https://www.youtube.com/watch?v=cSFWlF96Sds (*****)
btw那些教你做system design的youtube視訊(好多是印度人的)我全都看了。質量很一般很一般很一般阿西吧浪費我時間。有時間可以選著看看把。價效比低,不能幫你過serious的面試(比如FLAG家的system design)
舉個反面栗子:https://www.youtube.com/watch?v=v7x75aN9liM&t=1118s 這麼長的一個視訊,講的就是一坨shit還是錯的。。。真的浪費人生。
**去infoq看。**舉個(最好的)栗子:
https://www.infoq.com/presentations/pinterest/
這一篇文章可以終結你對sharding問題的困惑。只靠shard用mysql也可以撐起billion級別的訪問量的。
我還很喜歡這篇: https://www.infoq.com/presentations/Twitter-Timeline-Scalability/
花費時間:
兩個月 每天2小時
附言:
之前買過九章的課程,關於系統設計,並不足以應付面試
相關文章
- 系統設計(System Design)應該怎麼去學習?
- Material Design 中的應用欄該怎麼設計?Material Design
- 應該怎麼管理程式設計師?程式設計師
- 技術面試應該問些什麼?應聘者應該如何應對?面試
- 小程式的ui應該怎麼設計?UI
- 對於有非同步介面的業務來說,應該怎麼去設計效能壓測場景?非同步
- 許可權系統設計中,組織機構應該怎麼處理?
- 優惠券系統應該如何設計?
- 介面響應錯誤碼應該怎麼設計?ChatGPT這麼說ChatGPT
- 支付對賬系統怎麼設計?
- system-design-resources: 最好的系統設計英文資源
- 零基礎學UI設計應該怎麼學UI
- 「System Design」設計一個支援百萬使用者的系統
- Linux運維應該怎麼學?去哪裡學啊?Linux運維
- 頂級酒店的ERP系統都應該怎麼部署?
- 秒殺系統流量削峰這事應該怎麼做?
- 客戶管理系統做好精準定位應該怎麼去做?
- 關於系統學習Linux雲端計算運維,應該怎麼什麼學?Linux運維
- 為什麼程式設計師應該寫部落格?用什麼部落格系統?程式設計師
- 育碧設計師:“開放世界”遊戲到底應該怎麼做?遊戲
- (1)Linux系統中到底應該怎麼理解系統的平均負載Linux負載
- 應屆生面試該禁忌什麼面試
- 一對多分頁的SQL到底應該怎麼寫?SQL
- 網站索引量大減怎麼辦?該如何應對?網站索引
- Java程式設計師職業發展應該怎麼規劃Java程式設計師
- 新手應該怎麼寫 SwiftSwift
- 專網視訊會議軟體系統應該怎麼選擇和建設部署?
- 秒殺系統中流量削峰場景應該怎麼解決?
- 面試應該問公司什麼問題面試
- 汽車生產車間PMC組態畫面應該怎麼設計
- Java程式設計師培訓機構該怎麼去選擇Java程式設計師
- Ruby社群應該去Rails化了AI
- 五分鐘自學程式設計:計算機網路到底應該怎麼學?!程式設計計算機網路
- 為什麼你應該學習程式設計程式設計
- 程式設計師為什麼不應該加班程式設計師
- 面試官在“逗”你係列:到底應該怎麼爬樓梯?!面試
- 求職者如何應對面試關?怎麼讓考官喜歡求職面試
- 程式設計師面試過程中,該怎麼判斷該公司好壞?程式設計師面試