Java問題彙總,持續更新到GitHub

目錄介紹

  • 00.Java問題彙總
  • 01.具體問題

好消息

  • 博客筆記大彙總【16年3月到至今】,包括Java基礎及深刻知識點,Android技術博客,Python學習筆記等等,還包括平時開發中遇到的bug彙總,固然也在工做之餘收集了大量的面試題,長期更新維護而且修正,持續完善……開源的文件是markdown格式的!同時也開源了生活博客,從12年起,積累共計N篇[近100萬字,陸續搬到網上],轉載請註明出處,謝謝!
  • 連接地址:github.com/yangchong21…
  • 若是以爲好,能夠star一下,謝謝!固然也歡迎提出建議,萬事起於忽微,量變引發質變!

00.Java問題彙總

01.具體問題

1.1 01.Java基礎部分問題(19個)

  • 1.0.0.1 請手寫equal方法【String類】,講講具體的原理?Object類的equla方法是怎樣的?
  • 1.0.0.2 請說下String與StringBuffer區別,StringBuffer底部如何實現?String類能夠被繼承嗎,爲何?
  • 1.0.0.3 String a=""和String a=new String("")的的關係和異同?String的建立機制如何理解?
  • 1.0.0.4 爲何 Java 中的 String 是不可變的(Immutable)?字符串設計和實現考量?String不可變的好處?
  • 1.0.0.5 static關鍵字能夠修飾什麼?static使用的注意事項有哪些?static關鍵字的特色?使用static存在什麼問題?
  • 1.0.0.6 static變量存儲位置是哪裏?靜態變量的生命週期?靜態變量什麼時候銷燬?靜態引用的對象回收如何理解?
  • 1.0.0.7 訪問修飾符public,private,protected,以及不寫(默認)時的區別?訪問修飾符底層怎麼實現訪問權限管理?
  • 1.0.0.8 靜態變量和實例變量的區別?成員變量與局部變量的區別有那些?外部類和內部類有何區別,生命週期是怎樣的?
  • 1.0.0.9 如何實現對象克隆?克隆有哪些方式?深克隆和淺克隆有何區別?深克隆和淺克隆分別說的是什麼意思?
  • 1.0.1.0 int和Integer的區別?裝箱、拆箱什麼含義?何時裝箱/拆箱?裝箱和拆箱是如何實現的?
  • 1.0.1.1 Object有哪些公有方法?Object類toString()返回的是什麼?爲何說類必定要實現Cloneable接口才能夠克隆?
  • 1.0.1.2 final,finally,finalize有什麼不一樣?finally什麼狀況下不會被執行?java.lang 包下爲何要設置final?
  • 1.0.1.3 爲何要用通配符?上界通配符和下界通配符注意要點?什麼是無界通配符?如何理解泛型編譯器類型檢查?
  • 1.0.1.4 什麼是泛型擦除,可否經過開發中實際案例說下?如何獲取泛型的具體的類型【反射】?
  • 1.0.1.5 如何驗證int類型是否線程安全?那些類型是線程安全的?舉一個線程安全的例子【AtomicInteger】?
  • 1.0.1.6 Java序列話中若是有些字段不想進行序列化怎麼辦?Java序列化機制底層實現原理是怎樣的?
  • 1.0.1.8 原始數據類型和引用類型侷限性?爲什麼要引用基本數據包裝類?基本數據類型必定存儲在棧中嗎?
  • 1.0.1.9 new Integer(123) 與 Integer.valueOf(123)有何區別,請從底層實現分析二者區別?
  • 1.0.2.0 instanceof它的做用是什麼?在使用過程當中注意事項有哪些?它底層原理是如何實現的,說說你的理解?

1.2 02.Java面向對象問題(11個)

  • 2.0.0.1 面向對象編程的四大特性及其含義?封裝、繼承、多態分別是什麼?爲什麼要封裝?爲何是單繼承而不能多繼承呢?
  • 2.0.0.2 重載和重寫的區別?重載和重寫綁定機制有何區別?父類的靜態方法可否被子類重寫?重寫是動態綁定,如何理解機制?
  • 2.0.0.3 什麼是綁定?靜態和動態綁定如何區別?動態綁定編譯原理是什麼?動態綁定運行原理是什麼?
  • 2.0.0.4 接口和抽象類的區別是什麼?接口的意義是什麼?抽象類的意義是什麼?如何選擇抽象類和接口?
  • 2.0.0.5 爲何內部類調用的外部變量必須是final修飾的?局部變量對垃圾回收機制有什麼樣的影響?
  • 2.0.0.7 什麼是多態?多態的實現方式有哪些?多態有哪些弊端?Java實現多態有哪些必要條件?多態的實現原理?
  • 2.0.0.9 靜態變量和成員變量的區別?代碼塊有哪些?構造代碼塊和構造方法哪個先執行?
  • 2.0.0.8 將不一樣對象分類的服務方法進行抽象,把業務邏輯的緊耦合關係拆開,實現代碼的隔離保證了方便的擴展?
  • 2.0.1.0 抽象類具備什麼特色?抽象類和普通類有何區別?抽象類能夠new嗎?會出現什麼問題?
  • 2.0.1.1 什麼是內部類,有哪些?靜態內部類和非靜態內部類的區別?內部類做用的做用主要是什麼?內部類和外部類聯繫?

1.3 03.Java數據結構問題(20個)

  • 3.0.0.1 在arrayList中System.arraycopy()和Arrays.copyOf()方法區別聯繫?System.arraycopy()和Arrays.copyOf()代碼說明?
  • 3.0.0.2 SparseArray基本介紹,相比HashMap爲何性能會好?
  • 3.0.0.3 Arrays和Collections 對於sort的不一樣實現原理?說一說它們的區別……
  • 3.0.0.4 Java集合框架中有哪些類?都有什麼特色?Java集合的快速失敗機制 「fail-fast」?
  • 3.0.0.5 ArrayList,Vector和LinkList的區別,底層分別是怎麼實現的,存儲空間是如何擴容的?什麼是加載因子?
  • 3.0.0.6 如何理解ArrayList的擴容消耗?Arrays.asList方法後的List能夠擴容嗎?ArrayList如何序列化?
  • 3.0.0.7 如何理解list集合讀寫機制和讀寫效率?什麼是CopyOnWriteArrayList,它與ArrayList有何不一樣?
  • 3.0.1.0 HashSet和TreeSet的區別?是如何保證惟一值的,底層怎麼作到的?
  • 3.0.1.5 HashMap和Hashtable的區別?HashMap在put、get元素的過程?體現了什麼數據結構?
  • 3.0.1.6 如何保證HashMap線程安全?底層怎麼實現的?HashMap是有序的嗎?如何實現有序?
  • 3.0.1.7 HashMap存儲兩個對象的hashcode相同會發生什麼?若是兩個鍵的hashcode相同,你如何獲取值對象?
  • 3.0.1.8 HashMap爲何不直接使用hashCode()處理後的哈希值直接做爲table的下標?
  • 3.0.1.9 爲何HashMap中String、Integer這樣的包裝類適合做爲K?爲啥不用其餘做key值?
  • 3.0.2.0 HashMap是如何擴容的?如何理解HashMap的大小超過了負載因子定義的容量?從新調整HashMap大小存在什麼問題嗎?

1.4 04.Java Io流問題(9個)

  • 4.0.0.1 說一下Java IO裏面的常見類,字節流,字符流、接口、實現類、方法阻塞?
  • 4.0.0.2 什麼是比特(Bit),什麼是字節(Byte),什麼是字符(Char),它們長度是多少,各有什麼區別?
  • 4.0.0.3 字符流和字節流有什麼區別?如何選擇字節流或者字符流?什麼是緩衝區,有什麼做用?
  • 4.0.0.4 IO流中用到哪些模式?談一談IO流中用到的適配器模式和裝飾者模式的做用優點?
  • 4.0.0.5 說一下對NIO的理解?NIO和IO的主要區別?NIO和IO如何影響應用程序的設計?
  • 4.0.0.9 如何實現對象克隆?克隆有哪些方式?深克隆和淺克隆有何區別?深克隆和淺克隆分別說的是什麼意思?
  • 4.0.1.0 淺拷貝會建立新的對象嗎?對於基本類型拷貝的是什麼?怎麼樣實現淺拷貝,淺拷貝先後對象地址值會同樣嗎?
  • 4.0.1.1 對字節流進行大量的從硬盤讀取,要用那個流,爲何?有什麼須要注意的問題?

1.5 05.Java多線程問題(22個)

  • 5.0.0.1 線程池具備什麼優勢和缺點?爲何說開啓大量的線程,會下降程序的性能,那麼該如何作才能下降性能?
  • 5.0.0.3 線程中start和run方法有什麼區別?wait和sleep方法的不一樣?sleep() 、join()、yield()有什麼區別?
  • 5.0.0.4 用Java手寫一個會致使死鎖的程序,遇到這種問題解決方案是什麼?如何預防死鎖的產生?
  • 5.0.0.5 ThreadLocal(線程變量副本)這個類的做用是什麼?ThreadLocal爲什麼要設計key存儲當前的threadlocal對象?
  • 5.0.0.6 什麼是線程安全?線程安全有那幾個級別?保障線程安全有哪些手段?ReentrantLock和synchronized的區別?
  • 5.0.0.7 Volatile和Synchronized各自用途是什麼?有哪些不一樣點?Synchronize在編譯時如何實現鎖機制?
  • 5.0.0.8 wait()和sleep()的區別?各自有哪些使用場景?怎麼喚醒一個阻塞的線程?Thread.sleep(0)的做用是啥?
  • 5.0.0.9 同步和非同步、阻塞和非阻塞的概念?分別有哪些使用場景?說說你是如何理解他們之間的區別?
  • 5.0.1.0 線程的有哪些狀態?請繪製該狀態的流程圖?講一下線程的執行生命週期流程?線程若是出現了運行時異常會怎麼樣?
  • 5.0.1.1 synchronized鎖什麼?synchronized同步代碼塊還有同步方法本質上鎖住的是誰?爲何?
  • 5.0.1.3 CAS是什麼?CAS原理是什麼?CAS實現原子操做會出現什麼問題?對於多個共享變量CAS能夠保證原子性嗎?
  • 5.0.1.4 假若有n個網絡線程,須要當n個網絡線程完成以後,再去作數據處理,你會怎麼解決這個問題?
  • 5.0.1.5 Runnable接口和Callable接口的區別?Callable中是如何處理線程異常的狀況?如何監測runnable異常?
  • 5.0.1.6 若是提交任務時,線程池隊列已滿,這時會發生什麼?線程調度算法是什麼?
  • 5.0.1.7 什麼是樂觀鎖和悲觀鎖?悲觀鎖機制存在哪些問題?樂觀鎖是如何實現衝突檢測和數據更新?
  • 5.0.1.8 線程類的構造方法、靜態塊是被哪一個線程調用的?同步方法和同步塊,哪一個是更好的選擇?同步的範圍越少越好嗎?
  • 5.0.1.9 synchonized(this)和synchonized(object)區別?Synchronize做用於方法和靜態方法區別?
  • 5.0.2.0 volatile是什麼?volatile的用途是什麼?線程在工做內存進行操做後什麼時候會寫到主內存中?
  • 5.0.2.1 被volatile修飾變量在多線程下如何獲最新值?理解volatile的happens-before關係?多線程下執行volatile讀寫後的內存狀態?
  • 5.0.2.2 Volatile實現原理?一個int變量,用volatile修飾,多線程去操做++,線程安全嗎?那如何才能保證i++線程安全?
  • 5.0.2.3 在Java內存模型有哪些能夠保證併發過程的原子性、可見性和有序性的措施?

1.6 06.Java 虛擬機問題(13個)

  • 6.0.0.1 運行時數據區域有哪些?Java虛擬機棧是作什麼的?本地方法棧又是作什麼的?
  • 6.0.0.2 對象的內存佈局?對象的訪問定位方式有哪些?使用指針訪問和使用句柄訪問各具備何優點?
  • 6.0.0.3 說一下對象的建立過程?變量建立過程种放在虛擬機哪裏?變量[區別靜態變量]何時回收?
  • 6.0.0.4 OutOfMemoryError異常在哪些數據區域中可能會出現?分別說一下這個數據區域出現OOM的場景和原因?
  • 6.0.0.6 Java中堆和棧的區別?分別寫出堆內存溢出與棧內存溢出的程序?以及如何解決溢出代碼方案?
  • 6.0.0.7 若是對象的引用被置爲null,垃圾收集器是否會當即釋放對象佔用的內存?
  • 6.0.0.8 java中垃圾收集的方法有哪些?如何實現檢測垃圾?引用計數法有什麼不足,說下見解?
  • 6.0.1.1 如和判斷一個對象是否存活?引用計數法和可達性算法哪一個更加好?如何理解一個對象不必定會被回收?
  • 6.0.1.2 Class.forName() 和ClassLoader.loadClass()區別?實際開發你用那種,爲何?
  • 6.0.1.3 Java對象的訪問定位方式有哪些?這些訪問方式各有何利弊?如何理解經過句柄訪問方式?
  • 6.0.1.4 內存回收主要是針對那塊?如何判斷對象是否死亡?如何判斷一個常量是廢棄常量?如何判斷一個類是無用的類?

1.7 07.Java 類的加載問題(8個)

  • 7.0.0.1 Java內存模型裏包含什麼?程序計數器的做用是什麼?常量池的做用是什麼?
  • 7.0.0.2 什麼是類加載器?類加載器工做機制是什麼?類加載器種類?什麼是雙親委派機制?
  • 7.0.0.3 何時發生類初始化?類初始化後對類的作了什麼,加載變量,常量,方法都內存那個位置?
  • 7.0.0.4 經過下面一個代碼案例理解類加載順序?當遇到 類名.變量 加載時,只加載變量所在類嗎?
  • 7.0.0.5 看下面這段代碼,說一下準備階段和初始化階段常量變化的原理?變量初始化過程?
  • 7.0.0.7 說收垃圾回收機制?爲何引用計數器斷定對象是否回收不可行?有哪些引用類型?
  • 7.0.0.8 談談Java的類加載過程?加載作了什麼?驗證作了什麼?準備作了什麼?解析作了什麼?初始化作了什麼?

1.8 08.Java 反射問題(6個)

  • 8.0.0.1 反射的原理是什麼?有哪些途徑獲取到Class對象,Class類的含義和做用是什麼?什麼是class類?
  • 8.0.0.2 有哪些方式能夠提升反射效率?爲什麼反射消耗性能?到底是怎麼影響的,舉例說明?
  • 8.0.0.3 java反射機制提供了什麼功能?發射具備暴力訪問權限,如何防止反射序列化攻擊單例?
  • 8.0.0.4 經過反射得到泛型的實際類型參數?反射獲取構造方法,變量,方法的方法是哪些?
  • 8.0.0.5 getGenericParameterTypes 與 getParameterTypes區別?
  • 8.0.0.6 反射有什麼做用和應用?反射和註解相比,爲什麼反射消耗性能,有什麼優缺點?

1.10 10.Java 異常機制問題(10個)

  • 10.0.0.1 見過哪些運行時異常?異常處理機制知道哪些?從異常是否必須須要被處理的角度來看怎麼分類?
  • 10.0.0.2 運用Java異常處理機制?異常處理的原理?Java中檢查異常和非檢查異常的區別?
  • 10.0.0.3 異常處理的過程當中,你遵循那些好的實踐? throw 和 throws這兩個關鍵字在java中有什麼不一樣?
  • 10.0.0.4 你知道什麼是「異常鏈」嗎?自定義實現過哪些異常,怎麼寫的?能夠有一個空的catch塊嗎?
  • 10.0.0.5 Java異常類有哪些的重要方法?致使「主線程中的異常」的不一樣場景是什麼?
  • 10.0.0.6 看下面這段子類繼承父類代碼有什麼問題?針對拋異常是IOException仍是Exception,能隨便寫嗎,結合案例說一下?
  • 10.0.0.7 捕獲異常時,爲什麼在catch中要注意異常層級關係?須要注意哪些問題?
  • 10.0.0.8 在程序中使用自定義異常類,大致可分爲哪些步驟?哪些開發場景用到,說說你的編程經驗?

1.12 12.Java 設計模式問題(3個)

  • 12.0.0.1 實現單例模式有幾種方法?懶漢式中雙層鎖的目的是什麼?兩次判空的目的又是什麼?
  • 12.0.0.2 如何理解生產者消費者模型?寫一下生產者消費者模型的代碼案例?解決關鍵問題的思路主要是什麼?
  • 12.0.0.3 看下面代碼,利用面向對象設計原則如何改進,能夠保證代碼後期的拓展性和解耦問題?

1.13 13.Java 其餘深刻問題[6個]

  • 13.0.0.1 經過代碼案例分析Java內存分配狀況?JVM加載類過程是怎樣的?如何對構造方法賦值?分析經過對象調用方法?
  • 13.0.0.2 強引用會被回收嗎?軟引用的特色?軟引用使用場景?當軟引用持有多個對象時,如何被回收,回收規則是什麼?
  • 13.0.0.3 弱引用有何特色?弱引用被回收是如何作到的?弱引用實際開發案例有哪些?何時使用軟引用或者弱引用呢?
  • 13.0.0.4 Hash的使用場景有哪些?Hash表是幹什麼的?hash表具體是如何提升查找的速度,說說你的理解?
  • 13.0.0.5 HashCode的做用?可直接用hashcode判斷兩個對象是否相等?HashMap中是如何使用HashCode提升去重的邏輯?
  • 13.0.0.6 Hashcode與equal區別?什麼時候需用到hashcode?如何解決Hash衝突?當兩個對象 hashcode 相同時如何獲取值對象?

其餘介紹

01.關於博客彙總連接

02.關於個人博客

相關文章
相關標籤/搜索