不管大家參加任何的編程面試刀荒,都逃不過關(guān)于系統(tǒng)設(shè)計和軟件設(shè)計的問題代嗤。如果你想做的更好,你可以試試準備這個話題缠借。以前我分享過我的一個關(guān)于編程面試問題的清單干毅,也分享了一些關(guān)于系統(tǒng)設(shè)計的問題,但好多人比較感興趣泼返,會提問更多的問題硝逢。因為系統(tǒng)設(shè)計比較難,需要多加練習(xí)才能更好地掌握绅喉。
當我在偶然在Educative上看到如何應(yīng)對系統(tǒng)設(shè)計面試的課程時渠鸽,我就從親朋好友那里收集了許多關(guān)于系統(tǒng)設(shè)計面試問題,然后做成了清單分享給你們柴罐。
這將是一個很好的資源徽缚。這不僅給你提供許多關(guān)于系統(tǒng)設(shè)計面試問題,還可以給你們提供解決問題的知識與工具丽蝎。
換句話說猎拨,這個課程可以教你怎么一步步構(gòu)建像Facebook膀藐,Twitter,Uber的真實世界系統(tǒng)红省。
實際上额各,網(wǎng)絡(luò)上沒有太多關(guān)于系統(tǒng)設(shè)計的面試題資源。我只是在Edcative上看到rajat mehta 寫的如何準備系統(tǒng)設(shè)計面試吧恃。而關(guān)于頂尖的公司像 Amazon虾啦,Google ,Microsoft痕寓,Apple傲醉,SalesForce,Flipcart 等等提出的系統(tǒng)設(shè)計的問題,網(wǎng)上根本找到解決方法呻率。
無論如何硬毕,當你把這個資源和這個文章提出的問題的相結(jié)合,你在面試系統(tǒng)設(shè)計的時候礼仗,你將所向披靡吐咳。你也可以試著自己解決這些問題,然后對照我給的答案元践。
順便提一下韭脊,這個只適用有一些編程經(jīng)驗和基礎(chǔ)的軟件設(shè)計知識的童鞋。如果你是個編程小萌新单旁,我的建議是你自己先學(xué)一些JAVA編程基礎(chǔ)知識沪羔,例如Coursera上的Principles of Software Design和Edcative上的 Web Application and Software Architecture 101。
我這個課程不僅僅能教你如何用JAVA解決一個真實世界構(gòu)建的問題象浑,而且能用合乎邏輯的方式來思考和設(shè)計蔫饰。這種能力是每個成功設(shè)計開發(fā)者最值得所掌握的。
21道系統(tǒng)設(shè)計+面向?qū)ο蟮拿嬖囶}
事不宜遲融柬,我們馬上來看這21道最受歡迎死嗦,提問率最高的系統(tǒng)設(shè)計+面向?qū)ο蟮拿嬖囶},這些問題的分析能讓你輕松應(yīng)對項目設(shè)計的面試粒氧。
1. 如何用Java設(shè)計自動售貨機越除? (解決方案)
你需要編寫代碼來設(shè)計自動售貨機,該自動售貨機售賣如巧克力外盯,糖果摘盆,冷飲之類的產(chǎn)品,需要投入硬幣進行購買饱苟,例如5分孩擂、10分、25分箱熬,50分类垦、1元等狈邑。確保插入硬幣獲得產(chǎn)品 ,然后退回零錢蚤认。 另外米苹,編寫單元測試以證明這些常見用例有效。 如果遇到困難砰琢,可以閱讀有關(guān)解決這些經(jīng)典系統(tǒng)設(shè)計問題的兩部分文章(第1部分和第2部分)蘸嘶。
2. 如何設(shè)計類似Goo.gl或Bit.Ly的URL縮短服務(wù)?(解決方案)
這是一個常見的系統(tǒng)設(shè)計問題陪汽。 你給了一個普通長度的URL训唱,你將如何設(shè)計為其生成較短且唯一的別名的服務(wù)? 如果你不熟悉URL縮短程序服務(wù)挚冤,請查看一些常用的例子况增,例如Google的goo.gl和Twitter使用的bit.ly。確保在一些設(shè)計決策后提供數(shù)據(jù)庫模式和基本原理你辣,例如保留數(shù)據(jù)多長時間巡通,如何獲取統(tǒng)計信息和分析等尘执。如果遇到問題舍哄,可以參照關(guān)于Educative上“系統(tǒng)設(shè)計面試課程”中給出的解決方案。
3.你如何設(shè)計交通控制系統(tǒng)誊锭?
經(jīng)典系統(tǒng)設(shè)計問題仍然提及頻率表悬。 確保你知道如何從一種狀態(tài)過渡到另一種狀態(tài),例如從紅色過渡到綠色丧靡,從綠色過渡到橙色再過渡到紅色等蟆沫。
4. 如何設(shè)計限價單? (解決方案)
限價訂單簿在證券交易所中用于根據(jù)價格和時間優(yōu)先級將買入訂單與賣出訂單進行匹配温治。 你會怎么做饭庞? 你將使用哪種數(shù)據(jù)結(jié)構(gòu)? 請記住熬荆,匹配的速度是關(guān)鍵舟山,也是可靠的。 如果你需要復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu)卤恳,則可以查看Java課程中的數(shù)據(jù)結(jié)構(gòu)和算法累盗,如果你遇到困難,可以在這里查看我的解決方案突琳。
5. 你如何設(shè)計類似Pastebin的網(wǎng)站若债?
Pastebin允許你粘貼文本或代碼,然后在任意位置共享指向該代碼的鏈接拆融。它不是在線代碼編輯器蠢琳,但是你可以使用它來存儲任何類型的文本啊终。
6. 你將如何創(chuàng)建自己的Instagram? (解決方案)
Instagram是一個照片共享應(yīng)用程序傲须,它提供了一些自定義濾鏡以提高照片質(zhì)量孕索。你的應(yīng)用程序應(yīng)該具有照片上傳功能,為搜索標記照片以及一些基本的過濾器躏碳。如果你可以添加共享或社交網(wǎng)絡(luò)搞旭,那就太好不過了。順便說一句菇绵,如果你遇到困難肄渗,還可以在Educative的如何準備系統(tǒng)設(shè)計面試課程中看到免費的解決方案。
7. 你如何設(shè)計像Google Drive或Dropbox這樣的全局文件共享和存儲應(yīng)用程序咬最?
這些用于存儲和共享文件翎嫡,照片和其他媒體。你如何設(shè)計諸如允許用戶上傳/查看/搜索/共享文件或照片之類的東西永乌?跟蹤文件共享的權(quán)限惑申,并允許多個用戶編輯同一文檔?
8. 你如何設(shè)計類似Whatsapp或Facebook Messenger的聊天應(yīng)用程序翅雏?
你肯定使用過WhatsApp和Facebook圈驼?沒有?如果沒有望几,我告訴你聊天應(yīng)用程序允許你向你的朋友發(fā)送消息绩脆。這是點對點的連接。你保留一個朋友列表橄抹,查看他們的狀態(tài)并聊天靴迫。在WhatsApp中,你也可以連接組楼誓,但適用于高級和經(jīng)驗豐富的開發(fā)人員玉锌。至少,你應(yīng)該提供一種設(shè)計來保留好友列表并從中發(fā)送和接收消息疟羹。
9. 你如何設(shè)計Twitter克轮魇亍?
Twitter是一種流行的消息服務(wù)阁猜,可讓你向所有關(guān)注者廣播消息丸逸。你發(fā)布推文,你的關(guān)注者可以看到這些消息剃袍,他們可以喜歡或轉(zhuǎn)發(fā)黄刚。確保實現(xiàn)了諸如粉絲關(guān)注,主題標簽民效,發(fā)博憔维,刪除等常用功能涛救。如果你覺得自己有點困難,則可以按照如何應(yīng)對系統(tǒng)設(shè)計面試的課程解決方案進行操作业扒。
10. 如何設(shè)計像YouTube或Netflix這樣的全球視頻流服務(wù)检吆?
設(shè)計像NetFlix或YouTube這樣的視頻流服務(wù)時,關(guān)鍵是順暢和緩沖以及在低帶寬連接上的功能程储,如何應(yīng)對這些挑戰(zhàn)蹭沛?
11. 如何設(shè)計ATM機?
ATM機允許用戶存入和提取現(xiàn)金章鲤。它還允許用戶查看其余額摊灭。你如何設(shè)計這樣的系統(tǒng)?你面臨的主要挑戰(zhàn)是什么败徊?
12. 如何設(shè)計API速率限制器帚呼?
13. 你如何設(shè)計Twitter搜索?
14. 如何設(shè)計類似于Google的網(wǎng)絡(luò)爬蟲皱蹦?
網(wǎng)絡(luò)搜尋器可以訪問網(wǎng)站并像Google一樣搜尋所有鏈接并將它們編入索引煤杀,以便它們以后可以出現(xiàn)在搜索結(jié)果中。爬網(wǎng)程序還可用于在一組目錄中搜索特定文件沪哺,你如何設(shè)計此類文件沈自?主要挑戰(zhàn)是什么?
15. 如何設(shè)計Facebook的Newsfeed凤粗?你將使用哪種算法酥泛?
新聞源是Facebook的重要組成部分,它使用戶可以查看他的世界正在發(fā)生的事情嫌拣,包括朋友和家人,他喜歡的頁面呆躲,他關(guān)注的組以及Facebook廣告异逐。
Newsfeed算法的作用是顯示對用戶來說最重要的消息,并且可以產(chǎn)生很高的參與度插掂。顯然灰瞻,來自朋友和家人的消息應(yīng)該優(yōu)先處理。如果你覺得陷入困境辅甥,則可以按照如何做好系統(tǒng)設(shè)計面試的課程所提出解決答案酝润。
16. 如何設(shè)計Yelp或Nearby Friends?
17. 如何設(shè)計全球乘車服務(wù)E.G. Uber,Grab或Ola后端璃弄?
優(yōu)步(Uber)和奧拉(Ola)是最受歡迎的兩種乘車服務(wù)要销,它將駕駛員和乘客都組合到一起。你如何設(shè)計讓乘客看到附近的出租車并進行預(yù)訂夏块?
18. 如何設(shè)計BookMyShow疏咐?
一個允許你預(yù)訂電影院和活動門票的網(wǎng)站纤掸。這實際上是一家運轉(zhuǎn)良好的印度創(chuàng)業(yè)公司。
19. 如何設(shè)計Quora浑塞,Reddit或Hackernews等社交網(wǎng)絡(luò)+留言板服務(wù)網(wǎng)站借跪?
Reddit,Quora和HackerNews是一些最受歡迎的社交網(wǎng)站酌壕,用戶可以在其中發(fā)布問題或共享鏈接掏愁。其他用戶可以回答問題或?qū)蚕礞溄影l(fā)表評論。
20. 你如何設(shè)計類似Airbnb的應(yīng)用程序卵牍?
它允許某些用戶上傳房間出租托猩,而其他用戶則出租。某些功能僅適用于管理員辽慕,發(fā)布者和訂閱者京腥。
21. 你如何設(shè)計電梯系統(tǒng)?
我們大多數(shù)人都使用電梯溅蛉,你在一些大型辦公大樓中公浪,你可以看到3到4部電梯。你需要為此設(shè)計軟件船侧,以便可以在不同樓層快速使用欠气。你可以假設(shè)你有兩部電梯和一棟10層樓的建筑。
如果你需要一些幫助镜撩,那么我建議你可在Udemy上學(xué)習(xí)如何做好系統(tǒng)設(shè)計面試課程预柒,Rajat Mehta在那里有一個完整的案例研究來解決這個問題。你還將在那里學(xué)習(xí)高級系統(tǒng)設(shè)計袁梗,低級系統(tǒng)設(shè)計和數(shù)據(jù)庫設(shè)計宜鸯。
參考文章:
本文作者:Javin Paul, 翻譯:1 Way
原文鏈接:https://dzone.com/articles/21-object-oriented-and-system-design-problems-to-p
譯文首發(fā):http://blog.didispace.com/21-object-oriented-and-system-design-problems-to-p/
本文有spring4all技術(shù)翻譯組完成遮怜,更多國外前沿知識和干貨好文淋袖,歡迎關(guān)注公眾號:后端面試那些事兒。