標題:針對程式設計師的 50 多個核心 Java 面試問題及其答案

發表:真實

描述:核心 Java 面試常見問題及其答案,幫助初學者和初級開發人員獲得第一份 Java 開發工作。

標籤: java、程式設計、職業

封面圖:https://thepracticaldev.s3.amazonaws.com/i/k63545lbbjmh582tiosr.png


揭露:這篇文章包含附屬連結;如果您透過本文中提供的不同連結購買產品或服務,我可能會獲得補償。

Java程式設計師大家好!在過去的幾年裡,我一直在分享許多Java 面試問題、答案和單獨討論。我的許多讀者要求我將他們聚集在一起,以便他們可以在同一個地方進行面試準備。

這篇文章就是這個結果。

本文包含50 多個 Java 面試問題和答案,涵蓋所有重要主題,如核心 Java 基礎知識、 Java 集合框架Java 多執行緒和並發Java IOJDBCJVM 內部原理編碼問題物件導向程式設計等。

這些問題是從我做過的各種 Java 訪談中挑選出來的,我的朋友、讀者和其他人根據自己的經驗分享了一些問題。它們絕不是非常困難。您可能已經在電話或面對面的面試中見過它們。

這些問題對於複習重要的 Java 主題(例如核心 Java 概念、多執行緒、lambda、流和集合)也非常有用。

我還分享了一些用於進一步學習和提高的有用資源,例如 Udemy 上的完整 Java 大師課程,您可以加入課程來提高和填補 Java 技能方面的空白。

我還寫過有關 Java 面試準備的書籍,例如《Grokking the Java Interview》《Grokking the Spring Boot Interviews》 ,其中我為 Java 開發人員分享了很多問題。

如果你今年正在準備 Java 面試,你也可以在 Gumroad 上取得我的 Java + Spring Interview + SQL Bundle ,使用程式碼Friends20還可獲得 20% 的折扣

Java 和 Spring 面試書籍

那我們還在等什麼?以下是針對初學者和經驗豐富的 Java 開發人員的面試中最常見的一些 Java 問題的清單。

2 至 3 年經驗豐富的程式設計師的 50 個 Java 面試問題

因此,為了不浪費您的時間,這裡列出了一些針對初學者程式設計師的常見核心 Java 面試問題。此清單主要針對初學者和經驗不足的開發人員,例如具有 2 到 3 年 Java 經驗的人。

1) Java如何實現平台無關性?回答

提示:字節碼和Java虛擬機

答案 - Java 透過產生字節碼然後在 Java 虛擬機器上執行來實現平台獨立性,該虛擬機將這些字節碼轉換為依賴計劃的機器程式碼。由於不同平台的 JVM 不同,我的意思是,對於 Windows,您有單獨的 JRE(其中包括 JVM),對於 Linux,您將有單獨的 JRE。由於 Java 程式碼不會編譯為本機機器碼,而是編譯為字節碼,這使得它們獨立於平台。

2) Java中的**ClassLoader**是什麼? (回答

提示:JVM 的一部分,用於載入類別的字節碼。你可以自己寫。

答:在Java中,程式碼被封裝在類別中,因為Java是物件導向的程式設計。你的程式是在類別中寫的,為了執行它們,JVM 會載入這些包含你的程式碼的類別。負責載入類別的 JVM 元件稱為類別載入器。它們是存在的三個主要類別載入器:引導類別載入器、擴充類別載入器和應用程式類別載入器。

這是一個很好的圖表,顯示了每個 Java 類別載入器的功能:

Java 中的類別載入器

3)寫一個Java程式來檢查一個數字是偶數還是奇數?回答

提示:您可以使用位元運算符,例如位元與,記住,二進位格式中偶數末尾為 0,奇數末尾為 1。

4) Java中**ArrayList****HashSet**的差別? (回答

提示: ListSet之間的所有差異都適用於此,例如排序、重複、隨機搜尋等。請參閱 Richard Warburton 的《Java 基礎知識:集合》以了解有關Java 中的ArrayList、HashSet 和其他重要集合的更多資訊。

5)什麼是單例中的雙重檢查鎖定?回答

提示:兩次檢查實例是否已初始化,第一次不加鎖,第二次加鎖。

6)如何在Java中建立線程安全的Singleton? ( 回答

提示:有很多方法,例如使用 Enum 或使用雙重檢查鎖定模式或使用巢狀靜態類別。

7) Java中Serialized和Externalized的差別? ( 回答

提示:Externalized 讓您可以更好地控制序列化過程。

8) Java中何時使用瞬態變數? (回答

提示:當您想要在實作 Serialized 介面的類別中使變數不可序列化時。換句話說,您可以將其用於不想保存其值的變數。請參閱完整的 Java MasterClass以了解 Java 中的瞬態變數。

9) Java中transient變數和volatile變數的差別? ( 回答

提示:完全不同,一個用於序列化上下文,另一個用於並發。

10) Java中什麼時候使用易失性變數? (回答

提示:當你需要指示JVM一個變數可以被多個執行緒修改並提示JVM不緩存其值。

11)我們可以重寫Java中的私有方法嗎? ( 回答

提示:不,因為它在子類別中不可見,這是在 Java 中重寫方法的主要要求。

12) Java中**Hashtable****HashMap**的差別 回答**)

**提示:有幾個但最重要的是Hashtable ,它是同步的,而HashMap不是。與HashMap相比,它也是遺留的且緩慢的。

13) Java中**List****Set**的差別 回答

提示: List是有序的並且允許重複。 Set是無序的,不允許有重複的元素。

14) Java中**ArrayList****Vector**的區別答案

提示:很多,但最重要的是, ArrayList是非同步的,速度很快,而Vector是同步的,速度很慢。它也是像Hashtable這樣的遺留類別。

15) Java 中**Hashtable****ConcurrentHashMap**的差異? 回答

提示:更具可擴展性。請參閱 Richard Warburton 的《Java 基礎知識:集合》以了解更多資訊。

16) **ConcurrentHashMap**如何實現可擴充性? ( 回答

提示:透過將映射分為段並僅在寫入操作期間鎖定。

17) 您將重寫哪兩個方法來將**Object**用作**HashMap**中的**Key** ? ( 回答

提示:等於和哈希碼

18) Java中wait和sleep的差別? (回答 \

提示: wait()方法釋放鎖定或監視器,而 sleep 則不會。

19) Java中**notify****notifyAll**的差別 回答

提示: notify通知一個隨機執行緒正在等待該鎖,而notifyAll通知所有等待監視器的執行緒。如果你確定只有一個執行緒在等待,那麼使用notify ,否則notifyAll會更好。請參閱 Java Champion Heinz Kabutz 的線程基礎迷你課程,以了解有關線程基礎知識的更多資訊。

20) 為什麼要在 Java 中重寫 hashcode 以及**equals()** 回答

提示:遵守 equals 和 hashcode 約定,如果您打算將物件儲存到集合類別(例如HashMapArrayList中,則需要遵守這一點。

21) **HashMap**的負載因子是什麼意思? (回答

提示:觸發HashMap調整大小的閾值一般為 0.75,這表示如果 HashMap 已滿 75%,則HashMap會自行調整大小。

22) Java 中**ArrayList****LinkedList**之間的差異? 回答

提示:與陣列和鍊錶相同,其中一個允許隨機搜尋,而另一種則不允許。在鍊錶上插入和刪除很容易,但在陣列上搜尋很容易。請參閱《Java 基礎知識:集合》 Richard Warburton 在 Pluralsight 上的課程),以了解更多關於 Java 中基本集合資料結構的資訊。

23) Java 中**CountDownLatch****CyclicBarrier**之間的差異? 回答

提示:屏障被打破後,您可以重複使用CyclicBarrier ,但計數為零後,您無法重複使用CountDownLatch

24)在 Java 中什麼時候使用**Runnable****Thread** 回答

提示:總是

25) Java 中 Enum 類型安全的意義是什麼? ( 回答

提示:這表示您不能將不同 Enum 類型的實例指派給 Enum 變數。例如,如果您有一個像DayOfWeek day 這樣的變數,那麼您無法從DayOfMonth枚舉中為其指派值。

26) Java 中整數的自動裝箱如何運作? ( 回答

提示:透過使用Java中的valueOf()方法。

27) Java 中**PATH****Classpath**之間的差異? 回答

提示:作業系統使用PATH ,而JVM 使用Classpath來定位Java 二進位文件,例如JAR 檔案或Class 檔案。請參閱Java 基礎知識:核心平台,以了解有關PATHClasspath和其他 Java 環境變數的更多資訊。

28) Java中方法重載和重寫的差別? ( 回答

提示:重寫發生在子類別中,而重載發生在同一個類別中。此外,覆蓋是執行時活動,而重載是在編譯時解決的。

29) 如何防止 Java 中的類別被子類化? (回答 \

提示:只需將其建構函數設為私有即可

30) 你如何限制你的類別被你的客戶使用? ( 回答 \

提示:使建構子私有或從建構子拋出異常

31) Java 中**StringBuilder****StringBuffer**之間的差異? 回答

提示: StringBuilder不同步,而StringBuffer同步。

32) Java 中多態性與繼承的差別? ( 回答

提示:繼承允許程式碼重複使用並建構類別之間的關係,這是多態性所需要的,多態性提供動態行為。請參閱[物件導向的 Java 程式設計:資料結構及超越專業化](

https://coursera.pxf.io/c/3294490/1164545/14726?u=https%3A%2F%2Fwww.coursera.org%2Fspecializations%2Fjava-object-orientation)在Coursera 上,了解有關OOP 功能的更多資訊。適合初學者的最深入的課程之一。

[ ](

https://coursera.pxf.io/c/3294490/1164545/14726?u=https%3A%2F%2Fwww.coursera.org%2Fspecializations%2Fjava-物件導向

順便說一句,如果您發現 Coursera 課程很有用,因為它們是由世界各地的知名公司和大學建立的,我建議您加入Coursera Plus ,這是Coursera 的訂閱計劃,可以讓您無限制地存取他們最受歡迎的課程、專業、專業憑證和指導專案。它的費用約為 399 美元/年,但它完全物有所值,因為您可以獲得無限的憑證。

33)我們可以在Java中重寫靜態方法嗎? (回答 \

提示:否,因為重寫在執行時間解析,而靜態方法呼叫在編譯時解析。

34) 我們可以存取Java中的私有方法嗎? (回答 \

提示:可以,在同一個班級內,但不能在班級外

35) Java中介面和抽象類別的區別? ( 回答

提示:從Java 8開始,差異變得模糊。然而,一個Java類別仍然可以實作多個接口,但只能擴展一個類別。

36) Java 中 DOM 和 SAX 解析器的差別? (回答 \

提示:DOM 將整個 XML 檔案載入到記憶體中,而 SAX 則不會。它是一個基於事件的解析器,可用於解析大文件,但 DOM 速度很快,對於小文件應該是首選。

37) Java 中 throw 和 throws 關鍵字的差異? (回答 \

提示: throws 聲明方法在發生錯誤時可以拋出什麼異常,但 throw 關鍵字實際上會拋出異常。請參閱Java 基礎知識:異常處理以了解有關 Java 中異常處理的更多資訊。

38) Java 中的故障安全迭代器和故障快速迭代器的差異? ( 回答

提示:故障安全性不會拋出ConcurrentModificationException ,而fail-fast則在迭代時檢測到底層集合的外部變更時拋出 ConcurrentModificationException。

39) Java 中迭代器和枚舉的差別? ( 回答

提示:迭代器還使您能夠在迭代時刪除元素,而枚舉不允許這樣做。

40) Java 中的**IdentityHashMap**是什麼? 回答

提示:一個Map ,它使用==相等運算子來檢查相等性,而不是equals()方法。

41) Java 中的**String**池是什麼? 回答

提示: String文字池。請記住,它已從 JDK 7 中的永久代空間移至堆疊。

42) Java 中**Serializable**類別可以包含不可序列化欄位嗎? ( 回答**)

**提示:是的,但您需要將其設定為靜態或瞬態。

43) Java 中 this 和 super 的差別? (回答

提示:this 指的是目前實例,而 super 指的是超類別的實例。

44) Java 中**Comparator****Comparable**之間的差異? 回答 \

提示: Comparator定義自訂排序,而Comparable定義物件的自然順序,例如String字母順序。請參閱完整的 Java 大師課程以了解有關 Java 排序的更多資訊。

45) Java 中**java.util.Date****java.sql.Date**之間的差異? 回答

提示:前者包含日期和時間,後者僅包含日期部分。

46)為什麼Java中的**Object**類別中宣告了wait和notify方法回答

提示:因為它們需要僅對物件可用的鎖。

47)為什麼Java不支援多重繼承? ( 回答

提示:它不支持,因為 C++ 的體驗不好,但對於 Java 8,它在某種意義上是支援的 --- 現在 Java 中不支援Type的多重繼承。

48) Java 中檢查異常和非檢查異常的差異? ( 回答

提示:如果是選取的,則必須使用 catch 區塊處理異常,而如果是未選取的,則由您決定;編譯不會打擾你。

49) Java 中錯誤和異常的區別? (回答

提示:我厭倦了打字,請檢查答案

50) Java 中的競爭條件和死鎖的差異? ( 回答

提示:這兩種錯誤都是並發應用程式中發生的錯誤,一種是由於執行緒調度而發生的,另一種是由於編碼不良而發生的。請參閱Java 中的多執行緒和平行計算,以了解有關死鎖、競爭條件和其他多執行緒問題的更多資訊。

其他資源


結束語

謝謝,您已經讀到了文章的結尾...祝您程式設計面試順利!這當然不會很容易,但這些問題肯定會對您有所幫助。它還會鼓勵您了解更多。

如果您喜歡這篇文章,請與您的朋友和同事分享,並且不要忘記在 Twitter 上關注javinpaul

PS ---如果您需要一些免費資源來學習 Java,您可以查看我最喜歡的免費 Java 課程清單來開始您的準備。

>

PSS ---我沒有提供圖片中分享的面試問題的答案“程式碼中建立了多少個 String 物件?”你能猜出並解釋一下嗎?

而且,如果你今年正在準備 Java 面試,你還可以在 Gumroad 上取得我的 Java + Spring Interview + SQL Bundle ,使用程式碼friends20也可以獲得 20% 的折扣


原文出處:https://dev.to/javinpaul/50-core-java-interview-questions-with-answers-for-programmers-3bc


共有 0 則留言