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 运行方式有哪几种?
- 通过 IDE 直接运行主类
- 使用 Maven:
mvn spring-boot:run
- 打包成可执行 JAR:
java -jar app.jar
- 打包成 WAR 部署到外部容器
7. Spring Boot 自动配置原理是什么?
通过@EnableAutoConfiguration
注解触发,Spring Boot 会检查 classpath 中的 jar 包,根据META-INF/spring.factories
文件中定义的自动配置类进行条件化配置。
8. Spring Boot 热部署有几种方式?
- 使用 Spring Boot DevTools
- 使用 JRebel 插件
- 配置 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.properties
或application.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 项目?
- 逐步迁移配置到 JavaConfig
- 使用
@ImportResource
导入旧 XML 配置 - 保持兼容的依赖版本
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-name
、my.propertyName
和MY_PROPERTYNAME
都会绑定到同一个属性。
44. Spring Boot 如何注册一个定制的自动化配置?
- 创建
META-INF/spring.factories
文件 - 添加
org.springframework.boot.autoconfigure.EnableAutoConfiguration
键 - 列出全限定名的自动配置类
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 程序?
- 使用
spring-boot-starter-parent
作为父POM - 添加所需starter依赖
- 使用
spring-boot-maven-plugin
打包
48. Spring Boot web 应用程序如何部署为 JAR 或 WAR 文件?
JAR:默认方式,使用spring-boot-maven-plugin
WAR:
- 修改打包方式为war
- 继承
SpringBootServletInitializer
- 配置
spring-boot-maven-plugin
49. 什么是 WebSocket?
WebSocket 是一种全双工通信协议,允许服务端主动向客户端推送数据。
50. Spring Boot 和 Spring 有什么区别?
Spring Boot 是基于 Spring 的快速开发框架,简化了配置和部署,提供了自动配置、起步依赖和内嵌服务器等特性。
51. 常见的系统架构风格有哪些?各有什么优缺点?
- 单体架构:简单但难以扩展
- 分层架构:逻辑清晰但性能有损耗
- 微服务架构:灵活可扩展但复杂度高
- 事件驱动架构:松耦合但难以调试
- 服务导向架构(SOA):重用性好但ESB可能成为瓶颈
52. 什么是 AKF 拆分原则?
AKF扩展立方体理论,三个维度扩展:
- X轴:水平复制(克隆)
- Y轴:功能拆分(微服务)
- Z轴:数据分区(分片)
相关文章:
Spring Boot-面试题(52)
摘要: 1、通俗易懂,适合小白 2、仅做面试复习用,部分来源网络,博文免费,知识无价,侵权请联系! 1. 什么是 Spring Boot 框架? Spring Boot 是基于 Spring 框架的快速开发框架&#…...

从混乱到秩序:探索管理系统如何彻底改变工作流程
内容摘要 在许多企业与组织中,工作流程混乱是阻碍发展的“绊脚石”。员工们常常被繁琐的步骤、模糊的职责和沟通不畅等问题搞得焦头烂额,工作效率低下,错误频发。而与之形成鲜明对比的是,一些引入了先进管理系统的团队࿰…...

最新研究揭示云端大语言模型防护机制的成效与缺陷
一项全面新研究揭露了主流云端大语言模型(LLM)平台安全机制存在重大漏洞与不一致性,对当前人工智能安全基础设施现状敲响警钟。该研究评估了三大领先生成式AI平台的内容过滤和提示注入防御效果,揭示了安全措施在阻止有害内容生成与…...

HTML5+CSS3+JS小实例:具有粘性重力的磨砂玻璃导航栏
实例:具有粘性重力的磨砂玻璃导航栏 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width…...
CVAT标注服务
CVAT 是一个交互式的视频和图像标注工具,适用于计算机视觉,是一个典型的现代Web应用架构,可以实现大部分情况的标注工作,可以通过serveless CVAT-github cvat文档 下面将就其配置介绍一下几个服务: 1. 核心服务 (C…...
SpringBoot+Mybatisplus配置多数据源(超级简单!!!!)
今天分享配置多数据源的另外一种方式,SpringBoMybatisplus配置多数据源,此种方式配置相对简单,都是苞米豆封装好的,配置容易;此篇分享比较简单的方式配置数据源,多个固定的数据源,通过注解选择使…...
Git Svn
github一般需要科学上网,通过SourceTree通过URL克隆,会提示无效URL或者SLL Timeout之类,如果电脑开启了VPN,在系统设置-网络-DNS查看代理端口,如:127.0.0.1:7890 手动配置git代理 git config --global ht…...

Python爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

Webpack的基本使用 - babel
Mode配置 Mode配置选项可以告知Webpack使用相应模式的内置优化 默认值是production(什么都不设置的情况下) 可选值有:none | development | production; 这几个选项有什么区别呢? 认识source-map 我们的代码通常运行在浏览器…...
LLaMA-Factory的5种推理方式总结
LLaMA-Factory 作为一款开源的大语言模型微调与推理框架,提供了 5 种核心推理方式,覆盖从本地调试到生产部署的全流程需求。以下是具体方式及示例: 1. 交互式命令行推理 适用场景:快速测试模型效果或进行简单对话。 示例命令&am…...

链游技术破壁:NFT资产确权与Play-to-Earn经济模型实战
链游技术破壁:NFT资产确权与Play-to-Earn经济模型实战 ——从「投机泡沫」到「可持续生态」的技术重构 一、NFT确权技术革新:从链上存证到动态赋权 跨链确权架构 全链互操作协议:采用LayerZero协议实现以太坊装备与Solana土地的跨链组合&…...

为什么HDI叠孔比错孔设计难生产
摘要:本文深入探讨了HDI(高密度互连)技术中叠孔与错孔设计在生产难度上的差异。通过对两种设计在对位精度、制程复杂性、可靠性挑战等方面进行详细分析,阐述了叠孔设计在生产过程中面临的一系列难题,旨在为HDI产品的设…...

数据分析实战2(Tableau)
1、Tableau功能 数据赋能(让业务一线也可以轻松使用最新数据) 分析师可以直接将数据看板发布到线上自动更新看板自由下载数据线上修改图表邮箱发送数据设置数据预警 数据探索(通过统计分析和数据可视化,从数据发现问题…...

游戏开发中的CI/CD优化案例:知名游戏公司Gearbox使用TeamCity简化CI/CD流程
案例背景 关于Gearbox: Gearbox 是一家美国电子游戏公司,总部位于德克萨斯州弗里斯科,靠近达拉斯。Gearbox 成立于1999年,推出过多款史上最具代表性的视频游戏,包括《半衰期》、《战火兄弟连》以及《无主之地》。 团队…...

Linux --TCP协议实现简单的网络通信(中英翻译)
一、什么是TCP协议 1.1 、TCP是传输层的协议,TCP需要连接,TCP是一种可靠性传输协议,TCP是面向字节流的传输协议; 二、TCPserver端的搭建 2.1、我们最终好实现的效果是 客户端在任何时候都能连接到服务端,然后向服务…...

LlamaIndex 工作流简介以及基础工作流
什么是工作流? 工作流是一种由事件驱动、基于步骤的应用程序执行流程控制方式。 你的应用程序被划分为多个称为“步骤(Steps)”的部分,这些步骤由“事件(Events)”触发,并且它们自身也会发出事…...

如何利用Elastic Stack(ELK)进行安全日志分析
在以下文章中,我将解释如何使用Elastic Stack(ELK)进行安全日志分析,以提高安全性和监控网络活动。ELK是一个功能强大的开源日志管理和分析平台,由Elasticsearch、Logstash和Kibana组成,适用于各种用例&…...

创客匠人:以 AI 利器赋能创始人 IP 打造,加速知识变现新路径
在知识付费与个人 IP 崛起的时代,创客匠人作为行业领先的技术服务商,正通过 AI 工具重构创始人 IP 打造与知识变现的生态。其推出的三大 AI 利器 ——AI 销售信、免训数字人、AI 智能客服,精准解决 IP 运营中的核心痛点。 以 AI 销售信为例&…...

Opencv中的copyto函数
一.OpenCV中copyto函数详解 copyto()是 OpenCV 中用于图像复制和融合的核心函数,支持灵活的数据复制和掩模(Mask)操作,其功能和使用方法如下: 1. 核心功能 基础复制:将源图像&…...
TeamCity Agent 配置完整教程(配合 Docker Compose 快速部署)
在《使用 Docker Compose 从零部署 TeamCity PostgreSQL(详细新手教程)》中,我们成功部署了 TeamCity Server 和数据库服务。但要真正运行构建任务,还需要至少一个 Build Agent(构建代理)。 本教程将继续…...

基于深度强化学习的Scrapy-Redis分布式爬虫动态调度策略研究
在大数据时代,网络数据的采集与分析变得至关重要,分布式爬虫作为高效获取海量数据的工具,被广泛应用于各类场景。然而,传统的爬虫调度策略在面对复杂多变的网络环境和动态的抓取需求时,往往存在效率低下、资源浪费等问…...

在 Ubuntu 24.04 LTS 上安装 Jenkins 并配置全局工具(Git、JDK、Maven)
在 Ubuntu 24.04 LTS 上安装 Jenkins 并配置全局工具(Git、JDK、Maven) Jenkins 是一款开源的持续集成和持续交付(CI/CD)工具,在 DevOps 实践中有着广泛的应用。本文将手把手带你在 Ubuntu 24.04 LTS 系统中完成 Jenkins 的安装,并配置所需的全局工具:Git、JDK 和 Maven…...
Tika Server:企业级文档内容解析的轻量级服务化方案
目录 Tika Server:企业级文档内容解析的轻量级服务化方案 一、什么是 Tika Server? 二、Tika Server 的功能特点 1. 多种文档格式支持 2. 提取结构化信息 3. RESTful 接口设计 三、是否开源?是否支持私有化部署? 四、部署…...
LMG1020YFFR 电子元器件详解
LMG1020YFFR 电子元器件详解 基本概述 LMG1020YFFR是德州仪器(TI)生产的一款高性能、低侧栅极驱动器,属于其GaN(氮化镓)功率器件驱动产品系列。 主要功能特性 驱动能力: 峰值输出电流:5A/-5A 可驱动GaN FETs、SiC MOSFETs和高速硅MOSFETs…...

防爆型断链保护器的应用场景有哪些?
防爆型断链保护器是一种用于防止链条断裂导致设备损坏或安全事故的装置,尤其适用于存在爆炸风险的工业环境。以下是其主要应用场景: 1.石油化工行业 在石油化工厂、炼油厂等场所,防爆型断链保护器可用于保护输送设备…...
leetcode_206 反转链表
1. 题意 原地反转链表,非常经典的一道题。 2. 解决 2.1 非递归 非递归的比较好理解;链表需要维护前驱和后继两个信息,当我们要更改后继时,先要把原来的后继先存起来。 /*** Definition for singly-linked list.* struct List…...

OPenCV CUDA模块光流------高效地执行光流估计的类BroxOpticalFlow
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::BroxOpticalFlow 是 OpenCV CUDA 模块中实现Brox光流算法的类。该类用于在 GPU 上高效地计算两帧图像之间的稠密光流(Dens…...
高考:如何合理选择学科、专业以及职业
如何合理选择学科、专业以及职业 一、自我认知:明确自身兴趣与优势(一)兴趣探索(二)能力评估(三)价值观与目标 二、外部调研:深入了解学科、专业与职业(一)学…...

K8S认证|CKS题库+答案| 3. 默认网络策略
目录 3. 默认网络策略 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、官网找模板 3)、按照题目要求创建networkpolicy 4)、应用networkpolicy 5)、检查策略 3. 默认网络策略…...
HTTP、WebSocket、SSE 对比
特性HTTPWebSocketSSE (Server-Sent Events)通信模式请求-响应(单向)全双工双向通信服务器到客户端的单向通信连接方式短连接(默认)长连接长连接协议基础TCP(HTTP/1.1, HTTP/2)基于HTTP升级基于HTTP数据格式…...