這份面試清單是我17年轉管理崗位以後開始整理的,一方面是用來給公司新員工面試一用,另外一方面也是想用它來挖掘我在 Java 技術棧中的技術盲點,而後修復和完善它,以此來提升本身的技術水平。雖然我從2014年就開始參加編程工做了,但依舊以爲還有不少東西要學,固然學習的過程也給我帶來了不少成就感,這些成就感也推進我學習更多的技術知識。
java
這裏你們也能夠關注個人我的專欄《Java 進階集中營》,會給你們即時分享一個最新java資訊,有優秀的問題回答,歡迎分享在個人專欄。mysql
JAVA 進階集中營
zhuanlan.zhihu.com
程序員
說實話剛開始的時候仍是比較猶豫的,首先我會以爲這麼作會不會有點幫人「做弊」的嫌疑,最後我想通了,這是一件值得去作的事兒。面試
* 第一*:可以讓更多的人所以而學到了更多的知識,這是一件大好事。
第二:這只是經驗的高度提煉,讓那些本來就掌握了技術殊不知道怎麼表達的人,學會如何在面試中展現本身。
第三:若是隻是死記硬背這些面試題,只要面試官再深刻問糾一下,也可對這我的有一個準確的認識,以前說的「幫人做弊」的事就不存在了。
第四**:學習有不少種方式,但只有好學者纔會臨池學書。若是是不想學的人,提供再多再好的資料放在他們的面前,他們也會視而不見。
就像以前聽過的一個故事,爲何在美國有些企業只要看你是哈佛的學歷就直接錄取?並非哈佛有多麼厲害,固然教學質量也是其中緣由之一,但更多的是在美國上大學仍是挺貴的,首先你能上的起哈佛,說明你的家庭條還不錯,從小應該就有不少參加更好教育的機會;
redis
其次,你能進入哈佛,也說明你腦子不笨,能考的上哈佛;最後纔是哈佛確實能給你提供一個,相對不錯的教育環境。綜合以上特質,因此這些企業纔敢直接聘請那些有哈佛學歷的人。算法
對應到咱們這份面試題其實也同樣,首先你若是能記住其中大部分的答案說明,第一,你很聰明而且記性還很好;第二,說明你有上進心,也願意學習;第三,有了這份面試題作理論支撐以後,即便你的實踐經驗沒有那麼多,但懂得原理的你,作出來的程序也必定不會太差。spring
因此若是您是面試官,剛好又看到這裏,若是條件容許的話,請多給這樣願意學又很聰明的年輕人多一些機會。sql
一:面試題模塊介紹數據庫
說了這麼多,仍是直奔主題,咱們這份面試題,包含了十九個模塊:Java 基礎、容器、多線程、反射、對象拷貝、Java Web 模塊、異常、網絡、設計模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。以下圖所示:編程
可能對於初學者不須要看後面的框架和 JVM 模塊的知識,讀者朋友們可根據本身的狀況,選擇對應的模塊進行閱讀。
適宜閱讀人羣
- 須要面試的初/中/高級 Java 程序員
- 想要查漏補缺的人
- 想要不斷完善擴充本身 Java 技術棧的人
- Java 面試官
二:具體面試題
1. Java 基礎
1.JDK 和 JRE 有什麼區別?
-
== 和 equals 的區別是什麼?
-
兩個對象的 hashCode() 相同,則 equals() 也必定爲 true,對嗎?
-
final 在 java 中有什麼做用?
-
java 中的 Math.round(-1.5) 等於多少?
-
String 屬於基礎的數據類型嗎?
-
java 中操做字符串都有哪些類?它們之間有什麼區別?
-
String str="i"與 String str=new String(「i」)同樣嗎?
-
如何將字符串反轉?
-
String 類的經常使用方法都有那些?
-
抽象類必需要有抽象方法嗎?
-
普通類和抽象類有哪些區別?
-
抽象類能使用 final 修飾嗎?
-
接口和抽象類有什麼區別?
-
java 中 IO 流分爲幾種?
-
BIO、NIO、AIO 有什麼區別?
- Files的經常使用方法都有哪些?
2. 容器
-
java 容器都有哪些?
-
Collection 和 Collections 有什麼區別?
-
List、Set、Map 之間的區別是什麼?
-
HashMap 和 Hashtable 有什麼區別?
-
如何決定使用 HashMap 仍是 TreeMap?
-
說一下 HashMap 的實現原理?
-
說一下 HashSet 的實現原理?
-
ArrayList 和 LinkedList 的區別是什麼?
-
如何實現數組和 List 之間的轉換?
-
ArrayList 和 Vector 的區別是什麼?
-
Array 和 ArrayList 有何區別?
-
在 Queue 中 poll()和 remove()有什麼區別?
-
哪些集合類是線程安全的?
-
迭代器 Iterator 是什麼?
-
Iterator 怎麼使用?有什麼特色?
-
Iterator 和 ListIterator 有什麼區別?
- 怎麼確保一個集合不能被修改?
3. 多線程
-
並行和併發有什麼區別?
-
線程和進程的區別?
-
守護線程是什麼?
-
建立線程有哪幾種方式?
-
說一下 runnable 和 callable 有什麼區別?
-
線程有哪些狀態?
-
sleep() 和 wait() 有什麼區別?
-
notify()和 notifyAll()有什麼區別?
- 線程的 run()和 start()有什麼區別?
44.建立線程池有哪幾種方式?
45.線程池都有哪些狀態?
-
線程池中 submit()和 execute()方法有什麼區別?
-
在 java 程序中怎麼保證多線程的運行安全?
-
多線程鎖的升級原理是什麼?
-
什麼是死鎖?
-
怎麼防止死鎖?
-
ThreadLocal 是什麼?有哪些使用場景?
-
說一下 synchronized 底層實現原理?
-
synchronized 和 volatile 的區別是什麼?
-
synchronized 和 Lock 有什麼區別?
-
synchronized 和 ReentrantLock 區別是什麼?
- 說一下 atomic 的原理?
4. 反射
-
什麼是反射?
-
什麼是 java 序列化?什麼狀況下須要序列化?
-
動態代理是什麼?有哪些應用?
- 怎麼實現動態代理?
5. 對象拷貝
-
爲何要使用克隆?
-
如何實現對象克隆?
- 深拷貝和淺拷貝區別是什麼?
6. Java Web
-
jsp 和 servlet 有什麼區別?
-
jsp 有哪些內置對象?做用分別是什麼?
-
說一下 jsp 的 4 種做用域?
-
session 和 cookie 有什麼區別?
-
說一下 session 的工做原理?
-
若是客戶端禁止 cookie 能實現 session 還能用嗎?
-
spring mvc 和 struts 的區別是什麼?
-
如何避免 sql 注入?
-
什麼是 XSS ***,如何避免?
- 什麼是 CSRF ***,如何避免?
7. 異常
-
throw 和 throws 的區別?
-
final、finally、finalize 有什麼區別?
-
try-catch-finally 中哪一個部分能夠省略?
-
try-catch-finally 中,若是 catch 中 return 了,finally 還會執行嗎?
- 常見的異常類有哪些?
8. 網絡
-
http 響應碼 301 和 302 表明的是什麼?有什麼區別?
-
forward 和 redirect 的區別?
-
簡述 tcp 和 udp的區別?
-
tcp 爲何要三次握手,兩次不行嗎?爲何?
-
說一下 tcp 粘包是怎麼產生的?
-
OSI 的七層模型都有哪些?
-
get 和 post 請求有哪些區別?
-
如何實現跨域?
- 說一下 JSONP 實現原理?
9. 設計模式
-
說一下你熟悉的設計模式?
- 簡單工廠和抽象工廠有什麼區別?
10. Spring/Spring MVC
-
爲何要使用 spring?
-
解釋一下什麼是 aop?
-
解釋一下什麼是 ioc?
-
spring 有哪些主要模塊?
-
spring 經常使用的注入方式有哪些?
-
spring 中的 bean 是線程安全的嗎?
-
spring 支持幾種 bean 的做用域?
-
spring 自動裝配 bean 有哪些方式?
-
spring 事務實現方式有哪些?
-
說一下 spring 的事務隔離?
-
說一下 spring mvc 運行流程?
-
spring mvc 有哪些組件?
-
@RequestMapping 的做用是什麼?
- @Autowired 的做用是什麼?
11. Spring Boot/Spring Cloud
-
什麼是 spring boot?
-
爲何要用 spring boot?
-
spring boot 核心配置文件是什麼?
-
spring boot 配置文件有哪幾種類型?它們有什麼區別?
-
spring boot 有哪些方式能夠實現熱部署?
-
jpa 和 hibernate 有什麼區別?
-
什麼是 spring cloud?
-
spring cloud 斷路器的做用是什麼?
- spring cloud 的核心組件有哪些?
12. Hibernate
-
爲何要使用 hibernate?
-
什麼是 ORM 框架?
-
hibernate 中如何在控制檯查看打印的 sql 語句?
-
hibernate 有幾種查詢方式?
-
hibernate 實體類能夠被定義爲 final 嗎?
-
在 hibernate 中使用 Integer 和 int 作映射有什麼區別?
-
hibernate 是如何工做的?
-
get()和 load()的區別?
-
說一下 hibernate 的緩存機制?
-
hibernate 對象有哪些狀態?
-
在 hibernate 中 getCurrentSession 和 openSession 的區別是什麼?
- hibernate 實體類必需要有無參構造函數嗎?爲何?
13. Mybatis
-
mybatis 中 #{}和 ${}的區別是什麼?
-
mybatis 有幾種分頁方式?
-
RowBounds 是一次性查詢所有結果嗎?爲何?
-
mybatis 邏輯分頁和物理分頁的區別是什麼?
-
mybatis 是否支持延遲加載?延遲加載的原理是什麼?
-
說一下 mybatis 的一級緩存和二級緩存?
-
mybatis 和 hibernate 的區別有哪些?
-
mybatis 有哪些執行器(Executor)?
-
mybatis 分頁插件的實現原理是什麼?
- mybatis 如何編寫一個自定義插件?
14. RabbitMQ
-
rabbitmq 的使用場景有哪些?
-
rabbitmq 有哪些重要的角色?
-
rabbitmq 有哪些重要的組件?
-
rabbitmq 中 vhost 的做用是什麼?
-
rabbitmq 的消息是怎麼發送的?
- rabbitmq 怎麼保證消息的穩定性?
141.rabbitmq 怎麼避免消息丟失?
-
要保證消息持久化成功的條件有哪些?
-
rabbitmq 持久化有什麼缺點?
-
rabbitmq 有幾種廣播類型?
-
rabbitmq 怎麼實現延遲消息隊列?
-
rabbitmq 集羣有什麼用?
-
rabbitmq 節點的類型有哪些?
-
rabbitmq 集羣搭建須要注意哪些問題?
-
rabbitmq 每一個節點是其餘節點的完整拷貝嗎?爲何?
-
rabbitmq 集羣中惟一一個磁盤節點崩潰了會發生什麼狀況?
- rabbitmq 對集羣節點中止順序有要求嗎?
15. Kafka
-
kafka 能夠脫離 zookeeper 單獨使用嗎?爲何?
-
kafka 有幾種數據保留的策略?
-
kafka 同時設置了 7 天和 10G 清除數據,到第五天的時候消息達到了 10G,這個時候 kafka 將如何處理?
-
什麼狀況會致使 kafka 運行變慢?
- 使用 kafka 集羣須要注意什麼?
16. Zookeeper
-
zookeeper 是什麼?
-
zookeeper 都有哪些功能?
-
zookeeper 有幾種部署模式?
-
zookeeper 怎麼保證主從節點的狀態同步?
-
集羣中爲何要有主節點?
-
集羣中有 3 臺服務器,其中一個節點宕機,這個時候 zookeeper 還可使用嗎?
- 說一下 zookeeper 的通知機制?
17. MySql
-
數據庫的三範式是什麼?
-
一張自增表裏面總共有 7 條數據,刪除了最後 2 條數據,重啓 mysql 數據庫,又插入了一條數據,此時 id 是幾?
-
如何獲取當前數據庫版本?
-
說一下 ACID 是什麼?
-
char 和 varchar 的區別是什麼?
-
float 和 double 的區別是什麼?
-
mysql 的內鏈接、左鏈接、右鏈接有什麼區別?
-
mysql 索引是怎麼實現的?
-
怎麼驗證 mysql 的索引是否知足需求?
-
說一下數據庫的事務隔離?
-
說一下 mysql 經常使用的引擎?
-
說一下 mysql 的行鎖和表鎖?
-
說一下樂觀鎖和悲觀鎖?
-
mysql 問題排查都有哪些手段?
- 如何作 mysql 的性能優化?
18. Redis
-
redis 是什麼?都有哪些使用場景?
-
redis 有哪些功能?
-
redis 和 memecache 有什麼區別?
-
redis 爲何是單線程的?
-
什麼是緩存穿透?怎麼解決?
-
redis 支持的數據類型有哪些?
-
redis 支持的 java 客戶端都有哪些?
-
jedis 和 redisson 有哪些區別?
-
怎麼保證緩存和數據庫數據的一致性?
- redis 持久化有幾種方式?
189.redis 怎麼實現分佈式鎖?
-
redis 分佈式鎖有什麼缺陷?
-
redis 如何作內存優化?
-
redis 淘汰策略有哪些?
- redis 常見的性能問題有哪些?該如何解決?
19. JVM
-
說一下 jvm 的主要組成部分?及其做用?
-
說一下 jvm 運行時數據區?
-
說一下堆棧的區別?
-
隊列和棧是什麼?有什麼區別?
-
什麼是雙親委派模型?
-
說一下類加載的執行過程?
-
怎麼判斷對象是否能夠被回收?
-
java 中都有哪些引用類型?
-
說一下 jvm 有哪些垃圾回收算法?
-
說一下 jvm 有哪些垃圾回收器?
-
詳細介紹一下 CMS 垃圾回收器?
-
新生代垃圾回收器和老生代垃圾回收器都有哪些?有什麼區別?
-
簡述分代垃圾回收器是怎麼工做的?
-
說一下 jvm 調優的工具?
- 經常使用的 jvm 調優的參數都有哪些?
這裏我也將剩餘的面試資料整理成文檔形式,文檔獲取方式,關注個人專欄《java 進階集中營》,獲取方式在專欄簡介下方