溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2020-06-16 06:20:42 來源:網(wǎng)絡(luò) 閱讀:531 作者:Java_老男孩 欄目:編程語言

實(shí)戰(zhàn)經(jīng)驗(yàn)缺乏?書本晦澀難懂?視頻淺嘗輒止?那是因?yàn)槟銢]有找到正確的學(xué)習(xí)方式!

小編整理出Java程序員必備的核心技能,同時(shí)也是面試時(shí)面試官必問的知識(shí)點(diǎn),篇章也是包括了很多知識(shí)點(diǎn),其中包括了有分布式架構(gòu)、高可用擴(kuò)展、高性能、高并發(fā)、Jvm性能調(diào)優(yōu)、Spring,MyBatis,Nginx源碼分析,Redis等等

由于分享的文檔里的細(xì)節(jié)內(nèi)容實(shí)在過多所以只編輯了部分知識(shí)點(diǎn)的章節(jié)粗略的介紹下,每個(gè)章節(jié)小節(jié)點(diǎn)里面都有更細(xì)化的內(nèi)容!以下就是部分章節(jié)目錄,由于篇幅限制目錄上的詳細(xì)講解也無法完全列出,感興趣的朋友可以點(diǎn)擊下方傳送門免費(fèi)獲取。

史上最詳細(xì)面試學(xué)習(xí)核心筆記免費(fèi)獲?。篔ava基礎(chǔ)+算法+JVM+數(shù)據(jù)庫+SSM框架+Redis+消息隊(duì)列+Spring全家桶等?史上最全106道Java高頻面試合集,九大專題,命中率高達(dá)95%

有關(guān)Java的一般問題

1. 什么是JVM??為什么稱Java為跨平臺(tái)的編程語言?

Java虛擬機(jī)(Java Virtual Machine)是可以執(zhí)行Java字節(jié)碼的虛擬機(jī),每個(gè)Java源文件將被編譯成字節(jié)碼文件,然后在JVM中執(zhí)行。Java之所以被設(shè)計(jì)成可以在任意的平臺(tái)運(yùn)行,而不需要重寫或者在不同的平臺(tái)下重新編譯,這些都要?dú)w功于Java虛擬機(jī)(JVM),因?yàn)镴VM非常了解特定的指令的長(zhǎng)度以及底層硬件平臺(tái)的特殊性。

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

Java運(yùn)行環(huán)境(Java Runtime Enviroment) 是運(yùn)行Java程序的基本的Java虛擬機(jī),包括執(zhí)行applet的瀏覽器插件。JDK (Java Development Kit) 是為了開發(fā),編譯和執(zhí)行Java應(yīng)用程序,針對(duì)Java的全功能的軟件開發(fā)包,包含了JRE,編譯器和工具(比如說 ?JavaDoc?和Java Debugger)。

3. “static” 關(guān)鍵字是什么意思?在Java里可以 override private 或 static 的方法嗎? keyword mean ? Can you override private or static method in Java ?

static 關(guān)鍵字表示,訪問這個(gè)成員變量或方法時(shí),不必獲取它屬于的類的實(shí)例。

Java 里的 static 方法不能被 override,因?yàn)?override 的機(jī)制是運(yùn)行時(shí)(runtime)的動(dòng)態(tài)綁定,而 static 方法是在編譯時(shí)靜態(tài)綁定的。static 方法并不與任何類的具體實(shí)例有關(guān),因此無法應(yīng)用繼承的概念。

4. 在靜態(tài)方法里可以訪問非靜態(tài)變量嗎?

Java?中的 static 變量歸相應(yīng)的類所有,它的值對(duì)于類的所有實(shí)例都是相同的。static 變量是在 JVM 加載類的時(shí)候初始化的。如果代碼試圖訪問非靜態(tài)的變量,而且不是通過類的實(shí)例去訪問,編譯器會(huì)報(bào)錯(cuò),因?yàn)檫@些非靜態(tài)變量還沒有被創(chuàng)建呢,并且它們沒有與實(shí)例相關(guān)聯(lián)。

5. Java 支持哪些數(shù)據(jù)類型?什么是 Autoboxing 和 Unboxing?
Java語言支持的8個(gè)基本數(shù)據(jù)類型如下:

  • byte

  • short

  • int

  • long

  • float

  • double

  • boolean

  • char

Autoboxing 是指在基本數(shù)據(jù)類型和對(duì)應(yīng)的包裝(wrapper)類之間Java 編譯器所做的自動(dòng)轉(zhuǎn)換。例如,編譯器將 int 轉(zhuǎn)換為?Integer,將?double 轉(zhuǎn)換為?Double?,等等。逆向的轉(zhuǎn)換稱為 unboxing。

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

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

Java 線程

11. 進(jìn)程與線程的區(qū)別 ?
進(jìn)程是一個(gè)程序的執(zhí)行(即正在運(yùn)行的程序), 然而線程是在進(jìn)程中獨(dú)立的執(zhí)行序列. 一個(gè)進(jìn)程可以包含很多線程. 線程有時(shí)被稱為輕量級(jí)的進(jìn)程.

12. 說下創(chuàng)建線程的不同方式. 你傾向于哪種方式并說明原因 ?
有三種創(chuàng)建線程的方式:

  • 繼承Thread類.

  • 實(shí)現(xiàn)Runnable接口.

  • 通過Executor框架創(chuàng)建線程池.

首選方式是實(shí)現(xiàn)Runnable接口, 因?yàn)樗恍枰^承Thread類. 當(dāng)你的程序設(shè)計(jì)需要多繼承時(shí), 使用接口會(huì)有所幫助. 另外, 線程池效率是很高的, 并且實(shí)施起來也很簡(jiǎn)單.

13. 解釋下可用的線程狀態(tài).
14. 同步方法與同步塊的區(qū)別 ?
15. 在監(jiān)視器中的線程同步是怎樣發(fā)生的? 你可以使用哪些級(jí)別的同步 ?
16. 什么是死鎖 ?
17. 怎樣確保N個(gè)線程訪問N個(gè)資源時(shí)不會(huì)發(fā)生死鎖 ?

Java Collections

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

  • Collection, 表示一組對(duì)象(元素).

  • Set, 包含非重復(fù)元素的集合.

  • List, 包含非重復(fù)元素的有序集合.

  • Map, 包含非重復(fù)鍵的鍵值對(duì)的對(duì)象.

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

Collection接口描述的是由元素組成的對(duì)象組. Collection的每一個(gè)具體實(shí)現(xiàn)可以選擇自己的方式來管理元素. 一些集合允許存在重復(fù)鍵, 另一些則不允許.

當(dāng)處理實(shí)際實(shí)現(xiàn)時(shí)復(fù)制和序列化的語義和效果才會(huì)起作用. 因此, 集合類的具體實(shí)現(xiàn)應(yīng)該決定它們將怎樣被復(fù)制和序列化.

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

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

21. Iterator 和ListIterator之間的不同 ?
22. fail-fast與fail-safe的區(qū)別?
23. Java中的 HashMap 是怎么工作的?
24. hashCode() 和 equals() 方法重要性何在 ?
25.HashMap與HashTable之間有哪些不同?
26.Array與ArrayList間有什么不同?與ArrayList相比你什么時(shí)候會(huì)用Array?
27.ArrayList與LinkedList間有什么不同?
28. Comparable 和 Comparator 接口分別是什么 ? 列出它們的區(qū)別。
29.Java Priority Queue是什么?
30. 關(guān)于Big-O符號(hào)你了解些什么?你能針對(duì)不同數(shù)據(jù)結(jié)構(gòu)舉些例子嗎?
31. 如何權(quán)衡有序數(shù)組和無序數(shù)組 ?
32. 有哪些關(guān)于 Java 集合框架的最佳實(shí)踐?
33. Enumeration 和 Iterator 接口有什么不同 ?
34. HashSet 和TreeSet 有什么不同?

垃圾回收器

35. Java中垃圾回收的目的是什么, 它什么時(shí)候被使用 ?

垃圾回收用于識(shí)別和丟棄程序不再需要的對(duì)象, 以便回收和復(fù)用資源.

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

這些方法用于提醒JVM開始垃圾回收. 然而開始垃圾回收的時(shí)機(jī)是由JVM決定的.

37. finalize()什么時(shí)候被調(diào)用 ? 它的目的是什么 ?

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

38.如果一個(gè)對(duì)象的引用被設(shè)置為null, gc會(huì)立即釋放該對(duì)象的內(nèi)存么?
39. Java堆的結(jié)構(gòu)是什么 ? 堆中的Perm Gen(全稱是Permanent Generation)空間是什么 ?
40. Serial 垃圾回收器與 Throughput 垃圾回收器區(qū)別 ?
41. 什么時(shí)候?qū)ο髸?huì)被回收 ?
42. 垃圾回收發(fā)生在指定的JVM區(qū)域 ?

異常處理?

43. Java中的兩種異常是什么?它們之間的區(qū)別?
Java有兩種類型的異常:checked與unchecked(檢查與未檢查) 異常. 如果unchecked異??赡軙?huì)在方法或構(gòu)造函數(shù)的執(zhí)行時(shí)被拋出從而蔓延到方法或構(gòu)造函數(shù)的外部, 它們也不需要要在方法或構(gòu)造函數(shù)中聲明throws子句. 然而, checked異常必須通過方法或構(gòu)造函數(shù)的throws子句聲明. 關(guān)于java異常處理的建議請(qǐng)參考這里Java exception handling.

44. Java中異常與錯(cuò)誤的區(qū)別?

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

45. throw與throws的區(qū)別 ?
關(guān)鍵字throw用于在程序中顯式地拋出一個(gè)異常. 相反, throws子句用于指出在該方法中沒有處理的異常. 每個(gè)方法必須顯式指明哪些異常沒有處理, 以便該方法的調(diào)用者可以預(yù)防可能發(fā)生的異常. 最后, 多個(gè)異常用逗號(hào)分隔.

45. 異常處理中finally語句塊的重要性?
46. 異常被處理后異常對(duì)象會(huì)發(fā)生什么?
47. 怎樣區(qū)分finally語句塊與finalize()方法?

Java Applets

48. 什么是 Applet ?
一個(gè) Java Applet 可以包含在 HTML 頁面中并且可以在啟用 Java 客戶端的瀏覽器中運(yùn)行。Applets 可以用來創(chuàng)建動(dòng)態(tài)和交互式的 web 應(yīng)用程序。

49. Applet 生命周期的說明
一個(gè) Applet 可能會(huì)經(jīng)歷以下的幾個(gè)狀態(tài):

  • Init: 每次加載的時(shí)候都進(jìn)行初始化

  • Start: 開始執(zhí)行一個(gè) applet

  • Stop: 停止執(zhí)行一個(gè) applet

  • Destroy: 卸載 applet 之前執(zhí)行最后的清理

50. 當(dāng) applet 加載的時(shí)候會(huì)發(fā)生什么?
首先,會(huì)創(chuàng)建一個(gè) applet 的控制類的實(shí)例。然后,applet 初始化,最后 applet 開始運(yùn)行。

51. Applet和Java應(yīng)用程序有什么不同?
Applets需要一個(gè)支持Java的瀏覽器, 但是Java應(yīng)用程序可以被單獨(dú)執(zhí)行。但是,他們都需要一個(gè)Java虛擬機(jī),JVM。

還有, 一個(gè)Java應(yīng)用程序需要一個(gè)main方法與特定的簽名,來確保啟動(dòng). Java applets并不需要這樣一些東西。

最后, Java Applet通常使用嚴(yán)格的安全策略,而Java應(yīng)用程序通常使用較寬松的安全策略。

52.?什么是強(qiáng)加給Java Applet限制?
53. 什么是不可信的Applet ?
54. 通過文件系統(tǒng)加載的小程序在加載了互聯(lián)網(wǎng)和Applet之間的區(qū)別是什么 ?
55. 什么是applet類加載器,它提供了什么?
56. 什么是applet安全管理,它提供什么? applet安全管理是對(duì)Java applet做了限制的機(jī)制。瀏覽器只能有一個(gè)安全管理器。安全管理器在啟動(dòng)的時(shí)候建立,之后它不能被取代,重載,重寫或者延長(zhǎng)。

Swing

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

58. 什么是布局管理器?
布局管理器是用來組織容器內(nèi)的組件。

59. Scrollbar和JScrollPane 的區(qū)別是什么?
Scrollbar是一個(gè)組件,?但不是一個(gè)容器,而ScrollPane是一個(gè)容器。?ScrollPane處理它自身的事件并執(zhí)行它自己的滑動(dòng)。

60. 哪些Swing方法是線程安全?
61. 說出3個(gè)支持繪圖的子類。
62. 什么是裁剪?
63. MenuItem和CheckboxMenuItem的區(qū)別是什么?
64. BorderLayout的元素是怎樣組織的?
65. GridBagLayout的元素是怎樣組織的?
66. Window和Frame有什么區(qū)別?
67. 裁剪和重畫之間的關(guān)系?
68. 事件監(jiān)聽器接口和事件適配器類之間是什么關(guān)系?
69. 一個(gè)GUI組件怎么處理自己的事件?
70. Java布局管理器提供超過傳統(tǒng)的窗口系統(tǒng)的什么樣的優(yōu)勢(shì)?
71. Java為所有Swing組件使用的設(shè)計(jì)模式是什么?

JDBC

72. 什么是 JDBC ?
JDBC是一個(gè)抽象層,允許用戶在不同數(shù)據(jù)庫間進(jìn)行選擇。JDBC使開發(fā)人員能夠在Java中編寫數(shù)據(jù)庫應(yīng)用程序,而不必讓自己關(guān)心一個(gè)特定的數(shù)據(jù)庫的底層細(xì)節(jié)。

73. 解釋JDBC中驅(qū)動(dòng)的作用。
JDBC驅(qū)動(dòng)提供了 對(duì) JDBC API 所提供的抽象類 的 數(shù)據(jù)庫供應(yīng)商的特定實(shí)現(xiàn)。每個(gè)驅(qū)動(dòng)必須提供java.sql包的以下的類實(shí)現(xiàn):Connection,Statement,PreparedStatement,CallableStatement,ResultSet?和?Driver。

74.Class.forName 方法的目的是什么?
此方法用于加載驅(qū)動(dòng)程序,以建立與數(shù)據(jù)庫的連接。

75.與Statement相比PreparedStatement的優(yōu)點(diǎn)?
76. CallableStatement的用途 ? 指出用于創(chuàng)建CallableStatement的方法.
77. 連接池是什么 ?

遠(yuǎn)程方法調(diào)用 (RMI)

78. ?什么是RMI ?
Java遠(yuǎn)程方法調(diào)用(RMI)是一個(gè)Java API,它執(zhí)行的面向?qū)ο蟮牡葍r(jià)遠(yuǎn)程過程調(diào)用(RPC)的方法,包括了直接傳輸序列化的Java類和分布式垃圾收集的支持。 遠(yuǎn)程方法調(diào)用(RMI),也可以看作是一個(gè)遠(yuǎn)程運(yùn)行的對(duì)象上激活的方法的過程。RMI提供位置透明性,因?yàn)橛脩粽J(rèn)為一個(gè)方法是在本地運(yùn)行的對(duì)象上執(zhí)行。?RMI Tips here.

79. 什么是RMI的體系結(jié)構(gòu)的基本原理?
RMI的架構(gòu)最重要的原則是將行為的定義和行為的實(shí)施分別對(duì)待。 RMI允許定義的行為和實(shí)現(xiàn)行為保持獨(dú)立,并在獨(dú)立的JVM中運(yùn)行的代碼。

80. RMI的體系結(jié)構(gòu)層是什么?
RMI的結(jié)構(gòu)主要分為以下幾層:

  • 樁(Stub)和框架(Skeleton)層:該層位于開發(fā)者視圖的下面。該層是負(fù)責(zé)攔截客戶端請(qǐng)求接口的方法并重定向這些請(qǐng)求到遠(yuǎn)程RMI服務(wù)上。

  • 遠(yuǎn)程引用層:架構(gòu)的第二層是處理從客戶端到服務(wù)器的遠(yuǎn)程對(duì)象引用的解析。該層解析并管理從客戶端到遠(yuǎn)程服務(wù)對(duì)象的引用。該連接是一對(duì)一(單播)連接的。

  • 傳輸層:該層主要負(fù)責(zé)連接參與服務(wù)的兩個(gè)JVM。它基于通過網(wǎng)絡(luò)連接的機(jī)子的TCP/IP,提供了基本的連通性,以及一些防火墻的***策略。

81. 在RMI中遠(yuǎn)程接口的作用是什么?
82. java.rmi.Naming 類扮演的角色 ?
83. RMI中的綁定是什么意思 ?
84. Naming 類中的bind與rebind方法的區(qū)別 ?
85. 運(yùn)行RMI 程序的步驟?
86.RMI中stub的角色 ?
87. 什么是DGC?它是如何工作的?
88. 在RMI中使用RMISecurityManager的目的是什么?
89. 解釋編組和解組。
90. 解釋序列化和反序列化。

Servlets

91. 什么是Servlet?
servlet是用來處理客戶端請(qǐng)求并生成動(dòng)態(tài)web內(nèi)容的Java程序語言類。Servlets大多是用來處理或者存儲(chǔ)HTML表單提交的數(shù)據(jù),提供動(dòng)態(tài)內(nèi)容和管理那些不在HTTP無狀態(tài)協(xié)議中的狀態(tài)信息。

92. 解釋一個(gè)Servlet的架構(gòu).
核心抽象概念肯定是所有servlet必須實(shí)現(xiàn)?javax.servlet.Servlet 接口。 每個(gè) servlet 必須直接或者間接實(shí)現(xiàn)這個(gè)接口, 也可以繼承于 javax.servlet.GenericServlet 或者javax.servlet.http.HTTPServlet。最后想提的是,每個(gè) servlet 能夠使用多線程服務(wù)多個(gè)請(qǐng)求。

93. 一個(gè) Applet 和 一個(gè) Servlet 區(qū)別是什么 ?
一個(gè) Applet 是一個(gè)跑在客戶機(jī)器的 網(wǎng)頁瀏覽器 里面的 客戶端java程序。相反,一個(gè) servlet 是跑在網(wǎng)頁服務(wù)器的服務(wù)的容器。一個(gè)?applet 能使用用戶界面class, 而一個(gè) servlet 不能夠有一個(gè)用戶界面。相反,一個(gè)servlet 等待客戶端的 HTTP 請(qǐng)求并為每一個(gè)請(qǐng)求生成一個(gè)響應(yīng)。

94. GenericServlet 和 HttpServlet 的區(qū)別是什么 ?
GenericServlet 是一個(gè)實(shí)現(xiàn)了Servlet 和 ServletConfig ?接口的通用的協(xié)議無關(guān)的?servlet . 那些繼承于GenericServlet 類的 servlet 將重寫 service 方法 。最后想提的是,為了給Web用戶開發(fā)一個(gè)使用HTTP協(xié)議服務(wù)的HTTP servlet, 你的?servlet 必須改為繼承于 HttpServlet 。

95.解釋一個(gè)Servlet的生命周期.
96 .doGet()和doPost()之間的區(qū)別是什么?
97. web應(yīng)用是什么 ?
98. 什么是服務(wù)端包含 (SSI) ?
99. 什么是 Servlet 鏈?
100. 如何知道請(qǐng)求 servlet的客戶端信息 ?
101. Http response的結(jié)構(gòu)是什么 ?
102. 什么是cookie?session和cookie之間的區(qū)別是什么?
103.瀏覽器和servlet通過什么協(xié)議通信 ??
104. 什么是HTTP通道 ?
105. ?sendRedirect和 forward 方法的區(qū)別?
106. 什么是URL編碼和解碼 ?

小編將以上的面試合集做了一個(gè)整理,還有更多的redis、高并發(fā)、多線程、微服務(wù)、分布式、MySQL、數(shù)據(jù)庫、線程、鎖、jvm、Java虛擬機(jī)、spring等面試題庫也一并分享出來,供大家參考,需要的可以點(diǎn)擊下方傳送門即可免費(fèi)獲取小編整理的全部文檔?。?!

史上最詳細(xì)面試學(xué)習(xí)核心筆記免費(fèi)獲取:Java基礎(chǔ)+算法+JVM+數(shù)據(jù)庫+SSM框架+Redis+消息隊(duì)列+Spring全家桶等?史上最全106道Java高頻面試合集,九大專題,命中率高達(dá)95%
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI