安卓面經(jīng)_Android面經(jīng)_150道安卓基礎(chǔ)面試題

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