Springboot常見面試題總結1

一. SpringBoot 和spring 、springMVC的區別

Spring它的主要特徵是依賴注入,它有兩大核心主要是IOC和AOP。
IOC : 應用程序對象的創建,配置,維護,依賴交給了SpringIOC容器統一進行管理,從而實現松耦合。
AOP : 即面向切面編程,是利用一種橫切技術,將一個項目一刀切下來,剖開封裝的對象內部,並將那些影響了多個類的公共行爲封裝到一個可重用模塊,並將其名爲 “Aspect” , 即切面。所謂“切面”,簡單地說,就是將那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任封裝起來,便於減少系統的重複代碼,降低模塊間的耦合度,並有利於未來的可操作性和可維護性。可用於權限認證、日誌、事務處理。

Spring中AOP有兩種實現方式:

JDK動態代理:通過接口創建動態類的實例,然後通過反射機制獲得動態代理類的構造函數,利用構造函數實例化動態代理類,在調用具體方法之前調用invokeHandel方法來處理。
CGLib動態代理類:是代理類去繼承目標類,然後重寫其中目標類的方法,從而實現AOP。

Spring MVC 提供了一種分離式的方法來開發 Web 應用。通過運用像 DispatcherServelet,MoudlAndView 和 ViewResolver
等一些簡單的概念,開發 Web 應用將會變的非常簡單。

Spring Boot 通過一個自動配置和啓動的項來目解決這個問題。爲了更快的構建產品就緒應用程序,Spring Boot 提供了一些非功能性特徵。

二. 說說SpringBoot自動配置原理

SpringBoot自動配置主要是通@EnableAutoConfiguation,@Conditional,@EnableConfigProperties,@ConfigurationProperties等註解實現的。

具體流程如下:當我們寫好一個啓動類後,我們會在啓動類上加一個@SpringBootApplication,我們可以點開這個註解可以看到它內部有一個@EnableAutoConfiguation的註解,我們繼續進入這個註解可以看到一個@Import的註解,這個註解引入了一個AutoConfigurationImportSelector的類。我們繼續打開這個類可以看到它有一個selectorImport的方法,這個方法又調用了一個getCandidateConfigurations方法,這個方法內部通過SpringFactoriesLoader.loadFactoryNames最終調用loadSpringFactories加載到一個META-INF下的spring.factories文件。打開這個文件可以看到是一組一組的key=value的形式,其中一個key是EnableAutoConfiguration類的全類名,而它的value是一個xxxxAutoConfiguration的類名的列表,這些類名以逗號分隔。當我們通過springApplication.run啓動的時候內部就會執行selectImports方法從而找到配置類對應的class。然後將所有自動配置類加載到Spring容器中,進而實現自動配置。

三. 使用SpringBoot有什麼好處?

獨立運行,簡化配置,自動配置,應用監控,無代碼生成和XML配置

四.你如何理解 Spring Boot 中的 Starters?
Starters可以理解爲啓動器,它包含了一系列可以集成到應用裏面的依賴包,你可以一站式集成 Spring 及其他技術,而不需要到處找示例代碼和依賴包。如你想使用 Spring JPA 訪問數據庫,只要加入 spring-boot-starter-data-jpa 啓動器依賴就能使用了。

五.SpringBoot如何讀取指定文件

1.@PropertySource+@Value註解讀取方式

示例代碼

@Component
@ConfigurationProperties(prefix = "db")
@PropertySource(value = { "config/db-config.properties" })
public class DBConfig2 {
 
   private String username;
   private String password;
 
   public String getUsername() {
       return username;
   }
 
   public void setUsername(String username) {
       this.username = username;
   }
 
   public String getPassword() {
       return password;
   }
 
   public void setPassword(String password) {
       this.password = password;
   }
}

2.@PropertySource+@ConfigurationProperties註解讀取方式

示例代碼

@Component
@ConfigurationProperties(prefix = "db")
@PropertySource(value = { "config/db-config.properties" })
public class DBConfig2 {
 
   private String username;
   private String password;
 
   public String getUsername() {
       return username;
   }
 
   public void setUsername(String username) {
       this.username = username;
   }
 
   public String getPassword() {
       return password;
   }
 
   public void setPassword(String password) {
       this.password = password;
   }
 
}

六. Spring Boot 如何定義多套不同環境配置?

提供多套配置文件,如:

applcation.properties
application-dev.properties
application-test.properties
application-prod.properties

然後在applcation.properties文件中指定當前的環境spring.profiles.active=test,這時候讀取的就是application-test.properties文件。

七.Spring Boot 可以兼容老 Spring 項目嗎,如何做?

可以兼容,使用 @ImportResource 註解導入老 Spring 項目配置文件。

八.Spring Boot 的核心配置文件有哪幾個?它們的區別是什麼?

1.application文件主要用於Springboot自動化配置文件。
2.bootstarp文件主要有以下幾種用途:

a. 使用Spring Cloud Config註冊中心時 需要在bootStarp配置文件中添加鏈接到配置中心的配置屬性來加載外部配置中心的配置信息。
b. 一些固定的不能被覆蓋的屬性
c. 一些加密/解密的場景

九.yml配置相比properties配置有什麼優勢

(1)配置有序,在一些特殊的場景下,配置有序很關鍵
(2)支持數組,數組中的元素可以是基本數據類型也可以是對象
(3)簡潔

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

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

十一.微服務中如何實現 session 共享 ?

常見的方案就是 Spring Session + Redis 來實現 session 共享。將所有微服務的 session 統一保存在 Redis 上,當各個微服務對 session 有相關的讀寫操作時,都去操作 Redis 上的 session。

十二.在springBoot中前後端分離,如何維護接口文檔 ?

在 Spring Boot 中,這個問題常見的解決方案是 Swagger ,使用 Swagger 我們可以快速生成一個接口文檔網站,接口一旦發生變化,文檔就會自動更新,所有開發工程師訪問這一個在線網站就可以獲取到最新的接口文檔,非常方便。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章