在微軟和Facebook的十年擔任高級軟件工程師和面試官。我與數百名申請人一起工作,因為他們解決了不同的系統設計問題。
開發人員傾向于解決SDI問題,因為它們是如此開放,并且通常需要一個批判性思維,這些思維不能練習其他編碼面試挑戰。
雖然SDI問題隨著時間的推移而變化,但其中一些問題在各種頂級公司仍然非常受歡迎。
如今,我們將探討最常見的10個系統設計面試問題,必須在每個問題和一些工具中解決常見問題解答,可以幫助您完成此任務。
這是我們今天要介紹的內容:
任何問題的提示1。設計聊天服務2。汽車共享服務設計3。設計URL縮短服務4。設計社交媒體服務5。設計社交留言板6。設計文件存儲服務7。設計視頻流服務8。設計API率限制器9。設計一個接近服務器10。設計前進輸入服務旁邊了解到任何SDI問題的提示是開始通過語句開始每個問題,您知道:列出系統的所有必需功能,這種系統可能遇到的常見問題以及系統愿望處理的流動。列出該過程允許面試官在開始解決方案之前查看您的程序技能,并糾正任何可能的誤解。任何權衡敘述:每個系統設計選擇都很重要。在每個決策點,至少列出了選擇的前部和負面影響。請澄清您的面試官:大多數系統設計問題故意尷尬。提出澄清問題,顯示您的面試官您如何看待問題并了解系統需求。討論新興技術:每個問題的結束概述了系統以及您可以從機器學習中受益的地方。這將表明您不僅為當前解決方案準備。它還為未來的解決方案做好準備。
1。設計全球聊天服務,例如, Facebook Messenger或WhatsApp
關于這個問題,您將設計一項服務,允許用戶通過Internet互相聊天。談話可以是一對一對話。它也可以與許多成員聊天。對話框中包含的郵件只能訪問這些消息。
必須通過Internet發送和接收基本函數消息。服務必須支持一對一和群組聊天。稍后應稍后存儲該消息。用戶應該能夠發送圖像和視頻和短信。應在傳輸過程中加密消息。該消息應在最小延遲處可見。如果您在沒有互聯網連接的情況下發送電子郵件,常見問題是什么?它在恢復后發送它嗎?如何加密和解密消息而不會增加延遲?用戶如何接收通知?從設備中拉動消息(如果服務器正在等待發送消息,服務器將定期提示設備或將消息推到服務器(設備提示服務器發送)?需要將數據庫模式劃分為多個表的工具:用戶表(具有用戶ID和聯系人),聊天表(使用聊天ID和參與用戶ID)和消息表(具有引用聊天ID的過去的消息)。使用WebSocket設備和服務器之間的雙向連接。使用推送通知通知會員,即使他們離線。
2。設計拼車或Lyft等拼車
此問題要求您創建與附近驅動程序匹配的乘車共享服務。用戶可以輸入目的地并發送當前位置,在幾秒鐘內通知附近的司機。
然后,該應用程序跟蹤驅動程序和用戶當前位置之間的路由,然后跟蹤從用戶位置到目的地的路由。
基本函數必須跟蹤所有用戶和驅動程序的當前位置。在運輸,用戶和驅動程序必須收到更新的旅行信息。必須在此過程的所有階段支持成千上萬的用戶。并相應地擴展。驅動程序和用戶必須始終連接到服務器。常見問題解答如何在繁忙時期保持較低的延誤?駕駛員與用戶配對如何?迭代所有司機都將獲得歐洲交付距離效率低下。如果駕駛員或用戶失去連接怎么辦?如何存儲所有緩存的位置數據?需要被視為使用S2Geometry庫將位置拆分為單元格的工具。駕駛員的距離是使用位于同一單元格中同一單元格中的驅動器計算的。使用分布式存儲來存儲所有用戶的位置,每個用戶的位置數據約為1KB。如果位置數據被暫停,等待重新連接時,設備將繼續報告其先前的位置。提示最近的司機旅行,請留下緩沖區。如果他們拒絕,轉到下一個司機。
3.設計URL短期服務,例如tinyurl或bit。l
此問題要求您創建一個程序來縮短長URL,例如tinyurl或bit。莉。這些程序使用長URL并生成一個新的唯一短URL。它們還可以輸入縮短的URL并返回原始的完整URL。
基本函數返回短的URL必須存儲原始URL的原始URL新URL必須能夠鏈接到存儲的原始URL縮短的URL應該允許重定向支持自定義短URL必須支持許多請求常見問題解答如果兩個用戶用戶同樣自定義 URL,該怎么辦?如果用戶數量超過預期怎么辦?數據庫如何調整存儲空間?需要考慮的創建網站需要多少錢工具使用哈希鏈接原始和新URL使用REST API負載均衡高流量,并使用多線程處理前端客戶端通信一旦使用NoSQL數據庫存儲原始URL,就處理了多個請求(沒有關系 存儲的URL之間)
4.設計公共社交媒體服務,例如, Facebook,Twitter或Instagram.
關于這個問題,您將為100設計進行社交媒體服務,000用戶如Instagram。用戶應該能夠查看追隨者帖子的新聞,并建議用戶的新內容。
面試官經常想聽你討論你的新聞來源。
強大的新聞來源和推薦的系統用戶可以發布公共帖子其他用戶可以評論或頂級INS, 您必須舒適地容納許多用戶系統。 您必須使用常見問題。 眾所周知的用戶將有數百萬人的粉絲。與普通用戶相比,他們將如何處理?系統如何分配重量?與新帖子相比,舊帖子的瀏覽可能性很小。節點讀寫的比率是多少?是否有更多讀取請求(用戶正在查閱帖子)或寫請求(用戶正在創建一個帖子)?您如何增加可用性?系統如何更新?如果節點出現故障會發生什么?您如何有效地存儲您的帖子和圖像?需要考慮的工具用于最大限度地使用滾動更新和復制節點來最大限度地提高可用性。使用訓練有素的機器學習算法推薦帖子。創建數據庫架構,分別存儲名人和用戶。使用社交地圖進一步跟蹤以下習慣
網站建設開發公司
5。設計社交網絡和留言板服務,例如, Quora,reddit或hackernews.
關于這個問題,您將設計一個類似于論壇的系統,用戶可以發布問題和鏈接。
其他用戶可以查看和評論問題。問題有一個標簽代表其主題,用戶可以按照標簽查看有關特定主題的問題。用戶有一個新聞來源,新聞源突出了標簽和相關主題的常見問題。
前提用戶必須能夠創建公共帖子,應用標簽帖子必須按標簽排序其他用戶必須能夠實時發布評論。數據庫必須存儲在每個帖子上(視圖的數量,按新聞源必須從以下標簽和用戶想要的其他標簽顯示帖子。必須支持高流量受眾和新帖子。常見問題我們的產品只需要在網絡上運行?用戶上傳的用戶/鏈接在哪里?系統將如何確定相關標簽?顯示非付費標簽的帖子是多少?如何在服務器網絡上分配帖子?需要考慮使用SQL數據庫映射關系數據的工具(有帖子,帖子有評論/喜歡,類別有相關的帖子,等待)使用多線程和負載均衡器層來幫助支持更高的流量。使用碎片來破壞系統。根據類別,考慮將相同標簽的帖子銳化。使用機器學習和自然語言處理來找到標簽之間關系之間的相關性
6。設計全球文件存儲和共享服務,例如, Dropbox,谷歌云硬盤或谷歌專輯
關于這個問題,您將創建一個同步跨平臺存儲系統,例如, dropbox。用戶可以存儲文件和照片并從其他設備訪問它們。
前提用戶應該能夠為舊版本的文件保存/刪除/更新/共享文件以保存回滾文件更新,應在多個設備上同步常見問題解答?你如何處理更新?您是否再次重新上傳整個文件?您需要完整的文件更新嗎?系統如何同時處理兩個用戶?需要被視為將文件劃分為多個部分的工具。僅更新零件,不是整個文件。使用像Amazon S3等云存儲來處理內部數據庫。使客戶端不斷檢查服務器以確保應用程序同時更新。
7。設計全球視頻流服務,如youtube或netflix
此問題要求您創建在線視頻流服務。例如, YouTube。此服務將存儲并傳輸數百個PB的視頻數據。它還必須存儲統計信息(查看,喜歡這個數字,觀看號碼, 等等。),并允許用戶評論。
您的解決方案必須可擴展,支持數千個并發用戶。
必要的功能視頻應該能夠通過互聯網接收不間斷的流視頻統計,以接收不間斷的流視頻統計,應該存儲和訪問每個視頻。必須保存和顯示的評論,視頻向其他網民評論應支持數千名用戶的高流量常見問題您的服務您的服務如何確保廣泛的互聯網質量?您的服務如何應對流動突然下降(緩沖區,質量下降, 等等。)?視頻存儲如何?需要考慮用于存儲和傳輸視頻數據的工具。使用機器學習建議新的視頻內容。雕像以防止不一致造成的現象。用戶在片刻之前查看了數據。沒有輸入數據。
8。Firebase或GitHub的設計API率限制器
關于這個問題,您將創建API率限制器,可以通過在給定時間段限制服務來接收API調用的數量。避免過載。
面試官可以從機器到整個分布式網絡,各種尺寸的要求。
如果其請求被阻止,基本函數設備僅限為每小時10個請求,限制器必須通知用戶。必須處理適合其尺寸的流量。常見問題解答您的系統如何測量每小時請求?如果用戶在1:20發出10個請求,然后在2:10發送另外10個請求,然后, 雖然小時數發生了變化,它們仍在同一1小時窗口中發出20個請求。分布式系統和本地系統的設計是什么?需要考慮的工具用于使用滑動時間窗口來避免每個小時重置。保存計數器整數而不是請求本身以保存空間。
9。設計一個類似于yelp或附近的地方/朋友的關閉服務器
對于最后一個問題,您將設計一個鄰近的服務器,它用于存儲和報告與餐廳和其他地方的距離。用戶可以按距離或流行搜索附近的位置。數據庫必須將數據存儲在世界各地的5000萬個地點。但延遲低。
必要的功能存儲在超過5億個位置。必須唯一確定位置,并具有相應的數據,例如, 質量檢驗和服務時間。搜索必須以最少的延遲返回結果。用戶必須能夠通過距離或質量搜索結果。常見問題如何存儲這么多位置數據?你如何獲得快速搜索結果?您的系統如何處理不同的人口密度?剛性緯度/經度網格將導致基于密度的變化。我們如何優化常見的搜索位置?需要被視為使用關系數據庫存儲位置列表和相關數據的工具。使用緩存來存儲最流行地點的數據。使用碎片化根據區域分割數據。在動態網格中搜索。如果單個單元格中有超過500個位置,請將網格分成4個較小的細胞。重復直到您只需要搜索少于500個位置。
10。設計和搜索引擎相關服務,例如,輸入類型
該服務將部分完成搜索查詢,顯示5個建議以完成查詢。它應該實時適應高度搜索內容。并建議它給其他用戶。
E.G,海英隊在活動后幾分鐘內贏得了超級碗。
基本功能服務應將一些查詢與流行查詢相匹配。應糾正較小的拼寫錯誤,例如, “DGO→Dog”應該猜測根據查詢的5個最可能的選項應該在寫查詢時更新, 您對拼寫錯誤有更多的糾正糾正措施嗎?如何在不造成延遲的情況下更新選擇?您如何確定最可能的查詢?它是否適應用戶的搜索?如果用戶快速使用它,我該怎么辦?它建議只在完成后顯示?需要考慮使用自然語言處理機器學習算法來預測下一個字符的工具。使用Markov鏈排列最高排名的查詢概率。每小時更新ML算法或每日(不是實時),減輕負擔。接下來應該學到什么?
這些問題應該幫助您了解系統設計訪談中將解決的問題類型。鍛煉解決方案并解釋了這些問題是準備下一次面試的最有效方法。
(本文“十大系統設計訪談問題”由文教團隊的文舞舞蹈舞蹈翻譯。請注明來源。)
企業網站的建設公司 公司建網站多少錢 企業網站改版
請立即點擊咨詢我們或撥打咨詢熱線: 13968746378,我們會詳細為你一一解答你心中的疑難。項目經理在線