11.22 史上最全106道Java高頻面試合集,九大專題,命中率高達95%

史上最全106道Java高頻面試合集,九大專題,命中率高達95%

有關Java的一般問題

1. 什麼是JVM? 為什麼稱Java為跨平臺的編程語言?

Java虛擬機(Java Virtual Machine)是可以執行Java字節碼的虛擬機,每個Java源文件將被編譯成字節碼文件,然後在JVM中執行。Java之所以被設計成可以在任意的平臺運行,而不需要重寫或者在不同的平臺下重新編譯,這些都要歸功於Java虛擬機(JVM),因為JVM非常瞭解特定的指令的長度以及底層硬件平臺的特殊性。

2. JDK和JRE之間的差異是什麼?

Java運行環境(Java Runtime Enviroment) 是運行Java程序的基本的Java虛擬機,包括執行applet的瀏覽器插件。JDK (Java Development Kit) 是為了開發,編譯和執行Java應用程序,針對Java的全功能的軟件開發包,包含了JRE,編譯器和工具(比如說 JavaDoc 和Java Debugger)。

3. “static” 關鍵字是什麼意思?在Java裡可以 override private 或 static 的方法嗎? keyword mean ? Can you override private or static method in Java ?

static 關鍵字表示,訪問這個成員變量或方法時,不必獲取它屬於的類的實例。

Java 裡的 static 方法不能被 override,因為 override 的機制是運行時(runtime)的動態綁定,而 static 方法是在編譯時靜態綁定的。static 方法並不與任何類的具體實例有關,因此無法應用繼承的概念。

4. 在靜態方法裡可以訪問非靜態變量嗎?

Java 中的 static 變量歸相應的類所有,它的值對於類的所有實例都是相同的。static 變量是在 JVM 加載類的時候初始化的。如果代碼試圖訪問非靜態的變量,而且不是通過類的實例去訪問,編譯器會報錯,因為這些非靜態變量還沒有被創建呢,並且它們沒有與實例相關聯。

5. Java 支持哪些數據類型?什麼是 Autoboxing 和 Unboxing?
Java語言支持的8個基本數據類型如下:

  • byte
  • short
  • int
  • long
  • float
  • double
  • boolean
  • char

Autoboxing 是指在基本數據類型和對應的包裝(wrapper)類之間Java 編譯器所做的自動轉換。例如,編譯器將 int 轉換為 Integer,將 double 轉換為 Double ,等等。逆向的轉換稱為 unboxing。

6. 在Java中什麼是方法的 Override(覆蓋) 和 Overload(重載)?
Java中方法的 overload 發生的條件是,同一個類裡,有兩個或以上的方法名稱完全相同,但參數列表不同。另一方面,方法的 override 是指,子類重定義了父類裡的同一個方法。Override 的方法必須方法名、參數列表和返回類型都完全相同。Override 的方法不會限制原方法的訪問權限。

7.Java中構造函數、構造函數重載的概念和拷貝構造函數
8.Java支持多繼承嗎?
9.接口和抽象類有什麼不同?
10.傳引用和傳值

Java 線程

11. 進程與線程的區別 ?
進程是一個程序的執行(即正在運行的程序), 然而線程是在進程中獨立的執行序列. 一個進程可以包含很多線程. 線程有時被稱為輕量級的進程.

12. 說下創建線程的不同方式. 你傾向於哪種方式並說明原因 ?
有三種創建線程的方式:

  • 繼承Thread類.
  • 實現Runnable接口.
  • 通過Executor框架創建線程池.

首選方式是實現Runnable接口, 因為它不需要繼承Thread類. 當你的程序設計需要多繼承時, 使用接口會有所幫助. 另外, 線程池效率是很高的, 並且實施起來也很簡單.

13. 解釋下可用的線程狀態.
14. 同步方法與同步塊的區別 ?
15. 在監視器中的線程同步是怎樣發生的? 你可以使用哪些級別的同步 ?


16. 什麼是死鎖 ?
17. 怎樣確保N個線程訪問N個資源時不會發生死鎖 ?

Java Collections

18. Java Collections框架的基本接口 ?
Java Collections 框架 提供了一系列支持對象集合操作的設計良好的接口和類. Java Collections框架中最基礎的接口是:

  • Collection, 表示一組對象(元素).
  • Set, 包含非重複元素的集合.
  • List, 包含非重複元素的有序集合.
  • Map, 包含非重複鍵的鍵值對的對象.

19. 為什麼Collection沒有繼承Cloneable和Serializable接口 ?

Collection接口描述的是由元素組成的對象組. Collection的每一個具體實現可以選擇自己的方式來管理元素. 一些集合允許存在重複鍵, 另一些則不允許.

當處理實際實現時複製和序列化的語義和效果才會起作用. 因此, 集合類的具體實現應該決定它們將怎樣被複制和序列化.

20. 什麼是Iterator(疊代器) ?

Iterator接口提供了許多能夠疊代集合的方法.每個java集合(Collection)都含有一個返回Iterator實例的iterator方法. 疊代器在疊代過程中能夠移除底層集合中的元素.

21. Iterator 和ListIterator之間的不同 ?
22. fail-fast與fail-safe的區別?
23. Java中的 HashMap 是怎麼工作的?
24. hashCode() 和 equals() 方法重要性何在 ?
25.HashMap與HashTable之間有哪些不同?
26.Array與ArrayList間有什麼不同?與ArrayList相比你什麼時候會用Array?
27.ArrayList與LinkedList間有什麼不同?
28. Comparable 和 Comparator 接口分別是什麼 ? 列出它們的區別。


29.Java Priority Queue是什麼?
30. 關於Big-O符號你瞭解些什麼?你能針對不同數據結構舉些例子嗎?
31. 如何權衡有序數組和無序數組 ?
32. 有哪些關於 Java 集合框架的最佳實踐?
33. Enumeration 和 Iterator 接口有什麼不同 ?
34. HashSet 和TreeSet 有什麼不同?

垃圾回收器

35. Java中垃圾回收的目的是什麼, 它什麼時候被使用 ?

垃圾回收用於識別和丟棄程序不再需要的對象, 以便回收和複用資源.

36. System.gc() 和Runtime.gc()方法用途?

這些方法用於提醒JVM開始垃圾回收. 然而開始垃圾回收的時機是由JVM決定的.

37. finalize()什麼時候被調用 ? 它的目的是什麼 ?

finallize方法是在釋放該對象內存前由gc(垃圾回收器)調用. 通常建議在這個方法中釋放該對象持有的資源.

38.如果一個對象的引用被設置為null, gc會立即釋放該對象的內存麼?
39. Java堆的結構是什麼 ? 堆中的Perm Gen(全稱是Permanent Generation)空間是什麼 ?
40. Serial 垃圾回收器與 Throughput 垃圾回收器區別 ?
41. 什麼時候對象會被回收 ?
42. 垃圾回收發生在指定的JVM區域 ?

異常處理

43. Java中的兩種異常是什麼?它們之間的區別?
Java有兩種類型的異常:checked與unchecked(檢查與未檢查) 異常. 如果unchecked異常可能會在方法或構造函數的執行時被拋出從而蔓延到方法或構造函數的外部, 它們也不需要要在方法或構造函數中聲明throws子句. 然而, checked異常必須通過方法或構造函數的throws子句聲明. 關於java異常處理的建議請參考這裡Java exception handling.

44. Java中異常與錯誤的區別?

Exception和Error都是Throwable類的子類. Exception用於用戶程序需要捕獲的異常條件. Error定義了用戶程序不可預見的異常

45. throw與throws的區別 ?
關鍵字throw用於在程序中顯式地拋出一個異常. 相反, throws子句用於指出在該方法中沒有處理的異常. 每個方法必須顯式指明哪些異常沒有處理, 以便該方法的調用者可以預防可能發生的異常. 最後, 多個異常用逗號分隔.

45. 異常處理中finally語句塊的重要性?
46. 異常被處理後異常對象會發生什麼?
47. 怎樣區分finally語句塊與finalize()方法?

Java Applets

48. 什麼是 Applet ?
一個 Java Applet 可以包含在 HTML 頁面中並且可以在啟用 Java 客戶端的瀏覽器中運行。Applets 可以用來創建動態和交互式的 web 應用程序。

49. Applet 生命週期的說明
一個 Applet 可能會經歷以下的幾個狀態:

  • Init: 每次加載的時候都進行初始化
  • Start: 開始執行一個 applet
  • Stop: 停止執行一個 applet
  • Destroy: 卸載 applet 之前執行最後的清理

50. 當 applet 加載的時候會發生什麼?
首先,會創建一個 applet 的控制類的實例。然後,applet 初始化,最後 applet 開始運行。

51. Applet和Java應用程序有什麼不同?
Applets需要一個支持Java的瀏覽器, 但是Java應用程序可以被單獨執行。但是,他們都需要一個Java虛擬機,JVM。

還有, 一個Java應用程序需要一個main方法與特定的簽名,來確保啟動. Java applets並不需要這樣一些東西。

最後, Java Applet通常使用嚴格的安全策略,而Java應用程序通常使用較寬鬆的安全策略。

52.什麼是強加給Java Applet限制?
53. 什麼是不可信的Applet ?
54. 通過文件系統加載的小程序在加載了互聯網和Applet之間的區別是什麼 ?
55. 什麼是applet類加載器,它提供了什麼?
56. 什麼是applet安全管理,它提供什麼? applet安全管理是對Java applet做了限制的機制。瀏覽器只能有一個安全管理器。安全管理器在啟動的時候建立,之後它不能被取代,重載,重寫或者延長。

Swing

57. Choice和List之間的區別是什麼?
Choice是一種緊湊的方式展示,必須要拉下,是為了讓用戶能夠看到所有的可選選項列表。Choice只能選中一個選項。List是以幾個List選項是可見的方式展示的。List支持選中一個或多個List選項。

58. 什麼是佈局管理器?
佈局管理器是用來組織容器內的組件。

59. Scrollbar和JScrollPane 的區別是什麼?
Scrollbar是一個組件, 但不是一個容器,而ScrollPane是一個容器。 ScrollPane處理它自身的事件並執行它自己的滑動。

60. 哪些Swing方法是線程安全?
61. 說出3個支持繪圖的子類。
62. 什麼是裁剪?
63. MenuItem和CheckboxMenuItem的區別是什麼?
64. BorderLayout的元素是怎樣組織的?
65. GridBagLayout的元素是怎樣組織的?
66. Window和Frame有什麼區別?
67. 裁剪和重畫之間的關係?

68. 事件監聽器接口和事件適配器類之間是什麼關係?
69. 一個GUI組件怎麼處理自己的事件?
70. Java佈局管理器提供超過傳統的窗口系統的什麼樣的優勢?
71. Java為所有Swing組件使用的設計模式是什麼?

JDBC

72. 什麼是 JDBC ?
JDBC是一個抽象層,允許用戶在不同數據庫間進行選擇。JDBC使開發人員能夠在Java中編寫數據庫應用程序,而不必讓自己關心一個特定的數據庫的底層細節。

73. 解釋JDBC中驅動的作用。
JDBC驅動提供了 對 JDBC API 所提供的抽象類 的 數據庫供應商的特定實現。每個驅動必須提供java.sql包的以下的類實現:Connection,Statement,PreparedStatement,CallableStatement,ResultSet 和 Driver。

74.Class.forName 方法的目的是什麼?
此方法用於加載驅動程序,以建立與數據庫的連接。

75.與Statement相比PreparedStatement的優點?
76. CallableStatement的用途 ? 指出用於創建CallableStatement的方法.
77. 連接池是什麼 ?

遠程方法調用 (RMI)

78. 什麼是RMI ?
Java遠程方法調用(RMI)是一個Java API,它執行的面向對象的等價遠程過程調用(RPC)的方法,包括了直接傳輸序列化的Java類和分佈式垃圾收集的支持。 遠程方法調用(RMI),也可以看作是一個遠程運行的對象上激活的方法的過程。RMI提供位置透明性,因為用戶認為一個方法是在本地運行的對象上執行。 RMI Tips here.

79. 什麼是RMI的體系結構的基本原理?
RMI的架構最重要的原則是將行為的定義和行為的實施分別對待。 RMI允許定義的行為和實現行為保持獨立,並在獨立的JVM中運行的代碼。

80. RMI的體系結構層是什麼?


RMI的結構主要分為以下幾層:

  • 樁(Stub)和框架(Skeleton)層:該層位於開發者視圖的下面。該層是負責攔截客戶端請求接口的方法並重定向這些請求到遠程RMI服務上。
  • 遠程引用層:架構的第二層是處理從客戶端到服務器的遠程對象引用的解析。該層解析並管理從客戶端到遠程服務對象的引用。該連接是一對一(單播)連接的。
  • 傳輸層:該層主要負責連接參與服務的兩個JVM。它基於通過網絡連接的機子的TCP/IP,提供了基本的連通性,以及一些防火牆的滲透策略。

81. 在RMI中遠程接口的作用是什麼?
82. java.rmi.Naming 類扮演的角色 ?
83. RMI中的綁定是什麼意思 ?
84. Naming 類中的bind與rebind方法的區別 ?


85. 運行RMI 程序的步驟?
86.RMI中stub的角色 ?
87. 什麼是DGC?它是如何工作的?
88. 在RMI中使用RMISecurityManager的目的是什麼?
89. 解釋編組和解組。
90. 解釋序列化和反序列化。

Servlets

91. 什麼是Servlet?
servlet是用來處理客戶端請求並生成動態web內容的Java程序語言類。Servlets大多是用來處理或者存儲HTML表單提交的數據,提供動態內容和管理那些不在HTTP無狀態協議中的狀態信息。

92. 解釋一個Servlet的架構.
核心抽象概念肯定是所有servlet必須實現 javax.servlet.Servlet 接口。 每個 servlet 必須直接或者間接實現這個接口, 也可以繼承於 javax.servlet.GenericServlet 或者javax.servlet.http.HTTPServlet。最後想提的是,每個 servlet 能夠使用多線程服務多個請求。

93. 一個 Applet 和 一個 Servlet 區別是什麼 ?
一個 Applet 是一個跑在客戶機器的 網頁瀏覽器 裡面的 客戶端java程序。相反,一個 servlet 是跑在網頁服務器的服務的容器。一個 applet 能使用用戶界面class, 而一個 servlet 不能夠有一個用戶界面。相反,一個servlet 等待客戶端的 HTTP 請求併為每一個請求生成一個響應。

94. GenericServlet 和 HttpServlet 的區別是什麼 ?
GenericServlet 是一個實現了Servlet 和 ServletConfig 接口的通用的協議無關的 servlet . 那些繼承於GenericServlet 類的 servlet 將重寫 service 方法 。最後想提的是,為了給Web用戶開發一個使用HTTP協議服務的HTTP servlet, 你的 servlet 必須改為繼承於 HttpServlet 。查看Servlet的示例 。

95.解釋一個Servlet的生命週期.
96 .doGet()和doPost()之間的區別是什麼?
97. web應用是什麼 ?
98. 什麼是服務端包含 (SSI) ?
99. 什麼是 Servlet 鏈?
100. 如何知道請求 servlet的客戶端信息 ?


101. Http response的結構是什麼 ?
102. 什麼是cookie?session和cookie之間的區別是什麼?
103.瀏覽器和servlet通過什麼協議通信 ?
104. 什麼是HTTP通道 ?
105. sendRedirect和 forward 方法的區別?
106. 什麼是URL編碼和解碼 ?

史上最全106道Java高頻面試合集,九大專題,命中率高達95%

小編將以上的面試合集做了一個整理,還有更多的redis、高併發、多線程、微服務、分佈式、MySQL、數據庫、線程、鎖、jvm、Java虛擬機、spring等面試題庫也一併分享出來,供大家參考,需要的可以後臺私信我【面試】即可免費獲取小編整理的全部文檔!!!


分享到:


相關文章: