1. 程式人生 > >2018 Android面經分享(京東,百度,陌陌,58到家等知名公司)

2018 Android面經分享(京東,百度,陌陌,58到家等知名公司)

美團,京東,陌陌,58到家,科大訊飛,百度,luckin coffee面試總結

一.引言

面對著金三銀四的黃金時段,耐不住寂寞的我也準備了下跳槽,目標是二線網際網路以上公司。,下面總結和分享下最近面試的幾家公司的面試題和麵試經驗。

二.面試經驗分享

1.美團

狀態:二面已掛

參加美團的面試是在年前,途徑是通過朋友內推的方式。沒有通過的原因是因為自己準備的不足和長時間沒有面試的緊張感等原因造成的,總體還是因為自己學藝不精。

一面:一面的面試官很好,當時因為我大概有一年多沒有面試了,參加這場面試就顯得我特別緊張,簡單總結下一面和二面的面試題。

1.先做個自我介紹?

自我介紹一般來說介紹下畢業的學校,目前所在的公司,工作的職責和經歷以及自己擅長的事情就夠了,時間控制在3分鐘之內。

2.畫一下你的最近專案的專案架構?

這個問題要看你是做的應用層的開發還是SDK(FrameWork層的開發),應用層的開發一般來說專案架構就從MVC,MVP,MVVM的架構上面去說,大體總結下每一層封裝的內容,具體細節如果面試官問的話再去說。SDK的話一般來說都是分層設計,比如我們的地圖SDK分為應用層,SDK對外提供的介面層,中間互動層和核心層。面試官要深入瞭解的話就會問到具體的細節了。

3.看到你專案裡面涉及到NDK的知識,簡單介紹下你對NDK的理解以及具體的使用過程?

這個問題可以從NDK的發展過程來說,由.mk檔案到cmake檔案以及他們的差異。 具體使用過程無非就是Java呼叫C和C呼叫Java,到這來說還是比較基本的,如果你懂的多可以聊一些NDK的高階用法,比如與多執行緒的結合,介面多的時候的封裝邏輯,以及動態庫如何連結靜態庫等等。

4.描述一下一個類的完整建立過程?

這個問題主要考察對虛擬機器的結構的理解和類物件初始化的順序。

5.說一下final,finally,finalize的區別?一個變數被final修飾,變數的初始化在該類的建構函式裡面,這樣寫對嗎?請說明原因。

6.Handler的原始碼,主要涉及handler,Looper,MessageQueue的對應關係,主執行緒向子執行緒發訊息如何發?在子執行緒new一個Handler需要注意什麼?

7.多執行緒相關的問題,實現多執行緒的方式?volitile關鍵字的作用?

8.RecyclerView的原始碼?RecyclerView的優化?ListView和RecyclerView如何實現的每個Item的滑動?

9.事件分發機制的原始碼?並且出了一個具體的題目。

10.自定義View的原始碼以及流程,特別問到過MessageSpec的幾種測量約束方式,為什麼這樣設計?

11.設計模式的6大原則?解釋下每種原則,為什麼這樣設計?具體問到了幾種工廠模式的比較,觀察者模式等?

12.SurfaceView瞭解嗎?瞭解他的實現原理嗎?主要是Surface的原始碼。

13.記憶體優化如何做的?具體問到了一些分析工具的使用以及第三方工具的原始碼?

14.反射用過嗎?說一下反射的機制?

15.手寫快速排序,說一下你對幾種排序演算法的理解以及時間複雜度?

16.Java基礎的一些東西也有問到,集合類和併發包下的一些內容?

17.執行緒間通訊的方式?可以在非主執行緒修改UI嗎?舉一些例子具體說明

18.你專案中最讓你感到驕傲的一件事?最近遇到的解決不了的問題?

有一些問題回答的不好,導致技術面試沒有通過,不過交流的過程也是提升的過程,最後我問面試官對我的評價,面試官送我了一句話:知其然並知其所以然。問題大概就這些,可能由於記憶有一些想不起來了。

2.Luckin Coffee

狀態:已給Offer

這也是朋友內推獲得的面試機會,感謝朋友!

面試總共三輪,大概需要30分鐘完成一套筆試題,2輪技術,一輪hr。面試官很熱情,說是不要當成面試,就當成是彼此的技術交流。

1.自我介紹,介紹下做過的專案?

2.WebView的具體細節,優化,Java和js互動以及一些安全漏洞,最後還聊到了和React native的優劣勢等等。

3.網路框架問到了Retrofit和Rxjava,聊到了框架的比較以及Rxjava的優缺點?

4.瞭解註解嗎?聊到了註解框架Butterknife和EventBus?以及使用EventBus的優缺點?

5.記憶體洩漏,記憶體優化,問到了leakcanary的原始碼?

6.事件分發機制和Ibinder機制?

7.設計模式?

8.兩個棧模擬一個佇列,手寫程式碼?

9.熱修復技術和外掛化技術,幾種方案的對比?

10.如果入職希望做的方向?

11.期望薪資等等然後就是和HR具體聊?

12.還有涉及到一些公司業務層面,待加強和完善層面的部分相互交流意見

3.科大訊飛

狀態:未回覆,估計已掛 這個面試邀請是獵頭推薦的,感覺這個獵頭不專業,面試體驗不太好。

體驗不怎麼好的面試,因為面試的崗位是新部門,智慧醫療,在北京也沒有具體的辦公地點,說是要深入基層,面試官級別應該是比較高,給我的名片顯示是北方大區負責人。面試時間大概有3分鐘,地點是在清華大學的一個聯合實驗室,深入的技術問題沒有問。

1.簡單做個自我介紹,自我介紹可能是感覺說的太多,直接打斷了,然後就按照他的思路在問。

2.先問了專案架構?

3.問了一個H5互動的時候載入狀態的session應該如何寫,可能是他們專案中有實際應用場景,但是我確實是沒有接觸過。

4.聊了聊我的專案,我跟他說是偏底層,應用層做的比較少,也可能是他們要招偏業務的Android開發,然後後面就沒有問了。

吐槽一下,給我的感覺就是特別不專業,一言堂,作為大公司來說,你應該至少安排2到3輪的面試吧,還有你要招應用層的人,我簡歷上明明寫的偏底層,你又為何要約我面試呢?而且你要招Android,Android的面試題根本沒怎麼問到,好吧,就當是開拓下眼界了。

4.京東生鮮部門

狀態:在談薪資和Offer

京東的面試還是很專業的,算上HR面總共經歷了5輪,第一輪的面試官應該是做後臺Java開發的,問的主要是Java基礎。二面應該是部門內的同事,問的內容是Android基礎,問的面很全,幾乎什麼都會問到,第三輪是部門Leader,問的內容就比較深了,涉及到的原始碼和frameWork層的東西就比較多了,第四輪是大部門負責人,不會問技術了,就是聊聊大方向,最後一輪是HR,大公司的HR都有一票否決權。

總結下問到的技術問題吧。

一面:

1.Java的特性?面向物件,繼承,多型?著重問了多型的實現方式

2.介面和抽象類的區別?

3.常見的IO流,簡單說下你封裝的檔案讀寫流的封裝過程?

4.介紹下你瞭解的集合類?以及他們的應用場景,執行緒安全的集合類都有哪些?問到了HashMap的原始碼

5.簡單說下多執行緒的實現方式以及你在專案中多執行緒的實際應用?

6.JVM記憶體結構,垃圾回收機制以及垃圾回收演算法?

7.併發相關的一些問題?

二面(女面試官):

1.聊到了Android的四大元件?Activity啟動模式?

2.Java基礎聊到了集合類,IO流,多執行緒等?

3.事件分發機制?

4.自定義View的流程?

5.網路框架?

6.提了具體的需求,讓我說下實現思路?

三面:

1.聊到了專案架構?

2.Handler的原始碼?

3.專案用到的和了解的設計模式?

4.Retrofit的原始碼?網路框架封裝的邏輯以及優化?

5.外掛化技術?實現的原理?

6.dex的打包和份包懂嗎?

7.APP的啟動流程?

8.APP保活方案?

9.出了一個具體的演算法題,讓手寫實現?

10.動畫的分類和具體實現?

11.程式碼的重構?問了的一個具體的應用細節。

12.效能優化工具,以及做過的專案效能優化的細節?

四面和hr面就不涉及具體技術細節了,主要是大方向和性格等。

這次面試整體還是比較舒服的,有回答的不好的問題面試官都會引導你去說你能理解的東西,越是大公司,越注重基礎知識,後面會說到被虐的比較慘的一次面試。不過現在的技術水平還沒有達到超一線網際網路的水平,再接再厲吧。

5.陌陌

狀態:在談薪資和Offer

陌陌總共有4面,2輪技術,1輪hr,1輪大部門Leader(VP)

陌陌這邊的面試問的技術深度很深,面試體驗也很好。技術的話這邊職位要求是要有OpenGL基礎,當然Android要精通,C++要了解。

一面:

1.先做這個自我介紹?

2.自我介紹中有提到跨平臺開發,聊到了WebView的具體技術細節和NDK的具體技術細節?

3.說一下你瞭解的OpenGL ES的基礎知識點,聊到了座標轉換,OpenGL的一些專業名詞的概念?

4.說一下OPenGL ES的渲染流程?

5.說一下你是如何封裝和使用Shader的,主要是指的是glsl指令碼語言對OpenGL ES的封裝?

6.FrameBuffer你是如何使用的?說一下使用過程?

7.後面還有問到OpenGL的一些更深層次的概念?

上面的主要是問到的OpenGL ES相關的內容

8.Android問到了RecyclerView的封裝?以及涉及到網路資料的互動是如何封裝的?

9.問到了自定義執行緒池以及執行緒池的工作原理?

10.多執行緒這一塊問到了併發?併發包下的關鍵類,le關鍵字如何保證資料對於多個執行緒是即時可見的?主要是涉及到DVM的工作記憶體和共享記憶體,保證了資料的什麼特性?有序性,原子性還有一個我記不清了。。。。。

11.記憶體優化這一塊,可以用什麼工具對程式碼進行靜態檢查?

12.記憶體優化的工具以及相關原始碼和使用?

13.事件分發機制?

14.設計模式中專案中使用了哪些?

15.APP啟動流程的原始碼?

16.問到了動畫的分類,屬性動畫的使用過程?

17.常見的資料結構也有涉及,比如HashMap和ArrayMap的區別,以及他的預設擴容閾值?

18.問了APP的預設記憶體大小,DVM虛擬機器和ART虛擬機器的區別?

二面:

OPenGL ES和一面問的差不多

Android部分主要問了專案架構?

設計模式問了生產者消費者模式?

自定義View出了一道具體的題目,說明實現思路?

Gradle打包的依賴問題?如何解決的?

還問了除了OpenGL之外還了解其他的圖形渲染語言嗎?

6.百度

狀態:二面已掛

百度的面試題目我就不貼了,大致說下面試問的範圍,OpenGL ES部門遇到了真正的大神,問的很多深入的知識點我都不清楚,Android部分專案架構以及專案工作問的特別細,併發部分和演算法要求比較高,這次面試也讓我認識到了自己的資料結構和演算法部分需要使用業餘時間好好強化下,當然還有一些更深的技術細節還需要持續精進。

革命尚未成功,還需繼續努力啊!

7.58到家

狀態:在談Offer

58到家這邊面試總共三輪,2輪技術,1輪hr。這邊更偏業務,所以專案邏輯就會問的特別多。我專案涉及地圖,導航,定位,所以去面58到家專案這塊優勢比較大。 簡單說下我覺得問到的有技術難度的問題吧

1.問到了地圖SDK的具體實現技術細節?

2.如何實現持續上傳軌跡資料,瞭解過長連線,短連結嗎?

3.TimerTask使用過程中有沒有碰到過適配問題,這個我是真沒碰到過,後續才瞭解了下。

4.APP保活的native方案,這個聊的比較深聊到了系統層面

5.手機如何對APP進行管理的,理解了這個問題才能理突破系統的限制,不通過系統白名單的方式進行達到保活效果?

6.定位時間間隔的問題?

7.問到了地圖中螢幕座標和地理座標轉換的實現方式,問這個主要是因為我的SDK中有涉及和實現?

8.地圖渲染的封裝邏輯?

9.其他的與專案業務關聯性比較大就不在此一一列舉了。

三.總結(一些建議)

面試了這幾家公司,感受最深的是面試一定要提前準備,儘量讓自己在面試過程中條理化,因為面試不只是對技術能力的考察也是對交流,溝通能力的考察,更多的是一個綜合能力。下面給正在面試或者準備面試的童鞋提幾點建議。

1.面試的簡歷一定要精心準備,因為簡歷是你能否獲得面試機會的前提,一定要明確自己的亮點與優勢,當然也要知悉自己的弱項,以便強化訓練。

2.簡歷投遞與內推,有朋友能內推一定選擇朋友內推,沒有朋友內推優先選擇簡歷掛在獵頭網站上,只要你夠強,獵頭會聯絡你的,之後再選擇比如拉勾網,卓聘,獵聘這些網站,有選擇性的篩選資訊。

3.面試前的準備工作,最好是自己多寫寫筆記,做一個善於總結的人,當然面試回來後一定把面試官問到的知識盲點和理解不深的地方認真補充下。

4.面試時努力克服緊張,可以採用自我暗示和刻意練習的方式。

5.遇到面試不會的問題不要慌張,在自我知識體系的基礎上,分析與推測,或者說出自己的想法,因為這也是你學習能力的一種體現。

6.面試一定要準時,不要遲到,認真對待每一場面試機會,因為面試也是你提升個人技術與能力的有效途徑。

寫在最後,最後祝大家在新的一年裡,技術可以持續精進,能夠實現自己的目標。本文如有問題,歡迎評論指正!