你們好!最近,我一直在分享不少Java面試問題和討論,個人許多讀者都要求將它們組合在一塊兒,以便他們能夠將它們放在同一頁面中並作好準備,這篇文章就是整理的結果。 html
本文包含50多個Java面試題,涵蓋全部重要主題,如核心Java基礎知識,Java集合框架,Java多線程和併發,Java IO,JDBC,JVM內核,編碼問題, 面向對象編程等。java
這些問題也能夠經過各類面試遇到,但這些問題絕對不是很困難,你可能已經在電話或現場面試遇到了這些問題。mysql
這些問題也很是適合複習多線程和集合等重要主題,由於我還分享了一些有用的資源,用於進一步學習和改進,好比The Complete Java MasterClass,以填補Java技能的空白。 面試
那麼咱們這裏是初學者和2到5年經驗豐富的Java開發人員的一些常見Java問題列表:spring
答案:(http://www.java67.com/2012/08/how-java-achieves-platform-independence.html)sql
提示:字節碼和Java虛擬機編程
答案:(http://javarevisited.blogspot.sg/2012/12/how-classloader-works-in-java.html#axzz59AWpr6cb)數組
提示:加載類的字節碼的JVM的一部分。你能夠本身寫。緩存
答案:(http://javarevisited.blogspot.sg/2013/04/how-to-check-if-number-is-even-or-odd.html#axzz59AWpr6cb)安全
提示:你可使用位運算符,例如按位AND &,記住,偶數在二進制格式的末尾爲0,而奇數在最後爲1。
答案:(http://www.java67.com/2012/07/difference-between-arraylist-hashset-in-java.html)
提示: List 和 Set 之間的全部差別都適用於這裏,例如排序,重複,隨機搜索等。
答案:(http://www.java67.com/2016/04/why-double-checked-locking-was-broken-before-java5.html)
提示:兩次檢查是否初始化實例,第一次沒有鎖,第二次有鎖。
答案:(http://javarevisited.blogspot.sg/2012/12/how-to-create-thread-safe-singleton-in-java-example.html)
提示:許多方法,例如使用Enum或使用雙重檢查鎖定模式或使用嵌套靜態類。
答案:(http://www.java67.com/2012/08/what-is-volatile-variable-in-java-when.html)提示:當須要指示JVM一個變量能夠被多個線程修改,並提示JVM不緩存其值的時候。
答案:(http://www.java67.com/2012/08/what-is-transient-variable-in-java.html)
提示:當你想在類中建立一個不可序列化的變量,而它實現了Serializable接口時。換句話說,你能夠將它用於你不想保存其值的變量。請參閱 The Complete Java MasterClass 以瞭解Java中的transient變量。
答案:(http://www.java67.com/2012/11/difference-between-transient-vs-volatile-modifier-variable-java.html)
提示:徹底不一樣,一個用於序列化,另外一個用於併發。
答案:(http://www.java67.com/2012/10/difference-between-serializable-vs-externalizable-interface.html)
提示:Externalizable使你能夠更好地控制序列化過程。
答案:(http://www.java67.com/2013/08/can-we-override-private-method-in-java-inner-class.html)
提示:不能,由於它在子類中不可見,這是在Java覆蓋方法的主要要求。
答案:(http://javarevisited.blogspot.sg/2010/10/difference-between-hashmap-and.html#axzz53B6SD769)
提示:最重要的是 Hashtable是同步的,而 HashMap 不是。與之相比,它也是傳統和緩慢的HashMap。
答案:(http://javarevisited.blogspot.sg/2012/04/difference-between-list-and-set-in-java.html#axzz53n9YK0Mb)
提示: List 容許重複。 Set 是無序的,不容許有重複的元素。
答案:(http://www.java67.com/2012/09/arraylist-vs-vector-in-java-interview.html)
提示:不少,但最重要的 ArrayList 是非同步和快速的; 而 Vector 是同步和很慢的。它也是像Hashtable同樣的傳統類。
答案:(http://javarevisited.blogspot.sg/2011/04/difference-between-concurrenthashmap.html#axzz4qw7RoNvw)
提示:更具可擴展性
答案:(http://javarevisited.blogspot.sg/2017/08/top-10-java-concurrenthashmap-interview.html#axzz50U9xyqbo)
提示:經過將映map分爲段而且僅在寫入操做期間鎖定。
答案:(http://www.java67.com/2013/06/how-get-method-of-hashmap-or-hashtable-works-internally.html)
提示:equals和hashcode
答案:(http://www.java67.com/2012/08/what-are-difference-between-wait-and.html)
提示:該 wait() 方法釋放鎖或監視器,而sleep則不釋放。
答案:(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提供有關線程基礎知識的更多信息。
提示:要符合equals和hashcode約定,若是你將對象存儲到集合類中,則須要這樣作,例如 HashMap 或 ArrayList。
答案:(http://www.java67.com/2017/08/top-10-java-hashmap-interview-questions.html)
提示:觸發從新調整大小的閾值 , HashMap 通常爲0.75,意味着 若是HashMap 到達75%存儲則調整自身大小。
答案:(http://www.java67.com/2012/12/difference-between-arraylist-vs-LinkedList-java.html)
提示:與數組和鏈表相同,一個容許隨機搜索,而另外一個則不容許。在鏈表上更容易插入和刪除,但在array上查詢很容易。請參閱 Java Fundamentals:Collections Richard Warburton關於Pluralsight的課程,以瞭解有關Java中基本Collection數據結構的更多信息。
答案:(http://www.java67.com/2012/08/difference-between-countdownlatch-and-cyclicbarrier-java.html)
提示:你能夠在CyclicBarrier 打破後重復使用 ,但CountDownLatch 在計數達到零後沒法重複使用 。
答案:(http://www.java67.com/2016/01/7-differences-between-extends-thread-vs-implements-Runnable-java.html)
提示:永遠
答案:(http://www.java67.com/2014/04/what-java-developer-should-know-about-Enumeration-type-in-Java.html)
提示:這意味着你不能將不一樣枚舉類型的實例分配給Enum變量。例如,若是你有像DayOfWeek 這樣的變量, 那麼你不能用DayOfMonth 枚舉賦值 。
答案:(http://javarevisited.blogspot.sg/2012/07/auto-boxing-and-unboxing-in-java-be.html#axzz59AWpr6cb)
提示:使用 valueOf() 方法
答案:(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環境變量。
提示:覆蓋發生在子類,而重載發生在同一個類中。此外,覆蓋是運行時活動,而重載在編譯時解析。
答案:(http://www.java67.com/2017/06/10-points-about-final-modifier-in-java.html)提示:final修飾類
提示:使構造函數爲private或從構造函數中拋出異常
答案:(http://www.java67.com/2016/10/5-difference-between-stringbuffer.html)
提示: StringBuilder 不一樣步而 StringBuffer 同步。
答案:(http://www.java67.com/2014/04/difference-between-polymorphism-and-Inheritance-java-oops.html)
提示:繼承容許代碼重用並構建類之間的關係,這是多態所須要的,它提供動態行爲。請參閱 Java Fundamentals: Object-Oriented Design
以瞭解有關OOP功能的更多信息。
答案:(http://www.java67.com/2012/08/can-we-override-static-method-in-java.html)
提示:不能,由於覆蓋在運行時解析,而靜態方法調用在編譯時解析。
答案:(http://www.java67.com/2012/08/can-we-override-private-method-in-java.html)
提示:能,在同一個類但不在類以外
答案:(http://www.java67.com/2017/08/difference-between-abstract-class-and-interface-in-java8.html)
提示:從Java 8開始,差別很模糊。可是,Java類仍然能夠實現多個接口,但只能擴展一個類。
答案:(http://www.java67.com/2012/09/dom-vs-sax-parser-in-java-xml-parsing.html)
提示:DOM在內存中加載整個XML文件,而SAX則沒有。它是一個基於事件的解析器,可用於解析大文件,但DOM速度很快,應該是小文件的首選。
答案:(http://www.java67.com/2012/10/difference-between-throw-vs-throws-in.html)
提示:throws聲明一個方法在出現錯誤時能夠拋出的異常,但throw關鍵字實際上會引起異常。請參閱Java Fundamentals:Exception Handling以瞭解有關 Java中異常處理的更多信息。
答案:(http://www.java67.com/2015/06/what-is-fail-safe-and-fail-fast-iterator-in-java.html)
提示: 當它們迭代檢測到底層集合的外部更改時,fail-fast拋出 ConcurrentModificationException,fail-safe不會拋出 。
答案:(http://javarevisited.blogspot.sg/2010/10/what-is-difference-between-enumeration.html#axzz59AWpr6cb)
提示:Iterator還容許你在迭代時刪除元素,而Enumeration不容許這樣作。
答案:(http://www.java67.com/2016/09/difference-between-identityhashmap-weakhashmap-enummap-in-java.html)
提示:一個 Map,它使用 == 相等運算符來檢查相等而不是 equals() 方法。
提示:一個String 字符串池 。它已經從JDK 7中的perm gen空間轉移到堆。
答案:(http://javarevisited.blogspot.sg/2016/09/how-to-serialize-object-in-java-serialization-example.html)
提示:能夠,但你須要將其設置爲static或transient。
答案:(http://www.java67.com/2013/06/difference-between-this-and-super-keyword-java.html)
提示:this指的是當前實例,而super指的是超類的一個實例。
提示: Comparator 定義自定義排序,而Comparable 定義對象的天然順序,例如String的字母順序 。有關使用Java 進行排序的詳細信息,請參閱 The Complete Java MasterClass。
答案:(http://javarevisited.blogspot.sg/2012/04/difference-between-javautildate-and.html)
提示:前者包含日期和時間,後來只包含日期部分。
答案:(http://javarevisited.blogspot.sg/2012/02/why-wait-notify-and-notifyall-is.html)
提示:任何對象均可做爲鎖。
答案:(http://javarevisited.blogspot.sg/2011/07/why-multiple-inheritances-are-not.html)
答案:(http://javarevisited.blogspot.sg/2011/12/checked-vs-unchecked-exception-in-java.html)
提示:若是是檢查異常,則必須使用catch塊處理異常,而若是是未檢查,則由你決定; 編譯不會提示你。
答案:(http://www.java67.com/2012/12/difference-between-error-vs-exception.html)
答案:(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
(未經贊成,請勿轉載)