史上最全的Android面試題集錦(十一)

5比搭、類加載器

程序在啟動的時候,并不會一次性加載程序所要用的所有class文件,而是根據(jù)程序的需要,通過Java的類加載機制(ClassLoader)來動態(tài)加載某個class文件到內(nèi)存當(dāng)中的槐脏,從而只有class文件被載入到了內(nèi)存之后,才能被其它class所引用撇寞。所以ClassLoader就是用來動態(tài)加載class文件到內(nèi)存當(dāng)中用的顿天。

5.1堂氯、雙親委派原理

每個ClassLoader實例都有一個父類加載器的引用(不是繼承關(guān)系,是一個包含的關(guān)系)牌废,虛擬機內(nèi)置的類加載器(Bootstrap ClassLoader)本身沒有父類加載器祖灰,但是可以用做其他ClassLoader實例的父類加載器。

當(dāng)一個ClassLoader 實例需要加載某個類時畔规,它會試圖在親自搜索這個類之前先把這個任務(wù)委托給它的父類加載器,這個過程是由上而下依次檢查的恨统,首先由頂層的類加載器Bootstrap CLassLoader進行加載叁扫,如果沒有加載到,則把任務(wù)轉(zhuǎn)交給Extension CLassLoader視圖加載畜埋,如果也沒有找到莫绣,則轉(zhuǎn)交給AppCLassLoader進行加載,還是沒有的話悠鞍,則交給委托的發(fā)起者对室,由它到指定的文件系統(tǒng)或者網(wǎng)絡(luò)等URL中進行加載類。還沒有找到的話咖祭,則會拋出CLassNotFoundException異常掩宜。否則將這個類生成一個類的定義,并將它加載到內(nèi)存中么翰,最后返回這個類在內(nèi)存中的Class實例對象牺汤。

5.2、 為什么使用雙親委托模型

JVM在判斷兩個class是否相同時浩嫌,不僅要判斷兩個類名是否相同檐迟,還要判斷是否是同一個類加載器加載的。

避免重復(fù)加載码耐,父類已經(jīng)加載了追迟,則子CLassLoader沒有必要再次加載。

考慮安全因素骚腥,假設(shè)自定義一個String類敦间,除非改變JDK中CLassLoader的搜索類的默認(rèn)算法,否則用戶自定義的CLassLoader如法加載一個自己寫的String類束铭,因為String類在啟動時就被引導(dǎo)類加載器Bootstrap CLassLoader加載了每瞒。

6、集合

Java集合類主要由兩個接口派生出:Collection和Map纯露,這兩個接口是Java集合的根接口剿骨。

Collection接口是集合類的根接口,Java中沒有提供這個接口的直接的實現(xiàn)類埠褪。但是卻讓其被繼承產(chǎn)生了兩個接口浓利,就是 Set和List挤庇。Set中不能包含重復(fù)的元素。List是一個有序的集合贷掖,可以包含重復(fù)的元素嫡秕,提供了按索引訪問的方式。

Map是Java.util包中的另一個接口苹威,它和Collection接口沒有關(guān)系昆咽,是相互獨立的,但是都屬于集合類的一部分牙甫。Map包含了key-value對掷酗。Map不能包含重復(fù)的key,但是可以包含相同的value窟哺。

6.1泻轰、區(qū)別

List,Set都是繼承自Collection接口,Map則不是;

List特點:元素有放入順序且轨,元素可重復(fù); Set特點:元素?zé)o放入順序浮声,元素不可重復(fù),重復(fù)元素會覆蓋掉旋奢,(注意:元素雖然無放入順序泳挥,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的至朗,加入Set 的Object必須定義equals()方法;

LinkedList羡洁、ArrayList、HashSet是非線程安全的爽丹,Vector是線程安全的;

HashMap是非線程安全的筑煮,HashTable是線程安全的;

6.2、List和Vector比較

Vector是多線程安全的粤蝎,線程安全就是說多線程訪問同一代碼真仲,不會產(chǎn)生不確定的結(jié)果。而ArrayList不是初澎,這個可以從源碼中看出秸应,Vector類中的方法很多有synchronized進行修飾,這樣就導(dǎo)致了Vector在效率上無法與ArrayList相比碑宴;

兩個都是采用的線性連續(xù)空間存儲元素软啼,但是當(dāng)空間不足的時候,兩個類的增加方式是不同延柠。

Vector可以設(shè)置增長因子祸挪,而ArrayList不可以。

Vector是一種老的動態(tài)數(shù)組贞间,是線程同步的贿条,效率很低雹仿,一般不贊成使用。

6.3整以、HashSet如何保證不重復(fù)

HashSet底層通過HashMap來實現(xiàn)的胧辽,在往HashSet中添加元素是

public boolean add(E e) {

return map.put(e, PRESENT)==null;

}

// Dummy value to associate with an Object in the backing Map

private static final Object PRESENT = new Object();

在HashMap中進行查找是否存在這個key,value始終是一樣的公黑,主要有以下幾種情況:

如果hash碼值不相同邑商,說明是一個新元素,存凡蚜;

如果hash碼值相同人断,且equles判斷相等,說明元素已經(jīng)存在番刊,不存;

如果hash碼值相同影锈,且equles判斷不相等芹务,說明元素不存在,存鸭廷;

如果有元素和傳入對象的hash值相等枣抱,那么,繼續(xù)進行equles()判斷辆床,如果仍然相等佳晶,那么就認(rèn)為傳入元素已經(jīng)存在,不再添加讼载,結(jié)束轿秧,否則仍然添加;

6.4咨堤、HashSet與Treeset的適用場景

HashSet是基于Hash算法實現(xiàn)的菇篡,其性能通常都優(yōu)于TreeSet。為快速查找而設(shè)計的Set一喘,我們通常都應(yīng)該使用HashSet驱还,在我們需要排序的功能時,我們才使用TreeSet凸克。

TreeSet 是二叉樹(紅黑樹的樹據(jù)結(jié)構(gòu))實現(xiàn)的,Treeset中的數(shù)據(jù)是自動排好序的议蟆,不允許放入null值

HashSet是哈希表實現(xiàn)的,HashSet中的數(shù)據(jù)是無序的,可以放入null萎战,但只能放入一個null咐容,兩者中的值都不能重復(fù),就如數(shù)據(jù)庫中唯一約束蚂维。

HashSet是基于Hash算法實現(xiàn)的疟丙,其性能通常都優(yōu)于TreeSet颖侄。為快速查找而設(shè)計的Set,我們通常都應(yīng)該使用HashSet享郊,在我們需要排序的功能時览祖,我們才使用TreeSet。

6.5炊琉、HashMap與TreeMap展蒂、HashTable的區(qū)別及適用場景

HashMap 非線程安全,基于哈希表(散列表)實現(xiàn)苔咪。使用HashMap要求添加的鍵類明確定義了hashCode()和equals()[可以重寫hashCode()和equals()]锰悼,為了優(yōu)化HashMap空間的使用,您可以調(diào)優(yōu)初始容量和負(fù)載因子团赏。其中散列表的沖突處理主要分兩種箕般,一種是開放定址法,另一種是鏈表法舔清。HashMap的實現(xiàn)中采用的是鏈表法丝里。

TreeMap:非線程安全基于紅黑樹實現(xiàn),TreeMap沒有調(diào)優(yōu)選項体谒,因為該樹總處于平衡狀態(tài)

原文鏈接:https://blog.csdn.net/xiangzhihong8/java/article/details/96280254

點擊下方鏈接免費獲取Android進階資料:

https://shimo.im/docs/tXXKHgdjPYj6WT8d/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杯聚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抒痒,更是在濱河造成了極大的恐慌幌绍,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件故响,死亡現(xiàn)場離奇詭異傀广,居然都是意外死亡,警方通過查閱死者的電腦和手機彩届,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門主儡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惨缆,你說我怎么就攤上這事糜值。” “怎么了坯墨?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵寂汇,是天一觀的道長。 經(jīng)常有香客問我捣染,道長骄瓣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任耍攘,我火速辦了婚禮榕栏,結(jié)果婚禮上畔勤,老公的妹妹穿的比我還像新娘。我一直安慰自己扒磁,他們只是感情好庆揪,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著妨托,像睡著了一般缸榛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兰伤,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天内颗,我揣著相機與錄音,去河邊找鬼敦腔。 笑死均澳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的符衔。 我是一名探鬼主播找前,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柏腻!你這毒婦竟也來了纸厉?” 一聲冷哼從身側(cè)響起系吭,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤五嫂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肯尺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沃缘,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年则吟,在試婚紗的時候發(fā)現(xiàn)自己被綠了槐臀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡氓仲,死狀恐怖水慨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敬扛,我是刑警寧澤晰洒,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站啥箭,受9級特大地震影響谍珊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜急侥,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一砌滞、第九天 我趴在偏房一處隱蔽的房頂上張望侮邀。 院中可真熱鬧,春花似錦贝润、人聲如沸绊茧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽按傅。三九已至,卻和暖如春胧卤,著一層夾襖步出監(jiān)牢的瞬間唯绍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工枝誊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留况芒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓叶撒,卻偏偏與公主長得像绝骚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子祠够,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355