Android開發實戰講解!GitHub上標星13k的《Android面試突擊版》,面試真題解析

安卓小希發表於2021-01-03

背景

座標廣州,五年iOS開發經驗。

最近面試了一位工作12年的程式設計師,

這位老哥有3年java開發經驗,2年H5,7年iOS開發經驗,簡歷上寫著精通Java,iOS,熟悉H5開發。沒有具體的技術點。

說實話我很期待這位老哥的面試,於是讓人事邀約了他。

老哥面試的氣場很足,我也很尊敬他,一大波的自我介紹之後,我們進入了正題。

我問了他Runloop,他說幾乎沒用過Runloop,於是我給他舉了個小例子,老哥給我的答案是百度可以解決。

於是我有問了他KVC,老哥還是說不清楚,於是我問了最基礎的copy,weak等幾個關鍵詞,依舊說不清楚,老哥依舊那麼強勢霸氣,他給到我的感覺就是“為啥都會做,你別問這些沒用的”。

看著他簡歷上寫著,精通安卓iOS開發,熟悉跨平臺開發,js互動,我問了一句瞭解Flutter嗎?他說不知道沒聽過,最後問了一句期望薪資他說25k,我不知道問什麼了,於是匆匆結束了面試。

阿里

阿里的實習生招聘我參加了內推批次和正式批次一共兩場。

阿里的內推批次和正式批次的時間是完全錯開的,即在內推全部結束後才開始正式批次。需要注意的是,阿里主要部門(集團、菜鳥、螞蟻等)的招聘幾乎全部放在內推批次中,而正式批次絕大多數是非主要部門(高德、優酷土豆、蝦米、釘釘等)的招聘。

阿里的內推沒有統一的筆試,在內推成功後,馬上就會收到素質測評和程式設計測驗的通知。然而這兩個測評其實並沒有太大意義,做不做都會很快(一兩天)就開始面試的。阿里內推批次的面試全都是電話面試。我在內推後的第二天就接到了一面的電話,部門是菜鳥/無線(記不清了)。

內推一面大概40分鐘,主要問的計算機基礎,如HTTP、TCP、併發、二叉樹遍歷、字串匹配演算法等,還讓我簡單介紹了我做的兩個專案。因為我的其中一個專案做的APP中有調查問卷的發放和收集,所以問了我如何防止有人刷問卷;我回答說可以限制IP、記錄裝置唯一編號、監測做問卷模式等,但都存在一些漏洞。最後我問他Android開發過程中是不是會遇到很多相容性問題,面試官回答說會遇到,還詳細說了他們有專門的大規模真機測試來檢查相容性。一面總體上答的還行,幾乎沒有涉及到Android相關的問題;因為是電話面試,也就沒問什麼演算法題。

內推一面兩天後就接到內推二面電話了。二面大概50分鐘,主要問了Java GC機制、Android APP啟動過程、Android事件分發、Android View繪製流程。GC機制因為剛看過所以答的比較好,然而因為阿里面試開始太早,我還沒來得及複習Android,所以Android相關的問題答的一塔糊塗,比如APP啟動過程就支支吾吾亂說一氣,View繪製流程乾脆說不知道,跟面試官說我知道Android事件分發流程,於是事無鉅細說了好長一串,最後被面試官吐槽根本不熟悉Android。最後問了面試官對國內手機廠商亂改Android Framework層有什麼看法,面試官回答說他也很無奈,但阿里一般都和手機廠商有合作,直接進白名單,所以沒有碰到太大問題。

內推二面後過了一週多才接到內推三面的電話,而且是在週末的晚上11點的時候。三面大概20多分鐘,主要問了做過的專案、Java基礎、最近看的書、到阿里想學到什麼。我不太確定這輪面試是技術面還是HR面,因為是晚上11點和女票剛回到酒店完全不在狀態,而且面試官也似乎很不耐煩,加上那段時間一直在準備技術方面的問題對這些HR面相關的問題完全沒有準備,所以答的很囉嗦也很糟糕,好多都沒有答到點子上。最後我問面試官我答的怎麼樣,面試官也沒有說什麼就急忙不耐煩掛電話了。

內推三面結束後就覺得應該是掛了,然後又等了一星期,官網上就從“面試中”變成“已回絕了”。

等到阿里正式批次開始的時候又投了正式批次,正式批次有統一的筆試,筆試用的阿里自己的系統;筆試內容記不清了,但一二十個選擇題記憶深刻,好多超出Android相關知識的題目,好多做不出來的智力題。

正式批次的筆試似乎只有很少數的人通過了(主要是因為正式批次的崗位很少),幸運的是我也通過了,在官網預約面試時間後就開始準備視訊一面了,面試的部門是釘釘(像之前說的,正式批次的部門都比較邊緣)。

正式一面是視訊面試,大概不到20分鐘,是我實習秋招體驗並列第二差的面試。主要問了Activity中能不能執行耗時操作(就是UI執行緒相關)、Android中有哪些記憶體洩漏的情況,然後就是共享螢幕寫程式碼:實現單連結串列的插入刪除和查詢。為什麼說體驗非常差呢?首先整個面試就問了兩個問題,而且這兩個問題幾乎任何有Android開發經驗的都能對答如流,並且我回答完後就沒有然後了,沒有繼續深入問;其次那個程式碼在資料結構教材上講連結串列的時候一定會講,而且也沒有什麼技術含量。最後面試官說還行,也沒讓我問他問題就結束了。

一天後官網狀態就變成“已回絕”了,累覺不愛。

美團點評

美團點評也是很早就網申了,其實最初是找的師兄內推的,然而當時內推的崗位是後臺開發,仔細想了想之後我又改成Android開發,於是就不是內推了(直到我筆試掛了才明白這個道理)。

之後就收到了美團點評的統一筆試,美團點評用的是北森系統,奇爛無比。筆試題目記不清了,最後有一個程式設計題,好像是求最長遞增子序列,經典題目了。當時感覺筆試做的挺好的,然而筆試完就再也沒有訊息了,簡直是黑人問號。

後來想了想可能是我當時網申的時候,選“感興趣的事業群”選了“都感興趣”導致沒有一個事業群對我感興趣,這個後面再說。

網易遊戲

嚴格來說我投的是網易互娛(區別於雷火&盤古,後面再說更多區別),走的內推。網易遊戲以其筆試難度大著名,這次也不例外;所有的內推都要求參加統一筆試,我記得筆試有幾場,我是在第一場。內推的崗位是網易遊戲最核心的“遊戲研發工程師”,地點是杭州。

筆試用的牛客網平臺,大大的贊。筆試一共四道程式設計題,一共150分鐘,難度都很大,前三題用不到啥高深的演算法,但需要想到解題的思路,最後一題是一個多重揹包問題。筆試我一共過了三題半,因為最後一題不知道為啥記憶體超限了,用的primary int和動態規劃,理論上是不會記憶體超限的。做完筆試題幾乎就有把握能進面試了,當時預感能做出兩題就能進面試,後來發現好多人只做出了一題就進面試了。

網易遊戲實習生招聘很神奇的是整個就一輪面試,HR面是不存在的。面試是視訊面試,用的牛客網平臺,大概面了一個小時多一點。面試主要就是把計算機四大專業課輪番問了一遍,問了Java語言基礎,最後還問了一個演算法題。

四大專業課問的也就是那些基礎問題,不過有些地方問的很深,基礎的像問到了各種排序演算法的最好、平均、最壞時間複雜度、執行緒和程式的區別、cache工作原理、計算機網路七層模型;問的深的像問到了程式中有多少個棧、執行緒中有多少個棧、阻塞是指程式阻塞還是執行緒阻塞、一臺伺服器上TCP和UDP監聽埠號能不能相同、伺服器80埠和客戶端建立連線後會不會切換埠等。

Java語言基礎這裡有個小插曲,面試官沒想到我不會C/C++(因為崗位介紹裡面有寫要會C/C++,但五個要求裡只要求滿足任意兩個就可以投遞)只會Java和Python,於是他就只好問了一些Java語言基礎的問題,比如Integer和int的區別、GC的工作過程等;還問了Python的裝飾器的原理,我就說了說面向切面程式設計相關的;最後面試官覺得不問C/C++不行,然後問我知不知道C/C++裡的虛擬函式,被我一口回絕了。最後問了一個字串迴圈移動的演算法題,算是一個經典題目了,直介面頭說三次翻轉就好了。

最後問了面試官說崗位介紹裡要求會C/C++,但我看招聘網站介紹裡有提到Python,實際中是用哪些語言呢?面試官說C/C++主要用在遊戲引擎那塊,開發主要還是會用Python。雖然整個下來有些題沒有答上來或者答錯了,但整體來看還是答的很好的,反正對我來說已經發揮到極限了。面試完就感覺這個offer基本要到手了。

等了兩週多才收到了網易遊戲的offer,但也算是我實習生招聘收到的第一個offer,也是很有分量的一個了,自此我的實習生招聘就有底氣了。

最後

文末放一個小福利給大家,點選我的GitHub即可領取

群內有許多技術大牛,有任何問題,歡迎廣大網友一起來交流,群內還不定期免費分享高階Android學習視訊資料和麵試資料包~

偷偷說一句:群裡高手如雲,歡迎大家加群和大佬們一起交流討論啊!

偷偷說一句:群裡高手如雲,歡迎大家加群和大佬們一起交流討論啊!

[外鏈圖片轉存中…(img-9ZooD2Jr-1609684713136)]

相關文章