BAT Android高端技術面試145題詳解

前言

本篇是結合我之前面試別人的經驗,以及跟一些在BAT上班的朋友,討論總結出的一份很全面的大公司需要用到的一些高端Android技術。這裡也專門整理了一個文檔,重點和難點都有詳細解析。這些題目有點技術含量,需要好點時間去研究一下的。

在文末有領取,收集整理了更多關於Android面試專題,包括初級,中級,高級不同水平以及不同專題所涉及到的常問範圍,及面試專題和答案和系統學習視頻資料,免費分享給大家,省去網上到處搜索資料的麻煩,文末有領取!

Android高端技術面試題文檔截圖

目錄

一.圖片

二.網路和安全機制

三.資料庫

四.演算法

五.插件化、模塊化、組件化、熱修復、增量更新、Gradle

六.架構設計和設計模式

七.性能優化

八.NDK、jni、Binder、AIDL、進程通信有關

九.framework層、ROM定製、Ubuntu、Linux之類的問題

面試題

一.圖片

1、圖片庫對比

2、LRUCache原理

3、圖片載入原理

4、自己去實現圖片庫,怎麼做?

5、Glide源碼解析

6、Glide使用什麼緩存?

7、Glide內存緩存如何控制大小?

二.網路和安全機制

1.網路框架對比和源碼分析

2.自己去設計網路請求框架,怎麼做?

3.網路請求緩存處理,okhttp如何處理網路緩存的;

4.從網路載入一個10M的圖片,說下注意事項

5.TCP的3次握手和四次揮手

6.TCP與UDP的區別

7.TCP與UDP的應用

8.HTTP協議

9.HTTP1.0與2.0的區別

10.HTTP報文結構

11.HTTP與HTTPS的區別以及如何實現安全性

12.如何驗證證書的合法性?

13.https中哪裡用了對稱加密,哪裡用了非對稱加密,對加密演算法(如RSA)等是否有了解?

14.client如何確定自己發送的消息被server收到?

15.談談你對WebSocket的理解

16.WebSocket與socket的區別

17.談談你對安卓簽名的理解。

18.請解釋安卓為啥要加簽名機制?

19.視頻加密傳輸

20.App 是如何沙箱化,為什麼要這麼做?

21.許可權管理系統(底層的許可權是如何進行 grant 的)?

三.資料庫

1.sqlite升級,增加欄位的語句

2.資料庫框架對比和源碼分析

3.資料庫的優化

4.資料庫數據遷移問題

四.演算法

1.排序演算法有哪些?

2.最快的排序演算法是哪個?

3.手寫一個冒泡排序

4.手寫快速排序代碼

5.快速排序的過程、時間複雜度、空間複雜度

6.手寫堆排序

7.堆排序過程、時間複雜度及空間複雜度

8.寫出你所知道的排序演算法及時空複雜度,穩定性

9.二叉樹給出根節點和目標節點,找出從根節點到目標節點的路徑

10給阿里2萬多名員工按年齡排序應該選擇哪個演算法?

11.GC演算法(各種演算法的優缺點以及應用場景)

12.蟻群演算法與蒙特卡洛演算法

13.子串包含問題(KMP 演算法)寫代碼實現

14一個無序,不重複數組,輸出N個元素,使得N個元素的和相加為M,給出時間複雜度、.空間複雜度。手寫演算法

15.萬億級別的兩個URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分組->多文件讀寫效率->磁碟定址以及應用層面對定址的優化)

16.百度POI中如何試下查找最近的商家功能(提示:坐標鏡像+R樹)。

17.兩個不重複的數組集合中,求共同的元素。

18.兩個不重複的數組集合中,這兩個集合都是海量數據,內存中放不下,怎麼求共同的元素?

19.一個文件中有100萬個整數,由空格分開,在程序中判斷用戶輸入的整數是否在此文件中。說出最優的方法

20.一張Bitmap所佔內存以及內存佔用的計算

21.2000萬個整數,找出第五十大的數字?

22.燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?

23.求1000以內的水仙花數以及40億以內的水仙花數

24.5枚硬幣,2正3反如何劃分為兩堆然後通過翻轉讓兩堆中正面向上的硬8幣和反面向上的硬幣個數相同

25.時針走一圈,時針分針重合幾次

26.N*N的方格紙,裡面有多少個正方形

27.x個蘋果,一天只能吃一個、兩個、或者三個,問多少天可以吃完?

五.插件化、模塊化、組件化、熱修復、增量更新、Gradle

1.對熱修復和插件化的理解

2.插件化原理分析

3.模塊化實現(好處,原因)

4.熱修復,插件化

5.項目組件化的理解

6.描述清點擊 Android Studio 的 build 按鈕後發生了什麼

六.架構設計和設計模式

1.談談你對Android設計模式的理解

2.MVC MVP MVVM原理和區別

3.你所知道的設計模式有哪些?

4.項目中常用的設計模式

5.手寫生產者/消費者模式

6.寫出觀察者模式的代碼

7.適配器模式,裝飾者模式,外觀模式的異同?

8.用到的一些開源框架,介紹一個看過源碼的,內部實現過程。

9.談談對RxJava的理解

10.Rxjava發送事件步驟

11.RxJava的作用,與平時使用的非同步操作來比的優缺點

12.說說EventBus作用,實現方式,代替EventBus的方式

13.從0設計一款App整體架構,如何去做?

14.說一款你認為當前比較火的應用並設計(比如:直播APP,P2P金融,小視頻等)

15.談談對java狀態機理解

16.Fragment如果在Adapter中使用應該如何解耦?

17.Binder機制及底層實現

18.對於應用更新這塊是如何做的?(解答:灰度,強制更新,分區域更新)?

19.實現一個Json解析器(可以通過正則提高速度)

20.統計啟動時長,標準

七.性能優化

1.如何對Android 應用進行性能分析以及優化?

2.ddms 和 traceView

3.性能優化如何分析systrace?

4.用IDE如何分析內存泄漏?

5.Java多線程引發的性能問題,怎麼解決?

6.啟動頁白屏及黑屏解決?

7.啟動太慢怎麼解決?

8.怎麼保證應用啟動不卡頓?

9.App啟動崩潰異常捕捉

10自定義View注意事項

11.現在下載速度很慢,試從網路協議的角度分析原因,並優化(提示:網路的5層都可以涉及)。

12.Https請求慢的解決辦法(提示:DNS,攜帶數據,直接訪問IP)

13.如何保持應用的穩定性

14.RecyclerView和ListView的性能對比

15.ListView的優化

16.RecycleView優化

17.View渲染

18.Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM

19.java中的四種引用的區別以及使用場景

20.強引用置為null,會不會被回收?

八.NDK、jni、Binder、AIDL、進程通信有關

1.請介紹一下NDK

2.什麼是NDK庫?

3.jni用過嗎?

4.如何在jni中註冊native函數,有幾種註冊方式?

5.Java如何調用c、c++語言?

6.jni如何調用java層代碼?

7.進程間通信的方式?

8.Binder機制

9.簡述IPC?

10.什麼是AIDL?

11.AIDL解決了什麼問題?

12.AIDL如何使用?

13.Android 上的 Inter-Process-Communication 跨進程通信時如何工作的?

14.多進程場景遇見過么?

15.Android進程分類?

16.進程和 Application 的生命周期?

17.進程調度

18.談談對進程共享和線程安全的認識

19談談對多進程開發的理解以及多進程應用場景

20.什麼是協程?

九.framework層、ROM定製、Ubuntu、Linux之類的問題

1.java虛擬機的特性

2.談談對jvm的理解

3.JVM內存區域,開線程影響哪塊內存

4.對Dalvik、ART虛擬機有什麼了解?

5.Art和Dalvik對比

6.虛擬機原理,如何自己設計一個虛擬機(內存管理,類載入,雙親委派)

7.談談你對雙親委派模型理解

8.JVM內存模型,內存區域

9.類載入機制

10.談談對ClassLoader(類載入器)的理解

11.談談對動態載入(OSGI)的理解

12.內存對象的循環引用及避免

13.內存回收機制、GC回收策略、GC原理時機以及GC對象

14.垃圾回收機制與調用System.gc()區別

15.Ubuntu編譯安卓系統

16.系統啟動流程是什麼?(提示:Zygote進程 –> SystemServer進程 –> 各種系統服務 –> 應用進程)

17.大體說清一個應用程序安裝到手機上時發生了什麼

18.簡述Activity啟動全部過程

19.App啟動流程,從點擊桌面開始

20.邏輯地址與物理地址,為什麼使用邏輯地址?

最後

其實面試最關鍵的還是自身的技術水平,面試題更大的用處在於對自身的一種檢驗,以求知己知彼,心裡有底。關於這些面試題的詳解,以及更多不同水平階段,不同專題的面試題加答案,我這裡都有整理分類的文檔。並且還有系統的進階學習視頻資料,免費分享給大家。希望能幫助到你面試前的複習,且找到一個好的工作,也節省大家在網上搜索資料的時間來學習。

如果你現在還處在初中級水平,如果你還只拿著一二十萬的年薪。那麼我相信這些高階學習視頻會提供給你特別大的幫助和方向!(包括Java在Android開發中應用、APP框架知識體系、高級UI、全方位性能調優,NDK開發,音視頻技術,人工智慧技術,跨平台技術等深入學習視頻資料),

資料領取方式:私信【面試資料】免費領取

Android面試資料整理

如果你現在感覺很迷茫,不知道以後怎麼發展,或者有遇到技術瓶頸想要學習提升的朋友,可以看下這篇;Android原生開發飽和後,為什麼還有這麼多人沒轉行?

【Android高級架構師系列視頻】;私信【進階視頻】領取;

阿里p7級進階視頻全套


推薦閱讀:

TAG:Android開發 | 程序員面試 | Android |