面試題==知識點,這裡所記錄的面試題並不針對於面試者,而是將這些面試題作為技能知識點來看待。不以刷題進大廠為目的,而是以學習為目的。這裡的知識點會持續更新,目錄也會隨時進行調整。 ...
引言
面試題==知識點,這裡所記錄的面試題並不針對於面試者,而是將這些面試題作為技能知識點來看待。不以刷題進大廠為目的,而是以學習為目的。這裡的知識點會持續更新,目錄也會隨時進行調整。
關註公眾號:編程火箭車。在【粉絲福利】中點擊【面題大全】,其中的Java面試題線上實時更新、查看。
一、面試題導航
點這裡進入JavaWeb編程面試題——導航
面試題持續更新中......
二、面試題目
1.什麼是SpringBoot?
SpringBoot 是 Spring 開源組織下的子項目,是 Spring 組件一站式解決方案,主要是簡化了使用 Spring 的難度,簡省了繁重的配置,提供了各種啟動器,使開發者能快速上手。
2.談談你對SpringBoot的理解?
SpringBoot 主要用來簡化使用 Spring 的難度和繁重的 XML 配置,它是 Spring 組件的一站式解決方案,採取了習慣優於配置的方法。通過 .properties
或者 .yml
文件替代了 Spring 繁雜的 XML 配置文件,同時支持 @ImportResource
註解載入 XML 配置。SpringBoot 還提供了嵌入式 HTTP 伺服器、命令行介面工具、多種插件等等,使得應用程式的測試和開發簡單起來。
3.為什麼需要SpringBoot?
SpringBoot 優點非常多,如:獨立運行、簡化配置、自動配置和無需部署 war 文件等等。
4.SpringBoot的配置文件有哪幾種格式?
主要有 .properties
和 .yml
格式,它們的區別主要是書寫格式不同。另外 .yml
格式不支持 @PropertySource
註解導入配置。
5.SpringBoot支持哪些日誌框架?推薦和預設的日誌框架是哪個?
SpringBoot 支持 Java Util Logging
,Log4j2
,Logback
作為日誌框架。如果使用 Starters
啟動器,SpringBoot 將使用 Logback
作為預設日誌框架,推薦的日誌框架是 Log4j2
。但是不管是那種日誌框架他都支持將配置文件輸出到控制台或者文件中。
6.什麼是YAML?
YAML 是一種可讀的數據序列化語言,它通常用於配置文件。與屬性文件相比,如果我們想要在配置文件中添加複雜的屬性,YAML 文件就更加結構化,而且更少混淆。可以看出 YAML 具有分層配置數據。
7.SpringBoot支持哪些嵌入式Web容器?
SpringBoot 支持的嵌入式 servlet 容器有:Tomcat
、Jetty
、Undertow
。
8.SpringBoot需要獨立的容器運行嗎?
可以不需要,內置了 Tomcat/Jetty
等容器。
9.你如何理解SpringBoot配置載入順序?
SpringBoot 配置載入順序優先順序是:properties 文件、YAML 文件、系統環境變數、命令行參數。
10.SpringBoot可以相容老Spring項目嗎?
可以相容,使用 @ImportResource
註解導入老 Spring 項目配置文件。
11.說出SpringBoot的優點?
-
簡化開發,提高整體生產力。
-
SpringBoot 使用
JavaConfig
有助於避免使用 XML,同時避免大量的 Maven 導入和各種版本衝突。 -
SpringBoot 引導的應用程式可以很容易地與 Spring 生態系統集成,如
Spring JDBC
、Spring ORM
、Spring Data
、Spring Security
等等。 -
SpringBoot 應用程式提供嵌入式 HTTP 伺服器,如
Tomcat
和Jetty
,可以輕鬆地開發和測試 Web 應用程式。 -
SpringBoot 提供命令行介面工具,用於開發和測試應用程式。
-
SpringBoot 提供了多種插件,可以使用內置 Maven 工具開發和測試應用程式。
-
SpringBoot 沒有單獨的 Web 伺服器需要,這意味著不再需要啟動 Tomcat 或其他任何東西。
12.如何在自定義埠上運行SpringBoot應用程式?
可以在 application.properties
配置文件中指定埠,比如 server.port=8090
13.如何重新載入SpringBoot上的更改,而無需重新啟動伺服器?
這可以使用 DEV 工具來實現。通過這種依賴關係,您可以節省任何更改,嵌入式 Tomcat 將重新啟動。SpringBoot 有一個開發工具 DevTools 模塊,它有助於提高開發人員的生產力。Java 開發人員面臨的一個主要挑戰是將文件更改自動部署到伺服器並自動重啟伺服器。開發人員可以重新載入 SpringBoot 上的更改,而無需重新啟動伺服器。這將消除每次手動部署更改的需要。SpringBoot 在發佈它的第一個版本時沒有這個功能。這是開發人員最需要的功能。
DevTools 模塊完全滿足開發人員的需求。該模塊將在生產環境中被禁用。它還提供 H2 資料庫控制台以更好地測試應用程式。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
14.如何使用SpringBoot實現異常處理?
Spring 提供了一種使用 ControllerAdvice
處理異常的非常有用的方法。我們通過實現一個 ControlerAdvice
類,來處理控制器類拋出的所有異常。
15.SpringBoot與SpringCloud區別?
SpringBoot 是快速開發的 Spring 框架,SpringCloud 是完整的微服務框架,SpringCloud 依賴於 SpringBoot。
16.SpringBoot支持什麼前端模板?
thymeleaf
、freemarker
和 jsp
,官方不推薦 jsp
會有限制。
17.開啟SpringBoot特性有哪幾種方式?
-
繼承
spring-boot-starter-parent
項目 -
導入
spring-boot-dependencies
項目依賴
18.SpringBoot中Async非同步調用方法?
在 SpringBoot 中使用非同步調用是很簡單的,只需要在方法上使用 @Async
註解即可實現方法的非同步調用。
註意:需要在啟動類加入 @EnableAsync
使非同步調用 @Async
註解生效。
19.比較一下Spring Security和Shiro各自的優缺點?
由於 SpringBoot 官方提供了大量的非常方便的開箱即用的 Starter,包括 Spring Security 的 Starter,使得在 SpringBoot 中使用 Spring Security 變得更加容易,甚至只需要添加一個依賴就可以保護所有的介面,所以,如果是 SpringBoot 項目,一般選擇 Spring Security。當然這隻是一個建議的組合,單純從技術上來說,無論怎麼組合,都是沒有問題的。Shiro 和 Spring Security 相比,主要有如下一些特點:
-
Spring Security 是一個重量級的安全管理框架;Shiro 則是一個輕量級的安全管理框架;
-
Spring Security 概念複雜,配置繁瑣;Shiro 概念簡單、配置簡單;
-
Spring Security 功能強大;Shiro 功能簡單;
20.SpringBoot事務的使用?
SpringBoot 的事務很簡單,首先使用註解 @EnableTransactionManagement
開啟事務之後,然後在 Service 方法上添加註解 @Transactional
便可。
21.SpringBoot自動配置原理是什麼?
SpringBoot 項目的啟動註解是:@SpringBootApplication
,其實它就是由下麵三個註解組成的:
-
@Configuration
-
@ComponentScan
-
@EnableAutoConfiguration
其中 @EnableAutoConfiguration
是實現自動配置的入口,該註解又通過 @Import
註解導入了AutoConfigurationImportSelector
,在該類中載入 META-INF/spring.factories
的配置信息。然後篩選出以 EnableAutoConfiguration
為 key 的數據,載入到 IOC 容器中,實現自動配置功能。
22.SpringBoot的核心註解是哪個?它主要由哪幾個註解組成的?
啟動類上面的註解是 @SpringBootApplication
,它也是 SpringBoot 的核心註解,主要組合包含了以下3個註解:
-
@SpringBootConfiguration
:組合了@Configuration
註解,實現配置文件的功能。 -
@EnableAutoConfiguration
:打開自動配置的功能,也可以關閉某個自動配置的選項,如關閉數據源自動配置功能:@SpringBootApplication(exclude{DataSourceAutoConfiguration.class})
-
@ComponentScan
:Spring 組件掃描。
23.spring-boot-starter-parent有什麼用?
新創建一個 SpringBoot 項目,預設都是有 parent 的,這個 parent 就是 spring-boot-starter-parent
,spring-boot-starter-parent
主要有如下作用:
-
定義了 Java 編譯版本為1.8。
-
使用 UTF-8 格式編碼。
-
繼承自
spring-boot-dependencies
,這個裡邊定義了依賴的版本,也正是因為繼承了這個依賴,所以我們在寫依賴時才不需要寫版本號。 -
執行打包操作的配置。
-
自動化的資源過濾。
-
自動化的插件配置。
-
針對
application.properties
和application.yml
的資源過濾,包括通過 profile 定義的不同環境的配置文件,例如application-dev.properties
和application-dev.yml
。
總結就是打包用的。
24.SpringBoot、SpringMVC和Spring有什麼區別?
-
Spring 最重要的特征是依賴註入。所有 SpringModules 不是依賴註入就是 IOC 控制反轉。當我們恰當的使用 DI 或者是 IOC 的時候,我們可以開發松耦合應用。松耦合應用的單元測試可以很容易的進行。
-
SpringMVC 提供了一種分離式的方法來開發 Web 應用。通過運用像
DispatcherServlet
,MoudlAndView
和ViewResolver
等一些簡單的概念,開發 Web 應用將會變的非常簡單。 -
Spring 和 SpringMVC 的問題在於需要配置大量的參數。
SpringBoot 通過一個自動配置和啟動的項來目解決這個問題。為了更快的構建產品就緒應用程式,SpringBoot 提供了一些非功能性特征。
25.SpringBoot中如何解決跨域問題?
跨域可以在前端通過 JSONP 來解決,但是 JSONP 只可以發送 GET 請求,無法發送其他類型的請求,在 RESTful 風格的應用中,就顯得非常雞肋,因此我們推薦在後端通過 (CORS
,Cross-origin resource sharing
) 來解決跨域問題。這種解決方案並非 Spring Boot 特有的,在傳統的 SSM 框架中,就可以通過 CORS 來解決跨域問題,只不過之前我們是在 XML 文件中配置 CORS,現在可以通過實現 WebMvcConfigurer
介面然後重寫 addCorsMappings
方法解決跨域問題。
26.為什麼我們需要spring-boot-maven-plugin?
spring-boot-maven-plugin
提供了一些像 jar 一樣打包或者運行應用程式的命令。
-
spring-boot:run
運行你的 SpringBoot 應用程式。 -
spring-boot:repackage
重新打包你的 jar 包或者是 war 包使其可執行。 -
spring-boot:start
/spring-boot:stop
管理 SpringBoot 應用程式的生命周期(也可以說是為了集成測試)。 -
spring-boot:build-info
生成執行器可以使用的構造信息。
27.SpringBoot配置載入可以通過哪些方式定義?
-
propertiest文件
-
命令行參數
-
YAML文件
-
系統環境變數
關註公眾號:編程火箭車
我們定期發佈編程相關的文章、資訊、活動等內容。幫助編程愛好者、初學者或初級程式員快速入門、打牢基礎。歡迎大家關註,和我們一起探索編程的精彩世界。
本文來自博客園,作者:編程火箭車,轉載請註明原文鏈接:https://www.cnblogs.com/coding-rocket/p/17443431.html