程序员深度学习!我想谈谈关于Android面试那些事,附赠课程+题库
想要成為一名優秀的Android開發,你需要一份完備的知識體系,在這里,讓我們一起成長為自己所想的那樣~。
- 25%的面試官會在頭5分鐘內決定面試的結果
- 60%的面試官會在頭15分鐘內決定面試的結果
一般來說,一場單面的時間在30分鐘左右,而決定你生死的重要關鍵部分就是:自我介紹和三大問。
如果這部分回答的不好,除非后面的回答非常精彩,能夠幫你搬回來,否則機會渺茫。
自我介紹大家都知道,什么是三大問呢?其實就是“3why”問題
在開始回答前,先簡單概括性地說說Linux現有的所有進程間IPC方式:
1. **管道:**在創建時分配一個page大小的內存,緩存區大小比較有限;
2. 消息隊列:信息復制兩次,額外的CPU消耗;不合適頻繁或信息量大的通信;
3. 共享內存:無須復制,共享緩沖區直接付附加到進程虛擬地址空間,速度快;但進程間的同步問題操作系統無法實現,必須各進程利用同步工具解決;
4. 套接字:作為更通用的接口,傳輸效率低,主要用于不通機器或跨網絡的通信;
5. 信號量:常作為一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作為進程間以及同一進程內不同線程之間的同步手段。
6. 信號: 不適用于信息交換,更適用于進程中斷控制,比如非法內存訪問,殺死某個進程等;
Android的內核也是基于Linux內核,為何不直接采用Linux現有的進程IPC方案呢,難道Linux社區那么多優秀人員都沒有考慮到有Binder這樣一個更優秀的方案,是google太過于牛B嗎?事實是真相并非如此,請細細往下看,您就明白了。
接下來正面回答這個問題,從5個角度來展開對Binder的分析:
(1)從性能的角度 **數據拷貝次數:**Binder數據拷貝只需要一次,而管道、消息隊列、Socket都需要2次,但共享內存方式一次內存拷貝都不需要;從性能角度看,Binder性能僅次于共享內存。
(2)從穩定性的角度
Binder是基于C/S架構的,簡單解釋下C/S架構,是指客戶端(Client)和服務端(Server)組成的架構,Client端有什么需求,直接發送給Server端去完成,架構清晰明朗,Server端與Client端相對獨立,穩定性較好;而共享內存實現方式復雜,沒有客戶與服務端之別, 需要充分考慮到訪問臨界資源的并發同步問題,否則可能會出現死鎖等問題;從這穩定性角度看,Binder架構優越于共享內存。
僅僅從以上兩點,各有優劣,還不足以支撐google去采用binder的IPC機制,那么更重要的原因是:
(3)從安全的角度
傳統Linux IPC的接收方無法獲得對方進程可靠的UID/PID,從而無法鑒別對方身份;而Android作為一個開放的開源體系,擁有非常多的開發平臺,App來源甚廣,因此手機的安全顯得額外重要;對于普通用戶,絕不希望從App商店下載偷窺隱射數據、后臺造成手機耗電等等問題,傳統Linux IPC無任何保護措施,完全由上層協議來確保。
Android為每個安裝好的應用程序分配了自己的UID,故進程的UID是鑒別進程身份的重要標志,前面提到C/S架構,Android系統中對外只暴露Client端,Client端將任務發送給Server端,Server端會根據權限控制策略,判斷UID/PID是否滿足訪問權限,目前權限控制很多時候是通過彈出權限詢問對話框,讓用戶選擇是否運行。Android 6.0,也稱為Android M,在6.0之前的系統是在App第一次安裝時,會將整個App所涉及的所有權限一次詢問,只要留意看會發現很多App根本用不上通信錄和短信,但在這一次性權限權限時會包含進去,讓用戶拒絕不得,因為拒絕后App無法正常使用,而一旦授權后,應用便可以胡作非為。
針對這個問題,google在Android M做了調整,不再是安裝時一并詢問所有權限,而是在App運行過程中,需要哪個權限再彈框詢問用戶是否給相應的權限,對權限做了更細地控制,讓用戶有了更多的可控性,但**同時也帶來了另一個用戶詬病的地方,那也就是權限詢問的彈框的次數大幅度增多。**對于Android M平臺上,有些App開發者可能會寫出讓手機異常頻繁彈框的App,企圖直到用戶授權為止,這對用戶來說是不能忍的,用戶最后吐槽的可不光是App,還有Android系統以及手機廠商,有些用戶可能就跳果粉了,這還需要廣大Android開發者以及手機廠商共同努力,共同打造安全與體驗俱佳的Android手機。
學習路線+知識梳理
花了很長時間,就為了整理這張詳細的知識路線腦圖。當然由于時間有限、能力也都有限,畢竟嵌入式全體系實在太龐大了,包括我那做嵌入式的同學,也不可能什么都懂,有些東西可能沒覆蓋到,不足之處,還希望小伙伴們一起交流補充,一起完善進步。
本文在開源項目:Android開發不會這些?如何面試拿高薪 中已收錄,里面包含不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中…
1.md) 中已收錄,里面包含不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中…
這次就分享到這里吧,下篇見。
總結
以上是生活随笔為你收集整理的程序员深度学习!我想谈谈关于Android面试那些事,附赠课程+题库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谁知道哪里有免费的电影票台
- 下一篇: 深宅1937剧情介绍