android熱修復基本原理,5年經驗Android程式設計師面試27天,原理+實戰+視訊+原始碼
前言
很多人聊起移動端適配都是懵逼狀態,都想口吐芬芳。難道移動端還要適配,直接px寫死,其他自適應不就完了嗎?其實不然,要求嚴格的公司會要求縮放比例完全相同,簡單說就是,在每個手機上的每一行的字數都要一樣。接下來,我們就要細說移動端適配的前世今生
一、Android面試題
Android面試題包括Android基礎,還有一些原始碼級別的、原理這些等。所以想去美團面試,一定要多看看原始碼和實現方式,常用框架可以試試自己能不能手寫實現一下,鍛鍊一下自己。 (一)Android基礎知識點
-
四大元件是什麼
-
四大元件的生命週期和簡單用法
-
Activity之間的通訊方式
-
Activity各種情況下的生命週期
-
橫豎屏切換的時候,Activity 各種情況下的生命週期
-
Activity與Fragment之間生命週期比較
-
Activity上有Dialog的時候按Home鍵時的生命週期
-
兩個Activity 之間跳轉時必然會執行的是哪幾個方法?
-
前臺切換到後臺,然後再回到前臺,Activity生命週期回撥方法。彈出Dialog,生命值週期回撥方法。
-
Activity的四種啟動模式對比
-
Activity狀態保存於恢復
-
fragment各種情況下的生命週期
-
Fragment狀態儲存startActivityForResult是哪個類的方法,在什麼情況下使用?
-
如何實現Fragment的滑動?
-
fragment之間傳遞資料的方式?
-
Activity 怎麼和Service 繫結?
-
怎麼在Activity 中啟動自己對應的Service?
-
service和activity怎麼進行資料互動?
-
Service的開啟方式
-
請描述一下Service 的生命週期
-
談談你對ContentProvider的理解
-
說說ContentProvider、ContentResolver、ContentObserver 之間的關係
-
請描述一下廣播BroadcastReceiver的理解
-
廣播的分類
-
廣播使用的方式和場景
-
在manifest 和程式碼中如何註冊和使用BroadcastReceiver?
-
本地廣播和全域性廣播有什麼差別?
-
BroadcastReceiver,LocalBroadcastReceiver 區別
-
AlertDialog,popupWindow,Activity區別
-
Application 和 Activity 的 Context 物件的區別
-
Android屬性動畫特性
-
如何匯入外部資料庫?
-
LinearLayout、RelativeLayout、FrameLayout的特性及對比,並介紹使用場景。
-
談談對介面與回撥的理解
-
回撥的原理
-
寫一個回撥demo
-
介紹下SurfView
-
RecycleView的使用
-
序列化的作用,以及Android兩種序列化的區別
-
差值器
-
估值器
-
Android中資料儲存方式
(二)Android原始碼相關分析
-
Android動畫框架實現原理
-
Android各個版本API的區別
-
Requestlayout,onlayout,onDraw,DrawChild區別與聯絡
-
invalidate和postInvalidate的區別及使用
-
Activity-Window-View三者的差別
-
談談對Volley的理解
-
如何優化自定義View
-
低版本SDK如何實現高版本api?
-
描述一次網路請求的流程
-
HttpUrlConnection 和 okhttp關係
-
Bitmap物件的理解
-
looper架構
-
ActivityThread,AMS,WMS的工作原理
-
自定義View如何考慮機型適配
-
自定義View的事件
-
AstncTask+HttpClient 與 AsyncHttpClient有什麼區別?
-
LaunchMode應用場景
-
AsyncTask 如何使用?
-
SpareArray原理
-
請介紹下ContentProvider 是如何實現資料共享的?
-
AndroidService與Activity之間通訊的幾種方式
-
IntentService原理及作用是什麼?
-
說說Activity、Intent、Service 是什麼關係
-
ApplicationContext和ActivityContext的區別
-
SP是程序同步的嗎?有什麼方法做到同步?
-
談談多執行緒在Android中的使用
-
程序和 Application 的生命週期
-
封裝View的時候怎麼知道view的大小
-
RecycleView原理
-
AndroidManifest的作用與理解
(三)常見的一些原理性問題
-
Handler機制和底層實現
-
Handler、Thread和HandlerThread的差別
-
handler發訊息給子執行緒,looper怎麼啟動?
-
關於Handler,在任何地方new Handler 都是什麼執行緒下?
-
ThreadLocal原理,實現及如何保證Local屬性?
-
請解釋下在單執行緒模型中Message、Handler、Message Queue、Looper之間的關係
-
請描述一下View事件傳遞分發機制
-
Touch事件傳遞流程
-
事件分發中的onTouch 和onTouchEvent 有什麼區別,又該如何使用?
-
View和ViewGroup分別有哪些事件分發相關的回撥方法
-
View重新整理機制
-
View繪製流程
-
自定義控制元件原理
-
自定義View如何提供獲取View屬性的介面?
-
Android程式碼中實現WAP方式聯網
-
AsyncTask機制
-
AsyncTask原理及不足
-
如何取消AsyncTask?
-
為什麼不能在子執行緒更新UI?
-
ANR產生的原因是什麼?
-
ANR定位和修正
-
oom是什麼?
-
什麼情況導致oom?
-
有什麼解決方法可以避免OOM?
-
Oom 是否可以try catch?為什麼?
-
記憶體洩漏是什麼?
-
什麼情況導致記憶體洩漏?
-
如何防止執行緒的記憶體洩漏?
-
記憶體洩露場的解決方法
-
記憶體洩漏和記憶體溢位區別?
-
LruCache預設快取大小
-
ContentProvider的許可權管理(解答:讀寫分離,許可權控制-精確到表級,URL控制)
-
如何通過廣播攔截和abort一條簡訊?
-
廣播是否可以請求網路?
-
廣播引起anr的時間限制是多少?
-
計算一個view的巢狀層級
-
Activity棧
-
Android執行緒有沒有上限?
-
執行緒池有沒有上限?
-
Android為什麼引入Parcelable?
-
有沒有嘗試簡化Parcelable的使用?
二、Java面試題
熟練掌握java是很關鍵的,大公司不僅僅要求你會使用幾個api,更多的是要你熟悉原始碼實現原理,甚至要你知道有哪些不足,怎麼改進,還有一些java有關的一些演算法,設計模式等等。 (一、)Java
-
HashMap 和 HashTable 以及 CurrentHashMap 的區別。
-
synchronized 和 volatile 、ReentrantLock 、CAS 的區別。
-
JVM 類載入機制、垃圾回收演算法對比、Java 虛擬機器結構等。
-
Java 的四大引用
-
Java 的泛型,<? super T> 和 <? extends T> 的區別。
-
Java 執行緒有哪些狀態,有哪些鎖,各種鎖的區別。
-
final 、finally、finalize 區別。
-
介面和抽象類的區別。
-
sleep 、wait、yield 的區別,wait 的執行緒如何喚醒它?
三、高階開發技術面試題
一、圖片
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.資料庫資料遷移問題
四、外掛化、模組化、元件化、熱修復、增量更新、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.啟動 app 黑白屏優化
2.穩定——記憶體優化
3.流暢——卡頓優化
4.節省——耗電優化
5.安裝包——APK 瘦身
6.冷啟動與熱啟動
7.記憶體洩漏的場景和解決辦法
8. Bitmap 優化
9.LRU 的原理
10.webview 優化
11.如何避免 OOM?
...
七、Android Framework
1.Android 系統架構
2.View 的事件分發機制?滑動衝突怎麼解決?
3.View 的繪製流程?
4.跨程序通訊
5.Android 系統啟動流程是什麼?
6.啟動一個程式,可以主介面點選圖示進入,也可 以從一個程式中 跳轉過去,二者有什麼區別?
7.AMS 家族重要術語解釋
8.用到的一些開源框架,介紹一個看過原始碼的,內部實現過程。
...
八、Android優秀三方庫原始碼
1.網路底層框架:OkHttp 實現原理
2.網路封裝框架:Retrofifit 實現原理
3.響應式程式設計框架:RxJava 實現原理
4.圖片載入框架:Glide 實現原理
5.事件匯流排框架:EventBus 實現原理
6.記憶體洩漏檢測框架:LeakCanary 實現原理
7.依賴注入框架:ButterKnife 實現原理
8.依賴全域性管理框架:Dagger2 實現原理
9.資料庫框架:GreenDao 實現原理
本文在開源專案:Android開發不會這些?如何面試拿高薪! 中已收錄,裡面包含不同方向的自學程式設計路線、面試題集合/面經、及系列技術文章等,資源持續更新中...