程序員50+Java面試題

你們好!最近,我一直在分享不少Java面試問題和討論,個人許多讀者都要求將它們組合在一塊兒,以便他們能夠將它們放在同一頁面中並作好準備,這篇文章就是整理的結果。 html

本文包含50多個Java面試題,涵蓋全部重要主題,如核心Java基礎知識,Java集合框架Java多線程和併發Java IOJDBCJVM內核編碼問題面向對象編程等。java

這些問題也能夠經過各類面試遇到,但這些問題絕對不是很困難,你可能已經在電話或現場面試遇到了這些問題。mysql

這些問題也很是適合複習多線程和集合等重要主題,由於我還分享了一些有用的資源,用於進一步學習和改進,好比The Complete Java MasterClass,以填補Java技能的空白。 面試

那麼咱們這裏是初學者和2到5年經驗豐富的Java開發人員的一些常見Java問題列表:spring

Java面試題與解答

1) Java如何實現平臺獨立性?

答案:(http://www.java67.com/2012/08/how-java-achieves-platform-independence.htmlsql

提示:字節碼和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 ?

答案:(http://javarevisited.blogspot.sg/2015/01/why-override-equals-hashcode-or-tostring-java.html#axzz55oDxm8vv

提示:要符合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中方法重載和覆蓋之間的區別?

答案:(http://www.java67.com/2015/08/top-10-method-overloading-overriding-interview-questions-answers-java.html

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

29)如何防止一個類在Java中被繼承?

答案:(http://www.java67.com/2017/06/10-points-about-final-modifier-in-java.html)提示:final修飾類

30)你如何限制你class被client使用?

答案:(http://javarevisited.blogspot.sg/2016/01/why-jpa-entity-or-hibernate-persistence-should-not-be-final-in-java.html

提示:使構造函數爲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?

答案:(http://javarevisited.blogspot.sg/2016/07/difference-in-string-pool-between-java6-java7.html#axzz4pGGwsyna

提示:一個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?

答案:(http://www.java67.com/2013/08/difference-between-comparator-and-comparable-in-java-interface-sorting.html

提示: 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

(未經贊成,請勿轉載) 

相關文章
相關標籤/搜索