主頁 > 後端開發 > JavaWeb編程面試題——Spring Boot

JavaWeb編程面試題——Spring Boot

2023-05-31 07:50:00 後端開發

引言

面試題==知識點,這里所記錄的面試題并不針對于面試者,而是將這些面試題作為技能知識點來看待,不以刷題進大廠為目的,而是以學習為目的,這里的知識點會持續更新,目錄也會隨時進行調整,

關注公眾號:編程火箭車,在【粉絲福利】中點擊【面題大全】,其中的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 LoggingLog4j2Logback 作為日志框架,如果使用 Starters 啟動器,SpringBoot 將使用 Logback 作為默認日志框架,推薦的日志框架是 Log4j2,但是不管是那種日志框架他都支持將組態檔輸出到控制臺或者檔案中,

6.什么是YAML?

YAML 是一種可讀的資料序列化語言,它通常用于組態檔,與屬性檔案相比,如果我們想要在組態檔中添加復雜的屬性,YAML 檔案就更加結構化,而且更少混淆,可以看出 YAML 具有分層配置資料,

7.SpringBoot支持哪些嵌入式Web容器?

SpringBoot 支持的嵌入式 servlet 容器有:TomcatJettyUndertow

8.SpringBoot需要獨立的容器運行嗎?

可以不需要,內置了 Tomcat/Jetty 等容器,

9.你如何理解SpringBoot配置加載順序?

SpringBoot 配置加載順序優先級是:properties 檔案、YAML 檔案、系統環境變數、命令列引數,

10.SpringBoot可以兼容老Spring專案嗎?

可以兼容,使用 @ImportResource 注解匯入老 Spring 專案組態檔,

11.說出SpringBoot的優點?

  • 簡化開發,提高整體生產力,

  • SpringBoot 使用 JavaConfig 有助于避免使用 XML,同時避免大量的 Maven 匯入和各種版本沖突,

  • SpringBoot 引導的應用程式可以很容易地與 Spring 生態系統集成,如Spring JDBCSpring ORMSpring DataSpring Security 等等,

  • SpringBoot 應用程式提供嵌入式 HTTP 服務器,如 TomcatJetty,可以輕松地開發和測驗 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支持什么前端模板?

thymeleaffreemarkerjsp,官方不推薦 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-parentspring-boot-starter-parent 主要有如下作用:

  • 定義了 Java 編譯版本為1.8,

  • 使用 UTF-8 格式編碼,

  • 繼承自 spring-boot-dependencies,這個里邊定義了依賴的版本,也正是因為繼承了這個依賴,所以我們在寫依賴時才不需要寫版本號,

  • 執行打包操作的配置,

  • 自動化的資源過濾,

  • 自動化的插件配置,

  • 針對 application.propertiesapplication.yml 的資源過濾,包括通過 profile 定義的不同環境的組態檔,例如 application-dev.propertiesapplication-dev.yml

總結就是打包用的,

24.SpringBoot、SpringMVC和Spring有什么區別?

  • Spring 最重要的特征是依賴注入,所有 SpringModules 不是依賴注入就是 IOC 控制反轉,當我們恰當的使用 DI 或者是 IOC 的時候,我們可以開發松耦合應用,松耦合應用的單元測驗可以很容易的進行,

  • SpringMVC 提供了一種分離式的方法來開發 Web 應用,通過運用像 DispatcherServletMoudlAndViewViewResolver 等一些簡單的概念,開發 Web 應用將會變的非常簡單,

  • Spring 和 SpringMVC 的問題在于需要配置大量的引數,

SpringBoot 通過一個自動配置和啟動的項來目解決這個問題,為了更快的構建產品就緒應用程式,SpringBoot 提供了一些非功能性特征,

25.SpringBoot中如何解決跨域問題?

跨域可以在前端通過 JSONP 來解決,但是 JSONP 只可以發送 GET 請求,無法發送其他型別的請求,在 RESTful 風格的應用中,就顯得非常雞肋,因此我們推薦在后端通過 (CORSCross-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

標籤:其他

上一篇:Python 實作 m3u8 視頻下載

下一篇:返回列表

標籤雲
其他(159985) Python(38189) JavaScript(25464) Java(18161) C(15234) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7217) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5344) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4579) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1977) 功能(1967) Web開發(1951) HtmlCss(1950) C++(1927) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1862) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • JavaWeb編程面試題——Spring Boot

    面試題==知識點,這里所記錄的面試題并不針對于面試者,而是將這些面試題作為技能知識點來看待。不以刷題進大廠為目的,而是以學習為目的。這里的知識點會持續更新,目錄也會隨時進行調整。 ......

    uj5u.com 2023-05-31 07:50:00 more
  • Python 實作 m3u8 視頻下載

    # Python 實作 m3u8 視頻下載 m3u8 是一種**基于文本的媒體播放串列檔案格式**,通常用于指定流媒體播放器播放在線媒體流。它是一個簡單的文本檔案,其中包含多個由 URI 參考的媒體資源檔案的 URL。m3u8 檔案通常包含多個 ts 檔案的鏈接,這些 ts 檔案是實際的視頻和音頻數 ......

    uj5u.com 2023-05-31 07:49:53 more
  • 一文詳解 Sa-Token 中的 SaSession 物件

    Sa-Token 是一個輕量級 java 權限認證框架,主要解決登錄認證、權限認證、單點登錄、OAuth2、微服務網關鑒權 等一系列權限相關問題。 > Gitee 開源地址:[https://gitee.com/dromara/sa-token](https://gitee.com/dromara/ ......

    uj5u.com 2023-05-31 07:49:45 more
  • 如何用ReadWriteLock實作一個通用的快取中心?

    摘要:在并發場景中,Java SDK中提供了ReadWriteLock來滿足讀多寫少的場景。 本文分享自華為云社區《【高并發】基于ReadWriteLock開了個一款高性能快取》,作者:冰 河。 寫在前面 在實際作業中,有一種非常普遍的并發場景:那就是讀多寫少的場景。在這種場景下,為了優化程式的性能 ......

    uj5u.com 2023-05-31 07:49:34 more
  • 【爬蟲+資料清洗+可視化】用Python分析“淄博燒烤“的評論資料

    [toc] # 一、背景介紹 您好,我是[@馬哥python說](https://mp.weixin.qq.com/s/EuOKLq6ZSgQGnijreylSiA) ,一枚10年程式猿。 自從2023.3月以來,"淄博燒烤"現象持續占領熱搜流量,體現了后疫情時代眾多網友對人間煙火氣的美好向往,本現 ......

    uj5u.com 2023-05-31 07:49:02 more
  • c++11: all_of 、 any_of 和 none_of

    242. 有效的字母異位詞 ```cpp class Solution { public: bool isAnagram(string s, string t) { if(s.size()!=t.size()) return false; int ans[26]={0}; for(auto& ch: ......

    uj5u.com 2023-05-31 07:48:43 more
  • 【Haxe】(一)VSCode 搭建 Haxe 開發環境

    前言 咱換作業啦! 新作業這邊需要用到的開發語言是 Haxe,最近大概會寫幾篇筆記。Haxe 的介紹就不寫了,打算記錄點有用的學習內容,先從搭建開發環境開始吧! 當前適用版本: VSCode:Current Latest Version Haxe 版本:4.3.1 文章最近更新日期:2023.05. ......

    uj5u.com 2023-05-31 07:48:28 more
  • (Java)記一次通過API遞回分頁“爬取”網頁資料的開發經歷

    在最近的互聯網專案開發中,需要獲取用戶的訪問ip資訊,并進行后續統計分析。
    這些ip資訊是在第三方的服務中分組存放的,且每個分組都都是分頁(1頁10條)存放的,如果一次性訪問大量的資料,API很有可能會報錯。
    怎樣通過HTTP的方式去獲取到資訊,并且模擬瀏覽器每頁每頁獲取10條的資訊,且持久到資料庫... ......

    uj5u.com 2023-05-31 07:48:12 more
  • 驅動開發:內核讀寫記憶體浮點數

    如前所述,在前幾章內容中筆者簡單介紹了`記憶體讀寫`的基本實作方式,這其中包括了`CR3切換`讀寫,`MDL映射`讀寫,`記憶體拷貝`讀寫,本章將在如前所述的讀寫函式進一步封裝,并以此來實作驅動讀寫記憶體浮點數的目的。記憶體`浮點數`的讀寫依賴于`讀寫記憶體位元組`的實作,因為浮點數本質上也可以看作是一個位元組集... ......

    uj5u.com 2023-05-31 07:42:55 more
  • Python連接es筆記三之es更新操作

    > 本文首發于公眾號:Hunter后端 > 原文鏈接:[Python連接es筆記三之es更新操作](https://mp.weixin.qq.com/s/1cTaVfjLFrmbXajNcayhEA) 這一篇筆記介紹如何使用 Python 對資料進行更新操作。 對于 es 的更新的操作,不用到 Se ......

    uj5u.com 2023-05-31 07:40:48 more