當您面試軟件開發工作時,您可能會遇到一些系統設計問題。
特別是如果您正在尋求高級職位。
像許多軟件開發一樣,面試問題與現實完全不同。
面試是什么樣的
面試官給你一個服務的抽象描述。您應該自己設計答案。
在面試中,你需要提問。基本上,收集需求。
該應用程序應該做什么?
人們將如何使用它?
有多少人會使用它?
應用程序是否有高負載?
通常,面試官對于他們希望看到的解決方案有一些想法。
您需要提出可以滿足要求的技術和實施策略的組合。
這是一次令人生畏的交流。基本上,您必須在短短幾分鐘的討論/思考中設計出一個高性能服務。
光是時間限制是不現實的。
現實世界中的系統設計
您的應用程序運行緩慢或無法很好地擴展。
那里有現有代碼,您需要了解它是如何工作的。需求收集是一個弄清楚誰在使用現有服務以及它有什么問題的過程。
歧義比比皆是。您花費大量時間了解問題所在以及現有部分如何組合在一起。
現在,您需要提出一個建議的計劃。所以,你寫了一份設計文件。通常,您有幾天或幾周的時間來研究、計劃和寫下您的想法。
在那些日子和幾周里,您將與其他工程師討論他們的想法。有沒有人有比你更好的解決方案?有沒有你沒有考慮過的方法?
編寫設計文檔后,您將與團隊共享。大家都懂設計嗎?有什么顧慮?我們如何改進它?
現在,您需要規劃實施設計的工作。新變化的測試計劃是什么?我們如何確保更改是零停機時間?其他團隊需要了解和審查此設計的哪些內容?
面試與現實
現實與面試有很大不同。
讓我們總結一下差異:
面試是全新的,抽象的新問題。現實是在現有的應用程序和依賴項中工作。
面試要求收集是簡單的問題。現實情況是您必須清除舊代碼并與了解它的高級開發人員/其他團隊交談。
面試需要幾分鐘,時間有限。現實需要數天/數周才能提出可行的系統設計。
在面試中你一個人工作。實際上,系統設計是高度協作的,實際上需要與許多利益相關者交談。
在面試中,有一個口頭計劃,也許還有一兩個圖表。實際上,您需要能夠清楚地寫出設計文檔并整合反饋。
面試期望一個完美的想法,當場。現實承認總會有權衡取舍,您需要時間和多個貢獻者才能找到最佳解決方案。
面試相對不太關心測試計劃、回填現有數據、遷移期間不丟失數據以及零停機部署。實際上,這些是最難的部分。
學習系統設計
我聽到許多被系統設計嚇倒的軟件工程師。“我知道得不夠多,我擔心我會因為不知道而被解雇!”
這是真相……
您可能需要了解系統設計的要點才能通過面試階段。這里有一些資源可以幫助系統設計面試。
但不要被嚇倒并認為這份工作實際上就是那樣。
相反,設計一種新方法更加微妙和協作。沒有人會期望您當場為新建筑產生天才的想法。
所以,深吸一口氣。你不會因為系統設計而被解雇。
每日清單
我每天早上都會為軟件開發人員寫一些新東西。
如果你喜歡我的文章,點贊,關注,轉發!