「Java面試必備」 Spring Boot常見面試題

「Java面試必備」 Spring Boot常見面試題

1、什麼是Spring Boot?

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

2、Spring Boot有哪些優點?

Spring Boot 主要有如下優點:

  • 容易上手,提升開發效率,為 Spring 開發提供一個更快、更廣泛的入門體驗。
  • 開箱即用,遠離繁瑣的配置。
  • 提供了一系列大型項目通用的非業務性功能,例如:內嵌服務器、安全管理、運行數據監控、運行狀況檢查和外部化配置等。
  • 沒有代碼生成,也不需要XML配置。
  • 避免大量的 Maven 導入和各種版本衝突。

3、如何重新加載Spring Boot上的更改,而無需重新啟動服務器?

Spring Boot提供了一個spring-boot-devtools jar包,提供了一些方便程序開發的功能,主要是監控程序的變化,然後進行自動重新啟動。使用spring-boot-devtools需要在pom.xml中添加如下依賴項,同時需要設置true。spring-boot-devtools默認將只在開發環境生效,通過Spring Boot插件打包時默認是不會包含spring-boot-devtools。

<code>
    org.springframework.boot
    spring-boot-devtools
    true
/<code>

4、Spring Boot中的監視器是什麼?

Spring Boot Actuator是Spring啟動框架中的重要功能之一。Spring Boot監視器可幫助您訪問生產環境中正在運行的應用程序的當前狀態。有幾個指標必須在生產環境中進行檢查和監控。即使一些外部應用程序可能正在使用這些服務來向相關人員觸發警報消息。監視器模塊公開了一組可直接作為HTTP URL訪問的REST端點來檢查狀態。

5、如何在Spring Boot中禁用Actuator端點安全性?

默認情況下,所有敏感的HTTP端點都是安全的,只有具有ACTUATOR角色的用戶才能訪問它們。安全性是使用標準的HttpServletRequest.isUserInRole方法實施的。 我們可以使用

management.security.enabled = false

來禁用安全性。只有在執行機構端點在防火牆後訪問時,才建議禁用安全性。

6、如何在自定義端口上運行Spring Boot應用程序?

為了在自定義端口上運行Spring Boot應用程序,您可以在application.properties中指定端口。

<code>server.port = 8090/<code>

7、Spring Boot 的配置文件有哪幾種格式?它們有什麼區別?

Spring Boot的配置文件有兩種格式,主要是.properties 和 .yml

它們的區別主要是書寫格式不同。

另外,.yml 格式不支持 @PropertySource 註解導入配置。

8、如何實現Spring Boot應用程序的安全性?

為了實現 Spring Boot 的安全性,我們使用 spring-boot-starter-security 依賴項,並且必須添加安全配置。它只需要很少的代碼。配置類將必須擴展WebSecurityConfigurerAdapter 並覆蓋其方法。

9、如何集成Spring Boot和ActiveMQ?

ActiveMQ是Apache所提供的一個開源的消息系統,完全採用Java來實現,因此,它能很好地支持J2EE提出的JMS(Java Message Service,即Java消息服務)規範。JMS是一組Java應用程序接口,它提供消息的創建、發送、讀取等一系列服務。

<code>
    org.springframework.boot
    spring-boot-devtools
    true
/<code>

10、如何使用Spring Boot實現分頁和排序?

使用 Spring Boot 實現分頁非常簡單。使用 Spring Data-JPA 可以實現將可分頁的傳遞給存儲庫方法。

11、什麼是Swagger?Spring Boot如何集成Swagger?

Swagger 廣泛用於可視化 API,使用 Swagger UI 為前端開發人員提供在線沙箱。Swagger 是用於生成 RESTful Web 服務的可視化表示的工具,規範和完整框架實現。它使文檔能夠以與服務器相同的速度更新。當通過 Swagger 正確定義時,消費者可以使用最少量的實現邏輯來理解遠程服務並與其進行交互。因此,Swagger消除了調用服務時的猜測。

12、什麼是Spring Profiles?

Spring Profiles 允許用戶根據配置文件(dev,test,prod 等)來註冊 bean。因此,當應用程序在開發中運行時,只有某些 bean 可以加載,而在 PRODUCTION中,某些其他 bean 可以加載。假設我們的要求是 Swagger 文檔僅適用於 QA 環境,並且禁用所有其他文檔。這可以使用配置文件來完成。Spring Boot 使得使用配置文件非常簡單。

13、什麼是Spring Batch?

Spring Boot Batch 提供可重用的函數,這些函數在處理大量記錄時非常重要,包括日誌/跟蹤,事務管理,作業處理統計信息,作業重新啟動,跳過和資源管理。它還提供了更先進的技術服務和功能,通過優化和分區技術,可以實現極高批量和高性能批處理作業。簡單以及複雜的大批量批處理作業可以高度可擴展的方式利用框架處理重要大量的信息。

14、SpringBoot集成Thymeleaf模板?

Thymeleaf 是一個跟 Velocity、FreeMarker 類似的模板引擎,它可以完全替代 JSP 。

它的優點:

  • 開箱即用,它提供標準和spring標準兩種方言,可以直接套用模板實現JSTL、 OGNL表達式效果,避免每天套模板、改jstl、改標籤的困擾。同時開發人員也可以擴展和創建自定義的方言;
  • Thymeleaf 提供spring標準方言和一個與 SpringMVC 完美集成的可選模塊,可以快速的實現表單綁定、屬性編輯器、國際化等功能。

使用之前需在pom.xml中先引入依賴

<code>
      org.springframework.boot
      spring-boot-starter-thymeleaf
/<code>

還需要在springboot項目的application.properties做如下配置

<code>#Thymeleaf配置
spring.thymeleaf.cache=false
spring.thymeleaf.encoding=utf-8
spring.thymeleaf.mode=HTML5
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html/<code>

15、如何使用Spring Boot實現異常處理?

Spring 提供了一種使用 ControllerAdvice 處理異常的非常有用的方法。 我們通過實現一個 ControlerAdvice 類,來處理控制器類拋出的所有異常。

16、您使用了哪些starter maven依賴項?

使用了下面的一些依賴項

spring-boot-starter-activemq

spring-boot-starter-security

spring-boot-starter-web

17、如何監視所有Spring Boot微服務?

Spring Boot提供監視器端點以監控各個微服務的度量。這些端點對於獲取有關應用程序的信息(如它們是否已啟動)以及它們的組件(如數據庫等)是否正常運行很有幫助。但是,使用監視器的一個主要缺點或困難是,我們必須單獨打開應用程序的知識點以瞭解其狀態或健康狀況。

18、Spring Boot 的核心註解是哪個?它主要由哪幾個註解組成的?

啟動類上面的註解是@SpringBootApplication,它也是 Spring Boot 的核心註解,主要組合包含了以下 3 個註解:

@SpringBootConfiguration:組合了 @Configuration 註解,實現配置文件的功能。

@EnableAutoConfiguration:打開自動配置的功能,也可以關閉某個自動配置的選項,如關閉數據源自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring組件掃描。

19、為什麼我們需要 spring-boot-maven-plugin?

spring-boot-maven-plugin 提供了一些像 jar 一樣打包或者運行應用程序的命令。

spring-boot:run 運行你的 SpringBooty 應用程序。

spring-boot:repackage 重新打包你的 jar 包或者是 war 包使其可執行

spring-boot:start 和 spring-boot:stop 管理 Spring Boot 應用程序的生命週期(也可以說是為了集成測試)。

spring-boot:build-info 生成執行器可以使用的構造信息。

20、Spring Boot 中如何解決跨域問題 ?

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

<code>@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);
    }
}/<code>

21、Spring Boot 中如何實現定時任務 ?

定時任務也是一個常見的需求,Spring Boot 中對於定時任務的支持主要還是來自 Spring 框架。

在 Spring Boot 中使用定時任務主要有兩種不同的方式,一個就是使用 Spring 中的 @Scheduled 註解,另一個則是使用第三方框架 Quartz。

使用 Spring 中的 @Scheduled 的方式主要通過 @Scheduled 註解來實現。

使用 Quartz ,則按照 Quartz 的方式,定義 Job 和 Trigger 即可。


分享到:


相關文章: