算法題
https://github.com/afatcoder/LeetcodeTop
https://codetop.cc/#/home
26、兩個(gè)用單鏈表表示的大數(shù)相加,求他們的和。單鏈表元素的值為0~9。
15、求單鏈表的倒數(shù)第n個(gè)結(jié)點(diǎn),時(shí)間復(fù)雜度為O(1)的解法。bad case是哪種?
16、遍歷目錄及其子目錄,使用非遞歸的方式。
數(shù)據(jù)結(jié)構(gòu)
1.SparseArray和ArrayMap。具體實(shí)現(xiàn)原理和特性,ArrayMap和SparseArray的區(qū)別。
https://blog.csdn.net/xiaxl/article/details/77267201
http://www.itdecent.cn/p/1739363c0e50
2.HashMap講一下,數(shù)據(jù)結(jié)構(gòu)、hash過(guò)程、擴(kuò)容、加載因子為何是0.75等。
https://www.cnblogs.com/lwh1019/p/13385060.html
3.current hashmap在所有情況下都是線程安全的嗎?hashtable呢?
4.hashmap。hash沖突時(shí)給鏈表插入數(shù)據(jù),1.7頭插法,1.8尾插法。
https://blog.csdn.net/ho528528/article/details/103903998
5.HashMap:數(shù)據(jù)結(jié)構(gòu)(數(shù)組加鏈表(或者紅黑樹(shù))),為何這么設(shè)計(jì);數(shù)組和鏈表的特性;元素添加的過(guò)程;擴(kuò)容過(guò)程中為何不整體復(fù)制;鏈表為什么要轉(zhuǎn)紅黑樹(shù)?講下hashmap;鏈表轉(zhuǎn)紅黑樹(shù)的限制為何是8;紅黑樹(shù)的時(shí)間復(fù)雜度;紅黑樹(shù)轉(zhuǎn)鏈表的限制為何是6;
https://blog.csdn.net/v123411739/article/details/78996181
https://joonwhee.blog.csdn.net/article/details/106324537
6.講下arraylist、hashmap、linkedlist、linkedhashmap的實(shí)現(xiàn)。linkedhashmap為何會(huì)有這樣的特性(lru)?它有個(gè)參數(shù),表示命中率和使用次數(shù)。lru是通過(guò)linkedhashmap實(shí)現(xiàn)的么?LRU如何實(shí)現(xiàn)的?LinkedHashMap如何實(shí)現(xiàn)的?LinkedHashMap是否線程安全?如何實(shí)現(xiàn)線程安全?有序還是無(wú)序?你如何自己實(shí)現(xiàn)一個(gè)LRUCache?Android里面的LRUCache是如何實(shí)現(xiàn)的?
https://blog.csdn.net/zlfprogram/article/details/88708508 (JDK1.6)
https://segmentfault.com/a/1190000012964859 (JDK1.8)
http://www.itdecent.cn/p/b49a111147ee (LRUCache很多文章是錯(cuò)誤的多看下面評(píng)論,會(huì)LinkedHashMap就可以)
9、數(shù)據(jù)結(jié)構(gòu):
①二叉樹(shù)用的多么?哪里用過(guò)?
②二叉搜索樹(shù)、AVL樹(shù),紅黑樹(shù)
③二叉樹(shù)的使用舉例。
④鏈表和二叉樹(shù)的區(qū)別,優(yōu)劣勢(shì)
webview:
1、Android與js交互方式;JsBridge原理,它是如何解決安全性問(wèn)題的?
https://iluhcm.com/2017/12/10/design-an-elegant-and-powerful-android-webview-part-one/
https://iluhcm.com/2018/02/27/design-an-elegant-and-powerful-android-webview-part-two/
http://www.itdecent.cn/p/5e7075f4875f
UI相關(guān):
1、View繪制流程。onMeasure、onLayout、onDraw。MeasureSpec講一下。MeasureSpec,關(guān)鍵方法。2、講下onMeasure方法:①如何測(cè)量 ②測(cè)量模式 ③入?yún)槭裁词莍nt類(lèi)型?④為什么會(huì)多次調(diào)用onMeasure和onLayout方法?自定義View,測(cè)量模式的匹配。
https://www.cnblogs.com/andy-songwei/p/10955062.html
2、View繪制流程;requestLayout和invalidate區(qū)別;invalidate每次都會(huì)觸發(fā)onDraw么?View#onLayout每次會(huì)觸發(fā)么?requestLayout調(diào)用后,都會(huì)調(diào)用哪些方法?
https://wanandroid.com/wenda/show/16190
http://www.itdecent.cn/p/4f0f0b64381d
https://blog.csdn.net/litefish/article/details/52859300
3、自定義View的幾種方式。onMeasure、onLayout、onDraw方法都何時(shí)需要重寫(xiě)。自定義屬性的作用。講下你的自定義View,為何如此設(shè)計(jì)?自定義View的關(guān)鍵步驟,注意事項(xiàng),你的理解
https://www.cnblogs.com/andy-songwei/p/10979161.html
4、動(dòng)畫(huà)
5、講下View繪制流程。canvas可以畫(huà)Bitmap么?畫(huà)布要做旋轉(zhuǎn)、縮放、平移等操作該如何實(shí)現(xiàn)?
https://hencoder.com/ui-1-5/
https://hencoder.com/ui-1-4/
6、項(xiàng)目中有哪些亮點(diǎn)?自定義View1、直播彈幕如何實(shí)現(xiàn)?豎向的TextView如何實(shí)現(xiàn)。TextView文字描邊效果如何實(shí)現(xiàn)。①獲取TextView的行數(shù)時(shí),StaticLayout原理,自定義View:支持換行的尾部標(biāo)簽的實(shí)現(xiàn)。
https://hencoder.com/ui-1-3/
https://github.com/liufsd/TextViewVertical
https://jaeger.itscoder.com/android/2016/08/05/staticlayout-source-analyse.html
7、RecyclerView的特點(diǎn)和緩存、RecyclerView的緩存,局部刷新用過(guò)么?
1、封裝的Adapter講解。
8、ListView的滑動(dòng)卡頓如何優(yōu)化
②MotionEvent#offsetLocation事件轉(zhuǎn)發(fā)。
②onMeasure、onLayout、onDraw這三個(gè)方法中,哪個(gè)最耗時(shí)?onMeasure和onLayout呢?
⑧View#draw()方法細(xì)節(jié)
9、Choreography的作用。它的上游和下游各自是哪個(gè)。Choreography發(fā)布了訂閱消息,同類(lèi)型的Callback還有哪些?這些Callback之間的優(yōu)先級(jí)如何?vsync機(jī)制。
http://www.itdecent.cn/p/86d00bbdaf60
https://juejin.cn/post/6863756420380196877
10、Surface對(duì)象了解么?作用,何時(shí)初始化,怎么使用的。Surface和Window的關(guān)系。繪制的數(shù)據(jù)是如何提交到遠(yuǎn)端的SurfaceFlinger
main_surfaceflinger.cpp surfaceflinger.cpp(init(),)
11、GPU和surfaceFlinger之間的設(shè)計(jì)思想是什么?surfaceFlinger具體作用是什么?它對(duì)數(shù)據(jù)做了哪些操作?
SurfaceFlinger
Choreographer
Surface
https://blog.csdn.net/jiejingguo/article/details/102828820
Android的UI顯示原理之Surface的創(chuàng)建
Android的UI顯示原理之Surface的渲染
https://www.cnblogs.com/dasusu/p/8311324.html
12、硬件加速了解么?GPU如何高效繪制?
13、SurfaceView的實(shí)現(xiàn)
⑤一個(gè)Button的點(diǎn)擊事件中,調(diào)用requestLayout,接下來(lái)哪些方法會(huì)被調(diào)用?
19、Activity中的Window的初始化和顯示過(guò)程
⑥Window和Activity的對(duì)應(yīng)關(guān)系。除了Activity還有別的方式顯示W(wǎng)indow出來(lái)么?
3、Activity#setContentView中的xml文件是如何轉(zhuǎn)化成View并顯示到Activity中的。
①PhoneWindow是在哪里初始化的?
②LayoutInflater是如何把xml布局文件轉(zhuǎn)換成View對(duì)象的(反射)?View樹(shù)如何生成的?怎么優(yōu)化?
③為什么會(huì)有R文件這個(gè)映射表?直接使用資源的路徑不好么?
http://www.itdecent.cn/p/8766babc40e0
https://blog.csdn.net/yanbober/article/details/45970721
20、Application中可以顯示Dialog么?為什么?
https://juejin.cn/post/6873669458742525960
1、懸浮窗如何實(shí)現(xiàn)
https://juejin.cn/post/6844904073586556935
https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650235949&idx=1&sn=0f7eded67f834d38b02f8872768cb68a&scene=38#wechat_redirect
https://mp.weixin.qq.com/s/Q9HeT39w0LXGoR_ifyd9bg
https://juejin.cn/post/6844904073586556935
http://www.itdecent.cn/p/95c2fadd9aa4
事件分發(fā):
3、事件分發(fā)。沖突解決。
12、事件分發(fā),多點(diǎn)觸碰處理,是在onTouchEvent方法里面。
1、滑動(dòng)沖突如何解決?有幾種方式?具體從哪個(gè)事件開(kāi)始攔截?在哪里攔截?比如雙層ViewPager嵌套的滑動(dòng)沖突如何解決。
2、事件分發(fā)的具體流程。
3、講下事件傳遞:
①總體流程
②DOWN事件攔截后,后續(xù)事件如何處理?
③dispatchTouchEvent方法返回true后事件如何處理?
11、講下事件分發(fā)。如果onInterceptTouchEvent返回true,但是onTouchEvent返回了false,是什么效果?如果還想讓其他View接收事件,該怎么做?
15、事件分發(fā),如何處理滑動(dòng)沖突
10、事件分發(fā)
https://juejin.cn/post/6922300686638153736
網(wǎng)絡(luò):
1、http消息體講一下。消息首行的方法有哪幾種?如何上傳數(shù)據(jù)?請(qǐng)求頭關(guān)鍵字段和請(qǐng)求體格式
2、http post請(qǐng)求上傳大文件,如何實(shí)現(xiàn)?分塊上傳呢?用到的關(guān)鍵Header有哪些?
3、上傳的重試機(jī)制
4、網(wǎng)絡(luò)分層架構(gòu),https的連接過(guò)程,tcp和udp的區(qū)別。
5、TCP和UDP區(qū)別,TCP為何是三次握手,為何是四次揮手
6、http和https:
①它們的區(qū)別:https多了tls層。對(duì)稱(chēng)加密和非對(duì)稱(chēng)加密。
②具體驗(yàn)證的過(guò)程是怎樣的?
http://www.itdecent.cn/p/116ebf3034d9
7、okhttp源碼。網(wǎng)絡(luò)優(yōu)化:
OkHttp,Retrofit,Rxjava:
7、Rxjava的map和flatmap區(qū)別,flatmap為何要生成多個(gè)Observable?Rxjava的線程種類(lèi),線程切換如何實(shí)現(xiàn)的?
9、rxjava源碼。用過(guò)哪些操作符?map和flatmap區(qū)別。
16、滑動(dòng)窗口的最大值。
https://mp.weixin.qq.com/s/UiGEzXoCn3F66NRz_T9crA
Bindler,Handler
1、Handler講一下。Message#what的不同值,會(huì)影響Message在MessageQueue中的順序么?
2、Handler機(jī)制。MessageQueue中的Message是如何排列的?Msg的runnable對(duì)象可以外部設(shè)置么,比如說(shuō)不用Handler#post系列方法(反射可以實(shí)現(xiàn))
3、Handler。Looper.loop( )為何不會(huì)阻塞進(jìn)程。
http://www.itdecent.cn/p/70d5785ee4c3
https://mp.weixin.qq.com/s/ClTE15s9qUaNsInIIwX57w
4、IdleHandler調(diào)用時(shí)機(jī)
https://juejin.cn/post/6844904150140977165
5、ThreadLocal
https://juejin.cn/post/6844904150140977165
https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650243742&idx=1&sn=27de324a1685ebbb112a239777eb7f52&chksm=886373f1bf14fae7c7515c76d65707dc6f026996c7cbfe3df16a52d86ced2904e154941f744f&scene=38#wechat_redirect
https://mp.weixin.qq.com/s/F9c9q0IO4FvnXVvCntL0Iw
7、linux中進(jìn)程間通信的方式,Android為何會(huì)自己搞一個(gè)?
6、binderService方法中的回調(diào)具體運(yùn)行在哪個(gè)線程?binder線程池最大線程數(shù)是多少?自定義的Callback遠(yuǎn)程調(diào)用,運(yùn)行在哪個(gè)線程?為何不是主線程,如果運(yùn)行在主線程會(huì)有哪些問(wèn)題?
7、binder線程池的最大線程個(gè)數(shù);binder線程池中如果滿了,對(duì)待新來(lái)的任務(wù),會(huì)如何處理?此時(shí)client端會(huì)是什么效果?
https://blog.csdn.net/qq_39037047/article/details/88066589
9、linux下常見(jiàn)的進(jìn)程間通信方式,Android為何自己搞一個(gè)Binder,有何優(yōu)勢(shì)?binder安全原理、講下aidl內(nèi)容。8、binder的mmap
5、Android為何會(huì)使用binder來(lái)進(jìn)行進(jìn)程間通信。
10、binder是cs架構(gòu),Server端的binder都是運(yùn)行在同一個(gè)線程里面么?
http://gityuan.com/android/
https://mp.weixin.qq.com/s/Ef2Qy_xFeI6WU3Q0wf5czA
https://mp.weixin.qq.com/s/IbIhw71iiK6eFihgTYB6gw
https://mp.weixin.qq.com/s/GRkrbJ5LrRwmJxuidGB3rQ
https://mp.weixin.qq.com/s/gHtZ9pjMJ-jXA12rvXA4cg
https://mp.weixin.qq.com/s/LH_JR5Rwh1JL4B6qQkEv9Q
https://mp.weixin.qq.com/s/1d_LHbzfp4l8qQEu7tfKZg
https://mp.weixin.qq.com/s/wD3Io-ikS1VCljNkxEb6tQ
https://juejin.cn/post/6867139592739356686
多線程
1、線程、進(jìn)程的區(qū)別
多進(jìn)程?式確實(shí)可以實(shí)現(xiàn)并發(fā),但使?多線程,有以下?個(gè)好處:
進(jìn)程間的通信?較復(fù)雜,?線程間的通信?較簡(jiǎn)單,通常情況下,我們需要使 ?共享資源,這些資源在線程間的通信?較容易。 進(jìn)程是重量級(jí)的,?線程是輕量級(jí)的,故多線程?式的系統(tǒng)開(kāi)銷(xiāo)更?。
進(jìn)程和線程的區(qū)別
進(jìn)程是?個(gè)獨(dú)?的運(yùn)?環(huán)境,?線程是在進(jìn)程中執(zhí)?的?個(gè)任務(wù)。他們兩個(gè)本質(zhì)的 區(qū)別是是否單獨(dú)占有內(nèi)存地址空間及其它系統(tǒng)資源(?如I/O):
進(jìn)程單獨(dú)占有?定的內(nèi)存地址空間,所以進(jìn)程間存在內(nèi)存隔離,數(shù)據(jù)是分開(kāi) 的,數(shù)據(jù)共享復(fù)雜但是同步簡(jiǎn)單,各個(gè)進(jìn)程之間互不?擾;?線程共享所屬進(jìn) 程占有的內(nèi)存地址空間和資源,數(shù)據(jù)共享簡(jiǎn)單,但是同步復(fù)雜。
進(jìn)程單獨(dú)占有?定的內(nèi)存地址空間,?個(gè)進(jìn)程出現(xiàn)問(wèn)題不會(huì)影響其他進(jìn)程,不 影響主程序的穩(wěn)定性,可靠性?;?個(gè)線程崩潰可能影響整個(gè)程序的穩(wěn)定性, 可靠性較低。
進(jìn)程單獨(dú)占有?定的內(nèi)存地址空間,進(jìn)程的創(chuàng)建和銷(xiāo)毀不僅需要保存寄存器和 棧信息,還需要資源的分配回收以及?調(diào)度,開(kāi)銷(xiāo)較?;線程只需要保存寄存 器和棧信息,開(kāi)銷(xiāo)較?。
另外?個(gè)重要區(qū)別是,進(jìn)程是操作系統(tǒng)進(jìn)?資源分配的基本單位,?線程是操作系 統(tǒng)進(jìn)?調(diào)度的基本單位,即CPU分配時(shí)間的單位 。
2、多線程如何實(shí)現(xiàn)?有哪些方式?
3、多線程為何不安全,Java為何會(huì)有線程安全問(wèn)題?如何解決?
1.內(nèi)存可見(jiàn)性,數(shù)據(jù)競(jìng)爭(zhēng),JMM沒(méi)有這樣的保證?如,在當(dāng)前線程把寫(xiě)過(guò)的數(shù)據(jù)緩存在本地內(nèi)存中,在沒(méi)有刷新到主內(nèi)存之前,這個(gè)寫(xiě)操作僅對(duì)當(dāng)前線程可?;
從其他線程的?度來(lái)觀察,這個(gè)寫(xiě)操作根本沒(méi)有被當(dāng)前線程所執(zhí)?。只有當(dāng)前線程把本地內(nèi)存中寫(xiě)過(guò)的數(shù)據(jù)刷新到主內(nèi)存之后,這個(gè)寫(xiě)操作才對(duì)其他線程可?
2.同步,正確的happen-before,如果操作A happens-before操作B,那么操作A在內(nèi)存上所做的操作對(duì)操作
B都是可?的,不管它們?cè)诓辉?個(gè)線程。
4、ThreadLocal干嘛的?用法和原理。
https://baijiahao.baidu.com/s?id=1666270412047190730&wfr=spider&for=pc
http://www.itdecent.cn/p/1e4eaedbac19
5、synchronized和volatile的區(qū)別?為何不用volatile替代synchronized?synchronized的同步原語(yǔ)?Java的線程同步方式;synchronized和Lock的實(shí)現(xiàn)及區(qū)別?講一下鎖,synchronized和Lock?CAS原理。讀寫(xiě)鎖和ReentrantLock,synchronized和讀寫(xiě)鎖的區(qū)別?
volatile和synchronized的區(qū)別:
volatile關(guān)鍵字可以保證多線程操作共享變量的可?性以及禁?指令重排序(內(nèi)存屏障保證)
synchronized關(guān)鍵字不僅保證可?性,同時(shí)也保證了原?性(互斥性)
volatile和鎖的區(qū)別:
volatile僅僅保證對(duì)單個(gè)volatile變量的讀/寫(xiě)具有原?性,?鎖可以保證整個(gè)臨界區(qū)代碼的執(zhí)?具有原?性。
所以在功能上,鎖?volatile更強(qiáng)?;在性能上,volatile更有優(yōu)勢(shì)
volatile語(yǔ)義:指的是當(dāng)?個(gè)線程對(duì) volatile 修飾的變量進(jìn)?寫(xiě)操作(?如step 2)時(shí),JMM會(huì)?即把該線程對(duì)應(yīng)的本地內(nèi)存中的共享變量的值刷新到主內(nèi)存;
當(dāng)?個(gè)線程對(duì) volatile 修飾的變量進(jìn)?讀操作(?如step 3)時(shí),JMM會(huì)把?即該線程對(duì)應(yīng)的本地內(nèi)存置為?效,從主內(nèi)存中讀取共享變量的值。
synchronized原語(yǔ):synchronized又被稱(chēng)為內(nèi)置鎖,線程進(jìn)入同步代碼塊時(shí)會(huì)獲得該鎖,退出代碼塊自動(dòng)釋放鎖,鎖可以讓線程在臨界區(qū)互斥執(zhí)行,呈現(xiàn)串行語(yǔ)義。
所以synchronized可以解決任何并發(fā)情況下線程安全的問(wèn)題,包含原子性,可見(jiàn)性,有序性。
java中每一個(gè)對(duì)象都可以作為鎖,根據(jù)synchronized修飾的目標(biāo)不同鎖定的對(duì)象有如下3中情況:
1、修飾普通方法,鎖當(dāng)前對(duì)象
2、修飾靜態(tài)方法,鎖當(dāng)前類(lèi)的class對(duì)象
3、修飾代碼塊,鎖括號(hào)中的對(duì)象
CAS原理
CAS的全稱(chēng)是:?較并交換(Compare And Swap)。在CAS中,有這樣三個(gè)值:
V:要更新的變量(var)
E:預(yù)期值(expected)
N:新值(new)
?較并交換的過(guò)程如下:
判斷V是否等于E,如果等于,將V的值設(shè)置為N;如果不等,說(shuō)明已經(jīng)有其它線程
更新了V,則當(dāng)前線程放棄更新,什么都不做。
所以這?的預(yù)期值E本質(zhì)上指的是“舊值”。
CAS是?種原?操作,它是?種系統(tǒng)原語(yǔ),是?條CPU的原?指令,從CPU層?保證它的原?性
當(dāng)多個(gè)線程同時(shí)使?CAS操作?個(gè)變量時(shí),只有?個(gè)會(huì)勝出,并成功更新,其余均會(huì)失敗,但失敗的線程并不會(huì)被掛起,僅是被告知失敗,并且允許再次嘗試,
當(dāng)然也允許失敗的線程放棄操作。
ABA問(wèn)題
所謂ABA問(wèn)題,就是?個(gè)值原來(lái)是A,變成了B,?變回了A。這個(gè)時(shí)候使?CAS是檢查不出變化的,但實(shí)際上卻被更新了兩次。
ABA問(wèn)題的解決思路是在變量前?追加上版本號(hào)或者時(shí)間戳。從JDK 1.5開(kāi)始,JDK的atomic包?提供了?個(gè)類(lèi) AtomicStampedReference 類(lèi)來(lái)解決ABA問(wèn)題。
synchronized 有什么不?之處。
如果臨界區(qū)是只讀操作,其實(shí)可以多線程?起執(zhí)?,但使?synchronized的話,同?時(shí)間只能有?個(gè)線程執(zhí)?。
synchronized?法知道線程有沒(méi)有成功獲取到鎖
使?synchronized,如果臨界區(qū)因?yàn)镮O或者sleep?法等原因阻塞了,?當(dāng)前線程?沒(méi)有釋放鎖,就會(huì)導(dǎo)致所有線程等待。
可重?鎖和?可重?鎖
ReentrantLock,synchronized 都是可重入的。
公平鎖與?公平鎖
ReentrantLock?持?公平鎖和公平鎖兩種
讀寫(xiě)鎖和排它鎖
synchronized?的鎖和ReentrantLock,其實(shí)都是“排它鎖”。也就是說(shuō),這些鎖在同?時(shí)刻只允許?個(gè)線程進(jìn)?訪問(wèn)
讀寫(xiě)鎖可以再同?時(shí)刻允許多個(gè)讀線程訪問(wèn)。Java提供了ReentrantReadWriteLock類(lèi)作為讀寫(xiě)鎖的默認(rèn)實(shí)現(xiàn),內(nèi)部維護(hù)了兩個(gè)鎖:?個(gè)讀鎖,?個(gè)寫(xiě)鎖。
通過(guò)分離讀鎖和寫(xiě)鎖,使得在“讀多寫(xiě)少”的環(huán)境下,??地提?了性能。
https://tech.meituan.com/2018/11/15/java-lock.html
類(lèi)鎖和對(duì)象鎖互斥么?非靜態(tài)方法A和B在同一個(gè)類(lèi)中,方法A用synchronized修飾,當(dāng)A方法因?yàn)槎嗑€程請(qǐng)求有線程阻塞在對(duì)象鎖上的時(shí)候,B方法的訪問(wèn)受不受影響?
https://blog.csdn.net/u011402896/article/details/79363165
https://blog.csdn.net/abc1234z0/article/details/103654083
https://blog.csdn.net/github_37130188/article/details/97638651
synchronized實(shí)現(xiàn)?
https://www.cnblogs.com/aspirant/p/11470858.html
6、鎖的幾種狀態(tài)
無(wú)鎖,偏向鎖,輕量級(jí),重量級(jí)
https://tech.meituan.com/2018/11/15/java-lock.html
7、線程的使用。講下線程池的類(lèi)型,線程池對(duì)象的參數(shù),線程池最大線程數(shù)和核心線程數(shù)的關(guān)系,task的優(yōu)先級(jí)如何實(shí)現(xiàn)?(優(yōu)先級(jí)隊(duì)列),線程池的參數(shù),線程池如何配置,核心線程數(shù)你一般給多少
https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html
8、線程狀態(tài)
t1、t2、t3三個(gè)線程,如何讓三個(gè)線程按照順序依次打印1-100。手寫(xiě)。

8、Lock的實(shí)現(xiàn),以及與synchronized的區(qū)別
優(yōu)化類(lèi)
1、講下OOM原理,OOM和內(nèi)存泄漏,內(nèi)存泄漏檢測(cè)及優(yōu)化,講下leakCanary原理,為什么不用虛引用?引用隊(duì)列里面存的是什么?
http://www.itdecent.cn/p/2d6e2506d246
2、圖片內(nèi)存優(yōu)化;大圖加載優(yōu)化,原理。圖片加載優(yōu)化,不要講公式,就講你怎么做的。glide源碼。大圖加載;Bitmap內(nèi)存復(fù)用,圖片內(nèi)存的計(jì)算。Bitmap內(nèi)存計(jì)算規(guī)則,Bitmap內(nèi)存大小,注意事項(xiàng),如何優(yōu)化
①在不影響圖片質(zhì)量的前提下,如何減少內(nèi)存?
②圖片顯示不全、變形怎么處理?
xhdpi的圖片放到xxhdp的手機(jī)上,內(nèi)存會(huì)如何變化;
https://juejin.cn/post/6844904166138069005(bitmap緩存,bitmap復(fù)用Options.inBitmap,修改Config.RGB_565,修改采樣率Options.insampleSize,Options.inJustDecodeBound,圖片xxhdpi文件夾中位置)
https://juejin.cn/post/6854573209635782664(Glide)
3、包體積優(yōu)化
https://juejin.cn/post/6844904103131234311
https://juejin.cn/post/6872920643797680136
https://mp.weixin.qq.com/s/BVQxgM-dpwoPJJ8P_c6u4w
https://tech.meituan.com/2017/04/07/android-shrink-overall-solution.html
4、啟動(dòng)速度優(yōu)化,啟動(dòng)速度優(yōu)化,IdleHandler用法,冷啟動(dòng)熱啟動(dòng)優(yōu)化
https://juejin.cn/post/6844903919580086280
4、在同一個(gè)手機(jī)上,如果把drawable-xxhdpi下的圖片移動(dòng)到drawable-xhdpi下,圖片內(nèi)存是如何變的,解釋原理。如果在drawable-hdpi、drawable-xxhdpi下放置了圖片,但是手機(jī)是xhdpi的,會(huì)優(yōu)先加載哪個(gè),加載優(yōu)先級(jí)是怎樣的?如果是400 * 800,1080 * 1920這種呢,會(huì)如何查找?xhdpi和400*800同時(shí)存在時(shí),會(huì)如何查找?布局文件呢?8、drawable下所以的格式都能轉(zhuǎn)成webp么?哪些不能轉(zhuǎn)?
7、hdpi和xxhdpi的手機(jī),分別加載xhdpi下的圖片,會(huì)縮放圖片么?如果會(huì)縮放,是如何縮放的,像素點(diǎn)是如何補(bǔ)全或者減少的?圖片在內(nèi)存中的大小會(huì)如何變化?
6、講下ANR
https://blog.csdn.net/chewbee/article/details/72670603
https://mp.weixin.qq.com/s/4w202K0WnNrazmEHd6grQA
https://juejin.cn/post/6844903715313303565
15、卡頓優(yōu)化
11、代碼質(zhì)量如何控制?
12、app質(zhì)量如何控制?
13、網(wǎng)絡(luò)優(yōu)化,網(wǎng)絡(luò)監(jiān)控。
13、講下你做過(guò)的首頁(yè)優(yōu)化。
9、布局優(yōu)化
13、使用Application#onTrimMemory優(yōu)化
14、使用ActivityLifecycleCallbacks做了哪些事情?
16、繪制優(yōu)化。
2、View繪制優(yōu)化
3、性能優(yōu)化:UI優(yōu)化、內(nèi)存泄漏
5、網(wǎng)絡(luò)優(yōu)化,數(shù)據(jù)庫(kù)優(yōu)化
https://blog.csdn.net/yanbober/article/details/48394201
https://zhuanlan.zhihu.com/p/30691789
JVM,熱修復(fù),插件化:
1、Java內(nèi)存模型(JMM),jvm的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)。棧幀中會(huì)有什么異常?方法區(qū)里面存放的是什么數(shù)據(jù)?
類(lèi)加載過(guò)程;
https://segmentfault.com/a/1190000020206676?utm_source=tag-newest
http://www.itdecent.cn/p/6e2bc593f31c
http://www.itdecent.cn/p/3ca14ec823d7
https://blog.csdn.net/xlh1191860939/article/details/105894767
2、成員變量和局部變量的區(qū)別。為何成員變量需要jvm在對(duì)象初始話過(guò)程中賦默認(rèn)值?Java中進(jìn)程間共享的數(shù)據(jù)是放在JVM那個(gè)分區(qū)的?Java中主進(jìn)程和子進(jìn)程間的通信,通過(guò)哪塊內(nèi)存區(qū)域?
https://blog.csdn.net/liufangbaishi2014/article/details/86213846
https://www.cnblogs.com/yanl55555/p/12614141.html
3、講下Java的雙親委派
http://www.itdecent.cn/p/8743d8062bb6
4、講下GC root的類(lèi)型。GCRoot,垃圾回收算法。GCRoot,舉例說(shuō)明。比如說(shuō)Activity和它的匿名內(nèi)部類(lèi)Handler,分析下引用鏈,對(duì)應(yīng)的gcroot是哪個(gè)?
https://www.cnblogs.com/KeleLLXin/p/14061269.html
http://www.itdecent.cn/p/108ddab3ad3f
http://www.itdecent.cn/p/0269237a229d
https://blog.csdn.net/weixin_40334045/article/details/106762338

18、Aop、AspectJ、ASM了解么
5、Android熱修復(fù)原理,tinker的patch文件如何生成,patch文件是全部加載dex文件首部么?熱修復(fù)用的什么方案?dex,so,資源的合并
https://blog.csdn.net/lmj623565791/article/details/54882693
https://blog.csdn.net/lmj623565791/article/details/60874334
https://blog.csdn.net/lmj623565791/article/details/72667669
http://www.itdecent.cn/p/af8c47fabb12
https://juejin.cn/post/6844903902152769544
6、插件化原理
https://juejin.cn/post/6844903885476233229
https://juejin.cn/post/6844903894271705095
VirtualAPK
https://blog.csdn.net/dehang0/article/details/107131217/
https://blog.csdn.net/qq_35559358/article/details/78979439
https://blog.csdn.net/lmj623565791/article/details/75000580
操作系統(tǒng)
①講一下用戶態(tài)和內(nèi)核態(tài)
②為何會(huì)有用戶態(tài)和內(nèi)核態(tài)劃分
kotlin,泛型
1、說(shuō)一下kotlin的優(yōu)缺點(diǎn)。let和with的區(qū)別
http://www.itdecent.cn/p/298f77dc389e
2、函數(shù)式編程如何理解?
3.、kotlin的協(xié)程,構(gòu)造函數(shù)。
https://blog.csdn.net/xlh1191860939/article/details/79412319
https://mp.weixin.qq.com/s/84fSUYQt3T_Fa5B5s5ihvA
4.、kotlin的擴(kuò)展,屬性是否可以擴(kuò)展,是否可以擴(kuò)展跟現(xiàn)有方法簽名相同的方法
https://blog.csdn.net/xlh1191860939/article/details/79625234
3、kotlin的lateinit和by lazy的區(qū)別
5、kotlin泛型:out和in。kotlin真泛型的實(shí)現(xiàn)
4、泛型:為何會(huì)有協(xié)變和逆變,PECS規(guī)則。泛型中T和?的區(qū)別,List<?>和List有什么區(qū)別;泛型里的super和extends區(qū)別;
https://blog.csdn.net/m0_37796683/article/details/108584499
6、既然泛型有編譯期類(lèi)型擦除,那么運(yùn)行時(shí)無(wú)法獲取到具體類(lèi)型;而反射能在運(yùn)行時(shí)獲取到Class的類(lèi)型;它們一個(gè)獲取不到,一個(gè)可以獲取到,這不就是矛盾么?請(qǐng)解釋下細(xì)節(jié)。
https://blog.csdn.net/briblue/article/details/76736356
7、泛型和泛型擦除;泛型為何會(huì)有擦除;擦除的時(shí)機(jī);泛型的編譯器類(lèi)型檢查。
21、泛型擦除,為何會(huì)有擦除?擦除的時(shí)機(jī)。通配符。
Gradle
1、Gradle的實(shí)現(xiàn),gradle中task的生命周期。
https://www.bilibili.com/video/av55941638/
2、gradle生命周期,task,插件
https://www.cnblogs.com/davenkin/p/gradle-learning-1.html
https://juejin.cn/post/6844903870091493384
項(xiàng)目打包上線相關(guān)
1、混淆的步驟和原理
http://www.itdecent.cn/p/d768f6d1d93b
https://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=214472913&idx=1&sn=92b54b5fcd9bbab6513e46d92095a07f&scene=1&srcid=0427eTI2x0dnk2EsFnysnjZI#rd
2、module間的資源文件merge后,生成過(guò)多的R文件,處理過(guò)么?如何處理?
https://yuweiguocn.github.io/android-r-inline/
https://juejin.cn/post/6916431393648017421
https://www.wanandroid.com/wenda/show/8735
https://www.wanandroid.com/wenda/show/9067
https://www.wanandroid.com/wenda/show/9088
https://wanandroid.com/wenda/show/9974
3、Android項(xiàng)目中都包含哪些資源?apk打包流程。apk解壓后都包含哪些資源?R文件打包后生成的文件是哪種?
4、dex文件結(jié)構(gòu)了解過(guò)么?為何會(huì)有65535的限制?mutildex技術(shù)了解么?這項(xiàng)技術(shù)的目的是什么?
Activity等四大組件,Application,進(jìn)程?;畹華ndroid相關(guān)問(wèn)題
1、application中持有靜態(tài)的用戶信息,有何缺點(diǎn)?如何改進(jìn)?
http://zmywly8866.github.io/2014/12/26/android-do-not-store-data-in-the-application-object.html
2、Application啟動(dòng)流程
http://www.itdecent.cn/p/03ec8203919e
3、講一下Activity的TaskRecord,也就是四種啟動(dòng)模式。activity啟動(dòng)模式:standard、singleTop、singleTask、singleInstance。taskAffinity,allowTaskReparting,常見(jiàn)應(yīng)用場(chǎng)景。
http://www.itdecent.cn/p/94816e52cd77
http://www.itdecent.cn/p/3b9519f64db1
4、啟動(dòng)模式及其用法。A應(yīng)用的A1頁(yè)面啟動(dòng)B應(yīng)用的B1頁(yè)面,A1和B2都是standard模式,B1啟動(dòng)后B1在那個(gè)任務(wù)棧,按下back鍵后顯示那個(gè)頁(yè)面,再按一次back鍵呢? A1,退出A應(yīng)用。
5、Activity的onSaveInstance方法何時(shí)調(diào)用?它跟onPause、onStop的調(diào)用順序如何?
https://wanandroid.com/wenda/show/13906
6、Activity A啟動(dòng)Activity B,調(diào)用順序。最后Activity A的onStop一定會(huì)調(diào)用么?
http://www.itdecent.cn/p/b1ff03a7bb1f
7、ActivityA啟動(dòng)了ActivityB后,兩個(gè)Activity的生命周期是怎樣的?
8、activity生命周期。A啟動(dòng)B,生命周期;B回到A,生命周期
9、Activity生命周期,按Home按鍵后的生命周期?
10、Activity實(shí)現(xiàn)了一個(gè)Lifecycle接口,有了解么?
https://blog.csdn.net/liuhe688/article/details/6733407
https://blog.csdn.net/weixin_43589682/article/details/97030740
11、startActivity方法是異步的么?同步的。
12、Activity啟動(dòng)流程:AMS、zygote、ApplicationThread之間交互;oneway特性(server端不阻塞和client端串行化),非oneway的情況有哪些?oneway和非oneway了解么?舉例說(shuō)明
http://www.itdecent.cn/p/0b22194b131c
https://mp.weixin.qq.com/s/Jc2mrxeMVTJXudoPx5K4-w
13、Activity和Fragment的生命周期;Fragment#onHiddenChanged是生命周期方法么?如何觸發(fā)?
https://mp.weixin.qq.com/s/WWNIkhptHnXYZUlKaQO_Yg
12、Activity和Fragment的通信方式;系統(tǒng)為何會(huì)設(shè)計(jì)Fragment#setArgument方法。
5、Android里面進(jìn)程間通信方式,ContentProvider可以用file實(shí)現(xiàn)么?
5、ContentProvider具體實(shí)現(xiàn)。ContentProvider啟動(dòng)流程
http://www.itdecent.cn/p/3c81df444034
https://mp.weixin.qq.com/s/jhVzFa6DatRNK9anuDoSUA
http://www.itdecent.cn/p/7a6b786ba728
2、通知的類(lèi)別
3、為何需要進(jìn)程?;??如何做?進(jìn)程優(yōu)先級(jí)
http://www.itdecent.cn/p/53c4d8303e19
http://www.itdecent.cn/p/e43d52507ac7
http://www.itdecent.cn/p/2e01569f8ba8
7、本地廣播為何效率高?LocalBroadcastReceiver實(shí)現(xiàn)
http://www.itdecent.cn/p/a842432a4fc2
http://www.itdecent.cn/p/9a1741afc2e0
③postDelay(1s)是如何保證1s時(shí)間執(zhí)行的?
12、SharedPreference的apply和commit區(qū)別;apply會(huì)不會(huì)導(dǎo)致ANR;SharedPreference的替代方案
http://www.itdecent.cn/p/4025d02a8380
8、Parcelable和Serializable本質(zhì)區(qū)別,不要說(shuō)用法,說(shuō)原理。
https://www.wanandroid.com/wenda/show/9002
Flutter
2、flutter的生命周期管理?講講做過(guò)的flutter項(xiàng)目。flutter的路由管理方式。除了默認(rèn)的兩種路由方式,有沒(méi)有考慮過(guò)記錄路由狀態(tài)?
JetPack
Native
程序員的自我修養(yǎng) c程序在內(nèi)存中的狀態(tài)
Android C++ 高級(jí)編程-使用NDK JNI
安卓NDK API
安卓源碼
反射hook技術(shù),aspectJ技術(shù),動(dòng)態(tài)代理技術(shù),ASM
ASM使用
https://blog.csdn.net/lingjianglin/article/details/105614948
https://blog.csdn.net/qq_23992393/article/details/103677719
http://www.itdecent.cn/p/a2d7565945d8
ARouter
https://juejin.cn/post/6895710601079685133
https://juejin.cn/post/6895712042917838861
優(yōu)化建議
https://juejin.cn/post/6847902225239539720
https://juejin.cn/post/6844904182982377480
OKHttp
面試題
https://mp.weixin.qq.com/s/Q6bDLQdEBzaRUUe7oYAXkg
加固
https://juejin.cn/post/6844904176070164488