Spring Boot 必問面試題精選

1.簡介

自Spring Boot誕生以來,就引發了業界轟動,目前愈來愈多的公司技術選型選擇擁抱Spring Boot。因此Spring Boot也成爲面試必問的問題之一。接下來小胖哥總結了一些來開闊你的思路。html

2.問題

好了接下來直奔主題說說常常在面試中問到的 **Spring Boot **面試題web

Q1。Spring和Spring Boot有什麼區別?

Spring Framework提供了多種功能,使Web應用程序的開發更加容易。這些功能包括依賴注入,數據綁定,面向方面的編程,數據訪問等等。
隨着Spring社區的壯大,Spring慢慢變得愈來愈複雜,再也不像開始宣稱的那麼輕量級。 開發應用程序的配置量愈來愈大令開發者頭疼。這時Spring Boot就派上用場了 - 它採用「約定大於配置」的思想簡化了配置,對Spring提供的功能和配置並且將一些功能抽象成爲「Starter」開箱即用、按需引用。極大地簡化了開發。面試

Q2。咱們如何使用Maven設置Spring Boot應用程序?

咱們能夠像在任何其餘庫中同樣在Maven項目中包含Spring Boot。可是,最好的方法是從spring-boot-starter-parent項目繼承並聲明依賴於Spring Boot啓動器。這樣作可讓咱們的項目重用Spring Boot的默認設置。
繼承spring-boot-starter-parent項目很是簡單 - 咱們只須要在 pom.xml 中指定一個 parent 元素:spring

file

咱們能夠在Maven 中央倉庫找到最新版本的 spring-boot-starter-parent
上面的方式很方便可是並不必定符合實際須要。例如公司要求全部項目依賴構建從一個標準BOM開始,咱們就不能按上面的方式進行。
在這種狀況下,咱們能夠進行以下引用:編程

file

而後在 dependencies 標籤下引用Spring Boot 的starters 就好了。springboot

Q3。Spring boot 中的starter是什麼?

依賴管理對於項目相當重要。當項目足夠複雜時,管理依賴項可能會變成一場噩夢,由於涉及的組件太多了。
這就是Spring Boot 的 starter 就派上用場了。每一個starter均可覺得咱們提供所須要的Spring技術的一站式服務。而且以一致的方式傳遞和管理其餘所需的依賴關係。
全部官方starter都在 org.springframework.boot 組下,其名稱以 spring-boot-starter- 開頭 。非官方的starter的名稱在前,如 mybatis-spring-boot-starter。這種命名模式使得查找啓動器變得很容易,尤爲是在使用支持按名稱搜索依賴關係的IDE時。可是這個不是絕對的,有些開發者可能不聽從這種契約。
目前大概有超過50種官方starter。最經常使用的是:服務器

  • spring-boot-starter: 核心啓動器,包括自動配置支持,日誌記錄和YAML
  • spring-boot-starter-aop: 使用Spring AOPAspectJ進行面向方面編程的初學者
  • spring-boot-starter-data-jpa: 使用Spring Data JPAHibernate的啓動器
  • spring-boot-starter-jdbc: 用於將JDBCHikariCP鏈接池一塊兒使用的啓動器
  • spring-boot-starter-security: 使用Spring Security的啓動器
  • spring-boot-starter-test: 用於測試Spring Boot應用程序的啓動器
  • spring-boot-starter-web: 使用Spring MVC構建Web的啓動器,包括RESTful應用程序

其餘starter 可去spring.io查詢mybatis

Q4。如何禁用特定的自動配置?

若是咱們要禁用特定的自動配置,咱們可使用@EnableAutoConfiguration註解的exclude屬性來指示它。以下禁用了數據源自動配置DataSourceAutoConfigurationapp

file

若是咱們使用@SpringBootApplication註解。 它具備@EnableAutoConfiguration做爲元註解 - 咱們一樣能夠配置exclude屬性來禁用自動配置:maven

file

咱們還可使用spring.autoconfigure.exclude環境屬性禁用自動配置。在application.properties(也能夠是application.yml)配置文件設置以下也能夠達到一樣的目的:

file

Q5。如何註冊自定義自動配置?

要註冊自動配置類,咱們必須在META-INF / spring.factories文件的EnableAutoConfiguration鍵(key)下列出其徹底限定名稱,若是是多個按照如下風格配置:

file

若是咱們使用Maven構建一個項目,那麼該文件應放在resources / META-INF目錄中。

Q6。如何根據不一樣的條件來加載bean?

使用@Conditional系列註解。 例如@ConditionalOnMissingBean。此註釋的最顯着屬性是:

  • value:要檢查的bean類型
  • name:要檢查的bean的名稱
    放置在使用@Bean裝飾的方法上時,目標類型默認爲方法的返回類型:

file

表示的意思是若是不存在CustomService類型的bean則初始化並注入該bean。

Q7。如何將Spring Boot Web應用程序部署爲JAR和WAR文件?

傳統上,咱們將Web應用程序打包爲WAR文件,而後將其部署到外部服務器中。這樣作可讓咱們在同一臺服務器上安排多個應用程序。在CPU和內存稀缺的時候,這是節省資源的好方法。
但事情發生了變化。如今計算機硬件至關便宜,而且注意力轉向服務器配置。在部署期間配置服務器的一個小錯誤可能會致使災難性後果。
Spring經過提供一個插件即spring-boot-maven-plugin來解決這個問題,將Web應用程序打包爲可執行的JAR。要包含此插件,只需向pom.xml添加一個插件元素:

file

有了這個插件,咱們將在執行包階段後獲得一個fat JAR 。此JAR包含全部必需的依賴項,包括嵌入式服務器。所以,咱們再也不須要擔憂配置外部服務器。
而後咱們能夠像運行普通的可執行JAR同樣運行應用程序。
請注意,必須將pom.xml文件中的packaging元素設置爲 jar 才能構建JAR文件:

file

若是咱們不包含這個元素,它也默認爲jar
若是咱們想要構建WAR文件,請將包裝 元素更改成war

file

並將容器依賴關係從打包文件中刪除:

file

執行Maven 包階段後,咱們將擁有一個可部署的WAR文件。

Q8。如何在Spring Boot啓動的時候運行一些邏輯?

能夠實現接口 ApplicationRunner 或者者 CommandLineRunner,這兩個接口實現方式同樣,它們都只提供了一個 run 方法。更加詳細的操做參見我公衆號:Felordcn 中的相關文章。

Q9。Spring boot支持哪些外部配置?

Spring Boot支持外部配置,容許咱們在各類環境中運行相同的應用程序。咱們可使用properties文件,YAML文件,環境變量,系統屬性和命令行選項參數來指定配置屬性。
而後,咱們能夠訪問使用這些屬性@Value註釋,經由綁定對象 的@ConfigurationProperties註釋或Environment環境抽象類注入。
如下是最多見的外部配置來源:

  • 命令行屬性:命令行選項參數是以雙連字符開頭的程序參數,例如-server.port = 8080。Spring Boot將全部參數轉換爲屬性,並將它們添加到環境屬性集中。
  • 應用程序屬性:應用程序屬性是從application.properties文件或其YAML對應文件加載的屬性。默認狀況下,Spring Boot會在當前目錄,類路徑根或其config子目錄中搜索此文件。
    特定於配置文件的屬性:特定於配置文件的屬性從application- {profile} .properties文件或其YAML對應文件加載。{profile}佔位符是指活性輪廓。這些文件與非特定屬性文件位於相同位置,而且優先於非特定屬性文件。

Q10。如何對Spring Boot應用進行測試?

在爲Spring應用程序運行集成測試時,咱們必須有一個ApplicationContext
爲了簡化測試,Spring Boot爲測試提供了一個特殊的註釋 @SpringBootTest。此批註從其classes屬性指示的配置類建立ApplicationContext
若是未設置classes屬性,Spring Boot將搜索主配置類。搜索從包含測試的包開始,直到找到使用@SpringBootApplication或@SpringBootConfiguration註釋的類。
請注意,若是咱們使用JUnit 4,咱們必須用@RunWith(SpringRunner.class)裝飾測試類。能夠查閱 文章Spring Boot 2 實戰:mock測試你的web應用

Q11 。 Spring Boot Actuator有什麼用?

Spring Boot Actuator能夠幫助你監控和管理Spring Boot應用,好比健康檢查、審計、統計和HTTP追蹤等。全部的這些特性能夠經過JMX或者HTTP endpoints來得到。
Actuator同時還能夠與外部應用監控系統整合,好比 Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等。這些系統提供了很是好的儀表盤、圖標、分析和告警等功能,使得你能夠經過統一的接口輕鬆的監控和管理你的應用。
Actuator使用Micrometer來整合上面提到的外部應用監控系統。這使得只要經過很是小的配置就能夠集成任何應用監控系統。
將Spring Boot Actuator集成到一個項目中很是簡單。咱們須要作的就是在pom.xml文件中包含 spring-boot-starter-actuator啓動器:

file

Spring Boot Actuator可使用HTTPJMX端點公開操做信息。可是,大多數應用程序都使用HTTP,其中端點的標識和/執行器前綴造成URL路徑。
如下是Actuator提供的一些最多見的內置端點:

  • auditevents: 公開審計事件信息
  • env: 公開環境屬性
  • health: 顯示應用程序運行情況信息
  • httptrace: 顯示HTTP跟蹤信息
  • info: 顯示任意應用程序信息
  • metrics: 顯示指標信息
  • mappings: 顯示全部@RequestMapping路徑的列表
  • scheduledtasks: 顯示應用程序中的計劃任務
  • threaddump: 執行線程轉儲
  • `beans :全部加載的spring bean

更多關於Spring Boot Actuator 的信息可查看Spring Boot 2.x 中的 Actuator
請注意:生產使用Actuator務必保護好這些端點,避免未受權的訪問請求

3.結論

今天小胖哥介紹了在技術面試中常常遇到的一些關於Spring Boot的最關鍵問題。掌握以上的知識在平常開發中也是必要的,但願對你的面試有所幫助。

我的博客:https://felord.cn

相關文章
相關標籤/搜索