Java中級面試題及答案大全(2021年Java面試題答案大匯總)


 Java面試題及答案【最新版】Java高級面試題大全(2021版),發現網上很多Java面試題及答案整理都沒有答案,所以花了很長時間搜集,本套Java面試題大全,Java面試題大匯總,有大量經典的Java面試題以及答案,包含Java語言常見面試題、Java工程師高級面試題及一些大廠Java開發面試寶典,面試經驗技巧等,應屆生,實習生,企業工作過的,都可參考學習!

這套Java面試題匯總大全,希望對大家有幫助哈~

1、 每次執行任務創建線程 new Thread()比較消耗性能,創建一個線程是比較耗時、耗資源的。

2、 調用 new Thread()創建的線程缺乏管理,被稱為野線程,而且可以無限制的創建,線程之間的相互競爭會導致過多占用系統資源而導致系統癱瘓,還有線程之間的頻繁交替也會消耗很多系統資源。

3、 接使用new Thread() 啟動的線程不利於擴展,比如定時執行、定期執行、定時定期執行、線程中斷等都不便實現。

2、你能保證 GC 執行嗎?

不能,雖然你可以調用 System.gc() 或者 Runtime.gc(),但是沒有辦法保證 GC的執行。

3、UML中有哪些常用的圖?

UML定義了多種圖形化的符號來描述軟件系統部分或全部的靜態結構和動態結構,包括:用例圖(use case diagram)、類圖(class diagram)、時序圖(sequence diagram)、協作圖(collaboration diagram)、狀態圖(statechart diagram)、活動圖(activity diagram)、構件圖(component diagram)、部署圖(deployment diagram)等。在這些圖形化符號中,有三種圖最為重要,分別是:用例圖(用來捕獲需求,描述系統的功能,通過該圖可以迅速的了解系統的功能模塊及其關系)、類圖(描述類以及類與類之間的關系,通過該圖可以快速了解系統)、時序圖(描述執行特定任務時對象之間的交互關系以及執行順序,通過該圖可以了解對象能接收的消息也就是說對象能夠向外界提供的服務)。

用例圖:

類圖:

時序圖:

4、volatile關鍵字的原理是什么?干什么用的?

使用了volatile關鍵字的變量,每當變量的值有變動的時候,都會將更改立即同步到主內存中;而如果某個線程想要使用這個變量,就先要從主存中刷新到工作內存,這樣就確保了變量的可見性。

一般使用一個volatile修飾的bool變量,來控制線程的運行狀態。

volatile boolean stop = false;
 
 void stop(){
  this.stop = true;
 }
 void start(){
  new Thread(()->{
   while (!stop){
    //sth
   }
  }).start();
 }

5、synchronized 和 Lock 有什么區別?

1、 首先synchronized是Java內置關鍵字,在JVM層面,Lock是個Java類;

2、 synchronized 可以給類、方法、代碼塊加鎖;而 lock 只能給代碼塊加鎖。

3、 synchronized 不需要手動獲取鎖和釋放鎖,使用簡單,發生異常會自動釋放鎖,不會造成死鎖;而 lock 需要自己加鎖和釋放鎖,如果使用不當沒有 unLock()去釋放鎖就會造成死鎖。

4、 通過 Lock 可以知道有沒有成功獲取鎖,而 synchronized 卻無法辦到。

6、抽象類必須要有抽象方法嗎

不是必須。抽象類可以沒有抽象方法。

7、強引用、軟引用、弱引用、虛引用是什么,有什么區別?

1、 強引用,就是普通的對象引用關系,如 String s = new String("ConstXiong")

2、 軟引用,用於維護一些可有可無的對象。只有在內存不足時,系統則會回收軟引用對象,如果回收了軟引用對象之后仍然沒有足夠的內存,才會拋出內存溢出異常。SoftReference 實現

3、 弱引用,相比軟引用來說,要更加無用一些,它擁有更短的生命周期,當 JVM 進行垃圾回收時,無論內存是否充足,都會回收被弱引用關聯的對象。WeakReference 實現

4、 虛引用是一種形同虛設的引用,在現實場景中用的不是很多,它主要用來跟蹤對象被垃圾回收的活動。PhantomReference 實現

8、Servlet的生命周期?

1、 加載:判斷servlet實例是否存在,如果不存在,就加載serlvet

2、 實例化:

3、 初始化

4、服務

5、銷毀

9、Hibernate的對象有幾種狀態

1、 瞬時態(transient)

2、 持久態(persistent)

3、 游離態(detached)

10、說一下HashMap的實現原理?

1、 HashMap概述: HashMap是基於哈希表的Map接口的非同步實現。此實現提供所有可選的映射操作,並允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恆久不變。

2、 HashMap的數據結構: 在Java編程語言中,最基本的結構就是兩種,一個是數組,另外一個是模擬指針(引用),所有的數據結構都可以用這兩個基本結構來構造的,HashMap也不例外。HashMap實際上是一個“鏈表散列”的數據結構,即數組和鏈表的結合體。

HashMap 基於 Hash 算法實現的

1、 當我們往HashMap中put元素時,利用key的hashCode重新hash計算出當前對象的元素在數組中的下標

2、 存儲時,如果出現hash值相同的key,此時有兩種情況。

(1)如果key相同,則覆蓋原始值;

(2)如果key不同(出現沖突),則將當前的key-value放入鏈表中

3、 獲取時,直接找到hash值對應的下標,在進一步判斷key是否相同,從而找到對應值。

4、 理解了以上過程就不難明白HashMap是如何解決hash沖突的問題,核心就是使用了數組的存儲方式,然后將沖突的key的對象放入鏈表中,一旦發現沖突就在鏈表中做進一步的對比。

需要注意Jdk 1.8中對HashMap的實現做了優化,當鏈表中的節點數據超過八個之后,該鏈表會轉為紅黑樹來提高查詢效率,從原來的O(n)到O(logn)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM