Java精選面試題:SpringBoot
今天寫的這篇主要總結了SpringBoot相關的問題。還有更多面試專題及java資料、筆記等可以新增微信:YDT676免費獲取
Q:什麼是SpringBoot?
用來簡化spring應用的初始搭建以及開發過程,使用特定的方式來進行配置(properties
或yml
檔案)建立獨立的spring引用程式 main方法執行,嵌入的Tomcat 無需部署war檔案,簡化maven配置,自動配置spring新增對應功能starter自動化配置。
Q: Spring Boot、Spring MVC 和 Spring 有什麼區別?
1、SpringSpring最重要的特徵是依賴注入。所有SpringModules
2、Spring MVC提供了一種分離式的方法來開發 Web 應用。通過運用像
DispatcherServelet
,MoudlAndView
和ViewResolver
等一些簡單的概念,開發 Web 應用將會變的非常簡單。3、Spring 和 SpringMVC 的問題在於需要配置大量的引數。
4、Spring Boot 通過一個自動配置和啟動的項來目解決這個問題。為了更快的構建產品就緒應用程式,Spring Boot 提供了一些非功能性特徵。
Q:Spring Boot 的核心註解是哪個?它主要由哪幾個註解組成的?
1、@SpringBootConfiguration
:組合了 @Configuration 註解,實現配置檔案的功能。
2、@EnableAutoConfiguration
:開啟自動配置的功能,也可以關閉某個自動配置的選項,如關閉資料來源自動配置功能。
3、@ComponentScan
:Spring元件掃描。
Q:什麼是 JavaConfig?
1、面向物件的配置
。由於配置被定義為 JavaConfig 中的類,因此使用者可以充分利用 Java 中的面向物件功能。一個配置類可以繼承另一個,重寫它的@Bean 方法等。
2、減少或消除 XML 配置
。基於依賴注入原則的外化配置的好處已被證明。但是,許多開發人員不希望在 XML 和 Java 之間來回切換。JavaConfig 為開發人員提供了一種純 Java 方法來配置與 XML 配置概念相似的 Spring 容器。從技術角度來講,只使用 JavaConfig 配置類來配置容器是可行的,但實際上很多人認為將JavaConfig 與 XML 混合匹配是理想的。
3、型別安全和重構友好
Q:什麼是YAML?
YAML是一種人類可讀的資料序列化語言。它通常用於配置檔案
。
與屬性檔案相比,如果我們想要在配置檔案中新增複雜的屬性,YAML檔案就更加結構化,而且更少混淆。可以看出YAML具有分層配置
資料
。
Q:bootstrap.yml和application.yml有什麼區別?
1、Spring Cloud 構建於 Spring Boot 之上,在 Spring Boot 中有兩種上下文,一種是 bootstrap,另外一種是 application。
2、application 配置檔案這個容易理解,主要用於 Spring Boot 專案的自動化配置
。
3、bootstrap 是應用程式的父上下文,也就是說bootstrap 載入優先於 applicaton
。
4、bootstrap 主要用於從額外的資源來載入配置資訊
,還可以在本地外部配置檔案中解密屬性。
5、這兩個上下文共用一個環境
,它是任何Spring應用程式的外部屬性的來源。
6、bootstrap 裡面的屬性會優先載入
,它們預設也不能被本地相同配置覆蓋。
7、boostrap 由父 ApplicationContext 載入,比 applicaton 優先載入
8、boostrap 裡面的屬性不能被覆蓋
Q:springboot常用的starter有哪些?
1、spring-boot-starter-web
(嵌入tomcat和web開發需要servlet與jsp支援)
2、spring-boot-starter-data-jpa
(資料庫支援)
3、spring-boot-starter-data-redis
(redis資料庫支援)
4、spring-boot-starter-data-solr
(solr搜尋應用框架支援)
5、mybatis-spring-boot-starter
(第三方的mybatis整合starter)
Q:Spring Boot 配置載入順序?
1、properties檔案
2、YAML檔案
3、系統環境變數
4、命令列引數
還有更多面試專題及java資料、筆記等可以新增微信:YDT676免費獲取
Q:如何使用Spring Boot實現異常處理?
SpringControllerAdvice
提供了一種使用處理異常的非常有用的方法。通過實現一個ControllerAdvice
類,來處理控制器類丟擲的所有異常。
Q: 如何重新載入 Spring Boot上的更改,而無需重新啟動伺服器?
使用DEV工具來實現。
通過這種依賴關係,可以節省任何更改,嵌入式 tomcat將重新啟動。
使用Spring Boot有一個開發工具Dev Tools
模組,可以重新載入 Spring Boot上的更改,而無需重新啟動伺服器。消除每次手動部署更改的需要。Spring Boot在釋出它的第一個版本時沒有這個功能。該模組將在生產環境中被禁用。它還提供H2資料庫控制檯以更好地測試應用程式。
Q:Spring Boot中的監視器是什麼?
Spring boot actuatorspring
是啟動框架中的重要功能之一。Spring boot監視器可訪問生產環境中正在執行的應用程式的當前狀態。有幾個指標必須在生產環境中進行檢查和監控。即使一些外部應用程式可能正在使用這些服務來向相關人員觸發警報訊息。監視器模組公開了一組可直接作為http url rest
訪問的REST端點來檢查狀態。
Q:如何在自定義埠上執行 Spring Boot應用程式?
在application.properties
中指定埠serverport=8090
。
Q:Spring Boot監聽器流程?
1、通過app.addListeners
註冊進入
2、初始化一個SpringApplicationRunListeners
進行處理
3、從spring.factories
中讀取監聽器處理類EventPublishingRunListener
4、通過createSpringFactoriesInstances
建立監聽器處理類例項
5、呼叫監聽器listeners.starting()
的方法來啟動。
6、底層把事件處理交給執行緒池
去處理
Q:Spring Boot初始化環境變數流程?
1、呼叫prepareEnvironment
方法去設定環境變數
2、接下來有三個方法getOrCreateEnvironment
,configureEnvironment
,environmentPrepared
3、getOrCreateEnvironment
去初始化系統環境變數
4、configureEnvironment
去初始化命令列引數
5、environmentPrepared
當廣播到來的時候呼叫onApplicationEnvironmentPreparedEvent
方法去使用postProcessEnvironment
方法load yml
和properties變數
Q:Spring Boot掃描流程?
1、呼叫run方法中的refreshContext
方法
2、用AbstractApplicationContext中的refresh
方法
3、委託給invokeBeanFactoryPostProcessors
去處理呼叫鏈
4、其中一個方法postProcessBeanDefinitionRegistry會
去呼叫processConfigBeanDefinitions
解析beandefinitions
5、在processConfigBeanDefinitions
中有一個parse
方法,其中有componentScanParser.parse
的方法,這個方法會掃描當前路徑下所有Component
元件
Q:如何在 Spring Boot中禁用 Actuator端點安全性?
預設情況下,所有敏感的HTTP端點都是安全的,只有具有http ACTUATOR
角色的使用者才能訪問它們。安全性是使用標準的httpservletrequest. isuserinrole..isusernrole
方法實施的。可以使用management. security. enabled= false
來禁用安全性。只有在執行機構端點在防火牆後訪問時,才建議禁用安全性。
Q:如何實現 Spring Boot應用程式的安全性?
使用spring--startersecurityboot
--依賴項,並且必須新增安全配置。配置類將必須擴充套件WebSecurityConfigurerAdapter
並覆蓋其方法。
Q:什麼是 Spring Batch?
Spring Boot Batch
提供可重用的函式,這些函式在處理大量記錄時非常重要;包括日誌/跟蹤,事務管理,作業處理統計資訊,作業重新啟動,跳過和資源管理。它還提供了更先進的技術服務和功能,通過優化和分割槽技術,可以實現極高批量和高效能批處理作業。簡單以及複雜的大批量批處理作業可以高度可擴充套件的方式利用框架處理重要大量的資訊。
Q:Spring Boot 有哪幾種讀取配置的方式?
-
@PropertySource
-
@Value
-
@Environment
-
@ConfigurationPropertie