阿里春招Android面經

做者:淘萄桃java

連接:android

https://www.jianshu.com/p/a07ccaad832dc++

本文由做者受權發佈。程序員

 

筆者參加18年阿里春招,有幸最終拿到阿里offer,base杭州,崗位客戶端開發。一直忙於其餘事情,拿到意向已通過去十多天,在此分享一些關於面試的乾貨,攢一波RP,回饋社會。面試

 

從阿里面試提及,阿里的面試通常採用電話面試的形式。筆者一共參加五輪面試,一面電話面試+在線編程,二面視頻面試+在線編程,三面部門boss面試,四面交叉面,五面HR。在此分享五輪面試的大概問題吧,筆者是android崗開發,所問題型會更偏android。算法

 

 

1一面數據庫

 

阿里的面試官都很和善。一面面試官聽聲音感受應該是入職兩三年的感受。上來自我介紹後直接開始問android相關問題。編程

 

大概問題以下:數組

 

  • android中的dp、px、dip相關概念緩存

  • handler機制,四個組成部分及源碼解析

  • 佈局相關的<merge>、<viewstub>控件做用及實現原理

  • android中的佈局優化

  • relativelayout和LinearLayout在實現效果同等狀況下選擇使用哪一個?爲何?

  • view的工做原理及measure、layout、draw流程,要求瞭解源碼

  • 怎樣自定義一個彈幕控件?

  • 若是控件內部卡頓你如何去解決並優化?

  • listview的緩存機制

  • Invalidate、postInvalidate、requestLayout應用場景

  • 多線程,5個線程內部打印hello和word,hello在前,要求提供一種方法使得5個線程先所有打印出hello後再打印5個word。

  • 實現一個自定義view,其中含有若干textview,textview文字可換行且自定義- - view的高度可自適應拓展

  • 編程題:將元素均爲0、一、2的數組排序。在手打了一種直接遍歷三種數目並打印的方法後讓手寫實現,手寫實現後讓再說一種穩定的方法,說了一種經過三個下標遍歷一遍實現的方法,讀者可自行百度,在此不贅述。

 

一面面完挺懵的,感覺到阿里校招的火力,阿里的要求程度高於「知道、會用」那一層,你須要瞭解底層原理、機制才能過關。一面50min。

 

一面面完,面試官說須要反饋面試過程後才能知道是否經過,後來瞭解到阿里的一面是「簡歷篩選」面,刷人不會太多。自我感受良好,整體答出大概百分之八九十,面完便好好準備二面了。

 

 

2二面

 

二面很重要,二面很重要,二面很重要。二面對於你是否能經過面試,是否能最終從池子中被撈出來都很重要。一面面完的次日下午收到來自杭州的電話,約了晚上九點的時間,且通知了視頻面試和在線編程。

 

一陣慌張……看了那麼多面經,沒見過誰連續兩次編程的……晚上九點,準時登陸視頻網址後,面試官已經在線。二面面試官稍顯嚴肅,給人感受很是嚴謹。上來簡單自我介紹後,他說一面評價比較好,他會面試得細緻一點,可能時間會稍長。當時心神一緊,作好了鏖戰的準備。二面問的內容很是多,且覆蓋範圍很廣,大概問題以下:

 

JVM方面

 

  • java內存模型,五個部分,程序計數器、棧、本地棧、堆、方法區。

  • 每一個部分的概念、特色、做用。

  • 類加載的過程,加載、驗證、準備、解析、初始化。每一個部分詳細描述。

  • 加載階段讀入.class文件,class文件時二進制嗎,爲何須要使用二進制的方式?

  • 驗證過程是防止什麼問題?驗證過程是怎樣的?加載和驗證的執行順序?符號引用的含義?

  • 準備過程的靜態成員變量分配空間和設置初始值問題。

  • 解析過程符號引用替代爲直接引用細節相關。

  • 初始化過程jvm的顯式初始化相關。

  • 類卸載的過程及觸發條件。

  • 三種類加載器,如何自定義一個類加載器?

  • 雙親委派機制。

  • JVM內存分配策略,優先放於eden區、動態對象年齡判斷、分配擔保策略等。

  • JVM垃圾回收策略,怎樣判對象、類須要被回收?

  • 四種垃圾回收算法標記-清除、複製、標記-整理、分代收集。

  • JVM中的垃圾回收器,新生代回收器、老年代回收器、stop-the-world概念及解決方法。

  • 四類引用及使用場景?

 

基本上JVM方面全部的大的概念所有問到,真的須要理解到位。JVM比較熟悉,全程巴拉巴拉不停地說,有驚無險。

 

集合類

 

初始引發話題的問題:hashmap瞭解嗎?心中一喜,開啓侃侃而談(胡吹)模式。講到了如下的一些點:

 

  • hashmap實現的數據結構,數組、桶等。

  • hashmap的哈希衝突解決方法:拉鍊法等。拉鍊法的優缺點。

  • hashmap的參數及影響性能的關鍵參數:加載因子和初始容量。

  • Resize操做的過程。

  • hashmap容量爲2次冪的緣由。

 

講完一通以後,面試官挺滿意,說了解地比較深挺好,拋出了下一個問題hashtable瞭解嗎?又是心中一喜,一通介紹:

 

  • hashtable線程安全、synchronized加鎖。

  • hashtable和hashmap異同。

  • 爲何hashtable被棄用?

 

果斷將話題扯到concurrenthashmap,講了concurrenthashmap相比於hashtable作的優化、segment的概念、concurrenthashmap高效的緣由。中間面試官問的問題:

 

  • 容器類中fastfail的概念。

  • concurrenthashmap的插入操做是直接操做數組中的鏈表嗎?

  • 集合類相關over,因爲都是本身主動在說,把握了主動權,相談甚歡。

 

多線程

 

因爲上面提出了concurrenthashmap的概念,瓜熟蒂落聊起了多線程。有了上一部分的經驗全程我主動講,面試官針對性問了一些問題,大概內容以下:

 

  • 爲何要使用多線程?多線程須要注意的問題。上下文開銷、死鎖等。

  • java內存模型、致使線程不安全的緣由。

  • volatile關鍵字,緩存一致性、指令重排序概念。

  • synchronize關鍵字,java對象頭、Markword概念、synchronize底層monitorenter和moniterexit指令。

  • lock語句和synchronize對比。

  • 原子操做,CAS概念、相關參數。

  • 樂觀鎖、悲觀鎖概念及使用場景。

  • 線程池概念、實現原理等。

  • JVM鎖的優化,偏向鎖、輕量級鎖概念及原理。

 

多線程方面回答得比較好,面試官反饋比較滿意。

 

數據庫

 

數據庫方面筆者水平較菜,沒有深刻了解。面試官問了一個問題,

 

  • SQL語句中對錶或者字段取別名有什麼好處?

 

並不知道怎麼回答,面試官也沒有再問數據庫相關。以後面試官問了解操做系統,回答:沒學過。面試官:好的 ,那不問了。心中感動得沒法用言語形容。

 

通訊協議

 

接下來是對通訊協議的瞭解,大概問了下列問題:

 

  • TCP三次握手、四次揮手。

  • http請求報文結構、響應報文,狀態碼。

  • http2.0相比於http1.0的新特性,推送、多路複用、消息頭壓縮等。

 

通訊協議問得不是太深,瞭解得比較好便可。面試官反饋比較好。最後就是問android了,面試官說感受你android應該挺厲害的,當時真的是受寵若驚。

 

android

 

android是重頭戲。因爲以前已經瞭解挺多,android方面基礎的沒有多問,比較深刻。大概有以下問題:

 

  • handler機制組成,handler機制每一部分的源碼包括looper中的loop方法、threadlocal概念、dispatchmessage方法源碼,runnable封裝message等。

  • listview緩存機制、recycleview緩存機制。

  • bitmap高效加載,三級緩存等。

  • binder機制原理。

  • view的工做原理及measure、layout、draw流程。哪個流程能夠放在子線程中去執行?

  • draw方法中須要注意的問題?

  • view的事件分發機制。

  • android性能優化:佈局優化、繪製優化、內存泄露優化、bitmap、內存泄露等。

  • 內存泄露的概念?android中發生的場景?怎麼解決?講了handler、動畫等。

 

面試android方面的時候已經真正地淡定下來了,有條不紊地和麪試官說了本身全部的理解。反饋也挺好。

 

算法

 

最後是一題在線編程,題目比較常規,是一題最大連續子序列,須要注意全是負數的處理,在此不贅述可自行百度。

 

寫算法的時候發生了一個小插曲,因爲面試官直接面的都是以java寫的,而筆者比較熟悉C++寫算法,面試官也不太熟悉c++編譯(g++),面面相覷一下子才成功編譯輸出結果。真心很是感謝二面面試官的細緻和耐心,最好的一次面試體驗。面試官說他的這一面他過了,還會有一到兩輪技術面試,禮貌地感謝面試官以後結束了,至此二面結束。二面108min。關閉鏈接後長呼一口氣和女朋友分享了喜報,經此一役,我知道個人阿里之路已走完半程。

 

爲何說二面很重要呢?由於二面是因此技術面試中最爲細緻、考察最爲最爲深刻的一輪面試,後面的面試官會很大程度上參考這一面試的結果,而且聽說這一面很影響評級。

 

 

3三面

 

二面事後的次日下午收到三面電話,約了三點的面試,因爲以前的面試都是晚上能夠在教室完成(在此感謝女朋友,沒有你的陪伴就沒有一個好的環境完成面試),三點的時間點是上課時間也基本找不到空教室,因此在教師休息的小房間完成了三面面試。

 

三面面試官感受是部門主管級別,上來自我介紹後開始問問題。問了一下簡歷上在學校作的一個android的項目,說一個難點,講了推送,巴拉巴拉講了一通極光推送,感受面試官不是很感冒,問了極光推送的實現原理,筆者一緊張居然忘了講長鏈接……又問了華爲實習的項目,難點,怎麼優化……我扯了一通字母樹,感受面試官仍是不太感冒。這個時候已經有點慌張,而後……面試官開始問優缺點、以前籤的公司、爲何想去杭州、你是怎麼看待算法?還問了最優成就感的一件事情,你以爲爲何會得到一等獎?是否是由於對手太弱了(懵了……)?回答完直接問還有什麼問題想問他…此時有點崩潰,感受也答得不太好,問了還有哪些方面須要改善。而後結束了面試……三面29min。

 

面完三面挺難受的,感受反饋不是很好,沒發揮好。難過了一下子吃了個飯回圖書館繼續看書。

 

 

4四面

 

當晚上我還在圖書館感懷阿里離我遠去的時候,一個杭州的電話來了……和四面面試官約好了時間,作一個技術和綜合素質方面的面試。急匆匆和女朋友去找到了一個空教室,9點電話如約而至。四面面試官感受斯文儒雅,上來介紹這是一輪交叉面,最後一輪技術面試。照例自我介紹後,問了以下問題:

 

通訊協議

 

TCP保證可靠傳輸的實現:中止等待協議、滑動窗口協議、流量控制、擁塞控制等。

 

項目

 

  • 說一個你記憶比較深入的功能:我講了一個查看當前WiFi網絡鏈接終端信息的功能的實現。

  • 說一下你遇到的問題:講了一個十幾萬級別的字符串的匹配經過字母樹優化的問題。面試官聽了後和我詳細分析了一下,獲得了一個更好的實現方法……當時一陣汗顏,班門弄斧了。

  • 問了一下項目中使用到的三級緩存策略。

 

獲獎

 

聊了聊獲獎經歷,中間是怎麼學習的。面試官看了看前面的面試過程,說問了多線程了,那他就不問了……

 

數據庫

 

數據庫方面問了如下的問題:

 

  • 索引的種類。

  • B樹、B+樹、紅黑樹。

  • B+樹和B樹相比有什麼優勢,應用場景?

  • 紅黑樹的一些特色?怎樣保持平衡?

 

問着數據庫,問着問着扯到數據結構那邊去了……說完以後面試官是感受你這些都有所準備啊,我說對,畢竟是面阿里,面試官笑了說我原本還準備問你一下八大排序的如今感受你應該都會,我很自信(jian zha)地說對,我都會。至此,面試官說技術方面他沒什麼問題想問的了,他這是一輪交叉面,集團內部要求的,他是後臺開發方面的,不懂android,問我還有什麼想問的。筆者拋出了萬金油問題,您以爲我還有哪些方面須要優化的。面試官哈哈一笑,說大家這些學生如今問的都是套路問題,他基本上回答的都是這個問題,而後說了一通感受深度和廣度都有,繼續保持就行了。

 

四面48min。至此,筆者完全放心。互道週末愉快後結束了面試。和女朋友分享喜報後,阿里之路的進度條已經走到80%了。至於爲何有交叉面,衆說紛紜,不太清楚。

 

5五面(HR)

 

度過週末後照例去圖書館學習,在週一下午接到hr的電話。週末準備了一些常見的HR面試問題,結果一個都沒問到,問到的問題大概以下:

 

  • 關於以前一次筆試的編程題,爲何沒有作出來?後來有思考過嗎?

  • 你簽約的公司給的薪水是怎麼樣的?若是阿里給你offer,你是怎麼考量這兩個offer的?

  • 爲何沒有在以前實習的公司留下來?以前公司的主管是怎麼評價你的?

  • 你的優缺點?

 

最後平常問問題,萬金油問題培養體系和晉升機制。面完告知一到兩週會有結果,要從池子裏綜合考量撈出一批人給offer(心中一慌,畢竟走到最後的對手都不容小覷)。隨後HR面試官加了微信,有問題能夠在微信上交流。

 

 

6後續

 

面完HR安心地在備胎池裏面躺着。等待的日子老是很難熬,一天一天地過去,各類打聽消息,據說有的前幾批的拿到了意向(offer),內心拔涼拔涼。在過去四天後,週五的下午問了HR面試官後得知offer已在審批,聽說比較穩,就是走個流程。聯想到以前面完騰訊hr在offer審批等了好久仍是心難安,在熬過週末,週一和週二,offer已經審批了三天,焦慮程度與日俱增。週二晚上十點半的時候,在宿舍無聊刷新聞的時候,忽然收到一條短信和一封郵件,打開後發現是錄用意向書。

 

真的挺開心,長呼一口氣,總算這條路走到了盡頭。

 

以上是個人阿里春招之路的分享。

 

 

7總結

 

洋洋灑灑寫到這邊已經說了不少,也有一些經驗和你們分享。從17年春招找實習到18年春招,找工做的日子真的很累,不過再累也要堅持。有幸參加過一些公司的面試,問的問題也都大同小異,主要是如下的一些方面:

 

  • java基礎

  • 集合類

  • 多線程

  • JVM虛擬機

  • 通訊協議

  • 數據庫

  • 操做系統

  • 算法

  • 你的技術方向

  • 項目。

 

關於每一個方面的複習後續會給出分享。

 

一些感慨

 

說一些我的感覺吧,找工做其實很容易,一些公司單憑學歷就可讓你進去上班,如今太缺程序員了,簡單到你面試根本不聊技術談談人生、聊聊獎項就能夠給你發offer,可是找一個好工做不易,數十上百我的搶一兩個崗位很常見。

 

主要你怎麼定義你對於「好」的理解,工資高?公司技術氛圍好?行業地位高?工做安穩福利好?不加班?仁者見仁智者見智,不必強行拿本身的價值觀去評判別人的工做,最適合的纔是最好的。因此在找工做的時候想清楚本身到底想要一個怎樣的工做也是挺重要的,定義一個目標,努力去作,纔是最重要的。

 

技巧小談

 

關於面試的一些技巧,我的以爲最根本的仍是拓展你的知識架構的寬度和廣度,造成你的一套說辭架構。以多線程爲例,問到你多線程?能夠先從爲何要使用多線程?使用多線程有什麼好處?使用多線程必定會比單線程好嗎?多線程會致使什麼問題?致使問題的java內存模型是怎樣的?怎麼解決這個問題?解決方法如volatile、synchronize關鍵字等它的底層實現是怎樣的?你是怎麼使用多線程的?使用線程池有什麼好處……


若是你真正理解了並將它完善成一個體系,面試官讓你說多線程,接下來10min,你能夠一直講完。面試的參照不是你和麪試官相好比何,而是你和你的競爭者相好比何,若是上面這一套完善地講完,面試官對你的評價可想而知。

 

終章

 

個人csdn連接

https://blog.csdn.net/qq_26071477

 

CSDN排版實在接受不了了,轉戰簡書。簡書第一篇文章,求職不易,祝你們都能拿到心儀的offer。

相關文章
相關標籤/搜索