Mekal Z

Mekal Z

A programmer running out of the wall.
twitter

結構化系統設計面試

4 個主要步驟來進行完美的系統設計面試#

  • 步驟 1:理解問題並確定設計範圍#

    • 我們的工作是提出盡可能多的問題,以充分理解問題。在沒有首先理解我們要構建的內容之前,直接跳入解決方案是一個紅旗。目標是理解為什麼我們要構建這個系統,誰是用戶,以及我們需要構建哪些功能。金鑰是理解我們構建的功能的優先順序。我們應該專注於最重要的功能來構建。確保面試官同意功能列表。
    • 同樣重要的是,提出一系列問題以澄清非功能性需求。對於系統設計面試,我們最好專注於規模和性能。這些非功能性需求使我們的設計獨特且具有挑戰性。角色越高,我們展示處理非功能性需求的能力就越重要。
    • image
    • 為了幫助我們了解系統的規模以及潛在的挑戰和瓶頸,我們可以在這裡進行一些粗略的估算。請記住,我們尚未設計任何內容,因此我們在這裡進行的數學計算只是粗略估算。目標是獲得對規模的一般感知。我們希望獲得正確的數量級。
    • 在這一步結束時,我們應該有一個短列表的功能來設計,以及幾個重要的非功能性需求需要滿足。
  • 步驟 2:提出高級設計並獲得認可#

    • 在這一步中,我們的目標是開發高級設計並與面試官達成設計協議。
    • 對於大多數設計,最好採取自上而下的方法,從 API 開始。API 在最終用戶和後端系統之間建立了一個契約。在收集需求後,應該清楚我們需要哪些 API。除非另有說明,否則我們應遵循 RESTful 約定。仔細定義每個 API 的輸入參數和輸出響應。花時間仔細審查 API。驗證它們是否滿足功能需求。同樣重要的是,請記住,不要引入與功能需求無關的 API。
    • 關於 API 的另一個考慮因素。有些設計可能需要客戶端和服務器之間的雙向通信。在這種情況下,WebSocket 是一個常見的解決方案。請注意,像 WebSocket 這樣的套接字服務通常是有狀態的。在規模上操作是相當具有挑戰性的。如果規模很大,請準備在深入探討部分討論我們將如何管理 WebSocket 部署。
    • 一旦我們在客戶端和服務器之間建立了 API,下一步就是繪製高級設計圖。該圖是我們可以參考的整體設計藍圖。我們應該用它來驗證設計是否滿足所有功能需求的端到端。對於許多設計,它以負載均衡器或 API 閘道器開始。在這之後是滿足我們之前與面試官確定的功能需求的服務。
    • 許多服務需要某種形式的持久性。在這裡,我們將通過引入數據存儲層來完善設計。在這個階段,通常不需要指定使用的確切數據庫技術。如果需要,這應推遲到深入探討部分,並且僅在我們設計了數據架構之後。
    • 在開發高級設計時,保持一個討論要點的列表以備後用。抵制過早深入細節的誘惑。在我們對設計有完整的了解之前,不要挖掘自己陷入困境。
    • 高級設計的最後一步是討論數據模型和架構。在這裡,我們應該討論數據模式和讀寫比率。在規模上,數據建模可能會顯著影響設計的性能。如果它很簡單,還應討論選擇的數據庫,並可能討論索引選項。
    • 在這裡,我們應該做出一些判斷。如果數據建模是滿足非功能性需求的設計關鍵部分,我們可能希望將討論推遲到深入探討部分。
    • 當我們完成高級設計後,退後一步並審查設計。確保每個功能都是完整的端到端。
  • 步驟 3:設計深入探討#

    • 此步驟的目標是展示我們能夠識別可能存在問題的領域,並提出解決方案和討論權衡。
    • 我們應該與面試官密切合作,以決定深入討論的內容。深入探討是非功能性需求使問題變得有趣的地方。層級越高,這一部分就越重要。這一部分真的很開放。沒有一種適合所有人的方法。在這裡,讀懂氣氛的能力是有用的。有時候,面試官的肢體語言可能會透露出他們對設計某些方面不滿的線索。重要的是要捕捉這些線索,確保所有問題都得到解決。我們可以通過提問來接近這個問題。我們可以列出選擇特定解決方案的理由,並詢問他們是否有任何問題和擔憂。
    • 一旦我們挑選出一兩個問題進行深入探討,我們應該提出多個解決方案並討論每個選項的權衡。我們可以在框定討論時使用以下小指導方針。
      • 首先,我們應該清楚地闡明問題。
      • 接下來,我們提出至少兩個解決方案。
      • 第三,我們討論解決方案的權衡。
      • 最後,我們選擇一個解決方案並與面試官討論。
      • image
  • 步驟 4:總結#

    • 花幾分鐘總結設計是值得的。在這裡,我們應該專注於特定情況下獨特的部分。保持簡短明了。在面試結束時留出足夠的時間向面試官詢問有關公司的問題。

1 小時面試的時間分配#

  • 前 5 分鐘:介紹
  • 45 分鐘:面試過程
    • 5 分鐘用於步驟 1:理解問題並確定設計範圍
    • 20 分鐘用於步驟 2:提出高級設計並獲得認可
    • 15 分鐘用於步驟 3:設計深入探討
    • 5 分鐘用於步驟 4:總結
  • 最後 5 分鐘:問答

本文是 YouTube 影片 系統設計面試:逐步指南 的摘要筆記

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。