中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot有哪些面試題及答案

發布時間:2023-03-25 16:42:57 來源:億速云 閱讀:88 作者:iii 欄目:開發技術

這篇文章主要介紹“SpringBoot有哪些面試題及答案”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“SpringBoot有哪些面試題及答案”文章能幫助大家解決問題。

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 注解。該注解默認會掃描該類所在的包下所有的配置類,相當于之前的 <context:component-scan >。
@Bean:bean的注入:相當于以前的< bean id=“objectMapper”
class=“org.codehaus.jackson.map.ObjectMapper” />
@EnableWebMvc:相當于xml的<mvc:annotation-driven >
@ImportResource: 相當于xml的 < import resource=“applicationContextcache.xml”>

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.命令行參數;
等等&hellip;&hellip;

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有哪些面試題及答案”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陵川县| 徐州市| 资中县| 信阳市| 西充县| 祁门县| 岑巩县| 福安市| 嘉黎县| 张家口市| 永州市| 绍兴县| 渝中区| 鄂托克旗| 南乐县| 博爱县| 连平县| 宜阳县| 青州市| 德州市| 崇仁县| 鹤岗市| 五台县| 镇沅| 边坝县| 乡城县| 大新县| 吉林市| 张掖市| 高唐县| 晋中市| 城口县| 青河县| 蕉岭县| 兰坪| 仙桃市| 育儿| 西平县| 晴隆县| 凉城县| 湘乡市|