SpringBoot面試題
SpringBoot面試題
1.什么是 Spring Boot?
- Spring Boot 是 Spring 開源組織下的子項目,是 Spring 組件一站式解決方案,主要是簡化了使用
- Spring 的難度,簡省了繁重的配置,提供了各種啟動器,使開發者能快速上手。
2.Spring Boot 有哪些優點?
Spring Boot 主要有如下優點:
- 容易上手,提升開發效率,為 Spring 開發提供一個更快、更簡單的開發框架。
- 開箱即用,遠離繁瑣的配置。
- 提供了一系列大型項目通用的非業務性功能,例如:內嵌服務器、安全管理、運行數據監
- 控、運行狀況檢查和外部化配置等。
- SpringBoot總結就是使編碼變簡單、配置變簡單、部署變簡單、監控變簡單等等
3.SpringBoot 的核心注解是哪個?它主要由哪幾個注解組成的?
啟動類上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要組合包含
了以下 3 個注解:
- @SpringBootConfiguration:組合了 @Configuration 注解,實現配置文件的功能。
- @EnableAutoConfiguration:打開自動配置的功能,也可以關閉某個自動配置的選項, 例
如: java 如關閉數據源自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
- @ComponentScan:Spring組件掃描。
4.SpringBoot自動配置原理
SpringBoot核心就是幾個注解:SpringBootConfiguration、EnableAutoConfiguration、ComponentScan,依賴這幾個注解完成了所謂自動裝配的功能,這個自動裝配說簡單點就是把你需要的Bean注入到Spring容器里面
SpringBoot程序在啟動過程中會解析SpringBootConfiguration、EnableAutoConfiguration、ComponentScan三個注解:
SpringBootConfiguration:包含了Configuration注解,實現配置文件
ComponentScan:指定掃描范圍
EnableAutoConfiguration:通過源碼可以知道,該注解使用Import引入了AutoConfigurationImportSelector類,而AutoConfigurationImportSelector類通過SpringFactortisLoader加載了所有jar包的MATE-INF文件夾下面的spring.factories文件,spring.factories包含了所有需要裝配的XXXConfiguration類的全限定名。然后過濾出書友AutoConfigurationClass類型的類,最后通過@Condition排除無效的自動配置類
5.什么是 YAML?
- YAML 是一種人類可讀的數據序列化語言。它通常用于配置文件。與屬性文件相比,如果我們想要在配置文件中添加復雜的屬性,YAML 文件就更加結構化,而且更少混淆??梢钥闯?YAML 具有分
層配置數據。
6.SpringBoot微服務中如何實現 session 共享 ?
在微服務中,一個完整的項目被拆分成多個不相同的獨立的服務,各個服務獨立部署在不同的服務器上,各自的 session 被從物理空間上隔離開了,
但是經常,我們需要在不同微服務之間共享session ,常見的方案就是 Spring Session + Redis 來實現 session 共享。將所有微服務的session 統一保存在 Redis 上
,當各個微服務對 session 有相關的讀寫操作時,都去操作 Redis 上的 session 。這樣就實現了 session 共享,Spring Session 基于 Spring 中的代理過濾器實現,
使得 session 的同步操作對開發人員而言是透明的,非常簡便。
7.Spring Boot 中的 starter 到底是什么 ?
- starter組件是SpringBoot的四大核心特性之一,其他的還包括自動裝配,Actuator監控,命令行界面。SpringBoot里的這些特性都是為了讓開發者在開發Spring生態的企業級應用的時候,
只需要去關心業務邏輯,減少對配置和外部環境的依賴。
- 其中starter的作用,主要有幾個
1.starter組件是以功能為緯度 來維護對應jar包的版本依賴的,那么開發者就不需要去關心版本沖突這種容易出錯的細節
2.starter會把對應功能組件的所有jar包依賴 全部導進來,避免開發者自己去引入依賴帶來的一些問題。
3.starer內部集成了自動裝配的機制, 也就是說,程序依賴了對應的starter之后,那么這個組件會自動集成到Spring生態里面,并且完成對應相關Bean的管理 ,這也是基于自動裝配機制完成的
4.依賴starter之后,這些組件對應的功能所需要維護的外部化配置會自動集成到SpringBoot里面, 我們只需要在application.properties去進行維護配置就行了,比如我們引入了redis的starter,我們只需要在application.properties里面去維護redis鏈接的相關信息就可以直接使用了。
8.spring-boot-starter-parent 有什么用 ?
我們都知道,新創建一個 Spring Boot 項目,默認都是有 parent 的,這個 parent 就是 springboot-starter-parent ,spring-boot-starter-parent 主要有如下作用:
- 定義了 Java 編譯版本為 1.8 。
- 使用 UTF-8 格式編碼。
- 繼承自 spring-boot-dependencies,這個里邊定義了依賴的版本,也正是因為繼承了這個依
- 賴,所以我們在寫依賴時才不需要寫版本號。
- 執行打包操作的配置。
- 自動化的資源過濾。
- 自動化的插件配置。
- 針對 application.properties 和 application.yml 的資源過濾,包括通過 profile 定義的不同
- 環境的配置文件,例如 application-dev.properties 和 application-dev.yml。
9.Spring Boot 打成的 jar 和普通的 jar 有什么區別 ?
Spring Boot 項目最終打包成的 jar 是可執行 jar ,這種 jar 可以直接通過 java -jar xxx.jar 命令來運行,這種 jar 不可以作為普通的 jar 被其他項目依賴,即使依賴了也無法使用其中的類。
Spring Boot 的 jar 無法被其他項目依賴,主要還是他和普通 jar 的結構不同。普通的 jar 包,解壓后直接就是包名,包里就是我們的代碼,而 Spring Boot 打包成的可執行 jar 解壓后,在 \\BOOT-INF\\classes 目錄下才是我們的代碼,因此無法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,將 Spring Boot 項目打包成兩個 jar ,一個可執行,一個可引用。

浙公網安備 33010602011771號