關(guān)于Android面試個人一些總結(jié)

最近幾個月沒有上班,也沒有認(rèn)真的去回顧過去的知識!以至于今天回北京面試碰一鼻子灰,徹夜難眠,起來寫下這篇博客總結(jié)經(jīng)驗,告誡自己,提醒大家!

記得有一次刷抖音,是一個聽書的節(jié)目,說道這樣一句話,什么是文化?文化是你學(xué)過的看過的,一段時間后還會記得的那些!

個人總結(jié):忘了 還是不扎實!忘了 還是沒學(xué)透!
一下摘要一些我認(rèn)為比較偏僻的問題,分享一下

1 當(dāng)前進(jìn)程如何開啟一個新的進(jìn)程

很簡單,當(dāng)時確實把我問住了,就是把啟動的activity或者service 在對應(yīng)的清單文件中添加一個 android:process="XX"屬性即可 分配一個新的內(nèi)存地址創(chuàng)建一個新的進(jìn)程

2 在項目中組件化你是怎么做的 兩個module是如何跳轉(zhuǎn)的

關(guān)于組件化由來的解答:一個項目剛開始都是采用中心化管理的思想,將相同的資源集中進(jìn)行管理,但是做著做著,發(fā)現(xiàn)集中管理的資源太多了,多人開發(fā)時牽一發(fā)而動全身,進(jìn)而又要對原本的項目進(jìn)行拆分,故而出現(xiàn)了組件化開發(fā)!
具體詳細(xì)的點擊鏈接去看http://www.itdecent.cn/p/d0f5cf304fa4
總結(jié)就是根據(jù)實際開發(fā)業(yè)務(wù)需求來選擇組件式還是單一模式開發(fā)

兩個module的跳轉(zhuǎn)是依靠這里主要還是依賴阿里的ARouter框架來實現(xiàn)
具體點擊鏈接https://blog.csdn.net/hzw2017/article/details/84204833
主要總結(jié)可以說通過ARouter,在需要交互的Activity/Fragment 類上用注解的形式指定該類的path(也叫設(shè)置該類的路由路徑)利用接口回調(diào)傳遞數(shù)據(jù),或者是利用ARouter的建造者模式攜帶數(shù)據(jù)跳轉(zhuǎn)
還有一種方法也可以實現(xiàn)跳轉(zhuǎn)不需要三方框架的
https://blog.csdn.net/fenggering/article/details/85332523

3熱修復(fù)和熱更新的原理,以及修復(fù)完成后會熱啟動還是冷啟動?

現(xiàn)進(jìn)到這里學(xué)習(xí)原理https://blog.csdn.net/itachi85/article/details/79522200
然后你就知道 有些三方是不需要重新啟動的,騰訊的Tinker是需要重新啟動app后才會去替換修改的dex文件

4 關(guān)于安卓Q10.0的版本適配

參考http://www.itdecent.cn/p/887a0841ce97https://www.cnblogs.com/bluestorm/p/10782927.html

主要變動存儲條件 設(shè)備唯一標(biāo)識符 后臺定位權(quán)限 禁止應(yīng)用后臺彈頁面
多媒體新特性 系統(tǒng)應(yīng)用變更

5 關(guān)于sp

SharedPreferences簡稱Sp(后面都會稱Sp),是一種輕量級的數(shù)據(jù)存儲方式,采用Key/value的方式
進(jìn)行映射,最終會在手機(jī)的/data/data/package_name/shared_prefs/目錄下以xml的格式存在。
Sp通常用于記錄一些參數(shù)配置、行為標(biāo)記等!因為其使用簡單,所以大多數(shù)開發(fā)者用起來很爽!但是
請注意:千萬不要使用Sp去存儲量大的數(shù)據(jù),也千萬不要去讓你的Sp文件超級大,否則會大大影響應(yīng)用性能,
甚至出現(xiàn)ANR,沒錯是ANR(下面會分析)。

6 webview 如何去掉廣告

webview如何去掉廣告,總結(jié)起來就一句話,通過注入js的方式刪除h5頁面的廣告div節(jié)點內(nèi)容就ok,如果注入js呢,在我們的webview加載里面有一個監(jiān)聽就是頁面加載完成,onPageFinished這個方法,在里面通過loadUrl的形式把需要注入的js代碼添加進(jìn)去就OK,注入的js代碼可以在這里看http://www.itdecent.cn/p/d793c8d4ff81/

7 如何結(jié)束一個線程

有三種方法可以結(jié)束線程:

  1. 使用退出標(biāo)志,使線程正常退出,也就是當(dāng)run方法完成后線程終止

  2. 使用interrupt()方法中斷線程,其實他不會立即終止線程,需要配合isInterrupt()來進(jìn)行判斷,用break跳出操作來終止當(dāng)前線程

  3. 使用stop方法強(qiáng)行終止線程(不推薦使用,可能發(fā)生不可預(yù)料的結(jié)果)
    https://www.cnblogs.com/liyutian/p/10196044.html

8 動畫有哪些主要的類,插值器,估值器的介紹

地址:http://www.itdecent.cn/p/5d090270a4f5
屬性動畫用到的類ValueAnimator ,ObjectAnimator,AnimatorSet
補(bǔ)間動畫用到的類RotateAnimation(旋轉(zhuǎn))、ScaleAnimation(縮放)、AlphaAnimation(透明度)、TranslateAnimation(位移)、AnimationSet(組合)這5種。
幀動畫用到的類 AnimationDrawable

插值器估值器地址:http://www.itdecent.cn/p/915471529d3c

9 安卓中動畫隔多久刷新一幀

10 Handler中MessageQueue的數(shù)據(jù)結(jié)構(gòu) ThreadLocal工作原理里

MessageQueue主要包含兩個操作:插入和讀取,插入和讀取分為enqueueMessage和next,其中enqueueMessage是往消息隊列中插入一條消息,next是從消息隊列中去出一條消息并從消息隊列中移除,MessageQueue實際上是使用單鏈表來實現(xiàn)的。

ThreadLocalThreadLocal是一個線程內(nèi)部的數(shù)據(jù)存儲類,通過它可以在指定的線程中存儲數(shù)據(jù),數(shù)據(jù)存儲以后,只有在指定線程中可以獲取到存儲的數(shù)據(jù),對于其它線程來說無法獲取到數(shù)據(jù)。ThreadLocal另一個使用場景是復(fù)雜邏輯下的對象傳遞,比如監(jiān)聽器的傳遞,有些時候一個線程中的任務(wù)過于復(fù)雜,這可能表現(xiàn)為函數(shù)調(diào)用棧比較深以及代碼入口的多樣性,在這種情況下,我們又需要監(jiān)聽器能夠貫穿整個線程的執(zhí)行過程,這個時候可以怎么做呢?其實就可以采用ThreadLocal,采用ThreadLocal可以讓監(jiān)聽器作為線程內(nèi)的全局對象而存在,在線程內(nèi)部只要通過get方法就可以獲取到監(jiān)聽器

原文鏈接:https://blog.csdn.net/chenshuangma/article/details/79818210
地址:https://blog.csdn.net/chenshuangma/article/details/79818210

11一個線程中有幾個looper 如何做到的

一個線程中只有一個looper
因為looper的構(gòu)造方法是private私有的 然而要想創(chuàng)建looper就需要調(diào)用looper的prepare()方法 ,這個方法如果當(dāng)前有一個looper存在,就會拋出異常!地址:https://zhidao.baidu.com/question/2206593625665240668.html

12 Handler中有一個后臺空閑線程可以做性能優(yōu)化IdleHandler

地址:
https://blog.csdn.net/suyimin2010/article/details/93835877

13相對布局會measure測量幾次

相對布局會測量兩次 相對布局每測量一次里面的組件就會測量兩次
地址:http://www.itdecent.cn/p/6bbb3b692ca7

14線性布局的權(quán)重屬性規(guī)則

【最后控件的寬度 = 控件本身寬度 + 權(quán)重比例分配寬度 】
地址:
https://zhidao.baidu.com/question/502378966311655164.html

15 安卓中的手勢檢測類

Android提供了一個GestureDetector來幫助我們識別一些基本的觸摸手勢(還有ScaleGestureDetector可以識別縮放手勢),讓我們很方便地實現(xiàn)手勢控制功能
地址:
http://www.itdecent.cn/p/29a72ae35065

16 關(guān)于設(shè)計模式

其實這個自行度娘把 最主要就是單例模式了 里面還包含volatile和synchronize的相關(guān)知識也需要了解
給一個地址
https://blog.csdn.net/qq_24309787/article/details/82257772

17 關(guān)于synchronize的介紹

介紹:https://blog.csdn.net/javazejian/article/details/72828483
synchronized(this)、synchronized(class)與synchronized(Object)的區(qū)別
地址:https://blog.csdn.net/luckey_zh/article/details/53815694

18 線程池有幾個關(guān)鍵的參數(shù)

地址:https://blog.csdn.net/qq_31439011/article/details/100824461

19volatile 和synchronize

volatile
它所修飾的變量不保留拷貝,直接訪問主內(nèi)存中的。
您只能在有限的一些情形下使用 volatile 變量替代鎖。要使 volatile 變量提供理想的線程安全,必須同時滿足下面兩個條件:
1)對變量的寫操作不依賴于當(dāng)前值。
2)該變量沒有包含在具有其他變量的不變式中。

volatile最適用一個線程寫,多個線程讀的場合。
如果有多個線程并發(fā)寫操作,仍然需要使用鎖或者線程安全的容器或者原子變量來代替。
synchronized
當(dāng)它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執(zhí)行該段代碼。

當(dāng)兩個并發(fā)線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內(nèi)只能有一個線程得到執(zhí)行。另一個線程必須等待當(dāng)前線程執(zhí)行完這個代碼塊以后才能執(zhí)行該代碼塊。
然而,當(dāng)一個線程訪問object的一個synchronized(this)同步代碼塊時,另一個線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。
尤其關(guān)鍵的是,當(dāng)一個線程訪問object的一個synchronized(this)同步代碼塊時,其他線程對object中所有其它synchronized(this)同步代碼塊的訪問將被阻塞。
當(dāng)一個線程訪問object的一個synchronized(this)同步代碼塊時,它就獲得了這個object的對象鎖。結(jié)果,其它線程對該object對象所有同步代碼部分的訪問都被暫時阻塞。
地址:https://blog.csdn.net/mccand1234/article/details/91345168

20 GreenDao 中的Dao是什么意思 神級問題

DAO(Data Access Object) 數(shù)據(jù)訪問對象是一個面向?qū)ο?/a>的數(shù)據(jù)庫接口,它顯露了 Microsoft Jet 數(shù)據(jù)庫引擎(由 Microsoft Access 所使用),并允許 Visual Basic 開發(fā)者通過 ODBC 像直接連接到其他數(shù)據(jù)庫一樣,直接連接到 Access 表。DAO 最適用于單系統(tǒng)應(yīng)用程序或小范圍本地分布使用。
地址:https://baike.baidu.com/item/DAO/2900358?fr=aladdin

21 sendContentView()用處以及實現(xiàn)

http://www.itdecent.cn/p/97bf8476d559

22 gradle 構(gòu)建過程

初始化階段
配置階段
執(zhí)行階段
http://www.itdecent.cn/p/e7a40a592f15

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容