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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 最全面的Java中級面試題

最全面的Java中級面試題

更新時間:2019-08-15 13:59:33 來源:動力節點 瀏覽3268次

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


  對比一:Arraylist與LinkedList的比較


  1、ArrayList是實現了基于動態數組的數據結構,因為地址連續,一旦數據存儲好了,查詢操作效率會比較高(在內存里是連著放的)。


  2、因為地址連續,ArrayList要移動數據,所以插入和刪除操作效率比較低。


  3、LinkedList基于鏈表的數據結構,地址是任意的,所以在開辟內存空間的時候不需要等一個連續的地址,對于新增和刪除操作add和remove,LinedList比較占優勢。


  4、因為LinkedList要移動指針,所以查詢操作性能比較低。


  適用場景分析:


  當需要對數據進行對此訪問的情況下選用ArrayList,當需要對數據進行多次增加刪除修改時采用LinkedList。


  對比二:ArrayList與Vector的比較


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


  2、當Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻倍,而ArrayList只增加50%的大小,這樣。ArrayList就有利于節約內存空間。


  3、大多數情況不使用Vector,因為性能不好,但是它支持線程的同步,即某一時刻只有一個線程能夠寫Vector,避免多線程同時寫而引起的不一致性。


  4、Vector可以設置增長因子,而ArrayList不可以。


  適用場景分析:


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


  2、如果集合中的元素的數目大于目前集合數組的長度時,在集合中使用數據量比較大的數據,用Vector有一定的優勢。


  對比三:HashSet與TreeSet的比較


  1.TreeSet是二叉樹實現的,Treeset中的數據是自動排好序的,不允許放入null值。


  2.HashSet是哈希表實現的,HashSet中的數據是無序的,可以放入null,但只能放入一個null,兩者中的值都不能重復,就如數據庫中唯一約束。


  3.HashSet要求放入的對象必須實現HashCode()方法,放入的對象,是以hashcode碼作為標識的,而具有相同內容的String對象,hashcode是一樣,所以放入的內容不能重復。但是同一個類的對象可以放入不同的實例。


  適用場景分析:


  HashSet是基于Hash算法實現的,其性能通常都優于TreeSet。我們通常都應該使用HashSet,在我們需要排序的功能時,我們才使用TreeSet。


  HashMap和ConcurrentHashMap的區別


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


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


  3、ConcurrentHashMap讓鎖的粒度更精細一些,并發性能更好。


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


  HashTable和ConcurrentHashMap的區別


  它們都可以用于多線程的環境,但是當Hashtable的大小增加到一定的時候,性能會急劇下降,因為迭代時需要被鎖定很長的時間。因為ConcurrentHashMap引入了分割(segmentation),不論它變得多么大,僅僅需要鎖定map的某個部分,而其它的線程不需要等到迭代完成才能訪問map。簡而言之,在迭代的過程中,ConcurrentHashMap僅僅鎖定map的某個部分,而Hashtable則會鎖定整個map。


  String,StringBuffer和StringBuilder的區別


  1、運行速度,或者說是執行速度,在這方面運行速度快慢為:StringBuilder>StringBuffer>String。


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


  適用場景分析:


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


  StringBuilder:適用于單線程下在字符緩沖區進行大量操作的情況


  StringBuffer:適用多線程下在字符緩沖區進行大量操作的情況


  wait和sleep的區別


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


  2、sleep()方法導致了程序暫停執行指定的時間,讓出cpu給其他線程,但是他的監控狀態依然保持著,當指定的時間到了又會自動恢復運行狀態。所以在調用sleep()方法的過程中,線程不會釋放對象鎖。


  3、調用wait()方法的時候,線程會放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象調用notify()方法后本線程才進入對象鎖定池準備獲取對象鎖進入運行狀態。


  JVM的內存結構


  根據JVM規范,JVM內存共分為虛擬機棧、堆、方法區、程序計數器、本地方法棧五個部分。


  1、Java虛擬機棧:


  線程私有;每個方法在執行的時候會創建一個棧幀,存儲了局部變量表,操作數棧,動態連接,方法返回地址等;每個方法從調用到執行完畢,對應一個棧幀在虛擬機棧中的入棧和出棧。


  2、堆:


  線程共享;被所有線程共享的一塊內存區域,在虛擬機啟動時創建,用于存放對象實例。


  3、方法區:


  線程共享;被所有線程共享的一塊內存區域;用于存儲已被虛擬機加載的類信息,常量,靜態變量等。


  4、程序計數器:


  線程私有;是當前線程所執行的字節碼的行號指示器,每條線程都要有一個獨立的程序計數器,這類內存也稱為“線程私有”的內存。


  5、本地方法棧:


  線程私有;主要為虛擬機使用到的Native方法服務。


  強引用,軟引用和弱引用的區別


  強引用:


  只有這個引用被釋放之后,對象才會被釋放掉,只要引用存在,垃圾回收器永遠不會回收,這是最常見的New出來的對象。


  軟引用:


  內存溢出之前通過代碼回收的引用。軟引用主要用戶實現類似緩存的功能,在內存足夠的情況下直接通過軟引用取值,無需從繁忙的真實來源查詢數據,提升速度;當內存不足時,自動刪除這部分緩存數據,從真正的來源查詢這些數據。


  弱引用:


  第二次垃圾回收時回收的引用,短時間內通過弱引用取對應的數據,可以取到,當執行過第二次垃圾回收時,將返回null。弱引用主要用于監控對象是否已經被垃圾回收器標記為即將回收的垃圾,可以通過弱引用的isEnQueued方法返回對象是否被垃圾回收器標記。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲国产一区视频 | 一区二区在线精品免费视频 | 91久久国产精品 | 手机看片亚洲 | 久久视频免费观看 | 国产成人欧美一区二区三区的 | www.九九热| 欧美高清精品 | 999视频在线播放777 | 91人人看 | 色偷偷青青草原在线视频 | 欧美另类丰满69xxxxx | 爱爱日韩| 欧美成人精品福利在线视频 | 国产香蕉网 | 美女性色 | 手机看片日韩日韩韩 | 99热在这里只有精品 | 久久精品免费一区二区三区 | 精品国产一区二区二三区在线观看 | 日韩欧美成人免费中文字幕 | 99这里只有精品66视频 | 91精品国产欧美一区二区 | 北条麻妃手机在线观看 | 久久久免费观看视频 | 久久成人免费观看全部免费 | 女人182毛片a级毛片 | 亚洲国产精品自产在线播放 | 老司机午夜精品99久久免费 | 欧美日韩亚洲精品国产色 | 国产在线观看午夜不卡 | 久久高清影院 | 国产真实偷人视频在线播放 | 日本叼嘿| 97影院理论在线观看 | 国模和精品嫩模私拍视频 | 日韩一区二区久久久久久 | 日日日视频 | 麻豆精品成人免费国产片 | 午夜欧美激情 | 狠狠色狠狠色综合系列 |