前言
很多搞Android開發的心裏都有這樣的問題:Handler和Binder這兩個知識點,面試時還要問嗎?還有研究的必要嗎?工作中似乎用不到啊。
這些問題其實並不難回答:哪個公司不是面試造火箭,工作擰螺絲?
想必大家都感受到了,越來越多的人開始湧進Android這個行業,現在的Android程序員越來越難找工作了。畢竟大環境擺在那裏的,現在Android從業者真的太多了,既然有那麼多可供選擇的人,爲什麼不選擇更好的呢?
於是,如大家所見的,現在的公司對Android開發者的要求越來越高了!尤其是阿里、頭條、騰訊等大廠,面試問的很多都是原理,像Handler和Binder這些,這都是必問的題目,所以,明白了嗎?面試官必問的。
爲什麼Android面試必問Handler和Binder?
衆所周知,程序代碼是死的,系統運轉是活的,各模塊代碼運行在不同的進程(線程)中,想要真正理解安卓的這幾大服務,勢必要掌握安卓的通信機制,而安卓最主要的兩個通信機制就是Handler和Binder。
Binder機制在Android中的地位舉足輕重,我們需要掌握的很多原理都和Binder有關:
- 系統中的各個進程是如何通信的?
- Android系統啓動過程
- AMS、PMS的原理
- 四大組件的原理,比如Activity是如何啓動的?
- 插件化原理
- 系統服務的Client端和Server端是如何通信的?(比如MediaPlayer和MeidaPlayerService)
可以說Binder機制是掌握系統底層原理的基石。
Handler的地位也是同樣的原理。
現在的業界有一句話是這樣說的:技術好的未必弄得懂底層,但是底層基礎好的學起技術來很快。所以,大公司在挑選公司人才的時候,更加看重的是應聘者對底層原理的掌握和理解。
所以,明白了嗎?Handler和Binder面試官必問的×2。
大廠面試真題舉例
來來來,看看這幾道大廠關於Handler和Binder的面試真題,能不能答上來?
(這都是我在網上找到的Handler和Binder面試必問的經典題目)
1、一個線程有幾個Handler?
2、Handler 內存泄漏原因?爲什麼其他的內部類沒有說過有這個問題?
3、爲何主線程可以new Handler?如果想要在子線程中new Handler要做些什麼準備?
4、子線程中維護的Looper,消息隊列無消息的時候的處理方案是什麼?有什麼用?
5、既然可以存在多個Handler往MessageQueue中添加數據(發消息時各個Handler可能處於不同線程),那它內部是如何確保線程安全的?
6、我們使用Message時應該如何創建它?
7、Looper死循環爲什麼不會導致應用卡死?
8、Binder有什麼優勢?(字節跳動)
9、Binder是如何做到一次拷貝的?(騰訊)
10、MMAP的原理講解;(騰訊)
11、爲什麼Intent不能傳遞大數據?(阿里)
12、描述AIDL生成的Java類細節;(字節跳動)
13、四大組件底層的通信機制;(字節跳動)
14、爲什麼Intent不能傳遞大數據?(阿里)
一線企業的app都是多線程和多進程的,而Android進程間通信機制就是Binder,原生的線程間通信則是Handler,Binder和Handler是瞭解安卓運行機制必須要掌握的一個知識點,更是一線企業面試必問的知識點!
上面這些問題,換你去你都答上來麼?你現在還會覺得沒有必要去研究Handler和Binder麼?
知道要問,關鍵是該怎麼答呢?
那些底層的東西,每次學完就忘,一合上書就忘得差不多了,不知道要怎樣學纔好了。
其實造成這樣的現象最主要的原因是沒有掌握系統的學習方法,也沒有系統的資料輔助理解和學習。
知識點就是那些,基本上,翻來覆去就是那些換湯不換藥的問法。我通過對最近兩年這些大廠面經的收集和分析,把那些經常問到的Handler和Binder以及相關的知識點整理了出來,成爲一份專門針對這兩個知識點的PDF。
下面是這份資料的細節部分展示,手把手,保姆式教學,教你透徹理解這兩個知識點,教你吊打面試官。
需要份資料的可以點擊下面的藍色字體免費獲取↓↓↓↓↓
https://github.com/xieyuliang/Tecent-Android-Archiecture/blob/master/%E8%85%BE%E8%AE%AFT3-
(一)Handler原理
1.Handler Looper Message 關係是什麼?
- 分析 Handler
- 發送消息
- ……
2.Messagequeue 的數據結構是什麼?爲什麼要用這個數 據結構?
- 爲什麼要用 Message Queue
- Messagequeue 的數據結構是什麼?
- ……
3.如何在子線程中創建 Handler?
- ……
4.Handler post 方法原理
- 源碼分析
- 整理
- ……
5.Android 消息機制的原理及源碼解析
- 消息機制概述
- 消息機制的源碼解析
- ……
6.Handler 都沒搞懂,拿什麼去跳槽啊?
- 重識 Handler
- Handler 原理解析
- Handler 的延伸
- ……
7.Android Handler 消息機制中的迷惑行爲
- 帶有消息隊列線程概述
- 帶有消息隊列線程的具體實現
- ……
需要份資料的可以點擊下面的藍色字體免費獲取↓↓↓↓↓
https://github.com/xieyuliang/Tecent-Android-Archiecture/blob/master/%E8%85%BE%E8%AE%AFT3-
(二)Binder原理
1.學習Binder前必須要瞭解的知識點
- Linux中的IPC機制種類
- Android中的IPC機制
- Linux的IPC通信原理
- Binder的通信原理
- 爲什麼要使用Binder
- 爲什麼要學習Binder?
2.ServiceManager中的Binder機制
- 基於Binder通信的C/S架構
- MediaServer的main函數
- 每個進程唯一的ProcessState
- ServiceManager中的Binder機制
- ……
3.系統服務的註冊過程
- 從調用鏈角度說明MediaPlayerService是如何註冊的
- 從進程角度說明MediaPlayerService是如何註冊的
- ……
4.ServiceManager的啓動過程
- ServiceManager的入口函數
- ……
5.系統服務的獲取過程
- 客戶端MediaPlayerService請求獲取服務
- ……
6.……(省略)
需要份資料的可以點擊下面的藍色字體免費獲取↓↓↓↓↓
https://github.com/xieyuliang/Tecent-Android-Archiecture/blob/master/%E8%85%BE%E8%AE%AFT3-
最後
剛剛發生了一件趣事,我在寫這篇文章的標題時,同事路過,他站在我身後,突然說了一句“會問的,一定會問Handler和Binder的,你還不如寫爲什麼會問這些知識點”。
說一下,這位同事是公司的大佬,風風火火的直性子,他面過很多應聘者,有很多經驗。他都這樣說,大家就不要抱着僥倖的心理去準備面試了,老老實實的拿着資料去複習吧。
啃透這份154頁的PDF,底層原理不用愁,幫你提高自己在人才市場的競爭力,吊打面試官!而且,不僅僅是應對面試,Android開發想要進階學習,想要更大的發展空間就必須深挖底層原理,僅僅停留在表面,前路是很難走的。
最後,祝大家拿下心儀的offer,工作一帆風順!