系統設計(System Design)應該怎麼去應對面試?

Tech In Pieces發表於2020-11-28

首先 系統設計面試考你什麼?
考對問題的分析,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
但是並不能應付所有的面試(當然了 沒有什麼東西可以應付所有的面試)
因為:

  1. 它最大的問題就是它是作者的一家之言。作者所描述的系統很多其實並不是真實的在生產環境下的系統的樣子
  2. 看完了你還是不知道會被問到什麼問題
  3. 很多考點作者沒有展開,比如考的最多的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?

  1. blog提到的系統就是現在在生產環境的系統
  2. blog會提到各種tradeoff以及做這種設計的原因
  3. 好的blog會給出各種詳細的細節,甚至原始碼(當然你不需要閱讀原始碼這麼深入)
  4. 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小時

附言:
之前買過九章的課程,關於系統設計,並不足以應付面試

相關文章