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