來自:nanchen(微訊號:nanchen_android) 作者:劉旭 連結:http://blog.csdn.net/liuxu841911548/article/details/79516109 
面對著金三銀四的黃金時段,耐不住寂寞的我也準備了下跳槽,標的是二線網際網路以上公司。,下麵總結和分享下最近面試的幾家公司的面試題和麵試經驗。
面試經驗分享
美團
狀態:二面已掛
參加美團的面試是在年前,途徑是透過朋友內推的方式。沒有透過的原因是因為自己準備的不足和長時間沒有面試的緊張感等原因造成的,總體還是因為自己學藝不精。
一面:一面的面試官很好,當時因為我大概有一年多沒有面試了,參加這場面試就顯得我特別緊張,簡單總結下一面和二面的面試題。
- 
先做個自我介紹? 
 自我介紹一般來說介紹下畢業的學校,目前所在的公司,工作的職責和經歷以及自己擅長的事情就夠了,時間控制在3分鐘之內。
- 
畫一下你的最近專案的專案架構? 
 這個問題要看你是做的應用層的開發還是 SDK(FrameWork 層的開發),應用層的開發一般來說專案架構就從 MVC,MVP,MVVM 的架構上面去說,大體總結下每一層封裝的內容,具體細節如果面試官問的話再去說。SDK 的話一般來說都是分層設計,比如我們的地圖 SDK 分為應用層,SDK 對外提供的介面層,中間互動層和核心層。面試官要深入瞭解的話就會問到具體的細節了。
- 
看到你專案裡面涉及到 NDK 的知識,簡單介紹下你對 NDK 的理解以及具體的使用過程? 
 這個問題可以從 NDK 的發展過程來說,由 .mk 檔案到 cmake 檔案以及他們的差異。 具體使用過程無非就是 Java 呼叫 C 和 C 呼叫 Java,到這來說還是比較基本的,如果你懂的多可以聊一些 NDK 的高階用法,比如與多執行緒的結合,介面多的時候的封裝邏輯,以及動態庫如何連結靜態庫等等。
- 
描述一下一個類的完整建立過程? 
 這個問題主要考察對虛擬機器的結構的理解和類物件初始化的順序。
- 
說一下 final,finally,finalize的區別?一個變數被final修飾,變數的初始化在該類的建構式裡面,這樣寫對嗎?請說明原因。
- 
Handler的原始碼,主要涉及Handler,Looper,MessageQueue的對應關係,主執行緒向子執行緒發訊息如何發?在子執行緒 new 一個Handler需要註意什麼?
- 
多執行緒相關的問題,實現多執行緒的方式? volitile關鍵字的作用?
- 
RecyclerView的原始碼?RecyclerView的最佳化?ListView和RecyclerView如何實現的每個 Item 的滑動?
- 
事件分發機制的原始碼?並且出了一個具體的題目。 
- 
自定義 View 的原始碼以及流程,特別問到過 MessageSpec的幾種測量約束方式,為什麼這樣設計?
- 
設計樣式的 6 大原則?解釋下每種原則,為什麼這樣設計?具體問到了幾種工廠樣式的比較,觀察者樣式等? 
- 
SurfaceView瞭解嗎?瞭解它的實現原理嗎?主要是Surface的原始碼。
- 
記憶體最佳化如何做的?具體問到了一些分析工具的使用以及第三方工具的原始碼? 
- 
反射用過嗎?說一下反射的機制? 
- 
手寫快速排序,說一下你對幾種排序演演算法的理解以及時間複雜度? 
- 
Java 基礎的一些東西也有問到,集合類和併發包下的一些內容? 
- 
執行緒間通訊的方式?可以在非主執行緒修改 UI 嗎?舉一些例子具體說明。 
- 
你專案中最讓你感到驕傲的一件事?最近遇到的解決不了的問題? 
總結:有一些問題回答的不好,導致技術面試沒有透過,不過交流的過程也是提升的過程,最後我問面試官對我的評價,面試官送我了一句話:知其然並知其所以然。問題大概就這些,可能由於記憶有一些想不起來了。
Luckin Coffee
狀態:已給Offer
這也是朋友內推獲得的面試機會,感謝朋友!
面試總共三輪,大概需要 30 分鐘完成一套筆試題,2 輪技術,一輪 HR。面試官很熱情,說是不要當成面試,就當成是彼此的技術交流。
- 
自我介紹,介紹下做過的專案? 
- 
WebView的具體細節,最佳化,Java 和 js 互動以及一些安全漏洞,最後還聊到了和 React native 的優劣勢等等。
- 
網路框架問到了 Retrofit和Rxjava,聊到了框架的比較以及Rxjava的優缺點?
- 
瞭解註解嗎?聊到了註解框架 Butterknife和EventBus?以及使用EventBus的優缺點?
- 
記憶體洩漏,記憶體最佳化,問到了 Leakcanary的原始碼?
- 
事件分發機制和 Ibinder機制?
- 
設計樣式? 
- 
兩個棧模擬一個佇列,手寫程式碼? 
- 
熱修複技術和外掛化技術,幾種方案的對比? 
- 
如果入職希望做的方向? 
- 
期望薪資等等然後就是和 HR 具體聊? 
- 
還有涉及到一些公司業務層面,待加強和完善層面的部分相互交流意見 
科大訊飛
狀態:未回覆,估計已掛 這個面試邀請是獵頭推薦的,感覺這個獵頭不專業,面試體驗不太好。
體驗不怎麼好的面試,因為面試的崗位是新部門,智慧醫療,在北京也沒有具體的辦公地點,說是要深入基層,面試官級別應該是比較高,給我的名片顯示是北方大區負責人。面試時間大概有 3 分鐘,地點是在清華大學的一個聯合實驗室,深入的技術問題沒有問。
- 
簡單做個自我介紹,自我介紹可能是感覺說的太多,直接打斷了,然後就按照他的思路在問。 
- 
先問了專案架構? 
- 
問了一個 H5 互動的時候載入狀態的 session 應該如何寫,可能是他們專案中有實際應用場景,但是我確實是沒有接觸過。 
- 
聊了聊我的專案,我跟他說是偏底層,應用層做的比較少,也可能是他們要招偏業務的 Android 開發,然後後面就沒有問了。 
吐槽一下,給我的感覺就是特別不專業,一言堂,作為大公司來說,你應該至少安排 2 到 3 輪的面試吧,還有你要招應用層的人,我簡歷上明明寫的偏底層,你又為何要約我面試呢?而且你要招 Android,Android 的面試題根本沒怎麼問到,好吧,就當是開拓下眼界了。
京東生鮮部門
狀態:在談薪資和 Offer
京東的面試還是很專業的,算上 HR 面總共經歷了 5 輪,第一輪的面試官應該是做後臺 Java 開發的,問的主要是 Java 基礎。二面應該是部門內的同事,問的內容是 Android 基礎,問的面很全,幾乎什麼都會問到,第三輪是部門 Leader,問的內容就比較深了,涉及到的原始碼和 frameWork 層的東西就比較多了,第四輪是大部門負責人,不會問技術了,就是聊聊大方向,最後一輪是 HR,大公司的 HR 都有一票否決權。
總結下問到的技術問題吧。
一面:
- 
Java 的特性?面向物件,繼承,多型?著重問了多型的實現方式 
- 
介面和抽象類的區別? 
- 
常見的 IO 流,簡單說下你封裝的檔案讀寫流的封裝過程? 
- 
介紹下你瞭解的集合類?以及他們的應用場景,執行緒安全的集合類都有哪些?問到了 HashMap的原始碼
- 
簡單說下多執行緒的實現方式以及你在專案中多執行緒的實際應用? 
- 
JVM 記憶體結構,垃圾回收機制以及垃圾回收演演算法? 
- 
併發相關的一些問題? 
二面(女面試官):
- 
聊到了 Android 的四大元件?Activity 啟動樣式? 
- 
Java 基礎聊到了集合類,IO 流,多執行緒等? 
- 
事件分發機制? 
- 
自定義 View 的流程? 
- 
網路框架? 
- 
提了具體的需求,讓我說下實現思路? 
三面:
- 
聊到了專案架構? 
- 
Handler的原始碼?
- 
專案用到的和瞭解的設計樣式? 
- 
Retrofit的原始碼?網路框架封裝的邏輯以及最佳化?
- 
外掛化技術?實現的原理? 
- 
dex 的打包和份包懂嗎? 
- 
APP 的啟動流程? 
- 
APP 保活方案? 
- 
出了一個具體的演演算法題,讓手寫實現? 
- 
動畫的分類和具體實現? 
- 
程式碼的重構?問了的一個具體的應用細節。 
- 
效能最佳化工具,以及做過的專案效能最佳化的細節? 
四面和 HR 面就不涉及具體技術細節了,主要是大方向和性格等。
這次面試整體還是比較舒服的,有回答的不好的問題面試官都會引導你去說你能理解的東西,越是大公司,越註重基礎知識,後面會說到被虐的比較慘的一次面試。不過現在的技術水平還沒有達到超一線網際網路的水平,再接再厲吧。
陌陌
狀態:在談薪資和 Offer
陌陌總共有 4 面,2 輪技術,1 輪 HR,1 輪大部門 Leader(VP)
陌陌這邊的面試問的技術深度很深,面試體驗也很好。技術的話這邊職位要求是要有 OpenGL 基礎,當然 Android 要精通,C++ 要瞭解。
一面:
- 
先做這個自我介紹? 
- 
自我介紹中有提到跨平臺開發,聊到了 WebView的具體技術細節和 NDK 的具體技術細節?
- 
說一下你瞭解的 OpenGL ES 的基礎知識點,聊到了坐標轉換,OpenGL 的一些專業名詞的概念? 
- 
說一下 OPenGL ES 的渲染流程? 
- 
說一下你是如何封裝和使用 Shader 的,主要是指的是 glsl 指令碼語言對 OpenGL ES 的封裝? 
- 
FrameBuffer你是如何使用的?說一下使用過程?
- 
後面還有問到 OpenGL 的一些更深層次的概念? 
- 
Android 問到了 RecyclerView的封裝?以及涉及到網路資料的互動是如何封裝的?
- 
問到了自定義執行緒池以及執行緒池的工作原理? 
- 
多執行緒這一塊問到了併發?併發包下的關鍵類,le 關鍵字如何保證資料對於多個執行緒是即時可見的?主要是涉及到 DVM 的工作記憶體和共享記憶體,保證了資料的什麼特性?有序性,原子性還有一個我記不清了。。。。。 
- 
記憶體最佳化這一塊,可以用什麼工具對程式碼進行靜態檢查? 
- 
記憶體最佳化的工具以及相關原始碼和使用? 
- 
事件分發機制? 
- 
設計樣式中專案中使用了哪些? 
- 
APP 啟動流程的原始碼? 
- 
問到了動畫的分類,屬性動畫的使用過程? 
- 
常見的資料結構也有涉及,比如 HashMap和ArrayMap的區別,以及他的預設擴容閾值?
- 
問了 APP 的預設記憶體大小,DVM 虛擬機器和 ART 虛擬機器的區別? 
二面:
- 
OPenGL ES 和一面問的差不多 
- 
Android 部分主要問了專案架構? 
- 
設計樣式問了生產者消費者樣式? 
- 
自定義 View 出了一道具體的題目,說明實現思路? 
- 
Gradle打包的依賴問題?如何解決的?
- 
還問了除了 OpenGL 之外還瞭解其他的圖形渲染語言嗎? 
百度
狀態:二面已掛
百度的面試題目我就不貼了,大致說下麵試問的範圍,OpenGL ES 部門遇到了真正的大神,問的很多深入的知識點我都不清楚,Android 部分專案架構以及專案工作問的特別細,併發部分和演演算法要求比較高,這次面試也讓我認識到了自己的資料結構和演演算法部分需要使用業餘時間好好強化下,當然還有一些更深的技術細節還需要持續精進。
革命尚未成功,還需繼續努力啊!
58到家
狀態:在談 Offer
58 到家這邊面試總共三輪,2 輪技術,1 輪 HR。這邊更偏業務,所以專案邏輯就會問的特別多。我專案涉及地圖,導航,定位,所以去面58到家專案這塊優勢比較大。 簡單說下我覺得問到的有技術難度的問題吧
- 
問到了地圖 SDK 的具體實現技術細節? 
- 
如何實現持續上傳軌跡資料,瞭解過長連線,短連結嗎? 
- 
TimerTask使用過程中有沒有碰到過適配問題,這個我是真沒碰到過,後續才瞭解了下。
- 
APP 保活的 Native 方案,這個聊的比較深聊到了系統層面。 
- 
手機如何對 APP 進行管理的,理解了這個問題才能理突破系統的限制,不透過系統白名單的方式進行達到保活效果? 
- 
定位時間間隔的問題? 
- 
問到了地圖中螢幕坐標和地理坐標轉換的實現方式,問這個主要是因為我的 SDK 中有涉及和實現? 
- 
地圖渲染的封裝邏輯? 
- 
其他的與專案業務關聯性比較大就不在此一一列舉了。 
總結(一些建議)
面試了這幾家公司,感受最深的是面試一定要提前準備,儘量讓自己在面試過程中條理化,因為面試不只是對技術能力的考察也是對交流,溝通能力的考察,更多的是一個綜合能力。下麵給正在面試或者準備面試的童鞋提幾點建議。
- 
面試的簡歷一定要精心準備,因為簡歷是你能否獲得面試機會的前提,一定要明確自己的亮點與優勢,當然也要知悉自己的弱項,以便強化訓練。 
- 
簡歷投遞與內推,有朋友能內推一定選擇朋友內推,沒有朋友內推優先選擇簡歷掛在獵頭網站上,只要你夠強,獵頭會聯絡你的,之後再選擇比如拉勾網,卓聘,獵聘這些網站,有選擇性的篩選資訊。 
- 
面試前的準備工作,最好是自己多寫寫筆記,做一個善於總結的人,當然面試回來後一定把面試官問到的知識盲點和理解不深的地方認真補充下。 
- 
面試時努力剋服緊張,可以採用自我暗示和刻意練習的方式。 
- 
遇到面試不會的問題不要慌張,在自我知識體系的基礎上,分析與推測,或者說出自己的想法,因為這也是你學習能力的一種體現。 
- 
面試一定要準時,不要遲到,認真對待每一場面試機會,因為面試也是你提升個人技術與能力的有效途徑。 
寫在最後
最後祝大家在新的一年裡,技術可以持續精進,能夠實現自己的標的。本文如有問題,歡迎評論指正!
更多精彩,大家還可以直接點選原文連結前往 劉旭 同學的 Blog 哦。
●本文編號299,以後想閱讀這篇文章直接輸入299即可
●輸入m獲取文章目錄

演演算法與資料結構
更多推薦《18個技術類公眾微信》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。
 知識星球
知識星球