首頁  >  文章  >  Java  >  SpringBoot有哪些面試題目及答案

SpringBoot有哪些面試題目及答案

WBOY
WBOY轉載
2023-05-13 14:16:061312瀏覽

1. 什麼是 Spring Boot?

Spring Boot 是Spring 開源組織下的子項目,是Spring 元件一站式解決方案,主要是簡化了使用
Spring 的難度,簡省了繁重的配置,提供了各種啟動器,使開發者能快速上手。

2. 為什麼要用SpringBoot

快速開發,快速整合,配置簡化、內嵌服務容器

3. SpringBoot與SpringCloud 區別

SpringBoot是快速開發的Spring框架,SpringCloud是完整的微服務框架,SpringCloud依賴SpringBoot。

4. Spring Boot 有哪些優點?

Spring Boot 主要有以下優點: 容易上手,提升開發效率,為 Spring 開發提供一個更快、更簡單的開發框架。開箱即用,遠離繁瑣的配置。提供了一系列大型專案通用的非業務性功能,例如:內嵌伺服器、安全管理、運行資料監控、運行狀況檢查和外部化配置等。 SpringBoot總結就是讓程式碼變得簡單、設定變簡單、部署變簡單、監控變簡單等等

5. Spring Boot 的核心註解是哪一個?

它主要由哪幾個註解組成的?啟動類別上面的註解是@SpringBootApplication,它也是 Spring Boot 的核心註解,主要組合包含
了以下 3 個註解: @SpringBootConfiguration:組合了 @Configuration 註解,實現設定檔的功能。 @EnableAutoConfiguration:開啟自動設定的功能,也可以關閉某個自動設定的選項,範例
如: java 如關閉資料來源自動設定功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。 @ComponentScan:Spring元件掃描。

6. Spring Boot 支援哪些日誌框架?推薦和預設的日誌框架是哪個?

Spring Boot 支援Java Util Logging, Log4j2, Lockback 作為日誌框架,如果你使用Starters 啟動
器,Spring Boot 將使用Logback 作為預設日誌框架,但不管是那種日誌框架他都支持將配置
檔案輸出到控制台或檔案中。

7. SpringBoot Starter的工作原理

我個人理解SpringBoot就是由各種Starter組合起來的,我們自己也可以開發Starter在sprinBoot啟動時由@SpringBootApplication註解會自動去maven中讀取每個starter中的
spring.factories檔案,該檔案裡配置了所有需要被創建spring容器中的bean,並且進行自動配置把
bean注入SpringContext中//(SpringContext是Spring的設定檔)

8. Spring Boot 2.X 有什麼新功能?與 1.X 有什麼差別?

配置變更JDK 版本升級第三方類別庫升級響應式Spring 程式支援HTTP/2 支援配置屬性綁定更多改進與加強

9. SpringBoot支援什麼前端範本

thymeleaf,freemarker,jsp,官方不推薦JSP會有限制

10. SpringBoot的缺點

我覺得是為難人,SpringBoot在目前我覺得沒有什麼缺點,非要找一個出來我覺得就是因為不用自己做的配置,報錯時很難定位。

11. 運行 Spring Boot 有哪幾種方式?

打包用指令或放到容器中執行
用 Maven/ Gradle 外掛程式執行
直接執行 main 方法執行

12. Spring Boot 需要獨立的容器運作嗎?

可以不需要,內建了 Tomcat/ Jetty 等容器。

13. 開啟 Spring Boot 特性有哪幾種方式?

繼承spring-boot-starter-parent專案
導入spring-boot-dependencies專案依賴

14. SpringBoot 實作熱部署有哪幾種方式?

熱部署就是可以不用重新運行SpringBoot專案可以實現操作後台程式碼自動更新到以運行的專案中
主要有兩種方式:
Spring Loaded
Spring-boot-devtools

15. SpringBoot事物的使用

SpringBoot的事物很簡單,首先使用註解EnableTransactionManagement開啟事物之後,然後在
Service方法上加入註解Transactional便可。

16. Async非同步呼叫方法

在SpringBoot中使用非同步呼叫是很簡單的,只需要在方法上使用@Async註解即可實現方法的非同步
呼叫。注意:需要在啟動類別加入@EnableAsync使非同步呼叫@Async註解生效。

17. 如何在 Spring Boot 啟動的時候執行一些特定的程式碼?

可以實作介面ApplicationRunner 或CommandLineRunner,這兩個介面實作方式一樣,它們
都只提供了一個run 方法

18. Spring Boot 有哪幾種讀取配置的方式?

Spring Boot 可以透過 @PropertySource,@Value,@Environment, @ConfigurationPropertie註解
解來綁定變數

19. 什麼是 JavaConfig?

Spring JavaConfig 是 Spring 社群的產品,Spring 3.0引進了他,它提供了配置 Spring IOC 容器的
純Java 方法。因此它有助於避免使用 XML 配置。使用 JavaConfig 的優點在於:
物件導向的配置。由於配置被定義為 JavaConfig 中的類,因此使用者可以充分利用 Java 中的物件導向功能。一個配置類別可以繼承另一個,重寫它的@Bean 方法等。
減少或消除 XML 配置。基於依賴注入原則的外化配置的好處已被證明。但是,許多開發人員不希望在 XML 和 Java 之間來回切換。 JavaConfig 為開發人員提供了一種純 Java 方法來配置與 XML 配置概念相似的 Spring 容器。從技術角度來講,只使用 JavaConfig 配置類別來配置容器是可行的,但實際上很多人認為將JavaConfig 與 XML 混合匹配是理想的。
類型安全和重構友好。 JavaConfig 提供了一種型別安全的方法來設定 Spring容器。由於 Java
5.0 對泛型的支持,現在可以按類型而不是按名稱檢索 bean,不需要任何強制轉換或基於字
符串的查找。
常用的Java config:
@Configuration:在類別上打上寫下此註解,表示這個類別是設定類別
@ComponentScan:在設定類別上新增 @ComponentScan 註解。此註解預設會掃描該類別所在的套件下所有的配置類,相當於先前的 97607766749967230415a2390da969de。
@Bean:bean的注入:相當於以前的592f62c63490f596a8598e6c7b81dafe
#@EnableWebMvc:相當於xml的68431abab1634983d4f7eeee820069db
@ImportResource:相當於xml的4bd73410d9d48022190f2b4921629fd9

20. SpringBoot的自動設定原理是什麼

#主要是Spring Boot的啟動類上的核心註解SpringBootApplication註解主配置類,有了這個主配置
類啟動時就會為SpringBoot開啟一個@EnableAutoConfiguration註解自動配置功能。
有了這個EnableAutoConfiguration的話就會:
從設定檔META_INF/Spring.factories載入可能用到的自動設定類別
去重,並將exclude和excludeName屬性攜帶的類別排除
過濾,將滿足條件(@Conditional)的自動配置類別回傳

21. 你如何理解Spring Boot 配置載入順序?

在 Spring Boot 裡面,可以使用以下幾種方式來載入設定。
1.properties檔;
2.YAML檔;
3.系統環境變數;
4.命令列參數;
等等……

22 . 什麼是YAML?

YAML 是一種人類可讀的資料序列化語言。它通常用於配置檔案。與屬性檔相比,如果我們想要
在設定檔中加入複雜的屬性,YAML 檔案就更加結構化,而且更少混淆。可以看出 YAML 具有分
層配置資料。

23. YAML 設定的優勢在哪裡?

YAML 現在可以算是非常流行的一種設定檔格式了,無論是前端還是後端,都可以見到YAML 配
置。那麼 YAML 設定和傳統的 properties 設定相比到底有哪些優勢呢?
配置有序,在一些特殊的場景下,配置有序很關鍵
簡潔明了,他還支援數組,數組中的元素可以是基本資料類型也可以是物件
相比properties 配置文件,YAML 還有一個缺點,就是不支援@PropertySource 註解導入
自訂的YAML 配置。

24. Spring Boot 是否可以使用XML 配置?

Spring Boot 推薦使用Java 配置而非XML 配置,但Spring Boot 中也可以使用XML 配置,通
過@ImportResource註解可以引入一個XML 配置。

25. spring boot 核心設定檔是什麼? bootstrap.properties 和application.properties 有何區別?

單純做Spring Boot 開發,可能不太容易遇到bootstrap.properties 配置文件,但是在結合Spring Cloud 時,這個配置就會經常遇到了,特別是在需要載入一些遠端設定檔的時侯。
spring boot 核心的兩個設定檔:
bootstrap (. yml 或 . properties):boostrap 由父 ApplicationContext 加載的,比applicaton 優先加載,配置在應用程式上下文的引導階段生效。一般來說我們在 Spring Cloud 配置就會使用這個檔案。且 boostrap 裡面的屬性不能被覆寫;
application (. yml 或 . properties): 由ApplicatonContext 加載,用於 spring boot 專案
的自動化配置。

26. 什麼是 Spring Profiles?

在專案的開發中,有些設定檔在開發、測試或生產等不同環境中可能是不同的,例如資料庫連
接、redis的設定等等。那我們如何在不同環境中自動實現配置的切換呢? Spring為我們提供了
profiles機制給我們的就是來回切換設定檔的功能
Spring Profiles 允許使用者根據設定檔(dev,test,prod 等)來註冊 bean。因此,當應用程式
在開發中運行時,只有某些 bean 可以加載,而在 PRODUCTION中,某些其他 bean 可以加載。
假設我們的要求是 Swagger 文件僅適用於 QA 環境,並且停用所有其他文件。這可以使用設定文
件來完成。 Spring Boot 讓使用設定檔非常簡單。

27. SpringBoot多重資料來源拆分的想法

先在properties設定檔中設定兩個資料來源,建立分包mapper,使用@ConfigurationProperties
讀取properties中的配置,使用@MapperScan註冊到對應的mapper套件中

28. SpringBoot多重資料來源事務如何管理

第一種方式是在service層的@TransactionManager中使用transactionManager指定
DataSourceConfig中配置的交易
第二種是使用jta-atomikos實現分散式交易管理

29. 保護Spring Boot 應用有哪些方法?

在生產中使用HTTPS
使用Snyk檢查你的依賴關係
升級到最新版本
啟用CSRF保護
使用內容安全策略防止XSS攻擊

# 30. 如何實現Spring Boot 應用程式的安全性?

為了實現 Spring Boot 的安全性,我們使用 spring-boot-starter-security 依賴項,並且必須新增
安全配置。它只需要很少的程式碼。設定類別將必須擴充WebSecurityConfigurerAdapter 並覆寫其方
法。

31. 比較Spring Security 和Shiro 各自的優缺點?

由於Spring Boot 官方提供了大量的非常方便的開箱即用的Starter ,包括Spring Security 的
Starter ,使得在Spring Boot 中使用Spring Security 變得更加容易,甚至只需要添加一個依賴就
可以保護所有的接口,所以,如果是Spring Boot 項目,一般選擇Spring Security 。當然這只是
一個建議的組合,單純從技術上來說,無論怎麼組合,都是沒有問題的。 Shiro 和Spring Security
相比,主要有以下一些特點:
Spring Security 是一個重量級的安全管理框架;Shiro 則是一個輕量級的安全管理框架
Spring Security 概念複雜,配置繁瑣;Shiro 概念簡單、配置簡單
Spring Security 功能強大;Shiro 功能簡單

32. Spring Boot 中如何解決跨域問題?

跨域可以在前端透過JSONP 來解決,但是JSONP 只可以發送GET 請求,無法發送其他類型的請
求,在RESTful 風格的應用中,就顯得非常雞肋,因此我們推薦在後端通過(CORS,Crossorigin resource sharing) 來解決跨域問題。這個解決方案並非Spring Boot 特有的,在傳統的
SSM 框架中,就可以透過CORS 來解決跨域問題,只不過之前我們是在XML 文件中配置CORS ,
現在可以透過實現WebMvcConfigurer介面然後重寫addCorsMappings方法解決跨域問題。

@Configuration
public class CorsConfig implements WebMvcConfigurer {
	@Override
	public void addCorsMappings(CorsRegistry registry) {
		registry.addMapping("/**")
		.allowedOrigins("*")
		.allowCredentials(true)
		.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
		.maxAge(3600);
	}
}

33. Spring Boot 中的監視器是什麼?

Spring boot actuator 是 spring 啟動框架中的重要功能之一。 Spring boot 監視器可協助您存取生
產區環境中正在執行的應用程式的目前狀態。有幾個指標必須在生產環境中進行檢查和監控。即使一
些外部應用程式可能正在使用這些服務來向相關人員觸發警報訊息。監視器模組公開了一組可直接
作為 HTTP URL 存取的REST 端點來檢查狀態。

34. 如何使用 Spring Boot 實現全域異常處理?

Spring 提供了一種使用 ControllerAdvice 處理例外狀況的非常有用的方法。我們透過實作一個
ControlerAdvice 類,來處理控制器類別拋出的所有例外。

35. 我們如何監視所有 Spring Boot 微服務?

Spring Boot 提供監視器端點以監控各個微服務的量測。這些端點對於獲取有關應用程式的資訊
(如它們是否已啟動)以及它們的元件(如資料庫等)是否正常運作很有幫助。但是,使用監視器
的一個主要缺點或困難是,我們必須單獨打開應用程式的知識點以了解其狀態或健康狀況。想像一
下涉及 50 個應用程式的微服務,管理員將不得不擊中所有 50 個應用程式的執行終端。為了幫助
我們處理這種情況,我們將使用位於的開源專案。它建立在 Spring Boot Actuator 之上,它提供
了一個 Web UI,使我們能夠視覺化多個應用程式的度量。

36. SpringBoot性能如何优化

如果项目比较大,类比较多,不使用@SpringBootApplication,采用@Compoment指定扫包范

在项目启动时设置JVM初始内存和最大内存相同
将springboot内置服务器由tomcat设置为undertow

37. 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?Spring Boot项目如何热部署?

这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat 将重新启
动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java 开
发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新
加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring
Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完全满
足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用
程序。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

38. SpringBoot微服务中如何实现 session 共享 ?

在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务
器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享
session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的
session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上
的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使
得 session 的同步操作对开发人员而言是透明的,非常简便。

39. 您使用了哪些 starter maven 依赖项?

使用了下面的一些依赖项
spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持
spring-boot-starter-data-jpa 数据库支持
spring-boot-starter-data-redis redis数据库支持
spring-boot-starter-data-solr solr支持
mybatis-spring-boot-starter 第三方的mybatis集成starter
自定义的starter(如果自己开发过就可以说出来)

40. Spring Boot 中的 starter 到底是什么 ?

首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提
供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来
决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配
置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性(spring.factories)注入
将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们
只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter

41. Spring Boot 中如何实现定时任务 ?

在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled
注解,另一-个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。

42. 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。
总结就是打包用的

43. SpringBoot如何实现打包

进入项目目录在控制台输入mvn clean package,clean是清空已存在的项目包,package进行打
包或者点击左边选项栏中的Mavne,先点击clean在点击package

44.Spring Boot 打成的jar 和普通的jar 有什麼區別?

Spring Boot 項目最終打包成的jar 是可執行jar ,這種jar 可以直接通過java -jar xxx.jar命
令來運行,這種jar 不可以作為普通的jar 被其他項目依賴,即使依賴了也無法使用其中的類別。
Spring Boot 的 jar 無法被其他專案依賴,主要還是他和普通 jar 的結構不同。普通的jar 包,解壓縮
後直接就是包名,包裡就是我們的程式碼,而Spring Boot 打包成的可執行jar 解壓後,在\BOOTINF\classes 目錄下才是我們的程式碼,因此無法被直接引用。如果要引用,可以在 pom.xml檔案中增加配置,將 Spring Boot 專案打包成兩個 jar ,一個可執行,一個可引用。

以上是SpringBoot有哪些面試題目及答案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除