【建議收藏】2021年底最新安卓面經分析,最終入職得物!

分你一些日落發表於2022-01-19

面試經歷

面了一些上海二線網際網路公司,例如愛奇藝,京東,喜馬拉雅,得物,B站,某安,美團等等,記錄了部分面試真題。大部分可以自行搜到答案,有疑問的可以留言交流~

愛奇藝一面

1.handler裡面的native pollonce 為什麼不會anr
2.對稱加密和非對稱加密的區別
3.佈局巢狀過深會導致什麼問題
4.java為什麼跨平臺?c是跨平臺嗎
5.app打包過程
6.協程掛起和執行緒阻塞的區別
7.so檔案載入流程
8.AIDL怎麼實現
9.位元組碼是什麼

愛奇藝二面
和一面間隔時間太久了,放棄

貨拉拉一面

1.簡述https的握手流程,私鑰加密誰都可以破解,那麼有什麼意義
2.oom能否try catch
3.公鑰和私鑰的區別
4.客戶端怎麼安全儲存私鑰
5.怎麼載入一張超大圖
6.採集app啟動時間原理
7.exception分類。oom屬於哪種分類
8.弱網 無網優化

貨拉拉二面

1.說下專案中怎麼運用MVVM
2.viewModel的原始碼實現
3.設計一個圖片載入框架(包含記憶體快取和本地快取),參考Glide回答就行了
4.簡述hashMap put方法的流程,一些細節追問:什麼時候連結串列轉樹?為啥要轉成樹?什麼時候樹再次轉回連結串列
5.英語口語如何(我面的是國際化業務)

貨拉拉HR面
辦理了居住證積分嗎?balabala

京東一面

1.簡述LinkedHashMap原始碼實現
2.說下Handler流程
3.handler用於執行緒間通訊,怎麼保證執行緒安全
4.介面有個Button,手指放上去慢慢移到Button外的區域,描述事件分發的流程
5.說下View的繪製流程,包括渲染和繪製
6.演算法 兩個單連結串列合併成有序連結串列,說下思路
7.元件化的實現,WMRouter呼叫其他模組的對應方法怎麼實現的

京東二面
完全忘了

京東三面
問專案細節,你主要負責的模組,怎麼設計

演算法 N宮格,從左上角A出發只能向右或者向下走,求所有不同路徑的條數總和。手寫虛擬碼(用遞迴就可以)

京東四面

1.平時的上下班時間點
2.有沒有使用過我們們的app,有什麼建議
3.前面的3次技術面有什麼感受
4.職業規劃

京東HR面
平時的上下班時間點 balabala

某安一面

1.多執行緒同步有哪些方式
2.sycnized和lock區別,分別用於什麼場景
3.執行緒池原理
4.執行緒池拒絕策略怎麼自定義
5.怎麼實現執行緒加入執行緒池的優先順序
6.volatile底層原理?是否執行緒安全
7.死鎖怎麼發生?怎麼防止死鎖
8.介紹下apm,怎麼捕獲crash和native crash?騰訊matrix怎麼統計app啟動時間,頁面載入時間
9.gc回收演算法有哪些?分別用於什麼場景
10.jvm有哪些區域?棧的作用
11.演算法 三數之和

某安二面

1.問專案 httpdns相關:為什麼要httpdns?怎麼處理握手問題,ip直連能否避免dns挾持?
2.問專案 首頁彈窗優先順序
3.做過哪些記憶體優化
4.怎麼全域性捕獲app所有異常,並且保證app不崩潰,不卡死
5.如何獲取app的所有執行緒資訊
6.怎麼查詢anr
7.安卓有哪些程式間通訊?為什麼使用binder?mmap發生在哪個階段?怎麼找到目標程式
8.leakcanary怎麼檢測記憶體洩露的
9.演算法 兩個棧實現一個佇列

某安三面

1.gradle生命週期,怎麼自定義外掛
2.統計編譯耗時外掛,執行在哪個階段?
3.描述從編譯到apk的過程,以及gradle有哪些task參與其中
4.如何實現位元組碼插樁
5.子執行緒更新ui會報什麼異常?從哪裡丟擲來的
6.子執行緒怎麼更新textview不會crash
7.activity window view顯示出來,全流程原始碼解析,精確到類和核心方法
8.資料庫用的什麼庫,熟悉sql語句嗎
9.mmkv為什麼比sp高效,儲存的資料結構是什麼樣
10.mmap為什麼比io高效,說下實現原理
11.sp存在哪些問題?
12.hashmap put流程原始碼解析,連結串列和樹轉換時機?擾動函式的作用?為什麼hashcode & n-1?擴容時機?
13.gc roots有哪些
14.activity有個內部類handler,描述下引用關係鏈路,並說明為何gcroots能訪問到activity
15.載入xml和動態建立view哪個高效?為什麼載入xml效率低
16.如何減少佈局巢狀?jetpack compose的原理
17.recycleview快取實現?開發中怎麼優化
18.演算法 給定一個字串,輸出所有不同字元組合

B站一面

1.一句話描述協程
2.協程只在主執行緒使用,怎麼實現掛起和切回的
3.協程的輕量級怎麼體現的
4.ViewModel原始碼實現,它在Activity重啟後為什麼恢復資料?資料儲存在哪裡?5.和onsaveinstancestate有啥區別
6.LifeCycle原始碼實現
7.LiveData原始碼實現,先後setValue兩次,都能收到嗎?
8.簡述View的重新整理機制,螢幕重新整理訊號從哪裡發出來的?
9.硬體加速是否瞭解
10.SurfaceView的工作原理是否有了解
11.元件化相關,WMRouer為什麼可以這麼方便實現元件之間通訊,背後原理

喜馬拉雅一面

1.有了解過直播嗎?有哪些常見協議
2.說下自定義View的一般流程
3.多個執行緒非同步執行任務,主執行緒需要等待它們都完成再繼續,有哪些實現方式
4.說下handler的流程,非同步訊息是什麼?Android中哪些場景會傳送非同步訊息?5.我們在程式碼中可以手動發非同步訊息嗎
6.彈幕怎麼實現?比如直播中的流星雨特效,跑車這種怎麼實現出來
7.說下你開發中做過的一個動畫
8.瞭解過SurfaceView的原理嗎
9.有沒有接觸過Socket程式設計,簡單說下程式碼實現
10.載入一張超大圖怎麼實現
11.補間動畫和屬性動畫各自的原理
12.記憶體優化有哪些手段
13.開放性題目 開發中怎麼提升整個app的穩定性

喜馬拉雅二面

1.動態代理是怎麼實現的
2.你熟悉哪些設計模式
3.畫一下動態代理的類圖
4.說下外掛化原理
5.說下熱修復的基本原理?比如QQ空間的方案和Tinker
6.演算法 判斷兩個單連結串列是否相交及找到第一個交點

喜馬拉雅HR面

對公司感覺怎麼樣,之前有了解過嗎
是否願意承擔一些管理角色

得物一面

  • 狂問Kotlin相關,比如委託的實現原理,協程原理,kotlin的好處,kotlin編譯流程,常用的kotlin技巧
  • app的打包流程
  • View的渲染繪製流程

得物二面

1.inflate載入view過程
2.簡述okhttp原始碼,請求怎麼管理,它的執行緒池怎麼實現
3.apt原理
4.viewmodel為什麼可以恢復資料
5.livedata可以儲存多個資料嗎
6.aac架構有什麼優勢
7.mmkv瞭解嗎
8.演算法 單連結串列找到倒數第K個元素
9.演算法 單連結串列找到中間的元素(2個題都用快慢指標就可以了)
10.元件化怎麼做的?WMRouter編譯期間做了什麼

得物HR面
沒問什麼特別的

經驗tips

  1. 必考題一定要掌握!
    【必問】Handler的工作流程,原始碼要記牢,細節要理解透,比如怎麼喚醒主執行緒的,while為啥不會阻塞主執行緒
    【必問】View的繪製流程,包括渲染和View本身的繪製3部曲
    【必問】MVVM的含義,ViewModel+LivaData+LifeCycle的原始碼實現
    【必問】自定義View的一般實現流程
    【必問】記憶體洩漏怎麼排查,OOM怎麼排查
    【必問】你做過哪些效能優化
    【必問】Retrofit的實現,動態代理
    【必問】元件化相關,WmRouter的原理
    【高頻】ANR怎麼排查,有哪些原因
    【高頻】APP打包流程
    【高頻】kotlin常見知識點的原理,如協程,委託,擴充套件函式,編譯流程
    【高頻】Android有哪些跨程式通訊,AIDL的程式碼實現
    【高頻】怎麼載入一張超大圖
    【高頻】OkHttp的執行緒池實現,Java執行緒池原理,拒絕策略怎麼自定義

2.演算法準備
有時間就刷劍指offer66道題目,沒時間就掌握一般的套路,回答一些常見題目基本夠了。

3.關於效能優化
你做過哪些效能優化?這個點也是經常被問到,我的建議 不要隨意把別人部落格的效能優化當成自己做過的,很多都是純KPI專案,他們可能自己都沒去實踐。面試官一聽就知道你在瞎說,挑一些相對靠譜的結合自己專案說下,然後擴充一下還未實現但是準備去做的。

寫在最後

其實Android開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。所以,出去面試時先看看自己複習到了哪個階段就好。

下面開始進入正文,以下是我進階學習所積累的歷年愛奇藝,京東,喜馬拉雅,得物,B站,某安,美團等公司2021年度的高頻面試題,希望對你有幫助。

第一章 Android 高頻面試之必考Java基礎

1,物件導向和麵向過程的區別 2,物件導向的特徵有哪些 3,解釋下Java的編譯與解釋並存的現象 4,簡單介紹下JVM的記憶體模型 5,簡單介紹下Java的類載入器 6,談一下Java的垃圾回收,以及常用的垃圾回收演算法。 7,成員變數和區域性變數的區別 8,Java 中的方法重寫(Overriding)和方法過載(Overload)的含義 9,簡單介紹下傳遞和引用傳遞 10,為什麼重寫 equals 時必須重寫 hashCode 方法

11,介面和抽象類的區別和相同點是什麼 12,簡述下HashMap 13, CurrentHashMap 14,介紹下什麼是樂觀鎖、悲觀鎖 15,談談對Java執行緒的理解 16, Synchronized、volatile、Lock併發 17,鎖 18,談談你對Java 反射的理解 19, 註解 20,單例

第二章 Android 面試之必問Android基礎

1,Activity:生命週期、啟動模式、啟動流程

2,Fragment:生命週期、與Activity傳遞資料 3, Service:啟動方式、生命週期、Service不被殺死 4, BroadcastReceiver 5, ContentProvider

6,Android View知識點:測量流程、事件分發、MotionEvent、Draw 繪製流程等等 7,Android程式:程式生命週期、多程式、多程式通訊方式 8,序列化 9,Window 10,訊息機制:Handler 機制、工作原理 11, RecyclerView優化:卡頓場景、其他優化策略

第三章 Android 面試之必問高階知識點

1,編譯模式:AOT優點、垃圾回收 2,類載入器:類載入器分類、雙親委託模式、Android的類載入器 3,Android Hook 4,程式碼混淆:Proguard、混淆規則、混淆模版 5,NDK:JNI基礎、NDK開發基本流程、CMake 構建 NDK 6,動態載入:外掛化、熱修復

第四章 Android 面試之必問效能優化

1,啟動優化:冷啟動/熱啟動和溫啟動的優化、程式碼方面的優化 2,UI渲染優化:CPU/GPU、過度繪製、解決自定義View的OverDraw、Hierarchy Viewer 3,記憶體優化:記憶體管理、記憶體洩漏、大圖記憶體優化、線上監控 4,網路優化 5,耗電優化:優化方向、耗電監控、如何監控耗電 6,安裝包優化:常用的優化策略、資源壓縮、資源動態載入

第五章 Android 面試之開源庫分析

1,HTTP與快取理論:HTTP快取策略、強制快取、對比快取 2,OKHttp:OKHttp請求流程、OKHttpClient、同步請求、非同步請求、CacheInterceptor網路請求快取處理 3,Retrofit 4,Glide 6,EventBus

第六章 演算法面試題彙總

6.1 排 6.2 二叉樹 6.3 連結串列 6.4 棧 / 佇列 6.5 二分搜尋 6.6 雜湊表 6.7 堆 / 優先佇列 6.8 二叉搜尋樹 6.9 陣列 / 雙指標 6.10 貪心 6.11 字串處理 6.12 動態規劃 6.13 矩陣 6.14 二進位制 / 位運算 6.15 其他:兩個大檔案中找出共同記錄、ip地址與int型別的轉換、整數反轉、LRU快取策略

需要完整版《Android2021年度的高頻面試真題》的朋友可以點選這裡免費領取

相關文章