筆者處于重慶蹂匹,Android從事4年半,寒冬之際裸辭出來面試凹蜈。經(jīng)歷過后限寞,以后要更加努力,扎實(shí)基礎(chǔ)仰坦,砥礪前行履植。
下面是遇到的面試題,題目可能較為簡(jiǎn)單悄晃,以下以一句話的方式描述答案,可能有所欠缺玫霎,望讀者指出。
1.開發(fā)中與遇到Activity被回收妈橄,其持有的Fragment沒有被回收庶近。如何解決這種問題?
答:這種情況會(huì)造成持有的Fragment重疊出現(xiàn)眷蚓,在savedInstanceState方法中寫入標(biāo)識(shí)鼻种,在onCreate方法中根據(jù)標(biāo)識(shí)判斷是否需要重新創(chuàng)建Fragment
2.多線程的同步問題,以及死鎖是如何產(chǎn)生的沙热。
答:多線程中對(duì)于同一個(gè)數(shù)據(jù)加上關(guān)鍵字synchronized叉钥,死鎖是因?yàn)榛ハ喑钟匈Y源導(dǎo)致罢缸,A在等待B釋放資源,B也在等待A釋放資源投队。
3.單例模式使用在哪些方面枫疆,單例模式下的同步問題
答:LayoutInfater,Glide敷鸦,EventBus息楔。針對(duì)要使用單例的對(duì)象設(shè)置同步鎖。
4.內(nèi)存溢出和內(nèi)存泄漏的概念
答:內(nèi)存溢出是由于應(yīng)用 使用內(nèi)存超過系統(tǒng)分配的最大內(nèi)存扒披,內(nèi)存泄漏時(shí)由于大量對(duì)象沒有被使用钞螟,但由于被引用無法被系統(tǒng)回收。
5.如何避免內(nèi)存泄漏
答:將強(qiáng)引用的對(duì)象轉(zhuǎn)變成軟引用和弱引用谎碍,創(chuàng)建對(duì)應(yīng)的WeakReference/SoftReference對(duì)象鳞滨,通過該對(duì)象get獲取引用對(duì)象,并在使用的時(shí)候判斷引用對(duì)象是否為空蟆淀。由于是軟引用/弱引用拯啦,系統(tǒng)回收機(jī)制則會(huì)適時(shí)回收該對(duì)象。
6.必須使用強(qiáng)引用的時(shí)候如何保證不發(fā)生內(nèi)存泄漏
答:在邏輯中熔任,使用完該引用對(duì)象后及時(shí)銷毀褒链,避免一直持有。
7.堆(Heap)和棧(Stack)的區(qū)別
答:基本類型的變量以及對(duì)象的引用是在棧中(指針在棧中)疑苔,對(duì)象數(shù)據(jù)和數(shù)組在堆中(對(duì)象在堆中)甫匹。
8.SurfaceVidew的原理以及與TextureView的區(qū)別
答:SurfaceView是在一個(gè)新起的單獨(dú)線程中繪畫更新視圖畫面。TextureView需要在硬件加速的環(huán)境下使用惦费,消耗內(nèi)存多兵迅,延時(shí)1-3秒
9.圖片的三級(jí)緩存,LurCache在其中的用途
答:圖片下載是按照 網(wǎng)絡(luò)-緩存-LurCache的順序進(jìn)行薪贫。讀取圖片按照LurCache-軟引用-內(nèi)存/SD卡-網(wǎng)絡(luò)的順序逐級(jí)查找進(jìn)行顯示恍箭。
10.Android點(diǎn)擊事件分發(fā)流程
答:DecorView 分發(fā)給Activity,Activity分發(fā)給ViewGroup瞧省,ViewGroup分發(fā)給焦點(diǎn)View扯夭,焦點(diǎn)View響應(yīng)該事件,不響應(yīng)的話按照View層級(jí)逐級(jí)向上傳遞指導(dǎo)Activity層
11.Android的存儲(chǔ)方式/數(shù)據(jù)持久化
答:SharePreference,文件存儲(chǔ)鞍匾,SQliteDataBase
12.Sqlite數(shù)據(jù)庫(kù)多線程使用如何保證數(shù)據(jù)同步
答:SqliteOpenHelper使用單例模式交洗。
13.隱式啟動(dòng)和顯示啟動(dòng)的區(qū)別
答:顯示啟動(dòng)直接表明要啟動(dòng)的頁(yè)面。隱式啟動(dòng)通過Action,Catorgy篩選出可啟動(dòng)的頁(yè)面橡淑。
14.SharePreference中的apply和commit的區(qū)別
答:commit有返回值而apply無返回值构拳,apply時(shí)修改數(shù)據(jù)原子提交到內(nèi)存, 而后異步真正提交到硬件磁盤, 而commit是同步的提交到硬件磁盤