面試珍藏:最常見的200多道Java面試題(2019年最新版)

2022-01-01 Java中文社群

來自公眾號:Java中文社群(ID:javacn666)

2015 年,因為工作崗位的變動,開始負責給集團招聘一些技術人員,出於對公司的負責,也為了更好的勝任技術經理的職位,在面試的這件事上,我做了大量的「功課」,首先我研究了幾乎所有大廠的面試題,還和負責招聘工作的幾個朋友,詳細的探討了 Java 面試所要涉及的知識點,於是就有了今天大家看到的這 200 多道面試題。

為什麼要公開這些面試題?

原因一:身邊從事 Java 開發的人員越來越多,我的表弟表妹們,朋友的表弟表妹們,朋友的朋友的表弟表妹們,每次問我要相同的面試複習材料,已經讓我疲於應付,索性整理出來,直接發連結給他們。

原因二:節省招聘雙方彼此的時間,有些來公司面試人,無論是有幾年工作經驗的還是剛畢業的,就連這些最基礎的面試題都搞不定,這確實讓人很遺憾。常言道「一屋不掃何以掃天下」,也是同樣的道理,如果連基礎的概念都搞不明白,又怎麼讓面試官相信你能寫出高質量的程序呢?與其浪費彼此的時間,還不如花點時間把自己的基礎知識掌握牢固。

原因三:提高 Java 從業人員整體的能力模型,讓優秀的人能「冒」出來。有了這些面試題不意味著,死記硬背之後就能進入企業工作,尤其是 BAT 等工作崗位競爭更為激烈,這些面試題只能成為面試體系中的一道「開胃菜」,從而提高了整個 Java 面試的壁壘,讓願與學的人,變的更加優秀,從而和懶惰的人拉開差距,讓企業也能更輕易的甄別。

這些面試題包含哪些內容?

這份面試題包含了 19 個模塊:Java 基礎、容器、多線程、反射、對象拷貝、Java Web、異常、網絡、設計模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 等。

如下圖所示:

本面試題解決的痛點稀缺性,提供真實的,覆蓋面全的面試集合,包含 200+ 面試題。
權威性,解決了目前市場上答案太舊甚至是錯誤的問題。真實性,這份面試題是企業常用的,不會偏離實際。易理解性,通俗易懂條理清晰,部分面試題包含題目解析和代碼示例,讓小白也能看的懂。節約時間,屏蔽無效重複信息,為真正需要面試題的人節省檢索時間。適宜閱讀人群

待面試的 初/中/高級 Java 程式設計師

查漏補缺的人

想要不斷完善和擴充自己 Java 技術棧的人

Java 面試官

面試題展示

一、Java 基礎

1.JDK 和 JRE 有什麼區別?

2.== 和 equals 的區別是什麼?

3.兩個對象的 hashCode()相同,則 equals()也一定為 true,對嗎?

4.final 在 java 中有什麼作用?

5.java 中的 Math.round(-1.5) 等於多少?

6.String 屬於基礎的數據類型嗎?

7.java 中操作字符串都有哪些類?它們之間有什麼區別?

8.String str="i"與 String str=new String("i")一樣嗎?

9.如何將字符串反轉?

10.String 類的常用方法都有那些?

11.抽象類必須要有抽象方法嗎?

12.普通類和抽象類有哪些區別?

13.抽象類能使用 final 修飾嗎?

14.接口和抽象類有什麼區別?

15.java 中 IO 流分為幾種?

16.BIO、NIO、AIO 有什麼區別?

17.Files的常用方法都有哪些?

二、容器

18.java 容器都有哪些?

19.Collection 和 Collections 有什麼區別?

20.List、Set、Map 之間的區別是什麼?

21.HashMap 和 Hashtable 有什麼區別?

22.如何決定使用 HashMap 還是 TreeMap?

23.說一下 HashMap 的實現原理?

24.說一下 HashSet 的實現原理?

25.ArrayList 和 LinkedList 的區別是什麼?

26.如何實現數組和 List 之間的轉換?

27.ArrayList 和 Vector 的區別是什麼?

28.Array 和 ArrayList 有何區別?

29.在 Queue 中 poll()和 remove()有什麼區別?

30.哪些集合類是線程安全的?

31.迭代器 Iterator 是什麼?

32.Iterator 怎麼使用?有什麼特點?

33.Iterator 和 ListIterator 有什麼區別?

34.怎麼確保一個集合不能被修改?

三、多線程

35.並行和並發有什麼區別?

36.線程和進程的區別?

37.守護線程是什麼?

38.創建線程有哪幾種方式?

39.說一下 runnable 和 callable 有什麼區別?

40.線程有哪些狀態?

41.sleep() 和 wait() 有什麼區別?

42.notify()和 notifyAll()有什麼區別?

43.線程的 run()和 start()有什麼區別?

44.創建線程池有哪幾種方式?

45.線程池都有哪些狀態?

46.線程池中 submit()和 execute()方法有什麼區別?

47.在 java 程序中怎麼保證多線程的運行安全?

48.多線程鎖的升級原理是什麼?

49.什麼是死鎖?

50.怎麼防止死鎖?

51.ThreadLocal 是什麼?有哪些使用場景?

52.說一下 synchronized 底層實現原理?

53.synchronized 和 volatile 的區別是什麼?

54.synchronized 和 Lock 有什麼區別?

55.synchronized 和 ReentrantLock 區別是什麼?

56.說一下 atomic 的原理?

四、反射

57.什麼是反射?

58.什麼是 java 序列化?什麼情況下需要序列化?

59.動態代理是什麼?有哪些應用?

60.怎麼實現動態代理?

五、對象拷貝

61.為什麼要使用克隆?

62.如何實現對象克隆?

63.深拷貝和淺拷貝區別是什麼?

六、Java Web

64.jsp 和 servlet 有什麼區別?

65.jsp 有哪些內置對象?作用分別是什麼?

66.說一下 jsp 的 4 種作用域?

67.session 和 cookie 有什麼區別?

68.說一下 session 的工作原理?

69.如果客戶端禁止 cookie 能實現 session 還能用嗎?

70.spring mvc 和 struts 的區別是什麼?

71.如何避免 sql 注入?

72.什麼是 XSS 攻擊,如何避免?

73.什麼是 CSRF 攻擊,如何避免?

七、異常

74.throw 和 throws 的區別?

75.final、finally、finalize 有什麼區別?

76.try-catch-finally 中哪個部分可以省略?

77.try-catch-finally 中,如果 catch 中 return 了,finally 還會執行嗎?

78.常見的異常類有哪些?

八、網絡

79.http 響應碼 301 和 302 代表的是什麼?有什麼區別?

80.forward 和 redirect 的區別?

81.簡述 tcp 和 udp的區別?

82.tcp 為什麼要三次握手,兩次不行嗎?為什麼?

83.說一下 tcp 粘包是怎麼產生的?

84.OSI 的七層模型都有哪些?

85.get 和 post 請求有哪些區別?

86.如何實現跨域?

87.說一下 JSONP 實現原理?

九、設計模式

88.說一下你熟悉的設計模式?

89.簡單工廠和抽象工廠有什麼區別?

十、Spring/Spring MVC

90.為什麼要使用 spring?

91.解釋一下什麼是 aop?

92.解釋一下什麼是 ioc?

93.spring 有哪些主要模塊?

94.spring 常用的注入方式有哪些?

95.spring 中的 bean 是線程安全的嗎?

96.spring 支持幾種 bean 的作用域?

97.spring 自動裝配 bean 有哪些方式?

98.spring 事務實現方式有哪些?

99.說一下 spring 的事務隔離?

100.說一下 spring mvc 運行流程?

101.spring mvc 有哪些組件?

102.@RequestMapping 的作用是什麼?

103.@Autowired 的作用是什麼?

十一、Spring Boot/Spring Cloud

104.什麼是 spring boot?

105.為什麼要用 spring boot?

106.spring boot 核心配置文件是什麼?

107.spring boot 配置文件有哪幾種類型?它們有什麼區別?

108.spring boot 有哪些方式可以實現熱部署?

109.jpa 和 hibernate 有什麼區別?

110.什麼是 spring cloud?

111.spring cloud 斷路器的作用是什麼?

112.spring cloud 的核心組件有哪些?

十二、Hibernate

113.為什麼要使用 hibernate?

114.什麼是 ORM 框架?

115.hibernate 中如何在控制臺查看列印的 sql 語句?

116.hibernate 有幾種查詢方式?

117.hibernate 實體類可以被定義為 final 嗎?

118.在 hibernate 中使用 Integer 和 int 做映射有什麼區別?

119.hibernate 是如何工作的?

120.get()和 load()的區別?

121.說一下 hibernate 的緩存機制?

122.hibernate 對象有哪些狀態?

123.在 hibernate 中 getCurrentSession 和 openSession 的區別是什麼?

124.hibernate 實體類必須要有無參構造函數嗎?為什麼?

十三、Mybatis

125.mybatis 中 #{}和 ${}的區別是什麼?

126.mybatis 有幾種分頁方式?

127.RowBounds 是一次性查詢全部結果嗎?為什麼?

128.mybatis 邏輯分頁和物理分頁的區別是什麼?

129.mybatis 是否支持延遲加載?延遲加載的原理是什麼?

130.說一下 mybatis 的一級緩存和二級緩存?

131.mybatis 和 hibernate 的區別有哪些?

132.mybatis 有哪些執行器(Executor)?

133.mybatis 分頁插件的實現原理是什麼?

134.mybatis 如何編寫一個自定義插件?

十四、RabbitMQ

135.rabbitmq 的使用場景有哪些?

136.rabbitmq 有哪些重要的角色?

137.rabbitmq 有哪些重要的組件?

138.rabbitmq 中 vhost 的作用是什麼?

139.rabbitmq 的消息是怎麼發送的?

140.rabbitmq 怎麼保證消息的穩定性?

141.rabbitmq 怎麼避免消息丟失?

142.要保證消息持久化成功的條件有哪些?

143.rabbitmq 持久化有什麼缺點?

144.rabbitmq 有幾種廣播類型?

145.rabbitmq 怎麼實現延遲消息隊列?

146.rabbitmq 集群有什麼用?

147.rabbitmq 節點的類型有哪些?

148.rabbitmq 集群搭建需要注意哪些問題?

149.rabbitmq 每個節點是其他節點的完整拷貝嗎?為什麼?

150.rabbitmq 集群中唯一一個磁碟節點崩潰了會發生什麼情況?

151.rabbitmq 對集群節點停止順序有要求嗎?

十五、Kafka

152.kafka 可以脫離 zookeeper 單獨使用嗎?為什麼?

153.kafka 有幾種數據保留的策略?

154.kafka 同時設置了 7 天和 10G 清除數據,到第五天的時候消息達到了 10G,這個時候 kafka 將如何處理?

155.什麼情況會導致 kafka 運行變慢?

156.使用 kafka 集群需要注意什麼?

十六、Zookeeper

157.zookeeper 是什麼?

158.zookeeper 都有哪些功能?

159.zookeeper 有幾種部署模式?

160.zookeeper 怎麼保證主從節點的狀態同步?

161.集群中為什麼要有主節點?

162.集群中有 3 臺伺服器,其中一個節點宕機,這個時候 zookeeper 還可以使用嗎?

163.說一下 zookeeper 的通知機制?

十七、MySql

164.資料庫的三範式是什麼?

165.一張自增表裡面總共有 7 條數據,刪除了最後 2 條數據,重啟 mysql 資料庫,又插入了一條數據,此時 id 是幾?

166.如何獲取當前資料庫版本?

167.說一下 ACID 是什麼?

168.char 和 varchar 的區別是什麼?

169.float 和 double 的區別是什麼?

170.mysql 的內連接、左連接、右連接有什麼區別?

171.mysql 索引是怎麼實現的?

172.怎麼驗證 mysql 的索引是否滿足需求?

173.說一下資料庫的事務隔離?

174.說一下 mysql 常用的引擎?

175.說一下 mysql 的行鎖和表鎖?

176.說一下樂觀鎖和悲觀鎖?

177.mysql 問題排查都有哪些手段?

178.如何做 mysql 的性能優化?

十八、Redis

179.redis 是什麼?都有哪些使用場景?

180.redis 有哪些功能?

181.redis 和 memecache 有什麼區別?

182.redis 為什麼是單線程的?

183.什麼是緩存穿透?怎麼解決?

184.redis 支持的數據類型有哪些?

185.redis 支持的 java 客戶端都有哪些?

186.jedis 和 redisson 有哪些區別?

187.怎麼保證緩存和資料庫數據的一致性?

188.redis 持久化有幾種方式?

189.redis 怎麼實現分布式鎖?

190.redis 分布式鎖有什麼缺陷?

191.redis 如何做內存優化?

192.redis 淘汰策略有哪些?

193.redis 常見的性能問題有哪些?該如何解決?

十九、JVM

194.說一下 jvm 的主要組成部分?及其作用?

195.說一下 jvm 運行時數據區?

196.說一下堆棧的區別?

197.隊列和棧是什麼?有什麼區別?

198.什麼是雙親委派模型?

199.說一下類加載的執行過程?

200.怎麼判斷對象是否可以被回收?

201.java 中都有哪些引用類型?

202.說一下 jvm 有哪些垃圾回收算法?

203.說一下 jvm 有哪些垃圾回收器?

204.詳細介紹一下 CMS 垃圾回收器?

205.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什麼區別?

206.簡述分代垃圾回收器是怎麼工作的?

207.說一下 jvm 調優的工具?

208.常用的 jvm 調優的參數都有哪些?

關於面試答案

老王鼓勵大家自己收集和整理相應的答案,但也提供了付費渠道,掃描下方二維碼:

為什麼要收費?

掃描購買之後提供永久的閱讀權限,補償一些伺服器購買成本。

增加獲取答案的門檻,鼓勵自己收集整理,有助於記憶和提高自己的能力。

有代價的東西,才能讓人珍惜。只有付款了,才能倒逼自己認真的看完。

老王雖然已經有十餘年的編程經驗了,但整個整理的過程還是非常艱辛,查閱了很多相關資料,一字一句的認真核對了每一個答案,並給部分難懂的題目添加了解題分析和代碼示例,掙點辛苦錢。

掃描購買之後提供永久升級更新的服務,為此項服務提供一點物質動力。

最後

再好的資料,也比不上此刻的行動,就好像我們聽過的那句話:「明白了很多道理,依舊過不好這一生」,唯有行動才能破局。

時刻提醒自己:機會永遠屬於有準備的人,祝好。

關注下方二維碼,訂閱更多精彩內容。

相關焦點

  • 2019 最新 200 道 Java 面試題
    ,也為了更好的勝任技術經理的職位,在面試的這件事上,我做了大量的「功課」,首先我研究了幾乎所有大廠的面試題,還和負責招聘工作的幾個朋友,詳細的探討了 Java 面試所要涉及的知識點,於是就有了今天大家看到的這 200 多道面試題。
  • Java 最常見的 200+ 面試題:面試必備
    聊回面試題這件事,這份面試清單原本是我們公司內部使用的,可到後來有很多朋友在微信上聯繫到我,讓我幫他們找一些面試方面的資料,而且這些關係也不太好拒絕,一呢,是因為這些找我,要面試題的人,不是我的好朋友的弟弟妹妹,就是我的弟弟妹妹們;二呢,我也不能馬馬虎虎的對付,受人之事忠人之命,我也不能辜負這份信任。
  • 2019年java常見面試題
    本人今年2月份來到上海來尋求工作,已經面試了10多家了,在這裡分享一下我的心得和常問到的面試題。走馬觀花式的學習;6、當遇到一些設計類的問題時,一般面試官考察的是你的思路,對問題的應變能力,對於事物觀察的點;技術面試題:
  • Java最常見600+面試題全解析:面試必備
    最近在刷面試題,所以需要看大量的Java相關的面試題,從大量的題目中總結了很多的知識,也分享給需要的同學。尚學堂與500+企業合作,建立IT行業最全的企業面試題庫。每周8~20家企業上門招聘,輕鬆掌握企業最新面試題集。本題集幾乎都是【必考題】,都能看懂的話,保你面試十拿九穩。
  • 學了1年java的程式設計師面試,掛在了這道基礎算法題!
    這都是java的算法題,應該來講都是些比較簡單的算法題,但是我敢說很多基礎的學習的,或者想去面試的人都會不能完整的寫出來,現在
  • 九章算法班 | 秋招改版,2019最新面試題講解
    為了應對最新的面試,九章算法全面搜集最新面經,研究最新面試套路,升級推出《九章算法班》V6.0!如何不斷提高自身算法水平?如何一個月內攻破算法面試?如何獲取大廠最新面試動向?都在《九章算法班》!➤➤ IT求職必修90%以上的人都會選修《九章算法班》,即使是已經刷題幾百道的人,也常常在這門課中感受到「醍醐灌頂」。原因很簡單,主講老師刷過的題,超過2000道,所總結的「套路」和「模板」不是刷幾百道的人可以得出的。
  • 500道Java 必備面試題答案(過後即刪)
    為了規避這些「坑」,我跑了 20 多家網際網路公司,來確認 Java 面試中實際考察的高頻知識點和常見題型。可是有了第一手素材後,我要如何讓大家真正從我的講解中學到乾貨、用到實處呢?經過反覆驗證,結合自己 4 年多作為面試官的經歷,把這些內容整理成文,用大約 10 萬字的內容對 Java 的核心知識點和常見的 500 多道面試題,做了詳細的介紹,也就是本專欄中你所看到的全部內容。1.
  • Tomcat面試題(2020最新版)
    Tomcat工作模式Tomcat作為servlet容器,有三種工作模式:1、獨立的servlet容器,servlet容器是web伺服器的一部分;2、進程內的servlet容器,servlet容器是作為web伺服器的插件和java容器的實現,web伺服器插件在內部地址空間打開一個jvm使得java容器在內部得以運行。
  • 2020最新Java後端面試題(帶答案),重點都給畫出來了!你不看?
    前言金九銀十,金三銀四確實是跳槽旺季,但是拋除這個之外,每天都有人在面試,有些人迷茫,有些人躊躇滿志,可能人們總在想,如果能知道面試內容就好了,其實我們可以從網上找到80%的面試題,自己去提前準備。有準備的面試總是讓人信心滿滿的。
  • 程式設計師面試最常見問題TOP 48
    近來正值秋招季節,很多編程面試都要求手寫數據結構手推機器學習算法。各位同學為了面試也會刷各種編程題,其中數據結構與排序搜索算法又是最為基礎的內容。在本文中,我們為各位讀者準備了 48 道基礎面試題,它可以幫助我們更深地理解數據結構。本文所有面試題都提供了 Java 解決方案,並介紹了比較流行的 GitHub 面試題項目。
  • 四面阿里斬獲offer定級P7,2020最新最全阿里巴巴68道高級面試題
    面試:如果不準備充分的面試,完全是浪費時間,更是對自己的不負責。今天給大家分享下我整理的Java架構面試專題及答案(文末見面試答案),其中大部分都是大企業面試常問的面試題,可以對照這查漏補缺,當然了,這裡所列的肯定不可能覆蓋全部方式,不過也希望能對即將找工作的朋友起到一些幫助!
  • Java典型面試題 ——談談你對Java平臺的理解?
    畢竟明白基本組成和機制,是日常工作中進行問題診斷或者性能調優等很多事情的基礎,相信沒有招聘方會不喜歡「熱愛學習和思考」的面試者。即使感覺自己的回答不是非常完善,也不用擔心。我個人覺得這種籠統的問題,有時候回答得稍微片面也很正常,大多數有經驗的面試官,不會因為一道題就對面試者輕易地下結論。
  • 被這10道Java面試題虐哭了
    整整 10 道 Java 面試題,小王一道也沒答正確。他沮喪地給我說,「哥,說點我的情況,你願意聽嗎?我和一個女孩相處,女孩大我兩歲,我非科班。本來打算國慶換一家薪水高點的,好確認關係。我經驗不多,技術一般般,之前在一家外包公司,有一個甲方內推,我就魯莽地把外包的工作辭了,結果沒想到面試被虐了,我擔心女朋友會不會因為我沒有工作和我分手。」聽他這麼一說,確實挺虐心的。後來我就安慰他,要他端正心態,先把這些面試題整明白,然後繼續找工作,不要想太多。
  • 50道Java集合經典面試題(收藏版)
    前言來了來了,50道Java集合面試題也來啦~ 已經上傳github:https://github.com/whx123/JavaHome1.線性安全的Vector:比Arraylist多了個同步化機制。Hashtable:比Hashmap多了個線程安全。ConcurrentHashMap:是一種高效但是線程安全的集合。Stack:棧,也是線程安全的,繼承於Vector。線性不安全的15.
  • 2019年最新的常問企業面試題大全以及答案
    金三銀四馬上就到了,很多同學準備跳槽,那麼現在就可以開始多看看面試題啦,我在網上找了兩份比較有全的面試題黑馬程式設計師的Java面試寶典Beta5.0.pdf真的非常全面,從初級到高級,框架、資料庫、並發知識、還有多企業的面試題整理!
  • Java面試經典題解析——談談你對Java平臺的理解?
    我個人覺得這種籠統的問題,有時候回答得稍微片面也很正常,大多數有經驗的面試官,不會因為一道題就對面試者輕易地下結論。通常會儘量引導面試者,把他的真實水平展現出來,這種問題就是做個開場熱身,面試官經常會根據你的回答擴展相關問題。
  • 面試前必看Java線程面試題
    下面是Java線程相關的熱門面試題,你可以用它來好好準備面試。1.面向對象的特徵有哪些方面?答:面向對象的特徵主要有以下幾個方面:- 抽象:抽象是將一類對象的共同特徵總結出來構造類的過程,包括數據抽象和行為抽象兩方面。
  • Java 程式設計師必須掌握的 8 道數據結構面試題你會幾道?
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫40多年後,這個等式仍被奉為真理。這就是為什麼在面試過程中,需要考察軟體工程師對數據結構的理解。幾乎所有的問題都需要面試者對數據結構有深刻的理解。
  • 給Java程式設計師的20個鍊表面試題
    數據結構在程序面試中極其重要。鍊表則是對數組數據結構進行的補充,是另一種常見的數據結構。和數組相似的是,鍊表也是線性數據結構,並以線性方式儲存元素。但是,和數組不同的是,鍊表不將元素儲存在連續的位置;相反,其元素分散在內存中的各個地方,並以節點進行相互連接。鍊表不過是一個節點的列表,其中每一個節點都包含存儲的值和下一個節點的位置。
  • 10道虐心的Java面試題,被面試官虐哭了,同事一題都沒答對
    有一天,小王告訴我,他去一家公司面試 Java 崗,結果被面試官虐哭了。整整 10 道 Java 面試題,小王一道也沒答正確。  他沮喪地給我說,「哥,說點我的情況,你願意聽嗎?我和一個女孩相處,女孩大我兩歲,我非科班。本來打算國慶換一家薪水高點的,好確認關係。