System Design
系統設計 (System Design) 是一個常見的軟體工程面試主題,特別是針對 senior-level 以上的職位。
這個主題可以考的範圍非常廣泛,從 CS 的基礎知識到實務且複雜的系統架構設計都有可能。 我認為初學者應該從基礎的 CS 概念開始學起,而不是先學習那些 High Level 的設計。
但在這個系列中並不會著墨於基礎的 CS 知識太多,我想透過一些實際的系統設計題目來記錄我對於系統設計的理解與想法。
在開始進入實際的系統設計題目之前,我想先介紹一些我覺得一些重要的基礎概念,以下是一些參考資料 :
- system-design-primer
- awesome-scalability
- Deep Dives
- Designing Data-Intensive Applications
- MIT 6.5840 Distributed Systems
除了這些參考資料之外,也可以透過閱讀一些經典論文或是一些公司的技術部落格來了解各種不同的 trade-off 與架構演進。
了解了上面的基礎概念之後,我們就可以開始進入一些實際的系統設計題目了,以下是一些參考資料 :