系統設計(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)應該怎麼去學習?
- 技術面試應該問些什麼?應聘者應該如何應對?面試
- 面對變革,我們應該怎麼做?
- system-design-resources: 最好的系統設計英文資源
- 小程式的ui應該怎麼設計?UI
- 優惠券系統應該如何設計?
- 對於有非同步介面的業務來說,應該怎麼去設計效能壓測場景?非同步
- 「System Design」設計一個支援百萬使用者的系統
- 介面響應錯誤碼應該怎麼設計?ChatGPT這麼說ChatGPT
- 汽車生產車間PMC組態畫面應該怎麼設計
- 支付對賬系統怎麼設計?
- 測試應該怎麼學 Java 呢Java
- 頂級酒店的ERP系統都應該怎麼部署?
- 牆面互動投影應用到展館應該怎麼做
- 零基礎學UI設計應該怎麼學UI
- Linux運維應該怎麼學?去哪裡學啊?Linux運維
- 關於bug,測試應該怎麼提
- 面對玩家差評,製作組應該如何應對?
- 系統設計面試參考-設計Spotify系統面試
- (1)Linux系統中到底應該怎麼理解系統的平均負載Linux負載
- 白盒測試程式碼應該怎麼測試
- 面試官在“逗”你係列:到底應該怎麼爬樓梯?!面試
- 程式設計師面試過程中,該怎麼判斷該公司好壞?程式設計師面試
- 客戶管理系統做好精準定位應該怎麼去做?
- 秒殺系統流量削峰這事應該怎麼做?
- 關於系統學習Linux雲端計算運維,應該怎麼什麼學?Linux運維
- 面對龐大的DDOS攻擊,應該怎麼維護伺服器。伺服器
- 應該怎麼分頁?
- 上週 GitHub 熱點速覽 vol.08:系統設計必看 The System Design PrimerGithub
- 求職者如何應對面試關?怎麼讓考官喜歡求職面試
- 面對海量請求,快取設計還應該考慮哪些問題?快取
- 除了面試題,你應該知道的面試技巧!面試題
- Linux使用者管理有哪些面試題?linux應該怎麼學習Linux面試題
- 一對多分頁的SQL到底應該怎麼寫?SQL
- Java程式設計師職業發展應該怎麼規劃Java程式設計師
- 育碧設計師:“開放世界”遊戲到底應該怎麼做?遊戲
- 萬星開源專案:System Design Primer - 學習系統設計的必備指南
- 【面試普通人VS高手系列】CPU飆高系統反應慢怎麼排查?面試