前言
又到了金三銀四的面試季,自己也不得不參與到這場戰役中來,其實是從去年底就開始看,android的好機會確實不太多,但也還好,3年+的android開發經歷還是有一些面試機會的,不過確實不像幾年前門檻那么低了,總的體會就是小的創業公司比較注重你的項目經歷是否和自己的貼合,直接能過來獨當一面。大廠除了看中項目經歷外,還比較注重你知識面的廣度,是廣度、深度和解決方案等多方面的考察,平時夠工作要好好積累臨時刷題只聊點皮毛估計是過不了關的。
下面就總結一些遇到的題目,各種風格的都有。這里先列舉問題,至于答案,鑒于每個人的理解和回答程度,其實不好整理,后面會附上相應的參考。
面試真題
坐標hz,各廠名字字母表示,自己猜。本題目整理不保證你會遇到相同的問題,根據崗位和面試官本身情況,問題可能差別很大,比如有做中間件的同學被問到熱修復的細節等等。總體說來阿里的面試是很正規的,從android基礎到一定程度的理解總結性問題,然后回到java基礎及原理,主要著重問簡歷上的,或從簡歷出發發散問題,問題會由表及里逐漸深入,很考察對你負責的項目的理解和其中用到知識原理。因為是憑著記憶后記的,以下問題不分先后。這里按崗位來分類,能有個漸進的感覺。
一、
tb:電面一:
- dp是什么,sp呢,有什么區別
- 自定義View,ViewGroup注意那些回調?
- 界面卡頓的原因以及解決方法
- android中的存儲類型
- service用過么,基本調用方法
- Handler機制
- LinearLayout、FrameLayout、RelativeLayout性能對比,為什么
- Activity的生命周期,finish調用后其他生命周期還會走么?
- FW層熟悉么,源碼看過么
- GC回收機制熟悉么,分代算法知道么
- Java的類類加載原理
- 內存泄漏如何排查,MAT分析方法以及原理,各種泄漏的原因是什么比如Handler為什么會泄漏
- gradle熟悉么,自動打包知道么
- 介紹下先的app架構和通信
- 自己負責過哪些模塊,跟同事相比自己的優勢是什么
- 遇到過什么印象深刻的問題,怎么解決的
現場面試:三場
First:
- 最近都做了哪些工作?
遇到了什么印象深刻的問題。
A:會順著你介紹的項目問下具體實現。 - 推送消息有富文本么?
- 熱修復了解么,用的什么?
- apk包大小有限制么?怎么減少包大小?
- 工作中有沒有用過或者寫過什么工具?腳本,插件等等
比如:多人協同開發可能對一些相同資源都各自放了一份,有沒有方法自動檢測這種重復之類的 - 寫過native的底層代碼么
- view的繪制熟悉么,介紹下
- gc相關的算法
- anr是因為什么產生的,怎么排查
- 界面上的話,有什么優化措施么?比如列表展示之類的,平時遇到過內存問題嗎,怎么優化的?
- 平時用過哪些設計模式?
Second: - 介紹下最近一年主要做了什么工作
- 會對簡歷上突出的技能進行詳情的詢問:
比如:音頻合成的具體步驟,以及遇到的一些問題和細節處理。
會根據面試發散一些問題,問到,seek方法播放到末尾后重新播放會有一些卡頓的不流暢問題,怎么避免,從交互設計或者技術角度。(個人表示沒怎么關注這種)。 - 項目團隊多少人,怎么分配工作
- 線程之間怎么通信的?
5.app的架構是怎么樣的,并且為什么這樣,有什么優缺點?
6.算法熟悉么?給了一個二叉排序樹,出了一個給定節點找到它的下一個元素(指的是大小順序的下一個)的算法題。 - 為什么找工作,自己的優勢是什么
Third:
技術問題不再局限于簡歷,可能根據簡歷和回答情況漸進并擴散。
感覺各個技術面試官之前并沒有溝通,可能會問到類似的問題
- 介紹下自己主要負責的工作
- Activity的生命周期有哪些,知道onRestart么,介紹下
- savedInstanceState知道么,干什么用的,什么時候有值,什么時候為空,平時是怎么用的
- View繪制熟悉么,介紹下,能說下是實現原理么?
- 平時用過什么開發工具,分析工具?
- ANR是怎么回事?怎么查?Service會引起ANR么?
- Activity的啟動模式有哪些?棧里是A-B-C,先想直接到A,BC都清理掉,有幾種方法可以做到?這幾種方法產生的結果是有幾個A的實例?
- 有什么工具可以看到Activity棧信息么?多個棧話,有方法分別得到各個棧的Activity列表么
- 都熟悉哪些命令?知道怎么用命令啟動一個Activity么?
- SharedPrefrences的apply和commit有什么區別
- java里帶$的函數見過么,是什么意思
- MD5是加密方法么,Base64呢
- 有博客和github,主要是寫的什么?有哪些關注
- android 8.0 有哪些新特性
- 差不多就這些吧。。。
最后每個面試官都會讓你問他問題。
二、
zfb:
- glide緩存策略?同一個圖片跟size有關么
- android中的動畫有哪些
- View事件傳遞機制
- 界面卡頓怎么排查和優化?
- Fragment的replace和end??的區別?
- MVP,MVVM,MVC解釋和實踐
- 項目之外的,對技術的見解,拓展知識
二面: - 微信跳一跳外掛怎么實現,檢測怎么做的?
- 一張純色背景下怎么有效檢測各個矩形?
- 對接的so算法了解么,有接觸過相關的庫么?
- 三個算法題選一個并寫出測試用例:打印n-m之間所有的素數;計算n-m之間1出現的次數;指定數字序列的排序;
- android api層的源碼熟悉哪些?解釋一下
- ACTION_CANCEL什么時候觸發,觸摸button然后滑動到外部抬起會觸發點擊事件嗎,在+ + 滑動回去抬起會么
- 怎么處理嵌套View的滑動沖突問題
- 熱修復相關的原理,框架熟悉么
- gradle打包流程熟悉么
- 任意提問環節:其實可以問之前面試中遇到的問題:比如,多模塊開發的時候不同的負責人可能會引入重復資源,相同的字符串,相同的icon等但是文件名并不一樣,怎樣去重?
三、
NetBase:
- Canvas的底層機制,繪制框架,硬件加速是什么原理,canvas lock的緩沖區是怎么回事
- surfaceview, suface,surfacetexure等相關的,以及底層原理
- android文件存儲,各版本存儲位置的權限控制的演進,外部存儲,內部存儲
- 上層業務activity和fragment的遇到什么坑??頁面展示上的一些坑和優化經驗
網絡請求的開源框架:OKHttp介紹,寫過攔截器么
四、
Netbase:AI
- 數據層有統一的管理么,數據緩存是怎么做的,http請求等有提供統一管理么?
- 有用什么模式么,邏輯什么的都在Activity層?怎么分離的
- 如果用了一些解耦的策略,怎么管理生命周期的?
- 有什么提高編譯速度的方法?
- 對應用里的線程有做統一管理么?
- jni的算法提供都是主線程的?是不是想問服務類的啊
- 邊沿檢測用的啥?深度學習相關的有了解么?
- 上線后的app性能分析檢測有做么
五、
yz:
- 進程間通信方式?Binder的構成有幾部分?
- HttpClient和HttpConnection的區別
- View的事件傳遞機制
- MVC,MVP,MVVM分別是什么?
- Android中常用的設計模式,說三個比較高級的?
- 內存優化,OOM的原因和排查方法
- 想改變listview的高度,怎么做
- Https是怎么回事?
- 除了日常開發,其他有做過什么工作?比如持續化集成,自動化測試等等
六、
DiDi:比較全面
- ActivityA跳轉ActivityB然后B按back返回A,各自的生命周期順序,A與B均不透明。
- Synchronize關鍵字后面跟類或者對象有什么不同。
- 單例的DCL方式下,那個單例的私有變量要不要加volatile關鍵字,這個關鍵字有什么用
- JVM的引用樹,什么變量能作為GCRoot?GC垃圾回收的幾種方法
- ThreadLocal是什么?Looper中的消息死循環為什么沒有ANR?
- Android中main方法入口在哪里
- jdk1.5?SparseArray和ArrayMap各自的數據結構,前者的查找是怎么實現的,與HashMap的區別
- Runnable與Callable、Future、FutureTask的區別,AsyncTask用到哪個?AsyncTask是順序執行么,for循環中執行200次new AsyncTask并execute,會有異常嗎
- IntentService生命周期是怎樣的,使用場合等
- RecyclerView和ListView有什么區別?局部刷新?前者使用時多重type場景下怎么避免滑動卡頓。懶加載怎么實現,怎么優化滑動體驗。
- SQLite的數據庫升級用過么
- 開放問題:如果提高啟動速度,設計一個延遲加載框架或者sdk的方法和注意的問題。
- Scroller有什么方法,怎么使用的。
- 分享下項目中遇到的問題
- webwiew了解?怎么實現和javascript的通信?相互雙方的通信。@JavascriptInterface在?版本有bug,除了這個還有其他調用android方法的方案嗎?
- ReactiveNative了解多少
- JNI和NDK熟悉么?Java和C方法之前的相互調用怎么做?
七、
上傳一下總結的兩個大主題
android存儲
android優化
里面有一些鏈接因為圖片的關系無法點擊,不知道簡書怎么上傳其他文件,需要的同學可以聯系我我另發Xmind吧。
幾個建議:
1.簡歷要如實寫,相關的知識點一定要爛熟于心。
2.基礎扎實,android和java相關的知識樹網上有很多資料,看過但讓你講出來未必能說的好。
3.提前總結,你還擅長什么其他技術?這種開放問題要看知識面了。
4.學會提問,你有什么問題要問我嗎?這種禮貌性問題也是一個了解對方的好機會。
5.良好的心里素質,無論遇到什么情況,面試官遲到、面試官態度冰冷說話不客氣、質疑你的回答等等各種問題都不要慌也不要排斥,一定要沉住氣,耐心積極的思考并回答對方的提問。
6.推薦幾本書,也是好幾次面試后發現里面涵蓋了大部分答案。《Android開發藝術探索》《Android源碼設計模式-解析與實戰》《Android進階之光》《深入理解Java虛擬機》,多看幾遍。
大廠的面試流程比較長,面試是一場全面大考驗,如果想換個工作,最好提前充分準備,最后,看到這里的人給你點個贊并有福利嘍,下面的鏈接是對以上一些問題的答案的整理,以及一些其他的經典問題,鏈接:面試那些事。其中因為時間問題其他主題還沒有開始動筆,并且引用了很多博客鏈接,希望相關博主不要介意。僅作為參考。