硬貨:如何做好一名系統架構設計師以及面試技巧
系統架構師在擁有知識經驗上要高於一般軟體架構師或領域架構師,承擔整個系統的權衡設計,搭建一個可伸縮、可擴充套件、高事務、高一致的系統架構是其工作目標,同時針對運營中出現的重大問題進行診斷以及提出改進意見。這個Github儲存庫提供你如何在短時間內掌握系統設計以及應對面試,如果有時間,您可以深入瞭解每個主題,Jdon網站基本都是圍繞這些主題進行了翻譯和延伸以及討論:
系統設計是一個非常廣泛的主題,即使是在頂級IT公司擁有多年工作經驗的軟體工程師也可能不是系統設計方面的專家。如果你想成為一名專家,你需要閱讀許多書籍,文章,並解決真正的大規模系統設計問題。
澄清約束並識別使用者案例
花幾分鐘詢問面試官並就係統範圍邊界達成一致。記得要確保你知道面試官在開始時沒有告訴你的所有要求。
使用者案例use case指示系統的主要功能,約束要求列出了系統的規模,例如每秒請求數,請求型別,每秒寫入的資料,每秒讀取的資料。
高階架構設計
繪製重要元件及其之間的連線,但不要詳細介紹。通常,可伸縮系統包括webserver(負載均衡器),服務(服務分割槽),資料庫(主/輔助資料庫叢集外掛快取)。
元件設計
您需要為每個元件編寫特定的API,您可能需要完成特定功能的詳細OOD設計。您可能還需要為資料庫設計資料庫模式。
系統設計基礎知識
以下是一些有關係統設計相關主題的文章。
- 如何搞定系統設計面試
- 系統面試
- 傻瓜的可擴充套件性
- 可擴充套件的Web架構和分散式系統
- 每個人都應該知道的數字
- 分散式系統的謬誤
- 可擴充套件的系統設計模式
- 規模架構系統簡介
- 跨資料中心的事務
- CAP定理的簡明英語介紹
- CAP常見問題解答
- Paxos變得簡單
- 一致的雜湊
- NOSQL模式
- 可伸縮性,可用性和穩定性模式
公司工程部落格:
如果您要與公司合作,您應該閱讀他們的工程部落格。
- 高可擴充套件性
- GitHub部落格
- Quora的工程
- Yelp工程部落格
- Twitter工程
- Facebook工程
- Yammer工程
- Etsy Code as Craft
- Foursquare工程部落格
- Airbnb工程
- WebEngage工程部落格
- LinkedIn工程
- Netflix技術部落格
- BankSimple簡單部落格
- 廣場角落
- SoundCloud Backstage部落格
- Flickr程式碼
- Instagram工程
- Dropbox技術部落格
- Cloudera開發者部落格
- Bandcamp Tech
- 牡蠣科技部落格
- REDDIT BLOG
- Groupon工程部落格
- Songkick科技部落格
- 谷歌研究部落格
- Pinterest工程部落格
- Twilio工程部落格
- Bitly工程部落格
- 優步工程部落格
- Godaddy工程
- Splunk部落格
- Coursera工程部落格
- PayPal工程部落格
- Nextdoor工程部落格
- Booking.com開發部落格
- Scalyr工程部落格
產品和系統:
以下論文/文章/幻燈片可以幫助您瞭解不同實際產品和系統的一般設計理念。
- MapReduce:大型叢集上的簡化資料處理
- Bigtable:結構化資料的分散式儲存系統
- 谷歌檔案系統
- 用於鬆散耦合的分散式系統的Chubby鎖服務
- Dynamo:亞馬遜的高可用鍵值商店
- Memcached簡介
- Cassandra介紹功能
- HBase簡介
- MongoDB簡介
- Redis簡介
- 風暴
- Zookeeper簡介
- 卡夫卡
- YouTube架構
- 縮放Pinterest
- Google架構
- 擴充套件Twitter
- WhatsApp架構
- Flickr架構
- 亞馬遜架構
- 堆疊溢位架構
- Pinterest架構
- Tumblr建築
- Instagram架構
- TripAdvisor體系結構
- 縮放郵箱
- Salesforce架構
- ESPN架構
- 優步建築
- DropBox設計
- Splunk架構
熱門問題和參考:
每個問題都有一些很好的參考。這裡的參考資料是幻燈片和文章。
設計CDN網路參考:
設計Google文件系統參考:
設計隨機ID生成系統參考:
設計鍵值資料庫參考:
設計Facebook新聞源功能參考:
設計Facebook時間線功能參考:
設計一個函式以在過去的時間間隔內返回前k個請求參考:
設計線上多人紙牌遊戲參考:
設計圖搜尋功能參考:
- 構建圖搜尋的基礎架構
- 圖搜尋中的索引和排名
- Facebook [url=https://www.facebook.com/notes/facebook-engineering/under-the-hood-the-natural-language-interface-of-graph-search/10151432733048920]搜尋[/url]和Erlang [url=https://www.facebook.com/notes/facebook-engineering/under-the-hood-the-natural-language-interface-of-graph-search/10151432733048920]的自然語言介面[/url]
設計圖片共享系統參考:
設計搜尋引擎參考:
設計推薦系統參考:
設計tinyurl系統參考:
設計垃圾收集系統參考:
設計可擴充套件的Web爬網系統參考:
設計Facebook聊天功能參考:
設計趨勢主題系統參考:
設計快取系統參考:
好書:
物件導向設計:
OOD採訪提示
澄清場景,寫出使用者案例
用例是對事件序列的描述,這些事件序列一起導致系統執行某些有用的操作。誰將使用它以及它們將如何使用它。該系統可能非常簡單或非常複雜。
特殊的系統要求,如多執行緒,讀或寫。
定義物件
將標識對映到類:一個類的一個方案,此方案中的每個核心物件用於一個類。
考慮類之間的關係:某個類必須具有唯一的例項,一個物件具有許多其他物件(組合),一個物件是另一個物件(繼承)。
確定每個類的屬性:將名詞更改為變數,將操作更改為方法。
使用設計模式,使其可以在多個應用程式中重用。
有用的網站
相關文章
- 純乾貨!程式設計師面試的技巧程式設計師面試
- 系統架構設計師學習(二)系統架構設計師緒論架構
- 純乾貨!面試官如何面試程式設計師面試程式設計師
- Java乾貨神總結,程式設計師面試技巧Java程式設計師面試
- UI設計師面試技巧UI面試
- 程式設計師面試技巧程式設計師面試
- 如何做好一個系統架構師:抓住敏捷架構中幾個關鍵決策點架構敏捷
- 系統架構設計師感想架構
- 面試技巧:HR如何做好電話面試面試
- 每週一書《系統架構設計師》分享!架構
- 雲架構師:職責、技能以及如何成為一名雲架構師架構
- AI架構師:職責、技能以及如何稱為一名AI架構師?AI架構
- 架構師修煉之道(二)——架構?設計?架構師?架構
- IT程式設計師面試技巧有哪些?程式設計師面試
- 程式設計師面試技巧總結程式設計師面試
- 程式碼架構設計-1.為什麼要做好程式碼架構設計架構
- 做好用的課程管理報名系統
- 架構師面試的幾個小技巧 - nickbulljs架構面試JS
- 架構師成長系列:如何做高層架構設計(方法經驗總結,純乾貨)架構
- 百萬年薪架構師之路:談應用系統架構設計架構
- 系統架構設計師學習之路(31)架構
- 乾貨 數字化網際網路轉型:如何做好企業中臺的架構設計架構
- 如何面試程式設計師?面試程式設計師
- 面試集錦(十六)架構設計面試架構
- 程式設計師,如何從開發轉型做架構師?程式設計師架構
- 架構師如何賦能程式設計師團隊? - esilva架構程式設計師
- Java程式設計師如何成為優秀的架構師Java程式設計師架構
- 如何設計app架構?APP架構
- 走向架構師——1~3年java程式設計師面試必備的技能架構Java程式設計師面試
- 程式設計師的10大成功面試技巧程式設計師面試
- ETL架構師面試題架構面試題
- 答面試官問:如何設計SaaS專案的架構面試架構
- 系統架構設計面試指南(01)-微服務和CAP架構面試微服務
- 為什麼以及如何要進行架構設計權衡?架構
- 如何設計一個微型分散式架構?分散式架構
- [爬蟲架構] 如何設計一個分散式爬蟲架構爬蟲架構分散式
- 架構師給程式設計師的一封信架構程式設計師
- 搭建一個遊戲系統,如何做好數值設計?遊戲