##一、定義 **使用原型實例指定待創建對象的類型,並且通過複製這個原型來創建新的對象。原型模式是一種創建型模式。** ##二、描述 **包含以下三個角色:** 
- 應聘者:Feed可以包含圖片、視頻,還是只有文字?
- 面試官:可以包含媒體文件,包括圖片和視頻。
以上是您可以向面試官提出的一些示例問題。重要的是要理解需求並澄清模糊之處
3.1.2 步驟2提出高層次設計並獲得認同
在這一步中,我們的目標是制定一個高層次的設計方案,並與面試官就設計方案達成一致。在此過程中,與面試官合作是個好主意。
-
提出設計的初步藍圖。征求反饋意見。把面試官當作隊友,一起工作。許多優秀的面試官都喜歡談論和參與。
-
在白板或紙上繪製包含關鍵組件的框圖。這可能包括客戶端(移動/網路)、API、網路伺服器、數據存儲、緩存、CDN、消息隊列等。
-
進行包絡(back-of-the-envelope)計算,評估你的藍圖是否符合規模限制。
如果可能,請舉出幾個具體的使用案例。這將有助於你確定高層次設計的框架。這些用例還可能幫助你發現尚未考慮的邊緣情況。
我們是否應該在這裡包含應用程式介面端點和資料庫模式?這取決於問題的具體情況。對於像"設計Google搜索引擎"這樣的大型設計問題來說,這有點太低級了。而對於為多人撲克游戲設計後臺這樣的問題來說,這倒是可以考慮的。與面試官溝通。
3.1.2.1 舉例說明
讓我們用"設計新聞源系統"來演示如何進行高級設計。在這裡,你不需要瞭解系統的實際工作原理。第11章將解釋所有細節。
在高層,設計分為兩個流程:新聞源發佈和新聞源構建。
- Feed發佈:當用戶發佈帖子時,相應的數據會被寫入緩存/資料庫,帖子會被填充到好友的新聞源中。
- Newsfeed構建:按時間倒序聚合好友的帖子,構建新聞源。
參考資料
- 軟體測試精品書籍文檔下載持續更新 https://github.com/china-testing/python-testing-examples 請點贊,謝謝!
- 本文涉及的python測試開發庫 謝謝點贊! https://github.com/china-testing/python_cn_resouce
- python精品書籍下載 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- Linux精品書籍下載 https://www.cnblogs.com/testing-/p/17438558.html
- https://www.drawio.com/doc/faq/
3.1.3 步驟3深入設計
在這一步,您和您的面試官應該已經實現了以下目標:
- 商定總體目標和功能範圍
- 勾勒出整體設計的高層次藍圖
- 獲得面試官對高層次設計的反饋意見
- 根據面試官的反饋,對深入設計的重點領域有了一些初步想法
您應與面試官一起確定架構中的組件並確定其優先順序。值得強調的是,每次面試都是不同的。有時,面試官可能會暗示她喜歡關註高層設計。有時,對於資深候選人的面試,討論的可能是系統性能特征,重點可能是瓶頸和資源估算。在大多數情況下,面試官可能希望你深入探討一些系統組件的細節。對於URL縮短器,深入探討將長URL轉換為短URL的哈希函數設計很有意思。對於聊天系統,如何減少延遲以及如何支持線上/離線狀態是兩個有趣的話題。
時間管理至關重要,因為您很容易被細枝末節所迷惑,而無法展現自己的能力。您必須準備好向面試官展示自己的信號。儘量不要涉及不必要的細節。例如,在系統設計面試中,詳細談論Facebook feed排名的EdgeRank演算法並不理想,因為這會耗費大量寶貴時間,也無法證明你設計可擴展系統的能力。
3.1.3.1 示例
至此,我們已經討論了新聞源系統的高層次設計,面試官對你的建議很滿意。接下來,我們將研究兩個最重要的用例:
-
Feed發佈
-
新Feed檢索
圖3-3和圖 3-4顯示了這兩個用例的詳細設計,第11章將對此進行詳細說明。
3.1.4 步驟4總結
在最後一步,面試官可能會問你一些後續問題,或者讓你自由討論其他問題。以下是一些應遵循的方向:
- 面試官可能希望您找出系統瓶頸,並討論可能的改進措施。永遠不要說你的設計是完美的,沒有什麼可以改進的。總有一些地方需要改進。這是展示您的批判性思維並給面試官留下良好印象的絕佳機會。
- 給面試官總結一下你的設計可能會有幫助。如果您提出了一些解決方案,這一點尤為重要。在長時間的討論後,讓面試官恢復記憶會很有幫助。
- 錯誤案例(伺服器故障、網路丟失等)值得一談。
- 運營問題值得一提。如何監控指標和錯誤日誌?如何推出系統?
- 如何處理下一個規模曲線也是一個有趣的話題。例如,如果您當前的設計支持100萬用戶,那麼要支持1000萬用戶,您需要做出哪些改變?
-如果您有更多時間,請提出您需要的其他改進措施。
最後,我們總結了一份"該做"和"不該做"的清單。
3.1.4.1 應該
- 始終要求澄清。不要認為你的假設是正確的。
- 瞭解問題的要求。
- 既沒有正確答案,也沒有最佳答案。為解決年輕初創公司的問題而設計的解決方案與為解決擁有數百萬用戶的成熟公司的問題而設計的解決方案是不同的。確保瞭解需求。
- 讓面試官知道你在想什麼。與面試官溝通。
- 如果可能,建議採用多種方法。
- 與面試官就藍圖達成一致後,深入瞭解每個組件的細節。先設計最關鍵的部分。
- 與面試官交流想法。好的面試官會把你當作隊友來合作。
- 永不放棄。
3.1.4.2 不應該
- 不要對典型的面試問題毫無準備。
- 在未明確需求和假設之前,不要貿然提出解決方案。
- 不要在一開始就對單個組件進行過於詳細的介紹。先給出高層次的設計,然後再深入研究。
- 如果遇到困難,不要猶豫,尋求提示。
- 再次,溝通。不要在沉默中思考。
- 不要以為給出設計方案後面試就結束了。直到面試官說你完成了,你才算完成。儘早並經常征求反饋意見。
3.1.5 時間管理
系統設計面試問題通常都很寬泛,45分鐘或一個小時不足以涵蓋整個設計。時間管理至關重要。你應該在每個步驟上花費多少時間?以下是45分鐘面試時間分配的粗略指南。請記住,這隻是粗略的估計,實際的時間分配取決於問題的範圍和麵試官的要求。
- 瞭解問題並確定設計範圍: 3 - 10 分鐘
- 提出高層次設計並獲得認同:10 - 15 分鐘
- 深入設計:10 - 25 分鐘
- 總結: 3 - 5 分鐘