Spring Boot-面試題(52)

摘要:
1、通俗易懂,適合小白
2、僅做面試復習用,部分來源網絡,博文免費,知識無價,侵權請聯系!

1. 什么是 Spring Boot 框架?

Spring Boot 是基于 Spring 框架的快速開發框架,它簡化了 Spring 應用的初始搭建和開發過程。它通過自動配置和起步依賴減少了大量的配置工作。

2. Spring Boot 框架的有什么優缺點?

優點

  • 快速構建獨立 Spring 應用
  • 內嵌服務器,無需部署 WAR 文件
  • 提供自動配置的 starter 項目依賴
  • 提供生產就緒功能如指標、健康檢查等
  • 無需 XML 配置

缺點

  • 學習曲線較陡峭
  • 對于非常簡單的應用可能過于復雜
  • 自動配置有時難以理解和定制

3. Spring Boot 核心注解都有哪些?

  • @SpringBootApplication:組合注解,包含@Configuration@EnableAutoConfiguration@ComponentScan
  • @RestController:組合@Controller@ResponseBody
  • @RequestMapping:映射 web 請求
  • @Autowired:自動裝配依賴
  • @Configuration:標記類為配置類
  • @ComponentScan:組件掃描

4. Spring Boot 的目錄結構是怎樣的?

典型結構:

src/main/java/com.example.demo/DemoApplication.java  # 主啟動類resources/static/    # 靜態資源templates/ # 模板文件application.properties # 配置文件test/java/com.example.demo/DemoApplicationTests.java # 測試類

5. Spring Boot 需要獨立的容器運行嗎?

不需要。Spring Boot 內置了 Tomcat、Jetty 或 Undertow 等服務器容器,可以直接運行。

6. Spring Boot 運行方式有哪幾種?

  1. 通過 IDE 直接運行主類
  2. 使用 Maven:mvn spring-boot:run
  3. 打包成可執行 JAR:java -jar app.jar
  4. 打包成 WAR 部署到外部容器

7. Spring Boot 自動配置原理是什么?

通過@EnableAutoConfiguration注解觸發,Spring Boot 會檢查 classpath 中的 jar 包,根據META-INF/spring.factories文件中定義的自動配置類進行條件化配置。

8. Spring Boot 熱部署有幾種方式?

  1. 使用 Spring Boot DevTools
  2. 使用 JRebel 插件
  3. 配置 IDE 自動編譯

9. Spring Boot 支持哪幾種內嵌容器?

  • Tomcat (默認)
  • Jetty
  • Undertow

10. 什么是 Spring Boot Starter?

Starter 是一組方便的依賴描述符,可以一站式獲取所需的所有相關技術依賴。例如spring-boot-starter-web包含了開發 web 應用所需的依賴。

11. Spring Boot Starter 有什么命名規范?

官方 starter 命名格式:spring-boot-starter-*
第三方 starter 命名格式:*-spring-boot-starter

12. Spring Boot 啟動器都有哪些?

常見的有:

  • spring-boot-starter-web:Web 應用
  • spring-boot-starter-data-jpa:JPA 支持
  • spring-boot-starter-test:測試支持
  • spring-boot-starter-security:安全支持
  • spring-boot-starter-thymeleaf:Thymeleaf 模板

13. 什么是 JavaConfig?

JavaConfig 是 Spring 提供的基于 Java 的配置方式,替代傳統的 XML 配置。使用@Configuration注解標記配置類。

14. 什么是 YAML?

YAML 是一種人類友好的數據序列化標準,常用于 Spring Boot 的配置文件。比 properties 文件更結構化。

15. YAML 配置和 properties 配置有什么區別?

  • YAML 支持層次結構,properties 是扁平結構
  • YAML 更易讀,適合復雜配置
  • properties 文件更簡單,適合簡單配置

16. Spring Boot 是否可以使用 XML 配置?

可以,但不推薦。Spring Boot 推薦使用 JavaConfig 或注解配置,但可以通過@ImportResource導入 XML 配置。

17. Spring Boot 中核心配置文件是什么?

application.propertiesapplication.yml,默認放在resources目錄下。

18. bootstrap.properties 和 application.properties 有何區別?

  • bootstrap.properties:由父 ApplicationContext 加載,優先級更高,常用于配置中心
  • application.properties:由子 ApplicationContext 加載

19. 什么是 Spring Profiles?

Profile 是 Spring 提供的環境隔離機制,可以通過@Profile注解或配置文件指定不同環境的配置。

20. Spring Security 和 Shiro 對比有什么優缺點?

Spring Security

  • 優點:深度集成 Spring 生態,功能全面
  • 缺點:配置復雜,學習曲線陡峭

Shiro

  • 優點:簡單易用,輕量級
  • 缺點:功能相對較少,與 Spring 集成需要額外配置

21. 什么是 Spring Batch?

Spring Batch 是 Spring 提供的輕量級批處理框架,用于處理大量數據的批處理作業。

22. 什么是 CSRF 攻擊?

跨站請求偽造(CSRF)是一種攻擊方式,攻擊者誘使用戶在已認證的網站上執行非預期的操作。Spring Security 提供了 CSRF 防護。

23. Spring Boot 中監視器是什么?

Spring Boot Actuator 提供的監控端點,可以監控應用運行狀態,如/health/metrics等。

24. Spring Boot 中如何禁用 Actuator 端點安全性?

application.properties中添加:

management.security.enabled=false

25. 如何監視所有 Spring Boot 微服務?

可以使用 Spring Boot Admin,它集成了 Actuator 端點,提供統一的監控界面。

26. spring-boot-starter-parent 有什么用?

作為父 POM,提供依賴管理、默認配置和插件配置,簡化 Maven 配置。

27. Spring Boot jar 和普通 jar 有什么區別?

Spring Boot jar 是可執行 jar,包含內嵌容器和所有依賴,可以直接運行。普通 jar 需要部署到容器中運行。

28. Spring Boot 中如何實現全局異常處理?

使用@ControllerAdvice@ExceptionHandler注解:

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ResponseEntity<String> handleException(Exception e) {return ResponseEntity.status(500).body(e.getMessage());}
}

29. Spring Boot 中如何實現定時任務?

使用@Scheduled注解:

@Component
public class ScheduledTasks {@Scheduled(fixedRate = 5000)public void reportCurrentTime() {System.out.println("Current time: " + new Date());}
}

30. Spring Boot 中如何兼容舊 Spring 項目?

  1. 逐步遷移配置到 JavaConfig
  2. 使用@ImportResource導入舊 XML 配置
  3. 保持兼容的依賴版本

31. Spring Boot 中如何解決跨域問題?

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "PUT", "DELETE");}
}

32. Spring Boot 內嵌容器默認是什么?

默認是 Tomcat。

33. Spring Boot 2.X 有什么新特性?與 1.X 有什么區別?

  • 基于 Spring Framework 5
  • 響應式編程支持
  • 性能改進
  • Actuator 改進
  • 配置屬性綁定改進

34. Spring、Spring MVC 和 Spring Boot 有什么區別?

  • Spring:核心框架,提供IoC和AOP
  • Spring MVC:基于 Spring 的 Web MVC 框架
  • Spring Boot:基于 Spring 的快速開發框架,簡化配置

35. 如何實現 Spring Boot 應用程序的安全性?

使用 Spring Security:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin();}
}

36. 如何重新加載 Spring Boot 上的更改內容,而無需重啟服務?

使用 Spring Boot DevTools 或 JRebel 插件。

37. 如何自定義端口運行 Spring Boot 應用程序?

application.properties中:

server.port=8081

38. Spring Boot 如何禁用某些自動配置特性?

使用@EnableAutoConfiguration的exclude屬性:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

39. Spring boot 中當 bean 存在時如何重啟執行自動配置?

使用@ConditionalOnMissingBean注解的自動配置類會在沒有相應 bean 時生效。

40. Spring Boot 如何編寫一個集成測試?

@SpringBootTest
@AutoConfigureMockMvc
class DemoApplicationTests {@Autowiredprivate MockMvc mockMvc;@Testvoid contextLoads() throws Exception {mockMvc.perform(get("/")).andExpect(status().isOk());}
}

41. Spring Boot 中 Actuator 有什么作用?

提供生產就緒功能,如健康檢查、指標收集、環境信息等監控端點。

42. Spring Boot 有什么外部配置的可能來源?

  • 命令行參數
  • Java 系統屬性
  • 操作系統環境變量
  • 配置文件(properties/yml)
  • @Configuration類

43. Spring Boot 支持松綁定表示什么含義?

屬性名可以靈活匹配,如my.property-namemy.propertyNameMY_PROPERTYNAME都會綁定到同一個屬性。

44. Spring Boot 如何注冊一個定制的自動化配置?

  1. 創建META-INF/spring.factories文件
  2. 添加org.springframework.boot.autoconfigure.EnableAutoConfiguration
  3. 列出全限定名的自動配置類

45. 什么是 Swagger? Spring Boot 如何實現 Swagger?

Swagger 是 API 文檔工具。Spring Boot 集成:

<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>
@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()).build();}
}

46. 如何使用 Spring Boot 實現分頁和排序?

使用 Spring Data JPA:

public interface UserRepository extends JpaRepository<User, Long> {Page<User> findAll(Pageable pageable);
}@GetMapping("/users")
public Page<User> getUsers(Pageable pageable) {return userRepository.findAll(pageable);
}

請求示例:/users?page=0&size=10&sort=name,asc

47. 如何使用 Maven 來構建一個 Spring Boot 程序?

  1. 使用spring-boot-starter-parent作為父POM
  2. 添加所需starter依賴
  3. 使用spring-boot-maven-plugin打包

48. Spring Boot web 應用程序如何部署為 JAR 或 WAR 文件?

JAR:默認方式,使用spring-boot-maven-plugin
WAR

  1. 修改打包方式為war
  2. 繼承SpringBootServletInitializer
  3. 配置spring-boot-maven-plugin

49. 什么是 WebSocket?

WebSocket 是一種全雙工通信協議,允許服務端主動向客戶端推送數據。

50. Spring Boot 和 Spring 有什么區別?

Spring Boot 是基于 Spring 的快速開發框架,簡化了配置和部署,提供了自動配置、起步依賴和內嵌服務器等特性。

51. 常見的系統架構風格有哪些?各有什么優缺點?

  1. 單體架構:簡單但難以擴展
  2. 分層架構:邏輯清晰但性能有損耗
  3. 微服務架構:靈活可擴展但復雜度高
  4. 事件驅動架構:松耦合但難以調試
  5. 服務導向架構(SOA):重用性好但ESB可能成為瓶頸

52. 什么是 AKF 拆分原則?

AKF擴展立方體理論,三個維度擴展:

  1. X軸:水平復制(克隆)
  2. Y軸:功能拆分(微服務)
  3. Z軸:數據分區(分片)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83724.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83724.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83724.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM——JVM中的字節碼:解碼Java跨平臺的核心引擎

引入 在Java的技術版圖中&#xff0c;字節碼&#xff08;Bytecode&#xff09;是連接源代碼與機器世界的黃金橋梁。當開發者寫下第一行public class HelloWorld時&#xff0c;編譯器便開始了一場精密的翻譯工程——將人類可讀的Java代碼轉化為JVM能夠理解的字節碼指令。這些由…

Java中的JSONObject詳解:從基礎到高級應用

Java中的JSONObject詳解&#xff1a;從基礎到高級應用 在當今前后端分離的架構中&#xff0c;JSONObject已成為Java開發者處理JSON數據的瑞士軍刀。本文將深入解析JSONObject的核心機制與實戰技巧。 一、JSONObject的本質與實現庫 1.1 核心定位 JSONObject是Java中表示JSON對…

在 SpringBoot+Tomcat 環境中 線程安全問題的根本原因以及哪些變量會存在線程安全的問題。

文章目錄 前言Tomcat SpringBoot單例加載結果分析多例加載&#xff1a;結果分析&#xff1a; 哪些變量存在線程安全的問題&#xff1f;線程不安全線程安全 總結 前言 本文帶你去深入理解為什么在web環境中(Tomcat SpringBoot)會存在多線程的問題以及哪些變量會存在線程安全的…

npm install 相關命令

npm install 相關命令 基本安裝命令 # 安裝 package.json 中列出的所有依賴 npm install npm i # 簡寫形式# 安裝特定包 npm install <package-name># 安裝特定版本 npm install <package-name><version>依賴類型選項 # 安裝為生產依賴&#xff08;默認&…

貪心算法應用:最小反饋頂點集問題詳解

貪心算法應用&#xff1a;最小反饋頂點集問題詳解 1. 問題定義與背景 1.1 反饋頂點集定義 反饋頂點集(Feedback Vertex Set, FVS)是指在一個有向圖中&#xff0c;刪除該集合中的所有頂點后&#xff0c;圖中將不再存在任何有向環。換句話說&#xff0c;反饋頂點集是破壞圖中所…

BiliNote部署實踐

? 開源地址&#xff1a; https://github.com/JefferyHcool/BiliNote &#x1f680; 快速開始 1. 克隆倉庫 git clone https://github.com/JefferyHcool/BiliNote.git cd BiliNote mv .env.example .env2. 啟動后端&#xff08;FastAPI&#xff09; cd backend pip insta…

用go從零構建寫一個RPC(4)--gonet網絡框架重構+聚集發包

在追求高性能的分布式系統中&#xff0c;RPC 框架的底層網絡能力和數據傳輸效率起著決定性作用。經過幾輪迭代優化&#xff0c;我完成了第四版本的 RPC 框架。相比以往版本&#xff0c;這一版本的最大亮點在于 重寫了底層網絡框架 和 實現了發送端的數據聚集機制&#xff0c;這…

MySQL 高可用基石 - 復制監控與常見 HA 方案

MySQL 高可用基石 - 復制監控與常見 HA 方案 MySQL 復制核心原理 MySQL 復制允許數據從一個 MySQL 數據庫服務器(稱為主庫 - Primary,舊稱 Master)復制到一個或多個其他的 MySQL 服務器(稱為從庫 - Replica,舊稱 Slave)。 復制的主要目的: 高可用性 (High Availability…

微信小程序(uniapp)自定義 TabBar

微信小程序&#xff08;uniapp&#xff09;自定義 TabBar 實現指南 在微信小程序開發中&#xff0c;TabBar 是底部導航欄的重要組件&#xff0c;但官方提供的 TabBar 樣式和功能較為基礎&#xff0c;無法滿足所有項目的需求。本文將詳細介紹如何在 uniapp 中實現自定義 TabBar…

MLP實戰二:MLP 實現圖像數字多分類

任務 實戰&#xff08;二&#xff09;&#xff1a;MLP 實現圖像多分類 基于 mnist 數據集&#xff0c;建立 mlp 模型&#xff0c;實現 0-9 數字的十分類 task: 1、實現 mnist 數據載入&#xff0c;可視化圖形數字&#xff1b; 2、完成數據預處理&#xff1a;圖像數據維度轉換與…

BUUCTF[HCTF 2018]WarmUp 1題解

BUUCTF[HCTF 2018]WarmUp 1題解 分析解題過程代碼審計主體函數CHECK函數&#xff1a; 構造payload 總結 分析 啟動靶機&#xff0c;進入網址&#xff0c;是一張滑稽的表情包&#xff1a; 程序化F12查看源碼&#xff1a; 發現注釋內容&#xff0c;訪問 url:/source.php得到…

大陸4D毫米波雷達ARS548調試

本文介紹了大陸ARS548毫米波雷達的調試與測試流程&#xff0c;主要包括以下內容&#xff1a; 設備參數&#xff1a;最大檢測距離301m&#xff08;可調93-1514m&#xff09;&#xff0c;支持gPTP時間同步。 接線調試&#xff1a; Windows需使用USB-RJ45轉換器 Linux可直接連接網…

TDengine 的 AI 應用實戰——運維異常檢測

作者&#xff1a; derekchen Demo數據集準備 我們使用公開的 NAB數據集 里亞馬遜 AWS 東海岸數據中心一次 API 網關故障中&#xff0c;某個服務器上的 CPU 使用率數據。數據的頻率為 5min&#xff0c;單位為占用率。由于 API 網關的故障&#xff0c;會導致服務器上的相關應用…

并發編程 - go版

1.并發編程基礎概念 進程和線程 A. 進程是程序在操作系統中的一次執行過程&#xff0c;系統進行資源分配和調度的一個獨立單位。B. 線程是進程的一個執行實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。C.一個進程可以創建和撤銷多個線程;同一個進程中…

《一生一芯》數字實驗三:加法器與ALU

1. 實驗目標 設計一個能實現如下功能的4位帶符號位的 補碼 ALU&#xff1a; Table 4 ALU 功能列表 ? 功能選擇 功能 操作 000 加法 AB 001 減法 A-B 010 取反 Not A 011 與 A and B 100 或 A or B 101 異或 A xor B 110 比較大小 If A<B then out1…

解讀《網絡安全法》最新修訂,把握網絡安全新趨勢

《網絡安全法》自2017年施行以來&#xff0c;在維護網絡空間安全方面發揮了重要作用。但隨著網絡環境的日益復雜&#xff0c;網絡攻擊、數據泄露等事件頻發&#xff0c;現行法律已難以完全適應新的風險挑戰。 2025年3月28日&#xff0c;國家網信辦會同相關部門起草了《網絡安全…

Java并發編程實戰 Day 10:原子操作類詳解

【Java并發編程實戰 Day 10】原子操作類詳解 開篇 這是“Java并發編程實戰”系列的第10天&#xff0c;我們將深入探討原子操作類的核心技術——CAS原理、ABA問題以及原子類的實現機制。通過理論結合代碼實踐的方式&#xff0c;幫助讀者理解并掌握如何在實際工作中高效使用原子…

瀚文機械鍵盤固件開發詳解:HWKeyboard.h文件解析與應用

【手把手教程】從零開始的機械鍵盤固件開發&#xff1a;HWKeyboard.h詳解 前言 大家好&#xff0c;我是鍵盤DIY愛好者Despacito0o&#xff01;今天想和大家分享我開發的機械鍵盤固件核心頭文件HWKeyboard.h的設計思路和技術要點。這個項目是我多年來對鍵盤固件研究的心血結晶…

2048游戲的技術實現分析-完全Java和Processing版

目錄 簡介Processing庫基礎項目構建指南項目結構核心數據結構游戲核心機制圖形界面實現性能優化代碼詳解設計模式分析測試策略總結與展望簡介 2048是一款由Gabriele Cirulli開發的經典益智游戲。本文將深入分析其Java實現版本的技術細節。該實現使用了Processing庫來創建圖形界…

Spring Boot + Elasticsearch + HBase 構建海量數據搜索系統

Spring Boot Elasticsearch HBase 構建海量數據搜索系統 &#x1f4d6; 目錄 1. 系統需求分析2. 系統架構設計3. Elasticsearch 與 HBase 集成方案4. Spring Boot 項目實現5. 大規模搜索系統最佳實踐 項目概述 本文檔提供了基于 Spring Boot、Elasticsearch 和 HBase 構建…