走進Spring Boot面試題

一提到Spring Boot,首先想到是"約定優於配置"。沒錯,這就是Spring Boot最大的優勢。

1.什麼叫"約定優於配置"呢?

這其實是一種軟件設計範式,開發人員按照約定的方式來進行編程,可以減少軟件開發人員需做決定的數量,獲得簡單的好處,而又不失靈活性。
Spring Boot StarterSpring Boot Jpa 都是“約定優於配置“的一種體現。它們都是通過“約定優於配置“的設計思路來設計的。
Spring Boot Starter 在啓動的過程中會根據約定的信息對資源進行初始化;Spring Boot Jpa 通過約定的方式來自動生成 Sql ,避免大量無效代碼編寫。

2.瞭解Spring Boot Starter 的工作原理?

(1)Spring Boot 在啓動時會去依賴的 Starter 包中尋找 resources/META-INF/spring.factories 文件,然後根據文件中配置的 Jar 包去掃描項目所依賴的 Jar 包。
(2)根據 spring.factories 配置加載 AutoConfigure 類。
(3) 根據 @Conditional 註解的條件,進行自動配置並將 Bean 注入 Spring Context。

3.瞭解Spring Boot 的自動配置?

Spring Boot 項目的啓動註解是:@SpringBootApplication,其實它就是由下面三個註解組成的:

(1)@Configuration
這是 Spring 3.0 添加的一個註解,用來代替 applicationContext.xml 配置文件,所有這個配置文件裏面能做到的事情都可以通過這個註解所在類來進行註冊。

(2)@ComponentScan
@ComponentScan指明對象掃描範圍。簡單舉例:
下面這個啓動類如果不加@ComponentScan,默認指掃描當前啓動類所在的包裏的對象。
如果當前啓動類沒有包,則在啓動時會報錯:Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package錯誤。
因爲啓動類不能直接放在main/java文件夾下,必須要建一個包把它放進去或者使用@ComponentScan指明要掃描的包。

@SpringBootApplication
//@ComponentScan(basePackageClasses=要掃描類.class所在位置的包)-意思是要掃描哪個類所在的包
public class TestApplication {
    public static void main(String[] args){
        SpringApplication.run(TestApplication .class, args);
    }
}

(3)@EnableAutoConfiguration
@EnableAutoConfiguration 是實現自動配置的入口,該註解又通過 @Import 註解導入了AutoConfigurationImportSelector,在該類中加載 META-INF/spring.factories 的配置信息。然後篩選出以 EnableAutoConfiguration 爲 key 的數據,加載到 IOC 容器中,實現自動配置功能。

4.Spring Cache 三種常用的緩存註解和意義?

(1)@Cacheable ,用來聲明方法是可緩存,將結果存儲到緩存中以便後續使用相同參數調用時不需執行實際的方法,直接從緩存中取值。
(2)@CachePut,使用 @CachePut 標註的方法在執行前,不會去檢查緩存中是否存在之前執行過的結果,而是每次都會執行該方法,並將執行結果以鍵值對的形式存入指定的緩存中。
(3)@CacheEvict,是用來標註在需要清除緩存元素的方法或類上的,當標記在一個類上時表示其中所有的方法的執行都會觸發緩存的清除操作。

5.微服務同時調用多個接口,怎麼支持事務?

支持分佈式事務,可以使用Spring Boot集成 Aatomikos來解決,但是我一般不建議這樣使用,因爲使用分佈式事務會增加請求的響應時間,影響系統的TPS。一般在實際工作中,會利用消息的補償機制來處理分佈式的事務。

6.Spring 、Spring Boot 和 Spring Cloud 的關係

Spring 最初最核心的兩大核心功能 Spring Ioc 和 Spring Aop 成就了 Spring,Spring 在這兩大核心的功能上不斷的發展,纔有了 Spring 事務、Spring Mvc 等一系列偉大的產品,最終成就了 Spring 帝國,到了後期 Spring 幾乎可以解決企業開發中的所有問題。
Spring Boot 是在強大的 Spring 帝國生態基礎上面發展而來,發明 Spring Boot 不是爲了取代 Spring ,是爲了讓人們更容易的使用 Spring 。
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用 Spring Boot 的開發風格做到一鍵啓動和部署。
Spring Cloud 是爲了解決微服務架構中服務治理而提供的一系列功能的開發框架,並且 Spring Cloud 是完全基於 Spring Boot 而開發,Spring Cloud 利用 Spring Boot 特性整合了開源行業中優秀的組件,整體對外提供了一套在微服務架構中服務治理的解決方案。

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