雖然疫情還沒結束,但卻依舊阻擋不了氣勢洶洶的春招大軍。金三已到末尾,銀四即將開啓,時間不等人,機會錯失不再,好好把握,爭取一舉拿下春招,順利跳槽漲個薪。那麼今天小編就分享一份127頁的“春招JAVA面試手冊”,望助正在準備面試的你一臂之力!
本寶冊共分爲五大面試專欄,分別是性能優化、微服務、併發編程、開源框架、分佈式等。
一、性能調優面試專欄(Tomcat+JVM+MySQL)
1.1 Tomcat性能優化整理(6)
- 你怎樣給Tomcat調優?
- 如何加大Tomcat連接數?
- 怎樣加大Tomcat的內存?
- Tomcat中如何禁止列目錄下的文件?
- Tomcat有幾種部署方式?
- Tomcat的優化經驗?
1.2 JVM性能優化整理(21)
- Java類加載過程?
- Java內存分配?
- 描述一下JVM加載Class文件的原理機制?
- GC是什麼?爲什麼要有GC?
- 什麼是Java垃圾回收機制?
- 如何判斷一個對象是否存活?
- 垃圾回收的優點和原理?並考慮2中回收機制?
- 垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收內存嗎?
- Java中會存在內存泄漏嗎?
- 深拷貝和淺拷貝?
- System.gc()和Runtime.gc()會做什麼事情?
- finalize()方法什麼時候被調用?析構函數的目的是什麼?
- 如果對象的引用被置爲null,垃圾收集器是否會立即釋放對象佔用的內存?
- 什麼是分佈式垃圾回收(DGC)?它是如何工作的?
- 串行(serial)收集(throughput)器和吞吐量收集器的區別是什麼?
- 在Java中,對象什麼時候可以被垃圾回收?
- 簡述 Java 內存分配與回收策率以及 Minor GC 和 MajorGC
- JVM 的永久代中會發生垃圾回收麼?
- Java 中垃圾收集的方法有哪些?
- 什麼是類加載器,類加載器有哪些?
- 類加載器雙親委派模型機制?
1.3 MySQL性能優化整理(21)
- 爲查詢緩存優化你的查詢
- EXPLAIN你的SELECT查詢
- 當只要一行數據時使用LIMIT 1
- 爲搜索字段建索引
- 在Join表的時候使用相當類型的例,並將其索引
- 千萬不要 ORDER BY RAND()
- 避免 SELECT *
- 永遠爲每張表設置一個 ID
- 使用 ENUM 而不是 VARCHAR
- 從 PROCEDURE ANALYSE() 取得建議
- 儘可能的使用 NOT NULL
- Prepared Statements
- 無緩衝的查詢
- 把 IP 地址存成 UNSIGNED INT
- 固定長度的表會更快
- 垂直分割
- 拆分大的 DELETE 或 INSERT 語句
- 越小的列會越快
- 選擇正確的存儲引擎
- 使用一個對象關係映射器(Object Relational Mapper)
- 小心“永久鏈接”
二、微服務架構面試專欄(SpringCloud+SpringBoot+Dubbo)
2.1 SpringCloud面試整理(8)
- 什麼是 Spring Cloud?
- 使用 Spring Cloud 有什麼優勢?
- 服務註冊和發現是什麼意思?Spring Cloud 如何實現?
- 負載平衡的意義什麼?
- 什麼是 Hystrix?它如何實現容錯?
- 什麼是 Hystrix 斷路器?我們需要它嗎?
- 什麼是 Spring Cloud Bus?我們需要它嗎?
- 什麼是 Netflix Feign?它的優點是什麼?
2.2 SpringBoot面試整理(21)
- 什麼是 Spring Boot?
- Spring Boot 有哪些優點?
- 什麼是 JavaConfig?
- 如何重新加載 Spring Boot 上的更改,而無需重新啓動服務器?
- Spring Boot 中的監視器是什麼?
- 如何在 Spring Boot 中禁用 Actuator 端點安全性?
- 如何在自定義端口上運行 Spring Boot 應用程序?
- 什麼是 YAML?
- 什麼是 Spring Profiles?
- 什麼是 Spring Batch?
- 如何集成 Spring Boot 和 ActiveMQ?
- 如何使用 Spring Boot 實現分頁和排序?
- 什麼是 Swagger?你用 Spring Boot 實現了它嗎?
- 什麼是 FreeMarker 模板?
- 如何使用 Spring Boot 實現異常處理?
- 您使用了哪些 starter maven 依賴項?
- 什麼是 CSRF 攻擊?
- 什麼是 WebSockets?
- 什麼是 AOP?
- 什麼是 Apache Kafka?
-
我們如何監視所有 Spring Boot 微服務?
2.3 Dubbo面試整理(8)
- Dubbo 中 zookeeper 做註冊中心,如果註冊中心集羣都掛掉,發佈者和訂閱者之間還能通信麼?
- dubbo 服務負載均衡策略?
- Dubbo 在安全機制方面是如何解決的?
- dubbo 連接註冊中心和直連的區別?
- dubbo 服務集羣配置(集羣容錯模式)?
- dubbo 通信協議 dubbo 協議爲什麼要消費者比提供者個數多?
- dubbo 通信協議 dubbo 協議爲什麼不能傳大包?
- dubbo 通信協議 dubbo 協議適用範圍和適用場景?
三、併發編程高級面試專欄(Synchronized+ReentrantLock+線程池+內存模型)
- Synchronized用 嗎,其原理是什麼 ?
- 你剛纔提到獲取對象的鎖,這個“鎖 ”到底是什麼?如何確定對象的鎖 ?
- 什麼是可重入性,爲什麼說Synchronized是可重入鎖?
- JVM對Java的原生鎖做了哪些優化?
- 爲什麼說Synchronized是非公平鎖?
- 什麼是鎖消除和鎖粗化?
- 爲什麼說Synchronized是一個悲觀鎖?樂觀鎖的實現原理又是什麼?什麼是CAS,它有什麼特性?
- 樂觀鎖一定就是好的嗎?
- 跟Synchronized 相 比,可重入鎖ReentrantLock其實現原理有什麼不同?
- 那麼請談談AQS框架是怎麼回事兒?
- 請儘可能詳盡地對比下Synchronized和ReentrantLock的異同 。
- ReentrantLock 是如何實現可重入性的?
- 除了ReetrantLock,你還接觸過JUC中的哪些併發工具?
- 請談談ReadWriteLock和StampedLock。
- 如何讓Java的線程彼此同步?你瞭解過哪些同步器?請分別介紹 下 。
- CyclicBarrier和CountDownLatch看起來很相似 ,請對比下呢?
- Java中的線程池是如何實現的?
- 創建線程池的幾個核心構造參數?
- 線程池中的線程是怎麼創建的?是一開始就隨着線程池的啓動創建好的嗎?
- 既然提到可以通過配置不同參數創建出不同的線 程 池,那 麼Java中默認實現好的線程池又有哪些呢 ?
-
如何在Java線程池中提交線程?
四、開源框架面試專欄(Spring+SpringMVC+MyBatis)
4.1 Spring面試專題(32)
- 什麼是 Spring 框架?Spring 框架有哪些主要模塊?
- 使用 Spring 框架能帶來哪些好處?
- Spring 框架中有哪些不同類型的事件?
- Spring 框架中都用到了哪些設計模式?
- 什麼是控制反轉(IOC)?
- 請解釋下 Spring 框架中的 IoC ?
- BeanFactory 和 和 ApplicationContext 有什麼區別?
- Spring 有幾種配置方式?
- 如何用基於 XML 配置的方式配置 Spring ?
- 如何用基於 Java 配置的方式配置 Spring ?
- 怎樣用註解的方式配置 Spring ?
- 請解釋 Spring Bean 的生命週期?
- Spring Bean 的作用域之間有什麼區別?
- 什麼是 Spring inner beans ?
- Spring 框架中的單例 Beans 是線程安全的麼?
- 請舉例說明如何在 Spring 中注入一個 Java Collection ?
- 如何向 Spring Bean 中注入一個 Java.util.Properties ?
- 請解釋 Spring Bean 的自動裝配?
- 請解釋自動裝配模式的區別?
- 如何開啓基於註解的自動裝配
- 請舉例解釋@Required 註解?
- 請舉例解釋@Autowired 註解?
- 請舉例說明@Qualifier 註解?
- 構造方法注入和設值注入有什麼區別?
- FileSystemResource 和 和 ClassPathResource 有何區別?
- Spring 在ssm中起什麼作用?
- Spring的事務?
- IOC 在項目中的作用?
- Spring的配置文件中的內容?
- Spring下的註解?
- Spring DI 的三種方式?
-
Spring主要使用了什麼模式?
4.2 SpringMVC面試專題(30)
- 什麼是 SpringMvc?
- Spring MVC 的優點:
- SpringMVC 工作原理?
- SpringMVC 流程?
- SpringMvc 的控制器是不是單例模式,如果是,有什麼問題,怎麼解決?
- 如果你也用過 struts2.簡單介紹下 springMVC 和 struts2 的區別有哪些?
- SpingMvc 中的控制器的註解一般用那個,有沒有別的註解可以替代?
- @RequestMapping 註解用在類上面有什麼作用?
- 怎麼樣把某個請求映射到特定的方法上面?
- 如果在攔截請求中,我想攔截 get 方式提交的方法,怎麼配置?
- 怎麼樣在方法裏面得到 Request,或者 Session?
- 我想在攔截的方法裏面得到從前臺傳入的參數,怎麼得到?
- 如果前臺有很多個參數傳入,並且這些參數都是一個對象的,那麼怎麼樣快速得到這個對象?
- SpringMvc 中函數的返回值是什麼?
- SpringMVC 怎麼樣設定重定向和轉發的?
- SpringMvc 用什麼對象從後臺向前臺傳遞數據的?
- SpringMvc 中有個類把視圖和數據都合併的一起的,叫什麼?
- 怎麼樣把 ModelMap 裏面的數據放入 Session 裏面?
- SpringMvc 怎麼和 AJAX 相互調用的?
- 講下 SpringMvc 的執行流程
- SpringMvc 裏面攔截器是怎麼寫的?
- 當一個方法向 AJAX 返回特殊對象,譬如 Object,List 等,需要做什麼處理?
- SpringMvc 的控制器是不是單例模式,如果是,有什麼問題,怎麼解決?
- SpringMvc 中控制器的註解?
- @RequestMapping 註解用在類上的作用?
- 前臺多個參數,這些參數都是一個對象,快速得到對象?
- SpringMvc中函數的返回值?
- SpringMvc中的轉發和重定向?
- SpringMvc和Ajax之間的相互調用?
-
Struts2 和 SpringMvc的區別?
image.png
4.3 MyBatis面試專題(32)
- 什麼是 MyBatis?講下 MyBatis 的緩存
- Mybatis 是如何進行分頁的?分頁插件的原理是什麼?
- 簡述 Mybatis 的插件運行原理,以及如何編寫一個插件?
- Mybatis 動態 sql 是做什麼的?都有哪些動態 sql?能簡述一下動態 sql 的執行原理不?
- "#{}和${}"的區別是什麼?
- 爲什麼說 Mybatis 是半自動 ORM 映射工具?它與全自動的區別在哪裏?
- Mybatis 是否支持延遲加載?如果支持,它的實現原理是什麼?
- MyBatis 與 Hibernate 有哪些不同?
- MyBatis 的好處是什麼?
- 簡述 Mybatis 的 Xml 映射文件和 Mybatis 內部數據結構之間的映射關係?
- 什麼是 MyBatis 的接口綁定,有什麼好處?
- 接口綁定有幾種實現方式,分別是怎麼實現的?
- 什麼情況下用註解綁定,什麼情況下用 xml 綁定?
- MyBatis 實現一對一有幾種方式?具體怎麼操作的?
- Mybatis 能執行一對一、一對多的關聯查詢嗎?都有哪些實現方式,以及它們之間的區別?
- MyBatis 裏面的動態 Sql 是怎麼設定的?用什麼語法?
- Mybatis 是如何將 sql 執行結果封裝爲目標對象並返回的?都有哪些映射形式?
- Xml 映射文件中,除了常見的 select|insert|updae|delete 標籤之外,還有哪些標籤?
- 當實體類中的屬性名和表中的字段名不一樣,如果將查詢的結果封裝到指定 pojo?
- 通常一個 Xml 映射文件,都會寫一個 Dao 接口與之對應, Dao 的工作原理,是否可以重載?
- Mybatis 映射文件中,如果 A 標籤通過 include 引用了 B 標籤的內容,請問,B 標籤能否定義在 A 標籤的後面,還是說必須定義在 A 標籤的前面?
- Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重複?
- Mybatis 都有哪些 Executor 執行器?它們之間的區別是什麼?
- Mybatis 中如何指定使用哪一種 Executor 執行器?
- Mybatis 執行批量插入,能返回數據庫主鍵列表嗎?
- Mybatis 是否可以映射 Enum 枚舉類?
- 如何獲取自動生成的(主)鍵值?
- 在 mapper 中如何傳遞多個參數?
- resultType resultMap 的區別?
- 使用 MyBatis 的 mapper 接口調用時有哪些要求?
- Mybatis 比 IBatis 比較大的幾個改進是什麼?
-
IBatis 和 MyBatis 在覈心處理類分別叫什麼?在細節上的不同有哪些?
五、分佈式面試專欄(限流+通訊+數據庫)
5.1 分佈式限流面試整理(ZK+Nginx)
5.1.1 Zookeeper專題(23)
- ZooKeeper 是什麼?
- ZooKeeper 提供了什麼?
- Zookeeper 文件系統
- 四種類型的 znode
- Zookeeper 通知機制
- Zookeeper 做了什麼?
- zk 的命名服務(文件系統)
- zk 的配置管理(文件系統、通知機制)
- Zookeeper 集羣管理(文件系統、通知機制)
- Zookeeper 分佈式鎖(文件系統、通知機制)
- 獲取分佈式鎖的流程
- Zookeeper 隊列管理(文件系統、通知機制)
- Zookeeper 數據複製
- Zookeeper 工作原理
- zookeeper 是如何保證事務的順序一致性的?
- Zookeeper 下 Server 工作狀態
- zookeeper 是如何選取主 leader 的?
- 分佈式通知和協調
- 機器中爲什麼會有 leader?
- zk 節點宕機如何處理?
- Zookeeper 同步流程
- zookeeper 負載均衡和 nginx 負載均衡區別
- zookeeper watch 機制
5.1.2 Nginx專題(17)
- 請列舉 x Nginx 的一些特性。
- 請列舉 x Nginx 和 和 Apache 之間的不同點
- 請解釋 x Nginx 如何處理 P HTTP 請求。
- 在 x Nginx 中,如何使用未定義的服務器名稱來阻止處理請求?
- 使用 “ 反向代理服務器 ”
- 請列舉 x Nginx 服務器的最佳用途。
- 請解釋 x Nginx 服務器上的 r Master 和 和 r Worker 進程分別是什麼?
- 請解釋你如何通過不同於 0 80 的端口開啓 Nginx?
- 請解釋是否有可能將 x Nginx 的錯誤替換爲 2 502 錯誤?
- 在 x Nginx 中,解釋如何在 L URL 中保留雙斜線? ?
- 請解釋 e ngx_http_upstream_module 的作用是什麼?
- 請解釋什麼是 K C10K 問題?
- 請陳述 s stub_status 和 和 r sub_filter 指令的作用是什麼?
- 解釋 x Nginx 是否支持將請求壓縮到上游?
- 解釋如何在 x Nginx 中獲得當前的時間?
- 用 x Nginx 服務器解釋s -s 的目的是什麼?
-
解釋如何在 x Nginx 服務器上添加模塊?
image.png
5.2 分佈式通訊面試整理(ActiveMQ+Kafka+RabbitMQ)
5.2.1 ActiveMQ專題(7)
- 什麼是 ActiveMQ?
- ActiveMQ 服務器宕機怎麼辦?
- 丟消息怎麼辦?
- 持久化消息非常慢
- 消息的不均勻消費
- 死信隊列
- ActiveMQ 中的消息重發時間間隔和重發次數嗎?
5.2.2 Kafka專題(17)
- Kafka 的設計時什麼樣的呢?
- 數據傳輸的事物定義有哪三種?
- Kafka 判斷一個節點是否還活着有那兩個條件?
- producer 是否直接將數據發送到 broker 的 leader(主節點)?
- Kafa consumer 是否可以消費指定分區消息?
- Kafka 消息是採用 Pull 模式,還是 Push 模式?
- Kafka 存儲在硬盤上的消息格式是什麼?
- Kafka 高效文件存儲設計特點:
- Kafka 與傳統消息系統之間有三個關鍵區別
- Kafka 創建 Topic 時如何將分區放置到不同的 Broker 中
- Kafka 新建的分區會在哪個目錄下創建
- partition 的數據如何保存到硬盤
- kafka 的 ack 機制
- Kafka 的消費者如何消費數據
- 消費者負載均衡策略
- 數據有序
-
kafaka 生產數據時數據的分組策略
5.2.3 RabbitMQ專題(23)
- RabbitMQ 中的 broker 是指什麼?cluster 又是指什麼?
- 什麼是元數據?元數據分爲哪些類型?包括哪些內容?與 cluster 相關的元數據有哪些?元數據是如何保存的?元數據在 cluster 中是如何分佈的?
- RAM node 和 disk node 的區別?
- RabbitMQ 上的一個 queue 中存放的 message 是否有數量限制?
- RabbitMQ 概念裏的 channel、exchange 和 queue 這些東東是邏輯概念,還是對應着進程實體?這些東東分別起什麼作用?
- vhost 是什麼?起什麼作用?
- 在單 node 系統和多 node 構成的 cluster 系統中聲明 queue、exchange ,以及進行 binding 會有什麼不同?
- 客戶端連接到 cluster 中的任意 node 上是否都能正常工作?
- cluster 中 node 的失效會對 consumer 產生什麼影響?若是在 cluster 中創建了mirrored queue ,這時 node 失效會對 consumer 產生什麼影響?
- 能夠在地理上分開的不同數據中心使用 RabbitMQ cluster 麼?
- 爲什麼 heavy RPC 的使用場景下不建議採用 disk node ?
- 向不存在的 exchange 發 publish 消息會發生什麼?向不存在的 queue 執行consume 動作會發生什麼?
- routing_key 和 binding_key 的最大長度是多少?
- RabbitMQ 允許發送的 message 最大可達多大?
- 什麼情況下 producer 不主動創建 queue 是安全的?
- “dead letter”queue 的用途?
- 爲什麼說保證 message 被可靠持久化的條件是 queue 和 exchange 具有durable 屬性,同時 message 具有 persistent 屬性才行?
- 什麼情況下會出現 blackholed 問題?
- 如何防止出現 blackholed 問題?
- Consumer Cancellation Notification 機制用於什麼場景?
- Basic.Reject 的用法是什麼?
- 爲什麼不應該對所有的 message 都使用持久化機制?
-
RabbitMQ 中的 cluster、mirrored queue,以及 warrens 機制分別用於解決什麼問題?存在哪些問題?
5.3 分佈式數據庫面試整理(Redis+MongoDB+memcached)
5.3.1 Redis專題(14)
- redis 簡介
- 爲什麼要用 redis /爲什麼要用緩存(高性能、高併發)
- 爲什麼要用 redis 而不用 map/guava 做緩存?
- redis 和 memcached 的區別
- redis 常見數據結構以及使用場景分析(String、Hash、List、Set、Sorted Set)
- redis 設置過期時間
- redis 內存淘汰機制(MySQL裏有2000w數據,Redis中只存20w的數據,如何保證Redis中的數據都是熱點數據?)
- redis 持久化機制(怎麼保證 redis 掛掉之後再重啓數據可以進行恢復)
- redis 事務
- Redis 常見異常及解決方案(緩存穿透、緩存雪崩、緩存預熱、緩存降級)
- 分佈式環境下常見的應用場景(分佈式鎖、分佈式自增 ID)
- Redis 集羣模式(主從模式、哨兵模式、Cluster 集羣模式)
- 如何解決 Redis 的併發競爭 Key 問題
-
如何保證緩存與數據庫雙寫時的數據一致性?
5.3.2 MongoDB專題(33)
- 你說的 NoSQL 數據庫是什麼意思?NoSQL 與 RDBMS 直接有什麼區別?爲什麼要使用和不使用NoSQL 數2據庫?說一說 NoSQL 數據庫的幾個優點?
- NoSQL 數據庫有哪些類型?
- MySQL 與 MongoDB 之間最基本的差別是什麼?
- 你怎麼比較 MongoDB、CouchDB 及 CouchBase?
- MongoDB 成爲最好 NoSQL 數據庫的原因是什麼?
- 32 位系統上有什麼細微差別?
- journal 回放在條目(entry)不完整時(比如恰巧有一箇中途故障了)會遇到問題嗎?
- 分析器在 MongoDB 中的作用是什麼?
- 名字空間(namespace)是什麼?
- 如果用戶移除對象的屬性,該屬性是否從存儲層中刪除?
- 能否使用日誌特徵進行安全備份?
- 允許空值 null 嗎?
- 更新操作立刻 fsync 到磁盤?
- 如何執行事務/加鎖?
- 爲什麼我的數據文件如此龐大?
- 啓用備份故障恢復需要多久?
- 什麼是 master 或 primary?
- 什麼是 secondary 或 slave?
- 我必須調用 getLastError 來確保寫操作生效了麼?
- 我應該啓動一個集羣分片(sharded)還是一個非集羣分片的 MongoDB 環境?
- 分片(sharding)和複製(replication)是怎樣工作的?
- 數據在什麼時候纔會擴展到多個分片(shard)裏?
- 當我試圖更新一個正在被遷移的塊(chunk)上的文檔時會發生什麼?
- 如果在一個分片(shard)停止或者很慢的時候,我發起一個查詢會怎樣?
- 我可以把 moveChunk 目錄裏的舊文件刪除嗎?
- 我怎麼查看 Mongo 正在使用的鏈接?
- 如果塊移動操作(moveChunk)失敗了,我需要手動清除部分轉移的文檔嗎?
- 如果我在使用複製技術(replication),可以一部分使用日誌(journaling)而其他部分則不使用嗎?
- 當更新一個正在被遷移的塊(Chunk)上的文檔時會發生什麼?
- MongoDB 在 A:{B,C}上建立索引,查詢 A:{B,C}和 A:{C,B}都會使用索引嗎?
- 如果一個分片(Shard)停止或很慢的時候,發起一個查詢會怎樣?
- MongoDB 支持存儲過程嗎?如果支持的話,怎麼用?
-
如何理解 MongoDB 中的 GridFS 機制,MongoDB 爲何使用 GridFS 來存儲文件?
5.3.3 memcached 專題(15)
- memcached 是怎麼工作的?
- memcached 最大的優勢是什麼?
- memcached 和服務器的 local cache (比如 PHP 的 的 APC 、mmap 文件等)相比,有什麼優缺點?
- memcached 和 和 MySQL 的 的 query cache 相比,有什麼優缺點?
- memcached 的 的 cache 機制是怎樣的?
- memcached 如何實現冗餘機制?
- 我需要把 memcached 中的 item 批量導出導入,怎麼辦?
- memcached 如何處理容錯的?
- 如何將 memcached 中 中 item 批量導入導出?
- memcached 是如何做身份驗證的?
- memcached 的多線程是什麼?如何使用它們?
- memcached 能接受的 key 的最大長度是多少?
- memcached 對 對 item 的過期時間有什麼限制?
- memcached 最大能存儲多大的單個 item ?
-
爲什麼單個 item 的大小被限制在 1M byte 之內?
總結
全套的Java春招面試手冊,“性能調優+微服務架構+併發編程+開源框架+分佈式”等五大面試專題,包含Tomcat、JVM、MySQL、SpringCloud、SpringBoot、Dubbo、併發、Spring、SpringMVC、MyBatis、Zookeeper、Ngnix、Kafka、MQ、Redis、MongoDB、memcached等等。
注意:如若需要全套Java春招面試手冊,可以評論留言