我覺得 System Design 最有效的練習方式就是實際的講一遍,而且要模擬實際面試的情境,開著網頁的流程圖網頁,然後一步一步的迭代,把系統架構圖畫出來
流程圖網頁,我個人推薦兩個
只要熟悉其中一種就好,然後不要使用太複雜的圖案,用基礎的幾何圖形(長方形,線,箭頭)再加上適當的文字補充說明,還可以透過顏色來方便溝通(比如綠色是公司內網,橘色是客戶自己的電腦環境)
而整體的系統設計的流程,大概會是這樣
我個人覺得,系統設計這塊剛開始接觸,最大的困擾會是你根本不曉得到底有什麼東西可以畫,有什麼常見的名詞可以使用,這一塊我強烈推薦可以找相關的教材來讀,以下推薦兩個
我自己是買 grokking 的教材,我買 standard 的方案,而我現在回頭來看,我也覺得還好我選的是這份教材,因為對當時的我來說,我連常見的系統到底裡面會有什麼 component 都不曉得,而這個教材裡面會先介紹常用的雲端的 infra 有提供的服務(比如 rdbms/load balancer/cdn/dns/sequencer/etc.),接下來才會透過一系列的文章來介紹各類型的系統分別要用什麼樣的服務來組成(怎麼設計一個縮網址服務/ google map / uber eat/etc.),但 bytebytego 就只有提供各項服務應該要怎麼拆解他背後系統的部分
我覺得上面這個介紹每個 infra 到底個別的職責是什麼,這點可以讓我在系統面試的過程,或是在實際的職場工作時,知道說有哪些現成且成熟的工具可以使用,幫助很大
而我個人最推薦練習的第一張系統設計的練習題目,就是你目前工作正在維護的系統,嘗試著用上面學到的內容,實際畫出來,一來你對於這個系統最熟悉,二來當你畫好了,你面試的時候就可以有一個現成的材料可以跟面試官介紹,非常的有效益
AI 使用程度
[x] 無
[ ] AI 進行校稿
[ ] AI 主筆