大家好!最近,我一直在分享很多Java面試問題和討論,我的許多讀者都要求將它們組合在一起,以便他們可以將它們放在同一頁面中並做好準備,這篇文章就是整理的結果。
本文包含50多個Java面試題,涵蓋所有重要主題,如核心Java基礎知識,Java集合框架,Java多執行緒和併發,Java IO,JDBC,JVM核心,編碼問題, 物件導向程式設計等。
這些問題也可以通過各種面試遇到,但這些問題絕對不是很困難,你可能已經在電話或現場面試遇到了這些問題。
這些問題也非常適合複習多執行緒和集合等重要主題,因為我還分享了一些有用的資源,用於進一步學習和改進,比如The Complete Java MasterClass,以填補Java技能的空白。
那麼我們這裡是初學者和2到5年經驗豐富的Java開發人員的一些常見Java問題列表:
Java面試題與解答
1) Java如何實現平臺獨立性?
答案:(http://www.java67.com/2012/08/how-java-achieves-platform-independence.html)
提示:位元組碼和Java虛擬機器
2) 什麼是Java ClassLoader?
答案:(http://javarevisited.blogspot.sg/2012/12/how-classloader-works-in-java.html#axzz59AWpr6cb)
提示:載入類的位元組碼的JVM的一部分。你可以自己寫。
3) 寫一個Java程式來判斷數字是偶數還是奇數?
答案:(http://javarevisited.blogspot.sg/2013/04/how-to-check-if-number-is-even-or-odd.html#axzz59AWpr6cb)
提示:你可以使用位運算子,例如按位AND &,記住,偶數在二進位制格式的末尾為0,而奇數在最後為1。
4) Java ArrayList和HashSet 之間的區別 ?
答案:(http://www.java67.com/2012/07/difference-between-arraylist-hashset-in-java.html)
提示: List 和 Set 之間的所有差異都適用於這裡,例如排序,重複,隨機搜尋等。
5) 單例模式中的雙重檢查是什麼?
答案:(http://www.java67.com/2016/04/why-double-checked-locking-was-broken-before-java5.html)
提示:兩次檢查是否初始化例項,第一次沒有鎖,第二次有鎖。
6) 如何在Java中建立執行緒安全的單例?
答案:(http://javarevisited.blogspot.sg/2012/12/how-to-create-thread-safe-singleton-in-java-example.html)
提示:許多方法,例如使用Enum或使用雙重檢查鎖定模式或使用巢狀靜態類。
7) 何時在Java中使用volatile變數?
答案:(http://www.java67.com/2012/08/what-is-volatile-variable-in-java-when.html)提示:當需要指示JVM一個變數可以被多個執行緒修改,並提示JVM不快取其值的時候。
8) 何時在Java中使用transient變數?
答案:(http://www.java67.com/2012/08/what-is-transient-variable-in-java.html)
提示:當你想在類中建立一個不可序列化的變數,而它實現了Serializable介面時。換句話說,你可以將它用於你不想儲存其值的變數。請參閱 The Complete Java MasterClass 以瞭解Java中的transient變數。
9) Java中transient變數和volatile變數之間的區別?
答案:(http://www.java67.com/2012/11/difference-between-transient-vs-volatile-modifier-variable-java.html)
提示:完全不同,一個用於序列化,另一個用於併發。
10) Java中Serializable和Externalizable之間的區別?
答案:(http://www.java67.com/2012/10/difference-between-serializable-vs-externalizable-interface.html)
提示:Externalizable使你可以更好地控制序列化過程。
11) 我們可以覆蓋Java中的私有方法嗎?
答案:(http://www.java67.com/2013/08/can-we-override-private-method-in-java-inner-class.html)
提示:不能,因為它在子類中不可見,這是在Java覆蓋方法的主要要求。
12) Java Hashtable 和 HashMap之間的區別 ?
答案:(http://javarevisited.blogspot.sg/2010/10/difference-between-hashmap-and.html#axzz53B6SD769)
提示:最重要的是 Hashtable是同步的,而 HashMap 不是。與之相比,它也是傳統和緩慢的HashMap。
13) Java List和 Set 之間的區別 ?
答案:(http://javarevisited.blogspot.sg/2012/04/difference-between-list-and-set-in-java.html#axzz53n9YK0Mb)
提示: List 允許重複。 Set 是無序的,不允許有重複的元素。
14)Java ArrayList 和 Vector 之間的差異
答案:(http://www.java67.com/2012/09/arraylist-vs-vector-in-java-interview.html)
提示:很多,但最重要的 ArrayList 是非同步和快速的; 而 Vector 是同步和很慢的。它也是像Hashtable一樣的傳統類。
15)Java Hashtable 和 ConcurrentHashMap 之間的區別 ?
答案:(http://javarevisited.blogspot.sg/2011/04/difference-between-concurrenthashmap.html#axzz4qw7RoNvw)
提示:更具可擴充套件性
16) ConcurrentHashMap 如何實現可擴充套件性?
答案:(http://javarevisited.blogspot.sg/2017/08/top-10-java-concurrenthashmap-interview.html#axzz50U9xyqbo)
提示:通過將映map分為段並且僅在寫入操作期間鎖定。
17)對於一個 Object 被用作HashMap 的Key, 哪兩個方法你需要覆蓋 ?
答案:(http://www.java67.com/2013/06/how-get-method-of-hashmap-or-hashtable-works-internally.html)
提示:equals和hashcode
18)Java中wait和sleep的區別?
答案:(http://www.java67.com/2012/08/what-are-difference-between-wait-and.html)
提示:該 wait() 方法釋放鎖或監視器,而sleep則不釋放。
19) Java notify 和 notifyAll 之間的區別 ?
答案:(http://www.java67.com/2013/03/difference-between-wait-vs-notify-vs-notifyAll-java-thread.html)
提示: notify 通知一個正在等待該鎖的隨機執行緒,而 notifyAll 通知所有等待的執行緒。如果你確定只有一個執行緒正在等待,那麼使用 notify,否則 notifyAll 更好。請參閱 Threading Essentials Mini-Course由Java Champion Heinz Kabutz提供有關執行緒基礎知識的更多資訊。
20)為什麼要和equals() 一起在Java中覆蓋hashcode ?
提示:要符合equals和hashcode約定,如果你將物件儲存到集合類中,則需要這樣做,例如 HashMap 或 ArrayList。
21)HashMap load factor是什麼意思?
答案:(http://www.java67.com/2017/08/top-10-java-hashmap-interview-questions.html)
提示:觸發重新調整大小的閾值 , HashMap 一般為0.75,意味著 如果HashMap 到達75%儲存則調整自身大小。
22) Java ArrayList 和 LinkedList 之間的區別 ?
答案:(http://www.java67.com/2012/12/difference-between-arraylist-vs-LinkedList-java.html)
提示:與陣列和連結串列相同,一個允許隨機搜尋,而另一個則不允許。在連結串列上更容易插入和刪除,但在array上查詢很容易。請參閱 Java Fundamentals:Collections Richard Warburton關於Pluralsight的課程,以瞭解有關Java中基本Collection資料結構的更多資訊。
23) Java CountDownLatch 和 CyclicBarrier之間的區別 ?
答案:(http://www.java67.com/2012/08/difference-between-countdownlatch-and-cyclicbarrier-java.html)
提示:你可以在CyclicBarrier 打破後重復使用 ,但CountDownLatch 在計數達到零後無法重複使用 。
24)什麼時候在Java中使用 Runnable vs Thread?
答案:(http://www.java67.com/2016/01/7-differences-between-extends-thread-vs-implements-Runnable-java.html)
提示:永遠
25)Enum在Java中的型別安全是什麼意思?
答案:(http://www.java67.com/2014/04/what-java-developer-should-know-about-Enumeration-type-in-Java.html)
提示:這意味著你不能將不同列舉型別的例項分配給Enum變數。例如,如果你有像DayOfWeek 這樣的變數, 那麼你不能用DayOfMonth 列舉賦值 。
26)Java中Integer的自動裝箱如何實現?
答案:(http://javarevisited.blogspot.sg/2012/07/auto-boxing-and-unboxing-in-java-be.html#axzz59AWpr6cb)
提示:使用 valueOf() 方法
27) Java 中PATH 和 Classpath 之間的區別 ?
答案:(http://www.java67.com/2012/08/what-is-path-and-classpath-in-java-difference.html)
提示: PATH 由作業系統使用,而Classpath 由JVM用於定位Java二進位制檔案(例如JAR檔案或類檔案)。見Java Fundamentals: The Core Platform更多地瞭解 PATH, Classpath和其他Java環境變數。
28)Java中方法過載和覆蓋之間的區別?
提示:覆蓋發生在子類,而過載發生在同一個類中。此外,覆蓋是執行時活動,而過載在編譯時解析。
29)如何防止一個類在Java中被繼承?
答案:(http://www.java67.com/2017/06/10-points-about-final-modifier-in-java.html)提示:final修飾類
30)你如何限制你class被client使用?
提示:使建構函式為private或從建構函式中丟擲異常
31) Java StringBuilder 和 StringBuffer之間的區別 ?
答案:(http://www.java67.com/2016/10/5-difference-between-stringbuffer.html)
提示: StringBuilder 不同步而 StringBuffer 同步。
32)Java中多型和繼承的區別?
答案:(http://www.java67.com/2014/04/difference-between-polymorphism-and-Inheritance-java-oops.html)
提示:繼承允許程式碼重用並構建類之間的關係,這是多型所需要的,它提供動態行為。請參閱 Java Fundamentals: Object-Oriented Design
以瞭解有關OOP功能的更多資訊。
33)我們可以覆蓋Java中的靜態方法嗎?
答案:(http://www.java67.com/2012/08/can-we-override-static-method-in-java.html)
提示:不能,因為覆蓋在執行時解析,而靜態方法呼叫在編譯時解析。
34)我們可以在Java中訪問私有方法嗎?
答案:(http://www.java67.com/2012/08/can-we-override-private-method-in-java.html)
提示:能,在同一個類但不在類之外
35)Java中介面和抽象類之間的區別?
答案:(http://www.java67.com/2017/08/difference-between-abstract-class-and-interface-in-java8.html)
提示:從Java 8開始,差異很模糊。但是,Java類仍然可以實現多個介面,但只能擴充套件一個類。
36)Java中的DOM和SAX解析器之間的區別?
答案:(http://www.java67.com/2012/09/dom-vs-sax-parser-in-java-xml-parsing.html)
提示:DOM在記憶體中載入整個XML檔案,而SAX則沒有。它是一個基於事件的解析器,可用於解析大檔案,但DOM速度很快,應該是小檔案的首選。
37)Java中throw和throws關鍵字的區別?
答案:(http://www.java67.com/2012/10/difference-between-throw-vs-throws-in.html)
提示:throws宣告一個方法在出現錯誤時可以丟擲的異常,但throw關鍵字實際上會引發異常。請參閱Java Fundamentals:Exception Handling以瞭解有關 Java中異常處理的更多資訊。
38)Java中的fail-safe和fail-fast 迭代器之間的區別?
答案:(http://www.java67.com/2015/06/what-is-fail-safe-and-fail-fast-iterator-in-java.html)
提示: 當它們迭代檢測到底層集合的外部更改時,fail-fast丟擲 ConcurrentModificationException,fail-safe不會丟擲 。
39)Java中Iterator和Enumeration之間的區別?
答案:(http://javarevisited.blogspot.sg/2010/10/what-is-difference-between-enumeration.html#axzz59AWpr6cb)
提示:Iterator還允許你在迭代時刪除元素,而Enumeration不允許這樣做。
40)Java中什麼是 IdentityHashMap ?
答案:(http://www.java67.com/2016/09/difference-between-identityhashmap-weakhashmap-enummap-in-java.html)
提示:一個 Map,它使用 == 相等運算子來檢查相等而不是 equals() 方法。
41)Java中什麼是 String pool?
提示:一個String 字串池 。它已經從JDK 7中的perm gen空間轉移到堆。
42)在Java中一個Serializable 類可以包含一個不可序列化的欄位嗎?
答案:(http://javarevisited.blogspot.sg/2016/09/how-to-serialize-object-in-java-serialization-example.html)
提示:可以,但你需要將其設定為static或transient。
43)Java this和super之間的區別?
答案:(http://www.java67.com/2013/06/difference-between-this-and-super-keyword-java.html)
提示:this指的是當前例項,而super指的是超類的一個例項。
44) Java 中Comparator 和 之間的區別 Comparable?
提示: Comparator 定義自定義排序,而Comparable 定義物件的自然順序,例如String的字母順序 。有關使用Java 進行排序的詳細資訊,請參閱 The Complete Java MasterClass。
45) Java java.util.Date 和 java.sql.Date 之間的區別 ?
答案:(http://javarevisited.blogspot.sg/2012/04/difference-between-javautildate-and.html)
提示:前者包含日期和時間,後來只包含日期部分。
46)為什麼wait和notify方法在Java 中的Object 類中宣告 ?
答案:(http://javarevisited.blogspot.sg/2012/02/why-wait-notify-and-notifyall-is.html)
提示:任何物件都可作為鎖。
47)為什麼Java不支援多重繼承?
答案:(http://javarevisited.blogspot.sg/2011/07/why-multiple-inheritances-are-not.html)
48)Java中檢查和未檢查的異常之間的區別?
答案:(http://javarevisited.blogspot.sg/2011/12/checked-vs-unchecked-exception-in-java.html)
提示:如果是檢查異常,則必須使用catch塊處理異常,而如果是未檢查,則由你決定; 編譯不會提示你。
49)Java中的錯誤和異常之間的區別?
答案:(http://www.java67.com/2012/12/difference-between-error-vs-exception.html)
50)Java中的競爭條件和死鎖之間的區別?
答案:(http://javarevisited.blogspot.sg/2012/02/what-is-race-condition-in.html#axzz59AbkWuk9)
更多資源
Java Interview Guide: 200+ Interview Questions and Answers
Spring Framework Interview Guide - 200+ Questions & Answers
Preparing For a Job Interview By John Sonmez
Java Programming Interview Exposed by Markham
Cracking the Coding Interview - 189 Questions and Answers
Data Structure and Algorithms Analysis for Job Interviews
130+ Java Interview Questions of Last 5 Years
感謝你閱讀本文!如果你喜歡這些核心Java問題,請與你的朋友和同事分享。如果你有任何問題或反饋,請在下面留言。
更多文章歡迎訪問: http://www.apexyun.com
公眾號:銀河系1號
聯絡郵箱:public@space-explore.com
(未經同意,請勿轉載)