Android 開發(fā)的面經(jīng)總結(jié)_150道高頻面試題答案解析

系列專欄:
安卓系統(tǒng)Framework面經(jīng)專欄鏈接:https://blog.nowcoder.net/zhuanlan/Mde2W0
安卓系統(tǒng)Framework面經(jīng)目錄詳情:https://www.nowcoder.com/discuss/456922214454091776
安卓高頻面經(jīng)解析大全專欄鏈接:https://blog.nowcoder.net/zhuanlan/80aJVm
安卓高頻面經(jīng)解析大全目錄詳情:https://www.nowcoder.com/discuss/396383934924292096
嵌入式面經(jīng)解析大全專欄鏈接:https://blog.nowcoder.net/zhuanlan/3m2ONj
嵌入式面經(jīng)解析大全目錄詳情:https://www.nowcoder.com/discuss/419423154676789248 作者:SKY763450633 https://www.bilibili.com/read/cv21488707 出處:bilibili
本人是2020年畢業(yè)于廣東工業(yè)大學(xué)研究生:許喬丹,有國內(nèi)大廠CVTE和世界500強(qiáng)企業(yè)安卓開發(fā)經(jīng)驗(yàn),該專欄整理本人對常見安卓高頻開發(fā)面試題的理解;
網(wǎng)上安卓資料千千萬,筆者將繼續(xù)維護(hù)專欄,一杯奶茶價(jià)格不止提供答案解析,更有專欄內(nèi)容免費(fèi)技術(shù)答疑。助您提高安卓面試準(zhǔn)備效率,為您面試保駕護(hù)航!
目錄
第一部分:四大組件篇
1、Activity
請介紹Activity的生命周期??????
請介紹Activity的4種啟動模式?????
請說下切換橫豎屏?xí)r Activity的生命周期變化?????
2、Service
請介紹Service的啟動方式,啟動方式的區(qū)別???????
請介紹Service的生命周期??????
Activity、Service、intent之間的聯(lián)系?????
在Activity和Service中創(chuàng)建Thread的區(qū)別?(進(jìn)階題)???
android進(jìn)程的優(yōu)先級?以及如何保證Service不被殺死?(進(jìn)階題)????
3、BroadCast
請介紹Android里廣播的分類?????
程序A能否接收到程序B的廣播????
請列舉廣播注冊的方式,并簡單描述其區(qū)別??????
4、內(nèi)容提供者
什么是內(nèi)容提供者??????
簡單介紹下 ContentProvider 是如何實(shí)現(xiàn)數(shù)據(jù)共享的(原理)?????
說說 ContentProvider、ContentResolver、ContentObserver 之間的關(guān)系?????
說說如何創(chuàng)建自己應(yīng)用的內(nèi)容提供者的使用場景。???
說說ContentProvider的權(quán)限管理。???
為什么要使用通過ContentResolver類從而與ContentProvider類進(jìn)行交互,而不直接訪問ContentProvider類????
ContentProvider的底層是采用Android中的Binder機(jī)制,既然已經(jīng)有了binder實(shí)現(xiàn)了進(jìn)程間通信了為什么還會需要contentProvider?????
第二部分:Android基礎(chǔ)知識篇
5、Context
談?wù)勀銓ctivity的Context的認(rèn)識??????
Application和Activity,Context的區(qū)別??????
getApplication()和getApplicationContext()的區(qū)別?????
context錯(cuò)誤用法有哪些????
如何正確使用Context,如何獲取Context?????
一個(gè)應(yīng)用程序有幾個(gè)Context? ????
6、Intent
什么是Intent? ?????
顯式Intent和隱式Intent的區(qū)別?????
在隱式啟動中Intent可以設(shè)置多個(gè)action,多個(gè)category嗎?????
隱式Intent的匹配規(guī)則??????
Activity之間傳遞數(shù)據(jù)的方式Intent是否有大小限制,如果傳遞的數(shù)據(jù)量偏大,有哪些方案????
7、8、Handler異步消息機(jī)制
請介紹下Handler消息機(jī)制 ?????
Handler 引起的內(nèi)存泄露原因以及最佳解決方案 ?????
為什么我們能在主線程直接使用 Handler,而不需要創(chuàng)建 Looper ? ?????
Handler、Thread和HandlerThread的差別 ????
子線程中怎么使用 Handler? ????
為什么在子線程中創(chuàng)建 Handler 會拋異常?????
Handler 里藏著的 Callback 能干什么????
Handler 的 send 和 post 的區(qū)別?????
創(chuàng)建 Message 實(shí)例的最佳方式 ???
Message 的插入以及回收是如何進(jìn)行的,如何實(shí)例化一個(gè) Message 呢????
妙用Looper機(jī)制,或者你知道Handler機(jī)制的其他用途嗎????
Looper.loop()死循環(huán)一直運(yùn)行是不是特別消耗CPU資源呢?不會造成應(yīng)用卡死嗎??????
MessageQueue 中如何等待消息?為何不使用 Java 中的 wait/notify 來實(shí)現(xiàn)阻塞等待呢???
你知道延時(shí)消息的原理嗎?????
handler postDelay這個(gè)延遲是怎么實(shí)現(xiàn)的?????
如何保證在msg.postDelay情況下保證消息次序????
更新UI的方式有哪些 ????
線程、Handler、Looper、MessageQueue 的關(guān)系?????
多個(gè)線程給 MessageQueue 發(fā)消息,如何保證線程安全????
View.post 和 Handler.post 的區(qū)別????
你知道 IdleHandler 嗎???
9、HandlerThread
HandlerThread是什么??????
HandlerThread原理和使用場景?????
10、AsyncTask
AsyncTask是什么?能解決什么問題 ????
給我談?wù)凙syncTask的三個(gè)泛型參數(shù)作用以及它的一些方法作用。???
給我說說AsyncTask的原理。???
你覺得AsyncTask有不足之處嗎?有何使用注意事項(xiàng)????
11、IntentService
IntentService是什么??????
IntentService原理和使用場景?????
IntentService和Service的區(qū)別 ?????
12、Fragment
Fragment是什么?和Activity的聯(lián)系?生命周期如何???????
Activity和Fragment之間如何通訊?Fragment和Fragment之間如何通訊??????
Fragment的回退棧了解嗎?????
Fragment的使用方式???
你有遇到過哪些關(guān)于Fragment的問題,如何處理的????
13、Binder
請介紹什么是Binder機(jī)制?????
請介紹Binder機(jī)制流程 ????
Binder機(jī)制需要多少次內(nèi)存拷貝 ???
Android有很多跨進(jìn)程通信方法,為何選擇Binder????
14、AIDL
請介紹什么是AIDL?????
有幾種AIDL文件????
一個(gè)程序AIDL文件的數(shù)量? ??
你有沒有使用過AIDL?談?wù)勀闳绾螌?shí)現(xiàn)的? ????
知道AIDL語法中的定向tag嗎????
你能不能簡單描述AIDL實(shí)現(xiàn)的原理????
15、SharedPreferences
SharedPreference是線程安全的嗎????
SharedPreference的apply和commit的區(qū)別?commit 一定會在主線程操作嘛??????
SharedPreferences 是如何初始化的,它會阻塞主線程嗎????
每次獲取 SP 對象真的會很慢嗎????
在使用時(shí)需要注意哪些問題,以及有什么優(yōu)化點(diǎn)呢?????
16、線程池
線程池的種類?????
線程池的優(yōu)點(diǎn)????
平時(shí)當(dāng)中使用案例????
ThreadPoolExecutor類有了解嗎???
第三部分:View相關(guān)篇
17、Activity、Window、DecorView以及ViewRoot層級關(guān)系
請講述Activity、Window、DecorView以及ViewRoot之間的層級關(guān)系?????
DecorView什么時(shí)候可見?????
18、觸摸事件分發(fā)機(jī)制
請介紹什么是事件分發(fā)機(jī)制,以及對應(yīng)流程?????
談?wù)勀銓otionEvent的認(rèn)識?Cancel事件是什么情況下觸發(fā)的???
OnTouchListener & OnTouchEvent & OnClickListener三者之間的關(guān)系????
19、View繪制流程
請介紹View的三大繪制流程 ?????
你知道View繪制前的準(zhǔn)備流程嗎??
什么是MeasureSpec????
測量模式有哪三種???
為什么有時(shí)候getMeasuredWidth獲取值為0???
繪制的順序是怎么樣???
20、自定義View
自定義View的流程 ?????
自定義View需要重寫哪些函數(shù)?說說你在自定義View時(shí)常常重寫的一些方法? ????
自定義View的種類有哪些?給我說說你之前項(xiàng)目中的案例。????
說說自定義View中如何自定義屬性????
自定義View如何處理padding???
自定義View效率高于xml布局文件嗎???
自定義View什么時(shí)候需要處理wrap_content屬性?怎么處理??
第四部分:Android進(jìn)階篇
21、序列化
序列化是什么?????
序列化的作用?什么時(shí)候需要序列化? ????
Android中序列化方式有幾種?說說它們的區(qū)別。?????
Bunder傳遞對象為什么需要序列化????
22、JNI/NDK
什么是JNI?它主要用來干什么。 ?????
Java 聲明的Native方法如何和Native層的Native函數(shù)進(jìn)行綁定的?(也就是介紹兩種注冊方法)?????
JNI如何實(shí)現(xiàn)數(shù)據(jù)傳遞?????
如何全局捕獲Native發(fā)生的異常????
JNIEnv與JavaVM的關(guān)系????
C和C++的JNIEnv的區(qū)別 ???
JNI項(xiàng)目配置和數(shù)據(jù)映射 ??
23、設(shè)計(jì)模式使用案例
說說設(shè)計(jì)模式的六大原則。???
請簡要談一談單例模式??????
請列出幾種常見的工廠模式并說明它們的用法?????
靜態(tài)代理和動態(tài)代理的區(qū)別,什么場景使用??????
談一談責(zé)任鏈模式的使用場景????
請講講你會使用的一些設(shè)計(jì)模式?????
能否給我說說Android中至少3個(gè)用到設(shè)計(jì)模式的例子? ?????
24、APK啟動流程
你知道桌面點(diǎn)擊應(yīng)用圖標(biāo)到應(yīng)用顯示期間系統(tǒng)實(shí)現(xiàn)了什么流程嗎?????
冷啟動和熱啟動的區(qū)別 ??
桌面點(diǎn)擊啟動APP和從另一個(gè)程序跳轉(zhuǎn)過去有什么區(qū)別???
25、MVC、MVP、MVVM
說說你對MVC、MVP、MVVM的理解,他們有什么區(qū)別和聯(lián)系,如何演變的? ?????
MVVM的優(yōu)點(diǎn)和缺點(diǎn) ????
為什么Activity旋轉(zhuǎn)屏幕后ViewModel可以恢復(fù)數(shù)據(jù) ??
ViewModel 的實(shí)例緩存到哪兒了 ??
什么時(shí)候 ViewModel#onCleared() 會被調(diào)用 ??
26、緩存機(jī)制
你了解Android中的緩存機(jī)制嗎?????
LruCache的源碼看過嗎????
還有用過哪些緩存工具?????
27、APK打包流程和反編譯
請講述一下APK打包的流程? ????
使用過哪些反編譯的工具????
28、注解
你是否了解注解??????
你知道元注解嗎????
知道如何使用自定義注解嗎?有哪些實(shí)現(xiàn)方法?????
具體說一下編譯時(shí)注解的實(shí)現(xiàn)思路????
如何使用注解代替枚舉????
你知道哪些常用的注解?????
第五部分:Android性能優(yōu)化篇
29、內(nèi)存優(yōu)化
什么是OOM、內(nèi)存泄漏、內(nèi)存抖動?如何發(fā)生的? ?????
Handler導(dǎo)致的內(nèi)存泄露你是如何解決的? ????
知道如何定位內(nèi)存泄漏嗎?有什么工具?????
請至少例舉出5種內(nèi)存泄漏情況。?????
在 Android 中如何避免內(nèi)存泄漏??????
談?wù)勀沩?xiàng)目中內(nèi)存優(yōu)化的一些經(jīng)驗(yàn)(開放題)???
30、卡頓優(yōu)化
造成系統(tǒng)卡頓的根本原因 ???
什么是 ANR ?導(dǎo)致原因有哪些??????
如何避免發(fā)生 ANR ?????
分別說說Activity、BroadcastReceiver、Serice最長可耗時(shí)時(shí)間為多少??????
談?wù)勀沩?xiàng)目中避免ANR的一些經(jīng)驗(yàn)(開放題)??
有什么方法和工具可以分析ANR ???
以上內(nèi)容均提供售后答疑
