大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) 最全面的Java中級(jí)面試題

最全面的Java中級(jí)面試題

更新時(shí)間:2019-08-15 13:59:33 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3133次

  List和Set比較,各自的子類比較


  對(duì)比一:Arraylist與LinkedList的比較


  1、ArrayList是實(shí)現(xiàn)了基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),因?yàn)榈刂愤B續(xù),一旦數(shù)據(jù)存儲(chǔ)好了,查詢操作效率會(huì)比較高(在內(nèi)存里是連著放的)。


  2、因?yàn)榈刂愤B續(xù),ArrayList要移動(dòng)數(shù)據(jù),所以插入和刪除操作效率比較低。


  3、LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu),地址是任意的,所以在開辟內(nèi)存空間的時(shí)候不需要等一個(gè)連續(xù)的地址,對(duì)于新增和刪除操作add和remove,LinedList比較占優(yōu)勢(shì)。


  4、因?yàn)長(zhǎng)inkedList要移動(dòng)指針,所以查詢操作性能比較低。


  適用場(chǎng)景分析:


  當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行對(duì)此訪問的情況下選用ArrayList,當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行多次增加刪除修改時(shí)采用LinkedList。


  對(duì)比二:ArrayList與Vector的比較


  1、Vector的方法都是同步的,是線程安全的,而ArrayList的方法不是,由于線程的同步必然要影響性能。因此,ArrayList的性能比Vector好。


  2、當(dāng)Vector或ArrayList中的元素超過(guò)它的初始大小時(shí),Vector會(huì)將它的容量翻倍,而ArrayList只增加50%的大小,這樣。ArrayList就有利于節(jié)約內(nèi)存空間。


  3、大多數(shù)情況不使用Vector,因?yàn)樾阅懿缓?,但是它支持線程的同步,即某一時(shí)刻只有一個(gè)線程能夠?qū)慥ector,避免多線程同時(shí)寫而引起的不一致性。


  4、Vector可以設(shè)置增長(zhǎng)因子,而ArrayList不可以。


  適用場(chǎng)景分析:


  1、Vector是線程同步的,所以它也是線程安全的,而ArrayList是線程異步的,是不安全的。如果不考慮到線程的安全因素,一般用ArrayList效率比較高。


  2、如果集合中的元素的數(shù)目大于目前集合數(shù)組的長(zhǎng)度時(shí),在集合中使用數(shù)據(jù)量比較大的數(shù)據(jù),用Vector有一定的優(yōu)勢(shì)。


  對(duì)比三:HashSet與TreeSet的比較


  1.TreeSet是二叉樹實(shí)現(xiàn)的,Treeset中的數(shù)據(jù)是自動(dòng)排好序的,不允許放入null值。


  2.HashSet是哈希表實(shí)現(xiàn)的,HashSet中的數(shù)據(jù)是無(wú)序的,可以放入null,但只能放入一個(gè)null,兩者中的值都不能重復(fù),就如數(shù)據(jù)庫(kù)中唯一約束。


  3.HashSet要求放入的對(duì)象必須實(shí)現(xiàn)HashCode()方法,放入的對(duì)象,是以hashcode碼作為標(biāo)識(shí)的,而具有相同內(nèi)容的String對(duì)象,hashcode是一樣,所以放入的內(nèi)容不能重復(fù)。但是同一個(gè)類的對(duì)象可以放入不同的實(shí)例。


  適用場(chǎng)景分析:


  HashSet是基于Hash算法實(shí)現(xiàn)的,其性能通常都優(yōu)于TreeSet。我們通常都應(yīng)該使用HashSet,在我們需要排序的功能時(shí),我們才使用TreeSet。


  HashMap和ConcurrentHashMap的區(qū)別


  1、HashMap不是線程安全的,而ConcurrentHashMap是線程安全的。


  2、ConcurrentHashMap采用鎖分段技術(shù),將整個(gè)Hash桶進(jìn)行了分段segment,也就是將這個(gè)大的數(shù)組分成了幾個(gè)小的片段segment,而且每個(gè)小的片段segment上面都有鎖存在,那么在插入元素的時(shí)候就需要先找到應(yīng)該插入到哪一個(gè)片段segment,然后再在這個(gè)片段上面進(jìn)行插入,而且這里還需要獲取segment鎖。


  3、ConcurrentHashMap讓鎖的粒度更精細(xì)一些,并發(fā)性能更好。


  至于兩者的底層實(shí)現(xiàn),你如果想通過(guò)一篇文章就理解了,那就tooyoung了,好好找些博文+看源碼去吧。


  HashTable和ConcurrentHashMap的區(qū)別


  它們都可以用于多線程的環(huán)境,但是當(dāng)Hashtable的大小增加到一定的時(shí)候,性能會(huì)急劇下降,因?yàn)榈鷷r(shí)需要被鎖定很長(zhǎng)的時(shí)間。因?yàn)镃oncurrentHashMap引入了分割(segmentation),不論它變得多么大,僅僅需要鎖定map的某個(gè)部分,而其它的線程不需要等到迭代完成才能訪問map。簡(jiǎn)而言之,在迭代的過(guò)程中,ConcurrentHashMap僅僅鎖定map的某個(gè)部分,而Hashtable則會(huì)鎖定整個(gè)map。


  String,StringBuffer和StringBuilder的區(qū)別


  1、運(yùn)行速度,或者說(shuō)是執(zhí)行速度,在這方面運(yùn)行速度快慢為:StringBuilder>StringBuffer>String。


  2、線程安全上,StringBuilder是線程不安全的,而StringBuffer是線程安全的。


  適用場(chǎng)景分析:


  String:適用于少量的字符串操作的情況


  StringBuilder:適用于單線程下在字符緩沖區(qū)進(jìn)行大量操作的情況


  StringBuffer:適用多線程下在字符緩沖區(qū)進(jìn)行大量操作的情況


  wait和sleep的區(qū)別


  1、sleep()方法是屬于Thread類中的,而wait()方法,則是屬于Object類中的。


  2、sleep()方法導(dǎo)致了程序暫停執(zhí)行指定的時(shí)間,讓出cpu給其他線程,但是他的監(jiān)控狀態(tài)依然保持著,當(dāng)指定的時(shí)間到了又會(huì)自動(dòng)恢復(fù)運(yùn)行狀態(tài)。所以在調(diào)用sleep()方法的過(guò)程中,線程不會(huì)釋放對(duì)象鎖。


  3、調(diào)用wait()方法的時(shí)候,線程會(huì)放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象調(diào)用notify()方法后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲取對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。


  JVM的內(nèi)存結(jié)構(gòu)


  根據(jù)JVM規(guī)范,JVM內(nèi)存共分為虛擬機(jī)棧、堆、方法區(qū)、程序計(jì)數(shù)器、本地方法棧五個(gè)部分。


  1、Java虛擬機(jī)棧:


  線程私有;每個(gè)方法在執(zhí)行的時(shí)候會(huì)創(chuàng)建一個(gè)棧幀,存儲(chǔ)了局部變量表,操作數(shù)棧,動(dòng)態(tài)連接,方法返回地址等;每個(gè)方法從調(diào)用到執(zhí)行完畢,對(duì)應(yīng)一個(gè)棧幀在虛擬機(jī)棧中的入棧和出棧。


  2、堆:


  線程共享;被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建,用于存放對(duì)象實(shí)例。


  3、方法區(qū):


  線程共享;被所有線程共享的一塊內(nèi)存區(qū)域;用于存儲(chǔ)已被虛擬機(jī)加載的類信息,常量,靜態(tài)變量等。


  4、程序計(jì)數(shù)器:


  線程私有;是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器,每條線程都要有一個(gè)獨(dú)立的程序計(jì)數(shù)器,這類內(nèi)存也稱為“線程私有”的內(nèi)存。


  5、本地方法棧:


  線程私有;主要為虛擬機(jī)使用到的Native方法服務(wù)。


  強(qiáng)引用,軟引用和弱引用的區(qū)別


  強(qiáng)引用:


  只有這個(gè)引用被釋放之后,對(duì)象才會(huì)被釋放掉,只要引用存在,垃圾回收器永遠(yuǎn)不會(huì)回收,這是最常見的New出來(lái)的對(duì)象。


  軟引用:


  內(nèi)存溢出之前通過(guò)代碼回收的引用。軟引用主要用戶實(shí)現(xiàn)類似緩存的功能,在內(nèi)存足夠的情況下直接通過(guò)軟引用取值,無(wú)需從繁忙的真實(shí)來(lái)源查詢數(shù)據(jù),提升速度;當(dāng)內(nèi)存不足時(shí),自動(dòng)刪除這部分緩存數(shù)據(jù),從真正的來(lái)源查詢這些數(shù)據(jù)。


  弱引用:


  第二次垃圾回收時(shí)回收的引用,短時(shí)間內(nèi)通過(guò)弱引用取對(duì)應(yīng)的數(shù)據(jù),可以取到,當(dāng)執(zhí)行過(guò)第二次垃圾回收時(shí),將返回null。弱引用主要用于監(jiān)控對(duì)象是否已經(jīng)被垃圾回收器標(biāo)記為即將回收的垃圾,可以通過(guò)弱引用的isEnQueued方法返回對(duì)象是否被垃圾回收器標(biāo)記。


提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲国产女人aaa毛片在线 | 久久久精品久久视频只有精品 | 成人a毛片一级 | 在线看福利视频120秒 | 九九99久久精品国产 | 99视频精品全部免费观看 | 免费黄色影院 | 亚洲欧洲日本在线观看 | 国产无套免费网站 | 天天插天天插 | 日日日日干 | 综合视频在线 | 国产区一区二区三 | a级免费网站 | 成人日韩 | 亚洲一片| 久久精品国产亚洲黑森林 | 欧美成人午夜精品一区二区 | 色婷婷资源网 | 九九热综合| 亚洲精品久久 | 国产在线精品一区二区高清不卡 | 干成人| 七七影院九色桃花78 | 欧美成人观看 | 欧美一级毛片免费网站 | 亚洲欧美综合乱码精品成人网 | 涩涩视频网 | 成人短视频在线在线观看 | 日本tv欧美tv天堂 | 久久厕所精品国产精品亚洲 | 日韩中文字幕视频在线 | heyzo在线播放4k岛国 | 欧美日韩一级黄色片 | 夜精品a一区二区三区 | 亚洲精品视频在线观看视频 | 99网| 伦理片爱久久 | 亚洲日本久久久午夜精品 | 2020久久精品永久免费 | 日本一区二区网站 |