天天看點

備戰2020金三銀四Android社招最全面試題Activity基礎相關Fragment基礎相關Service基礎相關Broadcast Receiver基礎相關ContentProvider基礎相關資料存儲相關IPC(重點)View相關Handler相關線程(重點)相關Bitmap相關JNI相關設計模式相關答篇

Activity基礎相關

說下Activity生命周期 ?

Activity A 啟動另一個Activity B 會調用哪些方法?如果B是透明主題的又或則是個DialogActivity呢 ?

說下onSaveInstanceState()方法的作用 ? 何時會被調用?

說下 Activity的四種啟動模式、應用場景 ?

了解哪些Activity常用的标記位Flags?

說下 Activity跟window,view之間的關系?

橫豎屏切換的Activity生命周期變化?

如何啟動其他應用的Activity?

Activity的啟動過程?(重點)

Fragment基礎相關

談一談Fragment的生命周期 ?與Activity生命周期的不同 ?

談談Activity和Fragment的差別?

Fragment中add與replace的差別(Fragment重疊)

getFragmentManager、getSupportFragmentManager 、getChildFragmentManager之間的差別?

FragmentPagerAdapter與FragmentStatePagerAdapter的差別與使用場景

Service基礎相關

談一談Service的生命周期?

Service的兩種啟動方式?差別在哪?

如何保證Service不被殺死 ?

能否在Service開啟耗時操作 ?怎麼做 ?

用過哪些系統Service ?

了解ActivityManagerService嗎?發揮什麼作用(重點)

Broadcast Receiver基礎相關

廣播有幾種形式 ? 都有什麼特點 ?

廣播的兩種注冊方式 ?

廣播發送和接收的原理了解嗎 ?(Binder機制、AMS)

ContentProvider基礎相關

ContentProvider了解多少?

ContentProvider的權限管理?

說說ContentProvider、ContentResolver、ContentObserver 之間的關系?

資料存儲相關

描述一下Android資料持久存儲方式?

SharedPreferences的應用場景?注意事項?

SharedPrefrences的apply和commit有什麼差別?

了解SQLite中的事務操作嗎?是如何做的

使用SQLite做批量操作有什麼好的方法嗎?

如何删除SQLite中表的個别字段?

使用SQLite時會有哪些優化操作?

IPC(重點)

Android中程序和線程的關系?差別?

如何開啟多程序 ?應用是否可以開啟N個程序 ?

為何需要IPC?多程序通信可能會出現的問題?

Android中IPC方式、各種方式優缺點,為什麼選擇Binder?

Binder機制的作用和原理?

Binder架構中ServiceManager的作用?

Bundle傳遞對象為什麼需要序列化?Serialzable和Parcelable的差別?

講講AIDL?原理是什麼?如何優化多子產品都使用AIDL的情況?

View相關

講下View的繪制流程?

MotionEvent是什麼?包含幾種事件?什麼條件下會産生?

描述一下View事件傳遞分發機制?

如何解決View的事件沖突 ?舉個開發中遇到的例子 ?

scrollTo()和scollBy()的差別?

Scroller是怎麼實作View的彈性滑動?

invalidate()和postInvalidate()的差別 ?

SurfaceView和View的差別?

自定義View如何考慮機型适配 ?

Handler相關

談談消息機制Handler ? 作用 ?有哪些要素 ?流程是怎樣的 ?

一個線程能否建立多個Handler,Handler跟Looper之間的對應關系 ?

軟引用跟弱引用的差別

Handler 引起的記憶體洩露原因以及最佳解決方案

為什麼系統不建議在子線程通路UI

Looper死循環為什麼不會導緻應用卡死

使用Handler的postDealy後消息隊列會有什麼變化 ?

可以在子線程直接new一個Handler嗎 ?怎麼做 ?

Message可以如何建立 ?哪種效果更好 ?為什麼 ?

線程(重點)相關

線程池的好處?線程池的幾個參數的了解,四種線程池的使用場景

Android中還了解哪些友善線程切換的類?

講講AsyncTask的原理

IntentService有什麼用 ?

直接在Activity中建立一個thread跟在service中建立一個thread之間的差別

ThreadPoolExecutor的工作政策 ?

Handler、Thread和HandlerThread的差别?

ThreadLocal的原理

多線程是否一定會高效(優缺點)

多線程中,讓你做一個單例,你會怎麼做

除了notify還有什麼方式可以喚醒線程

什麼是ANR ? 什麼情況會出現ANR ?如何避免 ?在不看代碼的情況下如何快速定位出現ANR問題所在 ?

Bitmap相關

Bitmap使用需要注意哪些問題 ?

Bitmap.recycle()會立即回收麼?什麼時候會回收?如果沒有地方使用這個Bitmap,為什麼垃圾回收不會直接回收?

一張Bitmap所占記憶體以及記憶體占用的計算

Android中緩存更新政策 ?

LRU的原理 ?

性能優化(重點)

圖檔的三級緩存中,圖檔加載到記憶體中,如果記憶體快爆了,會發生什麼?怎麼處理?

記憶體中如果加載一張500*500的png高清圖檔.應該是占用多少的記憶體?

WebView的性能優化 ?

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

記憶體回收機制與GC算法(各種算法的優缺點以及應用場景);GC原理時機以及GC對象

記憶體洩露和記憶體溢出的差別 ?AS有什麼工具可以檢測記憶體洩露

性能優化,怎麼保證應用啟動不卡頓? 黑白屏怎麼處理?

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

ListView跟RecyclerView的差別

ListView的adapter是什麼adapter ?

LinearLayout、FrameLayout、RelativeLayout性能對比,為什麼?

JNI相關

對JNI是否了解

如何加載NDK庫 ?如何在JNI中注冊Native函數,有幾種注冊方法 ?

你用JNI來實作過什麼功能 ?怎麼實作的 ?(加密處理、影音方面、圖形圖像處理)

設計模式相關

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

談談MVC、MVP和MVVM,好在哪裡,不好在哪裡 ?

封裝p層之後.如果p層資料過大,如何解決

是否能從Android中舉幾個例子說說用到了什麼設計模式 ?

裝飾模式和代理模式有哪些差別 ?

實作單例模式有幾種方法 ?懶漢式中雙層鎖的目的是什麼 ?兩次判空的目的又是什麼?

用到的一些開源架構,介紹一個看過源碼的,内部實作過程。

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

Android進階延伸點

如何進行單元測試,如何保證App穩定

Android中如何檢視一個對象的回收情況

APK的大小如何壓縮 ?

如何通過Gradle配置多管道包?

插件化原理分析

組建化原理

跨元件通信

元件化中路由、埋點的實作

Hook以及插樁技術

Android的簽名機制

v3簽名key和v2還有v1有什麼差別

Android5.0~10.0之間大的變化 ?

說下Measurepec這個類

請例舉Android中常用布局類型,并簡述其用法以及排版效率

差別Animation和Animator的用法,概述其原理

使用過什麼圖檔加載庫 ?Glide的源碼設計哪裡很微妙 ?

如何繞過9.0限制?

用過哪些網絡加載庫 ?OkHttp、Retrofit實作原理 ?

對于應用更新這塊是如何做的 ?(灰階,強制更新、分區域更新)

會用Kotlin、Fultter嗎 ?談談你的了解

答篇

1、說下Activity生命周期 ?

參考解答:在正常情況下,Activity的常用生命周期就隻有如下7個

onCreate():表示Activity正在被建立,常用來初始化工作,比如調用setContentView加載界面布局資源,初始化Activity所需資料等;

onRestart():表示Activity正在重新啟動,一般情況下,目前Acitivty從不可見重新變為可見時,OnRestart就會被調用;

onStart():表示Activity正在被啟動,此時Activity可見但不在前台,還處于背景,無法與使用者互動;

onResume():表示Activity獲得焦點,此時Activity可見且在前台并開始活動,這是與onStart的差別所在;

onPause():表示Activity正在停止,此時可做一些存儲資料、停止動畫等工作,但是不能太耗時,因為這會影響到新Activity的顯示,onPause必須先執行完,新Activity的onResume才會執行;

onStop():表示Activity即将停止,可以做一些稍微重量級的回收工作,比如登出廣播接收器、關閉網絡連接配接等,同樣不能太耗時;

onDestroy():表示Activity即将被銷毀,這是Activity生命周期中的最後一個回調,常做回收工作、資源釋放;

延伸:從整個生命周期來看,onCreate和onDestroy是配對的,分别辨別着Activity的建立和銷毀,并且隻可能有一次調用;

從Activity是否可見來說,onStart和onStop是配對的,這兩個方法可能被調用多次;

從Activity是否在前台來說,onResume和onPause是配對的,這兩個方法可能被調用多次;

除了這種差別,在實際使用中沒有其他明顯差別;

2、談一談Fragment的生命周期?

參考回答:Fragment從建立到銷毀整個生命周期中涉及到的方法依次為:onAttach()→onCreate()→ onCreateView()→onActivityCreated()→onStart()→onResume()→onPause()→onStop()→onDestroyView()→onDestroy()→onDetach(),其中和Activity有不少名稱相同作用相似的方法,而不同的方法有:

onAttach():當Fragment和Activity建立關聯時調用;

onCreateView():當fragment建立視圖調用,在onCreate之後;

onActivityCreated():當與Fragment相關聯的Activity完成onCreate()之後調用;

onDestroyView():在Fragment中的布局被移除時調用;

onDetach():當Fragment和Activity解除關聯時調用;

3、談一談Service的生命周期?

參考回答:Service的生命周期涉及到六大方法

onCreate():如果service沒被建立過,調用startService()後會執行onCreate()回調;如果service已處于運作中,調用startService()不會執行onCreate()方法。也就是說,onCreate()隻會在第一次建立service時候調用,多次執行startService()不會重複調用onCreate(),此方法适合完成一些初始化工作;

onStartComand():服務啟動時調用,此方法适合完成一些資料加載工作,比如會在此處建立一個線程用于下載下傳資料或播放音樂;

onBind():服務被綁定時調用;

onUnBind():服務被解綁時調用;

onDestroy():服務停止時調用;

4、廣播有幾種形式 ? 都有什麼特點 ?

參考回答:普通廣播:開發者自身定義 intent的廣播(最常用),所有的廣播接收器幾乎會在同一時刻接受到此廣播資訊,接受的先後順序随機;

有序廣播:發送出去的廣播被廣播接收者按照先後順序接收,同一時刻隻會有一個廣播接收器能夠收到這條廣播消息,當這個廣播接收器中的邏輯執行完畢後,廣播才會繼續傳遞,且優先級(priority)高的廣播接收器會先收到廣播消息。有序廣播可以被接收器截斷使得後面的接收器無法收到它;

本地廣播:僅在自己的應用内發送接收廣播,也就是隻有自己的應用能收到,資料更加安全,效率更高,但隻能采用動态注冊的方式;

粘性廣播:這種廣播會一直滞留,當有比對該廣播的接收器被注冊後,該接收器就會收到此條廣播;

5、ContentProvider了解多少?

參考回答:ContentProvider作為四大元件之一,其主要負責存儲和共享資料。與檔案存儲、SharedPreferences存儲、SQLite資料庫存儲這幾種資料存儲方法不同的是,後者儲存下的資料隻能被該應用程式使用,而前者可以讓不同應用程式之間進行資料共享,它還可以選擇隻對哪一部分資料進行共享,進而保證程式中的隐私資料不會有洩漏風險。

更多面試答案解析大全下載下傳位址:

https://shimo.im/docs/3Tvytq686Yyv83KX