当前位置: 首页 > article >正文

Spring Boot常见面试题总结

1. Spring Boot基础

  • Q1: Spring Boot是什么?它的优点有哪些?
    • Spring Boot是简化Spring应用开发的框架,提供自动配置、内嵌服务器、starter依赖等。优点包括快速搭建、约定优于配置、减少XML配置、集成生态丰富。
  • Q2: @SpringBootApplication注解的作用是什么?
    • 组合了三个核心注解:@SpringBootConfiguration(标记为配置类)、@EnableAutoConfiguration(启用自动配置)、@ComponentScan(自动扫描组件)。
  • Q3: 什么是Spring Boot Starter?举例说明常见Starter。
    • Starter是预定义的依赖集合,简化依赖管理。例如:
      • spring-boot-starter-web(Web应用)
      • spring-boot-starter-data-jpa(JPA与数据库)
      • spring-boot-starter-test(测试)

2. 自动配置与原理

  • Q4: Spring Boot自动配置的原理是什么?
    • 通过@EnableAutoConfiguration触发,扫描META-INF/spring.factories中的配置类,根据条件注解(如@ConditionalOnClass)按需加载Bean。
  • Q5: 如何排除不必要的自动配置?
    • 使用@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})或在application.properties中设置spring.autoconfigure.exclude
  • Q6: 条件注解(Conditional Annotations)有哪些?
    • @ConditionalOnClass@ConditionalOnMissingBean@ConditionalOnProperty等,用于控制Bean的创建条件。

3. 配置与属性

  • Q7: Spring Boot支持哪些配置文件?优先级如何?
    • 支持application.propertiesapplication.yml。优先级从高到低:命令行参数 > 系统环境变量 > 项目内部的配置文件 > 默认配置。
  • Q8: 如何读取自定义配置?
    • 使用@Value("${property.key}")@ConfigurationProperties绑定到对象。
  • Q9: 什么是Profile?如何切换环境配置?
    • Profile用于区分不同环境(如dev、prod)。通过spring.profiles.active=dev激活,或命令行--spring.profiles.active=prod

4. 核心机制

  • Q10: Spring Boot的启动流程是怎样的?
      1. 加载SpringApplication;2. 执行run()方法;3. 读取配置、初始化上下文、执行自动配置、启动内嵌服务器等。
  • Q11: 内嵌服务器(如Tomcat)是如何工作的?
    • Spring Boot将Tomcat作为依赖打包,启动时通过ServletWebServerApplicationContext创建并运行服务器。
  • Q12: 如何自定义Spring Boot的Banner?
    • src/main/resources下创建banner.txt,或通过spring.banner.location指定文件路径。

5. 数据与持久化

  • Q13: 如何集成Spring Data JPA?
    • 添加spring-boot-starter-data-jpa依赖,配置数据源,定义Repository接口继承JpaRepository
  • Q14: 什么是Hibernate的N+1查询问题?如何解决?
    • 频繁查询关联对象导致多次SQL。解决方案:使用@EntityGraph、JPQL的FETCH JOIN或批量查询。

6. 测试与监控

  • Q15: 如何编写Spring Boot单元测试?
    • 使用@SpringBootTest注解,结合@MockBean@DataJpaTest等切片测试。
  • Q16: Spring Boot Actuator的作用是什么?
    • 提供生产级监控端点(如/health/metrics),可通过management.endpoints.web.exposure.include=*开启。

7. 进阶问题

  • Q17: 如何实现Spring Boot应用的优雅停机?
    • 配置server.shutdown=graceful,并设置超时时间spring.lifecycle.timeout-per-shutdown-phase=30s
  • Q18: 如何集成Spring Security?
    • 添加spring-boot-starter-security依赖,通过配置类继承WebSecurityConfigurerAdapter自定义安全规则。
  • Q19: Spring Boot如何支持RESTful服务?
    • 使用@RestController@GetMapping等注解,配合Jackson实现JSON序列化。

8. 实战场景

  • Q20: 如何解决跨域请求(CORS)问题?
    • 配置@CrossOrigin注解或自定义WebMvcConfigurer添加CORS映射。
  • Q21: 如何实现全局异常处理?
    • 使用@ControllerAdvice@ExceptionHandler捕获并统一处理异常。

http://www.kler.cn/a/537663.html

相关文章:

  • Deepseek52条喂饭指令
  • 【Uniapp-Vue3】从uniCloud中获取数据
  • 硬件工程师思考笔记02-器件的隐秘角落:磁珠与电阻噪声
  • Baklib赋能数字内容体验个性化推荐提升用户体验的未来之路
  • C32.【C++ Cont】静态实现双向链表及STL库的list
  • 部署LLM模型到云端
  • SVN 提交与原有文件类型不一样的文件时的操作
  • [权限提升] Linux 提权 维持 — 系统错误配置提权 - PATH 环境变量劫持提权
  • 使用 C++20 Modules 导入 Boost 模块的方法
  • GO、GSEA富集分析一网打进
  • pptx 提取 ppt 内容
  • DNS域名服务器的安装及配置
  • AI知识库和全文检索的区别
  • 关系代数、笛卡尔积、投影选择、自然连接(高软15)
  • 济南软件检测机构有哪些?山东省做软件测试找哪些机构?
  • UV - Python 包管理
  • 【地理坐标系系统全史与技术演进】
  • 大数据查询争霸:CK、ES、RediSearch谁主沉浮?
  • 游戏引擎学习第90天
  • python基础入门:3.3序列通用操作
  • SpringBoot中的多环境配置管理
  • 从Oracle 到帆软BI:打造高效数据可视化仪表盘
  • 人工智能A*-启发式函数、增量式 A* 算法
  • 余数相同问题(信息学奥赛一本通-1080)
  • 从基础到进阶,掌握 CSS 变量与calc()函数的完整指南
  • Deepseek部署的模型参数要求