> For the complete documentation index, see [llms.txt](https://hello.imziv.tw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hello.imziv.tw/guan-wu-gong-cheng-shi-zhe-ge-fu-ben/shi-ren-ya-hui/xi-gu-sr.-android-mian-shi-xin-de.md).

# 矽谷 Sr. Android 面試心得

【背景簡介】\
目前在Square當Senior Android Engineer，今年在職即將滿四年，當年入職簽約拿的股票即將領完，想說出來試試看自己的身價，也順便挑戰一下自己。這次很幸運拿到6個offer: Facebook, TikTok, Snapchat, Uber, Lyft, Instacart，下面來分享一下一些心得，希望可以對未來找工作的人有幫助。

&#x20;

【心態】\
我覺得心態其實很重要，不要把面試結果看得太重，搞得自己患得患失的。剛畢業的時候，每次面試完都趕緊給recruiter發個感謝信。幾天後沒消息，又整天忐忑不安的胡思亂想是不是哪裡沒面好。收到recruiter要約時間給update，但是信裡又沒說是好還是壞又再那惴惴不安。其實後來想想都不是很必要，面試的結果，在你掛完電話或是走出房間的同時，就已經決定了。你寄不寄感謝信，面完有沒有催recruiter給你結果，其實都不會影響結果。\
\
四年前因為被裁員的關係，學生身份被迫要在90天內找到工作，壓力山大。這次在心態上比四年前輕鬆許多，因為在職跳槽，沒有找不到工作就會失業的壓力，表現得比四年前更好。建議大家還是把心態調整好，面完了就趕緊準備下一家的面試，抓緊時間，不要糾結在自己無法控制的事情上。\
&#x20;(當年失業心得：<https://aillynotes.com/every-cloud-has-a-silver-lining/>)

&#x20;

【策略】\
比較沒經驗的人，或是對自己比較沒把握的人，我建議先從比較不想去的公司開始面，把想去的公司排在最後面面。如果一開始就面dream company，假使被拒了，後面很可能心態就崩了。心態崩了面試也很難成功，導致負向的循環。先拿不怎麼想去的公司練手，可以先練習手感和節奏，心態上也比較沒有壓力。如果拿到offer了，還可以增強自己的自信心。\
\
有offer在手的氣場去面試，跟跪求你給我offer的氣場去面試，兩者的表現是差很多；就算沒拿到offer也無所謂，反正本來就不想去。不管結果如何，每場面試都要虛心檢討，被問倒的地方、回答起來不是很有把握的地方、寫起來卡卡的地方等等，面完就趕緊去補強自己不足的部分。

&#x20;

【準備】\
\
Coding\
刷題這招已經被講爛了，要怎麼刷網上很多資訊可以參考。比較沒經驗的建議剛開始可以照題目類別來刷，這樣比較好做系統性地整理複習。做到最後通常會發現：比較不熟的都是某些特定的類別，譬如說我覺得DP特別難，我就針對DP類型的題目多加練習。等複習的差不多即將開始面試的時候，就可以開始針對不同公司的tag開始刷高頻題，從最高頻的一路往下刷，這樣做會比較有效率。\
\
LC現在1600多題，一般普通人是沒有時間刷完的，刷太多也很容易刷後面忘前面，或是導致自己錯亂，而且面試要遇到原題的機率其實不算太高，大多數都會有些變形，所以就算你全部刷完也不保證你coding會過關。\
\
我認為掌握每個類型的考點是比較重要的，把類似的題目一起刷，就可以發現解法都是類似的，歸納出方法後，遇到這類的題目就可以有一個比較清晰的思路。\
\
Design\
Design 的面試主要考核的是你對 large scale mobile app 架構的理解，通常會考你design 一個大家常用的 app，例如 Instagram、Whatsapp、Robinhood、Airbnb、Gmail等等。大家有空不妨打開手機，看看自己常用哪些 app，試著想想看如果是自己來寫這個 app，會怎麼設計，哪邊自己不清楚怎麼做，可以網上查一下資料，對增加自己的深度廣度很有幫助。\
\
在 Design 面試中，你可以想像你的角色是一個 tech lead，你要帶領你的團隊打造一個全新的 app，所以你要在台上解釋給底下的人聽，這個 app 要怎麼建，需要哪些component，要用到哪些 library，有哪些 trade off，跟 server 要怎麼溝通等等。\
\
你可以假設你有一個完美的 backend 團隊，可以做出任何你需要的 endpoints 來提供你資料。\
&#x20;\
Design 面試最重的點就是，你是主導者，要 drive 整個 communication，面試官在講完 app 的需求後，剩下超過九成的時間都是聽你講解，如何有條理地把整個 app的架構完整的分析一遍，是這個面試的重點。\
\
Mobile development 上有很多種 design pattern，最常見的三種就是 MVC、MVP 以及 MVVM，建議先把這三種的優缺點先複習一遍。面試的時候可以挑自己喜歡的一套出來用，一步一步地把每個 component 串起來然後講解它的功能，看你要 bottom-up從 server 取資料講到 UI，或者 top-down 從 UI 講回如何從 server 取資料都可以。\
\
整個架構畫完之後就會有一個清晰的 data flow，也就有了基本分。\
\
後面面試官會針對特別的情況展開討論。例如：\
\- 資料如何存儲？有哪些存儲資料的方法？\
\- Device offline 或者 network 很慢無法從 server 取資料了怎麼辦？\
\- App 被 system kill 了 cache 都不見了怎麼辦？\
\- 資料太多了一次傳太慢了要怎麼辦？\
\- 圖片和影片要怎麼存？圖片要太大 load 很久要怎麼處理？\
\- Real time communication 要怎麼建？\
\- Recycler view 很卡的原因可能是什麼？要怎麼優化？\
\- etc.\
\
以上這些都是我面試中實際被問過的問題，每個問題可能都有不同的解法或 libaray可以用（廣度），你要能分析各種解法的優缺點 (深度)，然後根據這些分析說明你為什麼選了這個解法。如果這些 follow up 都能答上來的話，design 這輪基本就穩了。

&#x20;

Behavioral / Leadership\
Behavioral 的面試比較不像是面試，像是在閒聊，面試你的人通常會比較資深。這輪面試的重點在於你過往的經驗，例如：\
\- 你做過最具有挑戰性的 project 是什麼？\
\- 你做過最自豪的 project 是什麼？\
\- 你最近一個與其他組合作的 project 是什麼？\
\- 你收到最 critical 的 feedback 是什麼？收到後你做了什麼改變？\
\- 你怎麼 lead 一個 project？\
\- 底下的人意見不合你怎麼處理？\
\- 你跟主管或其他人意見不合你怎麼處理？\
\- 你怎麼 mentor 新來的人？\
\- etc.\
\
過往經驗一定要是真實的經驗，最好不要憑空捏造，不然很容易幾個深入 follow up就把你問倒了。經驗只能經年累月而得，沒辦法速成，回答的方式最好可以搭配一個過往經驗來舉例，再搭配 SOAR 法回答：\
&#x20;\- Situation: 背景介紹，事件如何發生。\
\- Obstacle: 遇到了什麼困難。\
\- Action: 做了什麼解決上述的困難。\
\- Result: 結果如何，有什麼 impact。\
&#x20;\
用這個方法回答問題可以讓整個回答非常有條理，面試官可以迅速地抓到重點。練習的時候可以把常見的高頻問題先寫下來，想想看過往經驗中有什麼例子可以往上套，然後再把例子用 SOAR 法說出來。同個問題可以有好幾種例子，每個例子也可以通用於不同問題，練習久了之後你就會建立自己的一套例子庫，遇到問題就從例子庫裡拿出回答就行了。

&#x20;

【結語】\
網上關於 mobile 面試的資料很多，但是少有人去整理，這篇就當作拋磚引玉，希望可以幫助到正在找工作的人！

作者ray3226 (邦)\
看板Soft\_Job\
標題\[心得] 矽谷 Sr. Android 面試心得\
時間Wed Nov 25 07:25:11 2020\
\
網頁好讀版：<https://aillynotes.com/android-interview/\\>
\
<https://www.ptt.cc/bbs/Soft_Job/M.1606260314.A.ADA.html>
