ListView和RecyclerView區(qū)別
參考鏈接:
既然RecyclerView在很多方面能取代ListView菇晃,Google為什么沒(méi)把ListView劃上一條過(guò)時(shí)的橫線?
答案: 可以沿著回收機(jī)制來(lái)回答。ListView采用的是RecyclerBin的回收機(jī)制在一些輕量級(jí)的List顯示時(shí)效率更高
你用過(guò)MVP和MVVM的區(qū)別
參考鏈接:
HashMap的內(nèi)部實(shí)現(xiàn)原理负懦?
- HashMap可以接受null鍵值和值窑睁,而HashTable則不能蜘醋,HashMap是非synchronized的碟绑;存儲(chǔ)的是鍵值對(duì)剖膳。
- HashMap是基于hashing原理,使用put(key,value)存儲(chǔ)對(duì)象到HashMap中抛猖,使用get(key)從HashMap中獲取對(duì)象格侯,當(dāng)我們給put方法傳遞鍵和值時(shí)鼻听,我們先對(duì)鍵調(diào)用hashCode()方法,返回的hashCode用于找到bucket位置來(lái)存儲(chǔ)鍵對(duì)象和值對(duì)象联四,作為Map.Entry.
-
- 如果兩個(gè)對(duì)象hashCode相同:
存儲(chǔ)時(shí):他們會(huì)找到相同的bucket位置撑碴,發(fā)生碰撞,因?yàn)镠ashMap使用鏈表存儲(chǔ)對(duì)象(每個(gè)Map.Entry都有一個(gè)next指針)朝墩,這個(gè)Entry會(huì)存儲(chǔ)在鏈表中醉拓。
獲取時(shí):會(huì)用hashCode找到bucket位置,然后調(diào)用key.equals()方法找到鏈表中正確的節(jié)點(diǎn).最終找到要找的值對(duì)象.
減少碰撞:使用final修飾的對(duì)象收苏、或不可變的對(duì)象作為鍵亿卤,使用(Integer、String)(是不可變鹿霸、final的,而且已經(jīng)重寫了equals和hashCode方法)這樣的wrapper類作為鍵是非常好的排吴,(我們可以使用自定義的對(duì)象作為鍵嗎?答:當(dāng)然可以懦鼠,只要它遵守了equals和hashCode方法定義規(guī)則傍念,并且當(dāng)對(duì)象插入到Map中之后將不會(huì)再改變。)
- HashMap負(fù)載因子默認(rèn)是0.75葛闷,可設(shè)置憋槐,當(dāng)map填滿了75%的bucket時(shí)候,將會(huì)創(chuàng)建原來(lái)HashMap大小兩倍的bucket數(shù)組淑趾,來(lái)重新調(diào)整map的大小阳仔,并將原來(lái)的對(duì)象放入新的bucket數(shù)組中,這個(gè)過(guò)程叫做rehashing,因?yàn)樗{(diào)用hash方法找到新的bucket位置扣泊。
- 重新調(diào)整map大小可能會(huì)發(fā)生競(jìng)爭(zhēng)問(wèn)題:如果兩個(gè)線程都發(fā)現(xiàn)HashMap需要調(diào)整大小了近范,它們都會(huì)嘗試進(jìn)行調(diào)整,在調(diào)整中延蟹,存儲(chǔ)在鏈表中的元素的次序會(huì)反過(guò)來(lái)评矩,因?yàn)橐苿?dòng)bucket位置的時(shí)候,HashMap并不會(huì)將元素放在鏈表的尾部阱飘,而是放在頭部斥杜,這是為了避免尾部遍歷,如果條件競(jìng)爭(zhēng)發(fā)生了沥匈,就死循環(huán)了蔗喂。
你用過(guò)AsyncTask,說(shuō)一說(shuō)AsyncTask的內(nèi)部實(shí)現(xiàn)原理高帖?
參考鏈接:
AsyncTask內(nèi)部維護(hù)了一個(gè)線程池缰儿,是串行還是并行,怎么維護(hù)的散址?
串行
參考鏈接:
https://www.cnblogs.com/absfree/p/5357678.html
那你說(shuō)說(shuō)線程池的四種初始化吧乖阵?
你用過(guò)MD宣赔,你知道怎么定義一個(gè)Behavior嗎?
參考鏈接:
RecyclerView的拖拽怎么實(shí)現(xiàn)的瞪浸?
參考鏈接:
寫一個(gè)單利模式拉背,應(yīng)注意哪三個(gè)條件?
1默终、構(gòu)造函數(shù)私有 2椅棺、含有一個(gè)該類的靜態(tài)私有對(duì)象 3、有一個(gè)靜態(tài)的公有的函數(shù)用于創(chuàng)建或獲取它本身的靜態(tài)私有對(duì)象 4齐蔽、其次才是考慮線程同步两疚!
一個(gè)按升序排列好的數(shù)組int[] arry = {-5,-1,0,5,9,11,13,15,22,35,46},輸入一個(gè)x,int x = 31含滴,在數(shù)據(jù)中找出和為x的兩個(gè)數(shù)诱渤,例如 9 + 22 = 31,要求算法的時(shí)間復(fù)雜度為O(n);
如何向一個(gè)數(shù)據(jù)庫(kù)具有int類型A谈况,B勺美,C,D四列的表中隨機(jī)插入10000條數(shù)據(jù)碑韵?如何按升序取出A列中前10個(gè)數(shù)赡茸?
service兩種啟動(dòng)方式有什么區(qū)別?
參考鏈接:
說(shuō)說(shuō)三級(jí)緩存祝闻、Handler機(jī)制 占卧?
參考鏈接:
https://blog.csdn.net/wenzhi20102321/article/details/53214315
Handler機(jī)制
阿里巴巴
LRUCache原理
圖片加載原理
模塊化實(shí)現(xiàn)(好處,原因)
JVM
視頻加密傳輸
統(tǒng)計(jì)啟動(dòng)時(shí)長(zhǎng),標(biāo)準(zhǔn)
如何保持應(yīng)用的穩(wěn)定性
ThreadLocal 原理
談?wù)刢lassloader
動(dòng)態(tài)布局
熱修復(fù),插件化
HashMap源碼,SpareArray原理
性能優(yōu)化,怎么保證應(yīng)用啟動(dòng)不卡頓
怎么去除重復(fù)代碼
SP是進(jìn)程同步的嗎?有什么方法做到同步
介紹下SurfView
HashMap實(shí)現(xiàn)原理联喘,ConcurrentHashMap 的實(shí)現(xiàn)原理
BroadcastReceiver华蜒,LocalBroadcastReceiver 區(qū)別
Bundle 機(jī)制
Handler 機(jī)制
android 事件傳遞機(jī)制
線程間 操作 List
App啟動(dòng)流程,從點(diǎn)擊桌面開始
動(dòng)態(tài)加載
類加載器
OSGI
Https請(qǐng)求慢的解決辦法豁遭,DNS叭喜,攜帶數(shù)據(jù),直接訪問(wèn)IP
GC回收策略
畫出 Android 的大體架構(gòu)圖
描述清點(diǎn)擊 Android Studio 的 build 按鈕后發(fā)生了什么蓖谢,大體說(shuō)清一個(gè)應(yīng)用程序安裝到手機(jī)上時(shí)發(fā)生了什么捂蕴;
對(duì) Dalvik、ART 虛擬機(jī)有基本的了解蜈抓;
Android 上的 Inter-Process-Communication 跨進(jìn)程通信時(shí)如何工作的启绰;
App 是如何沙箱化昂儒,為什么要這么做沟使;
權(quán)限管理系統(tǒng)(底層的權(quán)限是如何進(jìn)行 grant 的)
進(jìn)程和 Application 的生命周期;
系統(tǒng)啟動(dòng)流程 Zygote進(jìn)程 –> SystemServer進(jìn)程 –> 各種系統(tǒng)服務(wù) –> 應(yīng)用進(jìn)程
recycleview listview 的區(qū)別,性能
排序渊跋,快速排序的實(shí)現(xiàn)
樹:B 樹的介紹
圖:有向無(wú)環(huán)圖的解釋
TCP/UDP的區(qū)別
synchronized與Lock的區(qū)別
volatile
Java線程池
Java中對(duì)象的生命周期
類加載機(jī)制
雙親委派模型
Android事件分發(fā)機(jī)制
MVP模式
RxJava
抽象類和接口的區(qū)別
集合 Set實(shí)現(xiàn) Hash 怎么防止碰撞
JVM 內(nèi)存區(qū)域 開線程影響哪塊內(nèi)存
垃圾收集機(jī)制 對(duì)象創(chuàng)建腊嗡,新生代與老年代
二叉樹 深度遍歷與廣度遍歷
B樹着倾、B 樹
消息機(jī)制
進(jìn)程調(diào)度
進(jìn)程與線程
死鎖
進(jìn)程狀態(tài)
JVM內(nèi)存模型
并發(fā)集合了解哪些
ConCurrentHashMap實(shí)現(xiàn)
CAS介紹
開啟線程的三種方式,run()和start()方法區(qū)別
線程池
常用數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介
判斷環(huán)(猜測(cè)應(yīng)該是鏈表環(huán))
排序,堆排序?qū)崿F(xiàn)
鏈表反轉(zhuǎn)
動(dòng)態(tài)權(quán)限適配方案燕少,權(quán)限組的概念
網(wǎng)絡(luò)請(qǐng)求緩存處理卡者,okhttp如何處理網(wǎng)絡(luò)緩存的
圖片加載庫(kù)相關(guān),bitmap如何處理大圖客们,如一張30M的大圖崇决,如何預(yù)- - 防OOM
進(jìn)程保活
listview圖片加載錯(cuò)亂的原理和解決方案
-
https相關(guān)底挫,如何驗(yàn)證證書的合法性恒傻,https中哪里用了對(duì)稱加密,哪里用了非對(duì)稱加密建邓,對(duì)加密算法(如RSA)等是否有了解
滴滴
MVP
廣播(動(dòng)態(tài)注冊(cè)和靜態(tài)注冊(cè)區(qū)別盈厘,有序廣播和標(biāo)準(zhǔn)廣播)
service生命周期
handler實(shí)現(xiàn)機(jī)制(很多細(xì)節(jié)需要關(guān)注:如線程如何建立和退出消息循環(huán)等等)
多線程(關(guān)于AsyncTask缺陷引發(fā)的思考)
數(shù)據(jù)庫(kù)數(shù)據(jù)遷移問(wèn)題
設(shè)計(jì)模式相關(guān)(例如Android中哪里使用了觀察者模式,單例模式相關(guān))
x個(gè)蘋果官边,一天只能吃一個(gè)沸手、兩個(gè)、或者三個(gè)注簿,問(wèn)多少天可以吃完
TCP與UDP區(qū)別與應(yīng)用(三次握手和四次揮手)涉及到部分細(xì)節(jié)(如client如何確定自己發(fā)送的消息被server收到) HTTP相關(guān) 提到過(guò)Websocket 問(wèn)了WebSocket相關(guān)以及與socket的區(qū)別
是否熟悉Android jni開發(fā)契吉,jni如何調(diào)用java層代碼
進(jìn)程間通信的方式
java注解
計(jì)算一個(gè)view的嵌套層級(jí)
項(xiàng)目組件化的理解
多線程斷點(diǎn)續(xù)傳原理
Android系統(tǒng)為什么會(huì)設(shè)計(jì)ContentProvider栅隐,進(jìn)程共享和線程安全問(wèn)題
jvm相關(guān)
Android相關(guān)優(yōu)化(如內(nèi)存優(yōu)化租悄、網(wǎng)絡(luò)優(yōu)化泣棋、布局優(yōu)化潭辈、電量?jī)?yōu)化澈吨、業(yè)務(wù)優(yōu)化)
EventBus實(shí)現(xiàn)原理
美團(tuán)
static synchronized 方法的多線程訪問(wèn)和作用把敢,同一個(gè)類里面兩個(gè)synchronized方法,兩個(gè)線程同時(shí)訪問(wèn)的問(wèn)題
內(nèi)部類和靜態(tài)內(nèi)部類和匿名內(nèi)部類谅辣,以及項(xiàng)目中的應(yīng)用
handler發(fā)消息給子線程修赞,looper怎么啟動(dòng)
View事件傳遞
activity棧
封裝view的時(shí)候怎么知道view的大小
arraylist和linkedlist的區(qū)別,以及應(yīng)用場(chǎng)景
怎么啟動(dòng)service桑阶,service和activity怎么進(jìn)行數(shù)據(jù)交互
下拉狀態(tài)欄是不是影響activity的生命周期柏副,如果在onStop的時(shí)候做了網(wǎng)絡(luò)請(qǐng)求勾邦,onResume的時(shí)候怎么恢復(fù)
view渲染
今日頭條
數(shù)據(jù)結(jié)構(gòu)中堆的概念,堆排序
死鎖的概念割择,怎么避免死鎖
ReentrantLock 眷篇、synchronized和volatile(n面)
HashMap
singleTask啟動(dòng)模式
用到的一些開源框架,介紹一個(gè)看過(guò)源碼的荔泳,內(nèi)部實(shí)現(xiàn)過(guò)程蕉饼。
消息機(jī)制實(shí)現(xiàn)
ReentrantLock的內(nèi)部實(shí)現(xiàn)
App啟動(dòng)崩潰異常捕捉
事件傳遞機(jī)制的介紹
ListView的優(yōu)化
二叉樹,給出根節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)玛歌,找出從根節(jié)點(diǎn)到目標(biāo)節(jié)點(diǎn)的路徑
模式MVP椎椰,MVC介紹
斷點(diǎn)續(xù)傳的實(shí)現(xiàn)
集合的接口和具體實(shí)現(xiàn)類,介紹
TreeMap具體實(shí)現(xiàn)
synchronized與ReentrantLock
手寫生產(chǎn)者/消費(fèi)者模式
邏輯地址與物理地址瓤的,為什么使用邏輯地址
一個(gè)無(wú)序篙骡,不重復(fù)數(shù)組,輸出N個(gè)元素杖玲,使得N個(gè)元素的和相加為M鸿吆,給出時(shí)間復(fù)雜度、空間復(fù)雜度缤谎。手寫算法
.Android進(jìn)程分類
前臺(tái)切換到后臺(tái)托呕,然后再回到前臺(tái),Activity生命周期回調(diào)方法差油。彈出Dialog交掏,生命值周期回調(diào)方法。
Activity的啟動(dòng)模式
愛(ài)奇藝
RxJava的功能與原理實(shí)現(xiàn)
RecycleView的使用见秽,原理催植,RecycleView優(yōu)化
ANR的原因
四大組件
Service的開啟方式
Activity與Service通信的方式
Activity之間的通信方式
HashMap的實(shí)現(xiàn)伦忠,與HashSet的區(qū)別
JVM內(nèi)存模型,內(nèi)存區(qū)域
Java中同步使用的關(guān)鍵字,死鎖
MVP模式
Java設(shè)計(jì)模式淘钟,觀察者模式
Activity與Fragment之間生命周期比較
廣播的使用場(chǎng)景
百度
Bitmap 使用時(shí)候注意什么?
Oom 是否可以try catch ?
內(nèi)存泄露如何產(chǎn)生?
適配器模式芍碧,裝飾者模式,外觀模式的異同践美?
ANR 如何產(chǎn)生兴革?
String buffer 與string builder 的區(qū)別?
如何保證線程安全擎勘?
java四中引用
Jni 用過(guò)么?
多進(jìn)程場(chǎng)景遇見(jiàn)過(guò)么硼砰?
關(guān)于handler分别,在任何地方new handler 都是什么線程下
sqlite升級(jí),增加字段的語(yǔ)句
bitmap recycler 相關(guān)
強(qiáng)引用置為null,會(huì)不會(huì)被回收荚虚?
glide 使用什么緩存?
Glide 內(nèi)存緩存如何控制大小俭茧?
如何保證多線程讀寫文件的安全毡们?
攜程
Activity啟動(dòng)模式
廣播的使用方式,場(chǎng)景
App中喚醒其他進(jìn)程的實(shí)現(xiàn)方式
AndroidManifest的作用與理解
List,Set,Map的區(qū)別
HashSet與HashMap怎么判斷集合元素重復(fù)
Java中內(nèi)存區(qū)域與垃圾回收機(jī)制
EventBus作用挺据,實(shí)現(xiàn)方式婉称,代替EventBus的方式
Android中開啟攝像頭的主要步驟
網(wǎng)易
concurrenthashmap
volatile
synchronized與Lock
Java線程池
wait/notify
NIO
垃圾收集器
Activity生命周期
AlertDialog,popupWindow,Activity區(qū)別
小米
String 為什么要設(shè)計(jì)成不可變的庄敛?
fragment 各種情況下的生命周期
Activity 上有 Dialog 的時(shí)候按 home 鍵時(shí)的生命周期
橫豎屏切換的時(shí)候,Activity 各種情況下的生命周期
Application 和 Activity 的 context 對(duì)象的區(qū)別
序列化的作用,以及 Android 兩種序列化的區(qū)別。
List 和 Map 的實(shí)現(xiàn)方式以及存儲(chǔ)方式。
靜態(tài)內(nèi)部類的設(shè)計(jì)意圖悬襟。
線程如何關(guān)閉,以及如何防止線程的內(nèi)存泄漏
360
軟引用帚桩、弱引用區(qū)別
垃圾回收
多線程:怎么用儡蔓、有什么問(wèn)題要注意获询;Android線程有沒(méi)有上限拐袜,然后提到線程池的上限
JVM
鎖
OOM吉嚣,內(nèi)存泄漏
ANR怎么分析解決
LinearLayout、RelativeLayout蹬铺、FrameLayout的特性尝哆、使用場(chǎng)景
如何實(shí)現(xiàn)Fragment的滑動(dòng)
ViewPager使用細(xì)節(jié)丛塌,如何設(shè)置成每次只初始化當(dāng)前的Fragment彤敛,其他的不初始化
ListView重用的是什么
進(jìn)程間通信的機(jī)制
AIDL機(jī)制
AsyncTask機(jī)制
如何取消AsyncTask
序列化
Android為什么引入Parcelable
有沒(méi)有嘗試簡(jiǎn)化Parcelable的使用
AIDL機(jī)制
項(xiàng)目:拉活怎么做的
應(yīng)用安裝過(guò)程
某海外直播公司
線程和進(jìn)程的區(qū)別背稼?
為什么要有線程,而不是僅僅用進(jìn)程?
算法判斷單鏈表成環(huán)與否熄阻?
如何實(shí)現(xiàn)線程同步?
hashmap數(shù)據(jù)結(jié)構(gòu)?
arraylist 與 linkedlist 異同?
object類的equal 和hashcode 方法重寫,為什么?
hashmap如何put數(shù)據(jù)(從hashmap源碼角度講解)?
簡(jiǎn)述IPC面粮?
fragment之間傳遞數(shù)據(jù)的方式在塔?
簡(jiǎn)述tcp四次揮手?
threadlocal原理
內(nèi)存泄漏的可能原因得院?
用IDE如何分析內(nèi)存泄漏?
OOM的可能原因?
線程死鎖的4個(gè)條件?
差值器&估值器
簡(jiǎn)述消息機(jī)制相關(guān)
進(jìn)程間通信方式?
Binder相關(guān)泞辐?
觸摸事件的分發(fā)涣易?
簡(jiǎn)述Activity啟動(dòng)全部過(guò)程?
okhttp源碼胖喳?
RxJava簡(jiǎn)介及其源碼解讀泡躯?
性能優(yōu)化如何分析systrace?
廣播的分類?
點(diǎn)擊事件被攔截箍邮,但是相傳到下面的view贿条,如何操作?
Glide源碼重付?
ActicityThread相關(guān)?
volatile的原理
synchronize的原理
lock原理
翻轉(zhuǎn)一個(gè)單項(xiàng)鏈表
string to integer
合并多個(gè)單有序鏈表(假設(shè)都是遞增的)
閱讀更多
分享我學(xué)習(xí)Java后臺(tái)的三個(gè)總結(jié)
堅(jiān)持:學(xué)習(xí)Java后臺(tái)的第一階段凫乖,我學(xué)習(xí)了那些知識(shí)