引言
面試題==知識點,這里所記錄的面試題并不針對于面試者,而是將這些面試題作為技能知識點來看待,不以刷題進大廠為目的,而是以學習為目的,這里的知識點會持續更新,目錄也會隨時進行調整,
關注公眾號:編程火箭車,在【粉絲福利】中點擊【面題大全】,其中的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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/553821.html
標籤:其他
下一篇:返回列表