<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Spring Boot 面試問題 > 原文: [https://howtodoinjava.com/interview-questions/spring-boot-interview-questions/](https://howtodoinjava.com/interview-questions/spring-boot-interview-questions/) Spring Boot 使應用程序開發更加容易,但是在測試您對所有工作原理的了解時,我們可能會遇到一些艱難的面試問題。 使用給定的 **Spring Boot 面試問題和答案**為下一次面試做好準備。 ## 1\. 什么是 Spring Boot? 它與 Spring 框架有何不同? ![Spring boot modules](https://img.kancloud.cn/96/3e/963e551b4e0db8295d5dfed54381013e_450x338.jpg) Spring boot 模塊 Spring Boot 是一個 Spring 框架模塊,借助[入門模板](https://github.com/spring-projects/spring-boot/tree/master/spring-boot-project/spring-boot-starters/)和自動配置功能,它們向 Spring 框架提供 RAD(快速應用程序開發)功能,這些功能非常強大且可以完美運行。 它采用 Spring 平臺和第三方庫的觀點視圖。 這意味著只要我們將任何依賴項包含到應用程序中,Spring Boot 就會假定其具有通用性,并自動將庫中最常用的類配置為具有合理默認值的 Spring bean。 例如,如果我們要創建 Web MVC 應用程序,則包含 maven 依賴項`spring-boot-starter-web`僅會使用 Spring webMVC 帶來用于構建 Web 的所有 jar / 庫,包括 RESTful 應用程序。 Ut 還包括 Tomcat 作為默認的嵌入式容器。 它還提供了一系列非功能性功能,例如嵌入式服務器,安全性,指標,運行狀況檢查和開箱即用的外部配置,而無需額外的配置。 如果我們必須確定 Spring 框架和 Spring Boot 之間的區別,那么可以說 Spring Boot 基本上是 Spring 框架的擴展,它消除了設置可正常生產的應用程序所需的樣板配置。 它對導入到項目中的 Spring 和第三方庫采取了自以為是的觀點,并為我們配置了行為。 區別就這么簡單。 ## 2\. SpringBoot 的優缺點? 運行的兩個最佳**優勢**通過啟動器 POM 以及最常用的庫和行為的有意識的自動配置,簡化了&版本無沖突依賴管理。 嵌入式 jar 可以將 Web 應用程序打包為 jar 文件,可以在任何地方運行。 它的執行器模塊提供 HTTP 端點來訪問應用程序內部,例如詳細指標,應用程序內部工作狀態,運行狀況等。 在**劣勢**方面,它們很少。 仍然有許多開發人員可能將初學者 poms 包含的傳遞性依賴項視為部署打包的負擔。 另外,它的自動配置功能可能會啟用許多我們在應用程序生命周期中從未使用過的功能,并且這些功能會一直被初始化和完全配置。 這可能會導致不必要的資源利用。 ## 3\. 什么是自動配置? 如何啟用或禁用某些配置? Spring Boot 自動配置掃描類路徑,在類路徑中找到庫,然后嘗試為它們猜測最佳配置,最后配置所有此類 bean。 自動配置會嘗試盡可能智能化,并且會隨著我們定義更多自己的自定義配置而退出。 它始終在注冊用戶定義的 bean 之后應用。 自動配置在`@Conditional`注解(例如`@ConditionalOnBean`和`@ConditionalOnClass`)的幫助下工作。 例如,查看`AopAutoConfiguration`類。 如果類路徑掃描找到`EnableAspectJAutoProxy`,切面,建議和`AnnotatedElement`類,并且`spring.aop.auto=false`在屬性文件中不存在,則啟動 Spring 將為我們配置 Spring AOP 模塊。 `AopAutoConfiguration.java` ```java @Configuration @ConditionalOnClass({ EnableAspectJAutoProxy.class, Aspect.class, Advice.class, AnnotatedElement.class }) @ConditionalOnProperty(prefix = "spring.aop", name = "auto", havingValue = "true", matchIfMissing = true) public class AopAutoConfiguration { //code } ``` ## 4\. 什么是啟動器依賴項? Spring Boot 啟動器是 Maven 模板,其中包含啟動特定功能所需的所有相關傳遞依賴項的集合。 例如,如果我們要創建 [Spring WebMVC](https://howtodoinjava.com/spring-boot2/rest/rest-api-example/) 應用程序,則在傳統設置中,我們將自己包括所有必需的依賴項。 它留下了版本沖突的機會,最終導致更多的運行時異常。 使用 Spring boot,要創建 Web MVC 應用程序,我們需要導入的只是[`spring-boot-starter-web`](https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-starters/spring-boot-starter-web/pom.xml)依賴項。 以傳遞方式,它引入了所有其他必需的依賴關系以構建 Web 應用程序,例如`spring-webmvc`,`spring-web`,`hibernate-validator`,`tomcat-embed-core`,`tomcat-embed-el`,`tomcat-embed-websocket`,`jackson-databind`,`jackson-datatype-jdk8`,`jackson-datatype-jsr310`和`jackson-module-parameter-name`。 `pom.xml` ```java <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` ## 5\. Spring Boot 常用注解? 最常用和最重要的[SpringBoot 注解](https://howtodoinjava.com/spring-boot2/spring-boot-annotations/)如下: * `@EnableAutoConfiguration` – 啟用自動配置機制。 * `@ComponentScan` – 在應用程序類路徑中啟用組件掃描。 * `@SpringBootApplication` – 一步啟用上述所有三項功能,即啟用自動配置機制,啟用組件掃描并在上下文中注冊額外的 bean。 * `@ImportAutoConfiguration` – 僅導入并應用指定的自動配置類。 當我們不想啟用默認自動配置時,應使用此選項。 * `@AutoConfigureBefore, @AutoConfigureAfter, @AutoConfigureOrder` – 如果需要以特定順序應用配置(在之后之前),則應使用`@AutoConfigureBefore, @AutoConfigureAfter, @AutoConfigureOrder`。 * `@Conditional` – 諸如`@ConditionalOnBean`,`@ConditionalOnWebApplication`或`@ConditionalOnClass`之類的注解僅在條件滿足時才注冊 Bean。 ## 6\. Spring Boot 是否支持嵌入式服務器? Spring Boot 應用程序始終將 tomcat 作為嵌入式服務器依賴項。 這意味著您可以從命令提示符運行 Spring Boot 應用程序,而無需使用復雜的服務器基礎結構。 如果需要的話,我們可以排除 tomcat,并根據需要包括其他任何嵌入式服務器。 或者我們可以完全排除服務器環境。 全部基于配置。 例如,以下配置排除了 tomcat,并包括了 jetty 作為嵌入式服務器。 `pom.xml` ```java <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> ``` ## 7\. 為什么我們使用 spring boot maven 插件? 它在 Maven 中提供了 Spring Boot 支持,使我們可以打包可執行 jar 或 war 歸檔文件并“就地”運行應用程序。 要使用它,我們必須使用 Maven 3.2(或更高版本)。 [插件](https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/maven-plugin/usage.html)提供了使用 Spring Boot 應用程序的幾個目標: * `spring-boot:repackage`:創建一個可自動執行的 jar 或 war 文件。 它可以替換常規工件,或者可以使用單獨的**分類器**附加到構建生命周期。 * `spring-boot:run`:運行帶有多個選項的 Spring Boot 應用程序以將參數傳遞給它。 * `spring-boot:start`和`stop`:將 Spring Boot 應用程序集成到`integration-test`階段,以便應用程序先于它啟動。 * `spring-boot:build-info`:生成執行器可以使用的構建信息。 ## 8\. 如何創建和運行一個簡單的啟動應用程序? * 要創建任何簡單的 spring boot 應用程序,我們需要先創建一個`pom.xml`文件。 將`spring-boot-starter-parent`添加為項目的父項,這使其成為 Spring Boot 應用程序。 `pom.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>myproject</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> </parent> </project> ``` 上面是**最簡單的 Spring Boot 應用程序**,可以將其打包為 jar 文件。 現在,將項目導入到 IDE 中(可選)。 * 現在,我們可以開始添加在開發特定類型的應用程序時可能需要的其他啟動程序依賴項。 例如,對于 Web 應用程序,我們添加了`spring-boot-starter-web`依賴項。 `pom.xml` ```java <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` * 在此步驟開始添加應用程序業務邏輯,視圖和域數據。 默認情況下,Maven 從`src/main/java`編譯源代碼,因此僅在此文件夾中創建應用程序代碼。 作為最初的軟件包,添加**應用程序運行類**并添加[`@SpringBootApplication`](https://howtodoinjava.com/spring-boot/springbootapplication-auto-configuration/)注解。 此類將用于運行應用程序。 它的`main()`方法充當應用程序的入口點。 `MyApplication.java` ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` * 上面`main()`方法中提供的`SpringApplication`類運行我們的應用程序,啟動 Spring,該 Spring 反過來又啟動了自動配置的 Tomcat Web 服務器。 `MyApplication`(方法參數)指示主要的 Spring 組件。 * 由于我們使用了`spring-boot-starter-parent`父 POM,因此我們有一個有用的“運行”目標,可用于啟動應用程序。 在根項目目錄中鍵入`'mvn spring-boot:run'`以啟動應用程序。 它將通過單擊 URL:`localhost:8080`啟動我們可以在控制臺日志以及瀏覽器中驗證的應用程序。 ## 9\. 如何將 Web 應用程序打包為可執行 jar 或 war 文件? 可執行 jar(有時稱為“胖 jar”)是包含已編譯類以及應用程序需要運行的所有 jar 依賴項的歸檔文件。 為了**創建一個可執行 jar** ,我們應該在`pom.xml`中添加`spring-boot-maven-plugin`。 默認情況下,此插件僅將應用程序打包為`.jar`文件。 `pom.xml` ```java <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ``` 要[**創建 war 文件**](https://howtodoinjava.com/spring-boot/war-packaging-example/),第一步是在`pom.xml`文件中聲明打包類型`war`。 其次,將嵌入式服務器依賴項的范圍設置為“已提供”,因為服務器依賴項將由將要部署 war 文件的應用程序服務器提供。 `pom.xml` ```java <packaging>war</packaging> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> ``` ## 10\. 如何啟用調試日志記錄? 要啟用調試日志記錄, 1. 我們可以使用`--debug`開關啟動應用程序。 2. 我們可以在`application.properties`文件中設置`logging.level.root=debug`屬性。 3. 我們可以在提供的日志配置文件中設置根記錄器的日志記錄級別。 ## 11\. 什么是 Spring 執行器? 它有什么優勢? 借助 Spring Boot 的[執行器模塊](https://howtodoinjava.com/spring-boot/actuator-endpoints-example/),我們可以監視和管理生產環境中的應用程序使用情況,而無需對其進行編碼和配置。 這些監視和管理信息通過 [REST](https://restfulapi.net/)(如端點 URL)公開。 啟用功能的最簡單方法是向`spring-boot-starter-actuator`啟動程序 pom 文件添加依賴項。 `pom.xml` ```java <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ``` Spring Boot 包含許多內置端點,我們可以添加自己的端點。 此外,每個單獨的端點也可以啟用或禁用。 一些重要且廣泛使用的執行器端點如下: | 端點 | 用法 | | --- | --- | | `/env` | 返回當前環境中的屬性列表 | | `/health` | 返響應用程序運行狀況信息。 | | `/auditevents` | 返回所有自動配置的候選對象以及應用它們“被”或“未被”的原因。 | | `/beans` | 返響應用程序中所有 Spring Bean 的完整列表。 | | `/trace` | 返回跟蹤日志(默認情況下,最近的 100 個 HTTP 請求)。 | | `/dump` | 它執行線程轉儲。 | | `/metrics` | 它顯示了一些有用的指標信息,例如 JVM 內存使用情況,系統 CPU 使用情況,打開的文件等等。 | ## 12\. 什么是 Spring Boot 中的寬松綁定? Spring Boot 使用一些寬松的規則來解析配置屬性名稱,以便可以用多種方式編寫一個簡單的屬性名稱。 例如,可以通過以下方式編寫簡單的屬性`log.level.my-package`,并且所有內容都是正確的,并將由框架根據屬性來源對其值進行解析。 ```java log.level.my-package = debug //Kebab case log.level.my_package = debug //Underscore notation log.level.myPackage = debug //Camel case LOG.LEVEL.MY-PACKAGE = debug //Upper case format ``` 以下是每個屬性源的寬松綁定規則列表。 | 屬性源 | 允許的類型 | | --- | --- | | 屬性文件 | Camel 大小寫,Kebab 大小寫或下劃線 | | YAML 文件 | Camel 大小寫,Kebab 大小寫或下劃線 | | 環境變量 | 以下劃線作為定界符的大寫格式。 `_`不應在屬性名稱中使用 | | 系統屬性 | Camel 大小寫,Kebab 大小寫或下劃線 | ## 13\. 如何在 Spring Boot 應用程序中進行單元測試和集成測試? 通常,任何軟件應用程序都分為不同的模塊和組件。 單獨測試一個這樣的組件時,稱為**單元測試**。 單元測試不能驗證應用程序代碼是否正確地與外部依賴項一起工作。 它專注于單個組件并模擬與該組件交互的所有依賴項。 要執行單元測試,我們可以借助特殊的注解,例如: * `@JdbcTest` – 當測試僅關注基于 jdbc 的組件時,可用于典型的 jdbc 測試。 * `@JsonTest` – 當測試僅關注 JSON 序列化時使用。 * `@RestClientTest` – 用于測試 REST 客戶端。 * `@WebMvcTest` – 用于 Spring MVC 測試,其配置僅與 MVC 測試相關。 **集成測試**可以根據要測試的內容,將整個應用程序置于范圍內或僅包含某些組件。 他們可能需要為數據庫實例和硬件分配資源。 盡管也可以模擬這些交互以提高測試性能。 在集成測試中,我們將專注于測試從控制器到持久層的完整請求處理。 `@SpringBootTest`注解有助于編寫集成測試。 它啟動嵌入式服務器并完全初始化應用程序上下文。 我們可以使用`@Autowired`注解將依賴項注入測試類中。 我們還可以使用嵌套`@Configuration`類或顯式`@TestConfiguration`類提供特定于測試的 bean 配置。 它還注冊了`TestRestTemplate`和/或`WebTestClient` bean,用于 Web 測試。 `EmployeeControllerIntegrationTests.java` ```java @SpringBootTest(classes = SpringBootDemoApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT) public class EmployeeControllerIntegrationTests { @LocalServerPort private int port; @Autowired private TestRestTemplate restTemplate; //tests } ``` ## 14\. 如何在瀏覽器中啟用熱部署和實時重載? 大多數現代 IDE 支持字節碼的熱交換,并且大多數代碼更改應干凈地重新加載而沒有副作用。 此外,[`spring-boot-devtools`](https://howtodoinjava.com/spring-boot/developer-tools-module-tutorial/)模塊還支持在類路徑上的文件更改時自動重新啟動應用程序。 默認情況下,將監視類路徑上指向文件夾的任何條目的更改。 請注意,某些資源(例如靜態資產和視圖模板)不需要重新啟動應用程序。 `spring-boot-devtools`模塊包括一個嵌入式 LiveReload 服務器,該服務器可用于在更改資源時觸發瀏覽器刷新。 可從 livereload.com 免費獲得適用于 Chrome,Firefox 和 Safari 的 LiveReload 瀏覽器擴展。 要啟用/禁用 LiveReload 服務器,請將`spring.devtools.livereload.enabled`屬性的值更改為`true`(默認值)或`false`。 ## 15\. 如何在 Spring Boot 中啟用 HTTPS / SSL 支持? 可以通過`application.properties`并添加以下條目來添加 Spring Boot 項目中的[ SSL 支持](https://howtodoinjava.com/spring-boot/spring-boot-ssl-https-example/)。 `application.properties` ```java server.port=8443 server.ssl.key-alias=selfsigned_localhost_sslserver server.ssl.key-password=changeit server.ssl.key-store=classpath:ssl-server.jks server.ssl.key-store-provider=SUN server.ssl.key-store-type=JKS ``` 請與我們分享您過去遇到的 SpringBoot 面試問題。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看