新手必看!Android 系統設計面試必考重點
Android 面試常分為 App 設計與工具庫設計兩類,重點在理解架構選擇、API 設計與效能優化。


文章目錄



文/Jamie Chen
最近面試到一段落,發現mobile system design的文章真的不多,網路上的資源都以backend system design為主,但其實mobile與backend的system design著重的地方非常不同,這篇會以Android mobile system design為主,說明面試會遇到什麼問題、怎麼準備以及應該怎麼回答
面試的問題?
System design絕對不是問什麼是activity/fragment這種問題。通常分為兩大類
- App design: newsfeed, photo upload/sync app, and chat message app, news app… 這種比較直覺就是請你設計一個facebook, whatsapp這類的
- Tool library design: log tool, A/B testing tool, downloader, image loader.. 這種真的就比較難回答,非常考驗平常有沒有在追third party library’s source code
如何準備?
- Android developers 絕對是最好的資源。把你平常開發時候用的東西了解透徹,這是最基本的。Ex: Why MVVM? MVVM解決什麼問題?什麼時候用WorkManager? 什麼時候用Foreground Service
- Backend API的基本概念一定要熟悉,會幫助你怎麼設計database。還有一些backend的概念有時候也會被問到。Ex: chat message app會問push&pull model, paginaion用page number, or cursor index。我準備的方法就跟backend的同事多請教多討論。另外也推薦system design的聖經 Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
- System design這關通常會問的很細節,尤其是performance的問題。如何支援offline? 網路不穩定怎麼辦?很耗電怎麼辦?大推Google官方的Android performance patterns。建議每個影片都看過至少一次。
- Grokking the Mobile System Design interview 這篇文章我大概看了三次,講的非常好,幫助很多。
- 練習的時候就自己畫在紙上或ipad上,然後大聲唸出來,並試著想面試會遇到的問題,在針對不足補強
回答步驟?
先寫在最前面,這邊很重要的一件事: 溝通。因為問題真的太廣了,請設計一個Facebook。Facebook的功能這麼多,一定要一直溝通確保你跟面試官on the same page再開始回答
- 確認好問題,比如說newsfeed,就大概先畫一下newsfeed的view的樣子。這樣可以確保你是往正確的方向回答,也可以幫助接下來的思考
- 接著會開始說需要有什麼API(get/post/update/delete),怎麼設計in app databse,把大概的流程架構畫出來,這邊通常會問為什麼in-app-database, table or database的問題
- 接著我會開始說app要用什麼架構,這邊主要我都以MVVM為主。Repository, UseCase, ViewModel, LiveData, View怎麼溝通,為什麼要這樣做?MVVM的優缺點都分析一次。如果是tool類型的app真的比較難回答,就不能分析View的部分。如果是圖片就了解cache有幾層,怎麼運用builder的,Log是怎麼傳上去的
- 接著分析完後,通常會挑一兩個重點問你,比如chat meesage app, push or pull的優缺點。怎麼support offline,怎麼做cache? 網路不穩定要怎麼做cache?background process的取捨。

System design真的不太好準備,也是最體現實力的一關。平常開發就多思考,面試前多畫白板,跟其他developer多交流,多看source code。面試的時候不要覺得是在面試,當成是在跟以後的同事交流,這樣也可以看出這間公司是不是適合你。2020找工作不容易,希望這篇文章可以幫助到你。祝大家offer多多,都找到喜歡的工作,也歡迎在下方分享面試系統設計的心得
本文經 Jamie Chen 授權
文章來源:如何準備Android系統設計的面試