Java最多見的200+面試題及本身梳理的答案--面試必備(一)

昨天在今日頭條上看到一份所謂常常面別人的TL梳理的面試題,看着比較完善,可是,沒有對應的答案,本身看着研究學習了下,順帶梳理下答案。主要包括如下模塊:Java基礎、容器、多線程、反射、對象拷貝、Java Web模塊,異常、網絡、設計模式、Spring/Spring MVC 、Spring Boot/Spring Cloud、Hibernate、Mybaits、RabbitMQ、Kafka、Zookeeper、Mysql、Redis、JVM。以下圖所示:html

 

下面一塊兒看下面試題,面試題爲今日頭條文章中的TL提供,答案爲筆者學習時候自我梳理,如有不正確的地方,請多指正,感謝!java

1、Java基礎

1.JDK和JRE有什麼區別?mysql

JDK就是Java Development Kit 。JDK是面向開發人員使用的SDK,它提供了Java的開發環境和運行環境。SDK是Software Development Kit 通常指軟件開發包,能夠包括函數庫、編譯程序等。面試

JRE是Java Runtime Enviroment是指Java的運行環境,是面向Java程序的使用者,而不是開發者。redis

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

== 比較的是變量(棧)內存中存放的對象的(堆)內存地址,用來判斷兩個對象的地址是否相同,便是否是指相同一個對象。比較的是真正意義上的指針操做。
a.比較的是操做符兩端的操做數是不是同一個對象。
b.兩邊的操做數必須是同一類型的(能夠是父子類之間)才能編譯經過。
c.比較的是地址,若是是具體的阿拉伯數字的比較,值相等則爲true,如:
int a=10 與 long b=10L 與 double c=10.0都是相同的(爲true),由於他們都指向地址爲10的堆。new出來的就不行,由於是新的對象,而前面的是引用。spring

equals用來比較的是兩個對象的內容是否相等,因爲全部的類都是繼承自java.lang.Object類的,因此適用於全部對象,若是沒有對該方法進行覆蓋的話,調用的仍然是Object類中的方法,而Object中的equals方法返回的倒是==的判斷。重寫後,重點在值相等。sql

3.兩個對象的 hashCode()相同,則 equals()也必定爲 true,對嗎?數據庫

兩個obj,若是equals()相等,hashCode()必定相等。兩個obj,若是hashCode()相等,equals()不必定相等(Hash散列值有衝突的狀況,雖然機率很低)。設計模式

https://www.cnblogs.com/jesonjason/p/5492208.html

能夠理解爲,100個框,把100000個小球平均的裝進框中,那麼最多須要判斷200次,就能找到任意一個小球,hash值就是框的編號。

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

final能夠修飾類,函數,變量
修飾類時:意思是修飾類爲最終類,任何類不能再繼承它.
修改函數時:意思是該方法在類裏是最終方法,繼承它的方法不能去重寫它.
修飾變量時:意思是被修飾的變量是常量或者叫終態變量,一旦初始化後就不能再改變變量的值.

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

-1    知識點:Math.round()方法的使用 ;(],5,理解這2個就簡單,左邊吸進來,右邊拒絕。

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

不屬於。String是一個對象。

8種基本數據類型: boolean byte char shrot int long float double
對應的基本類型包裝類:Boolean Byte Character Short Integer Long Float Double

byte,8位,1字節,shrot 16,int 32, long 64, folt 32, double 64, boolean 1, char 16 unicode

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

查看源碼 StringUtil便可。

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

不同。前者是一個常量,是對String對象的一個引用,在棧中,後者又從新new了一個對象,放在了堆中,內存空間不同。

9.如何將字符串反轉?

https://www.cnblogs.com/lanseyitai1224/p/6955609.html

先split 再reverse,再jion;

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

 

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

 抽象類不必定要有抽象方法;可是有抽象方法的類必定是抽象類。抽象方法比抽象類更抽象。

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

a.抽象類不能被實例化。
b.抽象類能夠有構造函數,被繼承時子類必須繼承父類一個構造方法,抽象方法不能被聲明爲靜態。
c.抽象方法只需申明,而無需實現,抽象類中能夠容許普通方法有主體
d.含有抽象方法的類必須申明爲抽象類
e.抽象的子類必須實現抽象類中全部抽象方法,不然這個子類也是抽象類。

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

final關鍵字不能用來抽象類和接口

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

a.抽象類和接口都不能直接實例化,若是要實例化,抽象類變量必須指向實現全部抽象方法的子類對象,接口變量必須指向實現全部接口方法的類對象。
b.抽象類要被子類繼承,接口要被類實現。
c.接口只能作方法申明,抽象類中能夠作方法申明,也能夠作方法實現
d.接口裏定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。
e.抽象類裏的抽象方法必須所有被子類所實現,若是子類不能所有實現父類抽象方法,那麼該子類只能是抽象類。一樣,一個實現接口的時候,如不能所有實現接口方法,那麼該類也只能爲抽象類。
f.抽象方法只能申明,不能實現,接口是設計的結果 ,抽象類是重構的結果
g.抽象類裏能夠沒有抽象方法
h.若是一個類裏有抽象方法,那麼這個類只能是抽象類
i.抽象方法要被實現,因此不能是靜態的,也不能是私有的。
j.接口可繼承接口,並可多繼承接口,但類只能單根繼承。

15.java 中 IO 流分爲幾種?

https://www.cnblogs.com/QQ846300233/p/6046388.html

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

https://blog.csdn.net/u010310183/article/details/81700405

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

http://www.javashuo.com/article/p-dpmbvpaf-bn.html

2、容器

18.java 容器都有哪些?

 https://www.cnblogs.com/LipeiNet/p/5888513.html

19.Collection 和 Collections 有什麼區別?

 https://www.cnblogs.com/cathyqq/p/5279859.html

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

21.HashMap 和 Hashtable 有什麼區別?

https://www.cnblogs.com/williamjie/p/9099141.html

https://blog.csdn.net/ns_code/article/details/36191279

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

https://www.cnblogs.com/williamjie/p/9099141.html

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

https://www.cnblogs.com/chengxiao/p/6059914.html

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

https://www.cnblogs.com/codercui/p/6841730.html

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

https://www.cnblogs.com/Jacck/p/8034900.html

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

toArray(),aslist()

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

https://www.cnblogs.com/rnmb/p/6553711.html

28.Array 和 ArrayList 有何區別?

https://www.cnblogs.com/zcscnn/p/7743507.html

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

https://blog.csdn.net/ustcjackylau/article/details/42454779

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

Vector ,HashTable ,StringBuffer 

31.迭代器 Iterator 是什麼?

https://www.cnblogs.com/softidea/p/5167676.html

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

next,hasnext,remove

33.Iterator 和 ListIterator 有什麼區別?

https://www.cnblogs.com/tjudzj/p/4459443.html

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

https://www.cnblogs.com/peida/p/Guava_ImmutableCollections.html

3、多線程

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

併發:指應用可以交替執行不一樣的任務,其實併發有點相似於多線程的原理,多線程並不是是同時執行多個任務,若是你開兩個線程執行,就是在你幾乎不可能察覺到的速度不斷去切換這兩個任務,已達到"同時執行效果",其實並非的,只是計算機的速度太快,咱們沒法察覺到而已.
就相似於你,吃一口飯喝一口水,以正常速度來看,徹底可以看的出來,當你把這個過程以n倍速度執行時..能夠想象一下.

並行:指應用可以同時執行不一樣的任務,例:吃飯的時候能夠邊吃飯邊打電話,這兩件事情能夠同時執行

36.線程和進程的區別?

http://www.javashuo.com/article/p-qtxtqonl-hc.html

37.守護線程是什麼?

守護線程(即daemon thread),是個服務線程,準確地來講就是服務其餘的線程,這是它的做用——而其餘的線程只有一種,那就是用戶線程。因此java裏線程分2種,
一、守護線程,好比垃圾回收線程,就是最典型的守護線程。
二、用戶線程,就是應用程序裏的自定義線程。

守護線程
一、守護線程,專門用於服務其餘的線程,若是其餘的線程(即用戶自定義線程)都執行完畢,連main線程也執行完畢,那麼jvm就會退出(即中止運行)——此時,連jvm都中止運行了,守護線程固然也就中止執行了。
二、再換一種說法,若是有用戶自定義線程存在的話,jvm就不會退出——此時,守護線程也不能退出,也就是它還要運行,幹嗎呢,就是爲了執行垃圾回收的任務啊。

用戶自定義線程
一、應用程序裏的線程,通常都是用戶自定義線程。
二、用戶也能夠在應用程序代碼自定義守護線程,只須要調用Thread類的設置方法設置一下便可。

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

Thread, runable callable

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

40.線程有哪些狀態?

https://www.cnblogs.com/happy-coder/p/6587092.html

new runnable  running blocked dead

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

sleep不釋放鎖。

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

隨機的一個,所有

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

run跑裏面的內容,由虛擬機運行線程是直接調用,不是由應用代碼調用,start只是啓動。

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

https://www.cnblogs.com/liuchuanfeng/p/6956014.html

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

https://blog.csdn.net/weixin_40459875/article/details/80290875

https://blog.csdn.net/michaelehome/article/details/80226205

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

https://blog.csdn.net/always_younger/article/details/79462684

49.什麼是死鎖?

https://www.cnblogs.com/xujingyang/p/6677160.html

50.怎麼防止死鎖?

http://www.cnblogs.com/sessionbest/articles/8688581.html

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

https://www.cnblogs.com/dolphin0520/p/3920407.html ,好比數據庫的連接啊,session啊

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

https://baijiahao.baidu.com/s?id=1612142459503895416&wfr=spider&for=pc

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

https://baijiahao.baidu.com/s?id=1612142459503895416&wfr=spider&for=pc 碼農登陸,他寫的挺有意思的。

54.synchronized 和 Lock 有什麼區別?

https://www.cnblogs.com/handsomeye/p/5999362.html 一個關鍵字,一個藉口

55.synchronized 和 ReentrantLock 區別是什麼?

是實現lock接口的類,可重入鎖

56.說一下 atomic 的原理?

https://blog.csdn.net/wuzhiwei549/article/details/82621947

4、反射

57.什麼是反射?

https://www.cnblogs.com/ysocean/p/6516248.html

58.什麼是 java 序列化?什麼狀況下須要序列化?

https://blog.csdn.net/mengdeng8882/article/details/79658947

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

https://blog.csdn.net/woshichuanqihan/article/details/52205137

60.怎麼實現動態代理?

https://www.cnblogs.com/gonjan-blog/p/6685611.html

補充:https://www.cnblogs.com/w-wfy/p/6265965.html

5、對象拷貝

61.爲何要使用克隆?

想對一個對象進行處理,又想保留原有的數據進行接下來的操做,就須要克隆了。克隆分淺克隆和深克隆,淺克隆後的對象中非基本對象和原對象指向同一塊內存,所以對這些非基本對象的修改會同時更改克隆先後的對象。深克隆能夠實現徹底的克隆,能夠用反射的方式或序列化的方式實現。

62.如何實現對象克隆?

https://blog.csdn.net/w410589502/article/details/54985987

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

 同上

6、Java Web

64.jsp 和 servlet 有什麼區別?

https://www.cnblogs.com/zhaideyou/p/5929960.html

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

https://www.cnblogs.com/dqh94/p/6062703.html

https://blog.csdn.net/xz_src/article/details/73603234

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

 https://blog.csdn.net/koches/article/details/7785438

67.session 和 cookie 有什麼區別?

https://baijiahao.baidu.com/s?id=1619095369231494766&wfr=spider&for=pc

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

https://www.cnblogs.com/st-leslie/p/8016951.html

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

能夠,從新url

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

https://www.cnblogs.com/wl0000-03/p/7803276.html

https://www.cnblogs.com/xu-cceed3w/p/9238137.html

71.如何避免 sql 注入?

https://www.cnblogs.com/shenbuer/p/7875419.html

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

https://baijiahao.baidu.com/s?id=1620995901493569446&wfr=spider&for=pc

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

https://blog.csdn.net/qq_40884473/article/details/78447884

7、異常

74.throw 和 throws 的區別?

a.throws出如今方法函數頭;而throw出如今函數體。
b.throws表示出現異常的一種可能性,並不必定會發生這些異常;throw則是拋出了異常,執行throw則必定拋出了某種異常對象。
c.二者都是消極處理異常的方式(這裏的消極並非說這種方式很差),只是拋出或者可能拋出異常,可是不會由函數去處理異常,真正的處理異常由函數的上層調用處理。

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

a.final修飾符(關鍵字)。被final修飾的類,就意味着不能再派生出新的子類,不能做爲父類而被子類繼承。所以一個類不能既被abstract聲明,又被final聲明。將變量或方法聲明爲final,能夠保證他們在使用的過程當中不被修改。被聲明爲final的變量必須在聲明時給出變量的初始值,而在之後的引用中只能讀取。被final聲明的方法也一樣只能使用,即不能方法重寫。
b.finally是在異常處理時提供finally塊來執行任何清除操做。無論有沒有異常被拋出、捕獲,finally塊都會被執行。try塊中的內容是在無異常時執行到結束。catch塊中的內容,是在try塊內容發生catch所聲明的異常時,跳轉到catch塊中執行。finally塊則是不管異常是否發生,都會執行finally塊的內容,因此在代碼邏輯中有須要不管發生什麼都必須執行的代碼,就能夠放在finally塊中。
c.finalize是方法名。java技術容許使用finalize()方法在垃圾收集器將對象從內存中清除出去以前作必要的清理工做。這個方法是由垃圾收集器在肯定這個對象沒有被引用時對這個對象調用的。它是在object類中定義的,所以全部的類都繼承了它。子類覆蓋finalize()方法以整理系統資源或者被執行其餘清理工做。finalize()方法是在垃圾收集器刪除對象以前對這個對象調用的。

76.try-catch-finally 中哪一個部分能夠省略?

catch部分能夠省略,也能夠有多個。

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

會,finally語句塊必定會執行。

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

省略……

8、網絡

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

80.forward 和 redirect 的區別?

81.簡述 tcp 和 udp的區別?

82.tcp 爲何要三次握手,兩次不行嗎?爲何?

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

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

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

86.如何實現跨域?

87.說一下 JSONP 實現原理?

9、設計模式

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

代理模式、工廠模式,

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

https://blog.csdn.net/xiao1_1bing/article/details/81774931#

10、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 的做用是什麼?

11、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 的核心組件有哪些?

12、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 實體類必需要有無參構造函數嗎?爲何?

十3、Mybatis

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

126.mybatis 有幾種分頁方式?

127.RowBounds 是一次性查詢所有結果嗎?爲何?

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

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

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

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

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

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

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

十4、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 對集羣節點中止順序有要求嗎?

十5、Kafka

152.kafka 能夠脫離 zookeeper 單獨使用嗎?爲何?

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

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

155.什麼狀況會致使 kafka 運行變慢?

156.使用 kafka 集羣須要注意什麼?

十6、Zookeeper

157.zookeeper 是什麼?

158.zookeeper 都有哪些功能?

159.zookeeper 有幾種部署模式?

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

161.集羣中爲何要有主節點?

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

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

十7、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 的性能優化?

十8、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 常見的性能問題有哪些?該如何解決?

十9、JVM

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

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

196.說一下堆棧的區別?

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

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

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

200.怎麼判斷對象是否能夠被回收?

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

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

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

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

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

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

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

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

轉載自: https://www.cnblogs.com/cocoxu1992/p/10460251.html

相關文章
相關標籤/搜索