SpringBoot 高频面试题及详细答案(实战版)_第1页
SpringBoot 高频面试题及详细答案(实战版)_第2页
SpringBoot 高频面试题及详细答案(实战版)_第3页
SpringBoot 高频面试题及详细答案(实战版)_第4页
SpringBoot 高频面试题及详细答案(实战版)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SpringBoot高频面试题及详细答案(实战版)一、SpringBoot基础核心面试题1.什么是SpringBoot?它和Spring的核心区别是什么?参考答案:SpringBoot是一个基于Spring框架的快速开发脚手架,核心目的是简化Spring应用的搭建、配置和部署流程,让开发者可以快速开发独立、可运行的Java后端项目。和Spring的核心区别主要有三点:1.配置方式不同:原生Spring需要大量XML手动配置Bean、事务、拦截器等;SpringBoot默认自动配置,极少需要手动写配置,主打零配置、少配置开发。2.项目搭建效率不同:Spring搭建项目需要手动引入大量依赖、管理版本冲突;SpringBoot提供starter启动器,一站式整合依赖,统一版本管理,彻底解决版本冲突问题。3.部署运行方式不同:Spring项目需要外置Tomcat、Jetty等服务器,打包为war包部署;SpringBoot内置服务器,直接打包jar包,通过java-jar命令即可独立运行。2.SpringBoot的核心优势有哪些?实际开发中最直观的体验是什么?参考答案:核心优势集中在简化开发、简化配置、简化部署三个方面:1.自动配置:根据项目引入的依赖,自动加载对应的Spring配置类,无需手动注册Bean。2.starter场景启动器:针对不同业务场景(web、mybatis、redis、kafka等)提供封装好的依赖包,引入一个starter即可整合全套功能,不用逐个导包。3.内置Web容器:默认内置Tomcat,无需额外配置服务器,项目可独立运行。4.极简监控:自带actuator监控组件,可快速查看项目运行状态、接口、线程、内存、日志等信息。5.无代码生成、无XML:全程注解开发,彻底告别繁琐的XML配置文件。实际开发中最直观的体验:新建项目后,写少量代码即可启动运行接口,不用花时间处理环境配置、依赖冲突、服务器部署等基础问题,专注业务开发即可。3.SpringBoot2.x和3.x最核心的区别?项目升级需要注意什么?参考答案:1.底层依赖版本升级:SpringBoot2.x基于Spring5、JDK8+;SpringBoot3.x基于Spring6、最低要求JDK17,彻底放弃低版本JDK。2.包路径变更:3.x废弃了javax包,统一使用jakarta包,所有Servlet、事务、Web相关注解和类路径全部变更,这是升级最容易报错的点。3.自动配置逻辑优化:3.x简化了自动配置注解,废弃了部分过时的配置类和方法,严格遵循新的Spring6规范。4.原生镜像支持:3.x官方全面支持GraalVM原生镜像,项目启动速度、内存占用大幅优化。升级注意事项:必须统一升级JDK版本,全局替换javax为jakarta包,排查废弃的配置参数和过期方法,适配新版依赖。二、SpringBoot自动配置核心原理(高频必问)4.SpringBoot自动配置的核心原理是什么?讲讲流程参考答案:SpringBoot自动配置的核心是@EnableAutoConfiguration注解+SPI机制+条件注解,整体流程清晰简单:1.项目启动时,主类上的@SpringBootApplication注解,内部包含@EnableAutoConfiguration,开启自动配置功能。2.框架通过SPI机制,读取依赖包中META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,加载所有预定义的自动配置类。3.每个自动配置类上都带有条件注解(@ConditionalOnClass、@ConditionalOnMissingBean等),只有满足对应条件,配置类才会生效。4.配置类生效后,会自动创建对应的Bean、绑定配置文件参数、初始化组件,注入到Spring容器中。简单来说:引入依赖→加载自动配置类→条件匹配→自动初始化组件。5.@SpringBootApplication注解的底层组成是什么?各自作用?参考答案:该注解是一个组合注解,核心包含三个核心注解:1.@Configuration:标识当前类是配置类,允许通过@Bean注解注册组件到容器。2.@EnableAutoConfiguration:开启SpringBoot自动配置,根据依赖自动初始化各类组件。3.@ComponentScan:默认扫描当前启动类所在包及子包下所有带@Controller、@Service、@Component、@Repository的组件,自动注册到容器。日常开发中无需单独配置这三个注解,一个主注解即可完成项目初始化配置。6.常用的自动配置条件注解有哪些?分别场景?参考答案:1.@ConditionalOnClass:项目classpath下存在指定类时,当前配置才生效。比如引入web依赖后,Web自动配置才会生效。2.@ConditionalOnMissingBean:容器中没有开发者自定义的对应Bean时,才使用框架默认的Bean。日常自定义配置类覆盖默认配置,核心就是依靠这个注解。3.@ConditionalOnProperty:配置文件中存在指定参数、且参数值匹配时,配置生效。常用于开关配置。4.@ConditionalOnWebApplication:仅在Web项目环境下生效。三、SpringBoot配置文件相关面试题7.application.yml和perties区别?优先级谁更高?参考答案:区别:1.语法不同:properties是键值对格式,层级靠前缀区分;yml是缩进层级格式,结构更清晰,适合多层级配置。2.可读性:yml配置结构化更强,适合数据库、redis、线程池、mybatis等复杂配置;properties简洁直观,适合简单配置。3.语法约束:yml严格依赖缩进,缩进错误会直接报错;properties无缩进要求,容错率更高。优先级:同一目录下,properties优先级高于yml。如果两个文件存在相同配置,properties的配置会覆盖yml。8.SpringBoot多环境配置怎么实现?日常开发如何使用?参考答案:SpringBoot支持通过多环境配置文件+激活配置实现环境隔离,分为开发、测试、生产环境。1.新建配置文件:application-dev.yml(开发环境)、application-test.yml(测试环境)、application-prod.yml(生产环境)2.在主配置文件application.yml中指定激活环境:files.active=dev3.不同环境配置独立的数据库地址、端口、日志级别、开关参数,避免环境混淆。除此之外,也可以通过启动命令动态指定环境:java-jarxxx.jar--files.active=prod,生产部署常用这种方式。9.如何自定义配置参数并读取?@Value和@ConfigurationProperties区别?参考答案:自定义配置读取两种方式:1.@Value("${配置key}"):适用于读取零散、单个配置参数。2.@ConfigurationProperties+配置类:适用于读取批量、层级复杂的配置,统一封装成实体类。核心区别:1.批量配置优先用@ConfigurationProperties,支持松散绑定、前缀匹配,代码更整洁;单个参数用@Value更便捷。2.@Value支持SPEL表达式,可动态计算值;@ConfigurationProperties不支持表达式,只做配置绑定。3.配置校验、批量统一管理场景,只能用@ConfigurationProperties。四、SpringBootWeb核心开发面试题10.SpringBoot如何整合Servlet、Filter、Listener?两种实现方式?参考答案:SpringBoot摒弃了传统web.xml配置,提供两种纯注解方式整合三大组件:方式一:注解注册(简单场景)直接在自定义Servlet、Filter、Listener类上添加对应注解:@WebServlet、@WebFilter、@WebListener,同时在启动类添加@ServletComponentScan开启扫描即可生效。方式二:RegistrationBean注册(推荐、灵活)通过ServletRegistrationBean、FilterRegistrationBean、ListenerRegistrationBean在配置类中手动注册组件,可以精准设置拦截路径、优先级、参数,可控性更强,企业项目常用。11.SpringBoot全局异常处理怎么做?原理是什么?参考答案:项目统一异常处理核心使用@RestControllerAdvice+@ExceptionHandler组合注解,实现全局异常拦截,统一返回前端格式。1.新建全局异常处理类,添加@RestControllerAdvice注解,拦截所有Controller抛出的异常。2.自定义多个异常处理方法,通过@ExceptionHandler指定拦截的异常类型,包括全局Exception、自定义业务异常、参数校验异常等。3.拦截异常后,统一封装成后端统一返回结果,返回给前端,避免直接抛出异常堆栈信息,保证接口返回格式统一、安全。优势:全局统一处理,不用在每个接口中try-catch,代码整洁,异常格式统一,便于前端统一处理报错。12.SpringBoot拦截器(Interceptor)和过滤器(Filter)的区别和执行顺序?参考答案:核心区别:1.归属层级不同:Filter是Servlet原生组件,属于Web容器层级;Interceptor是SpringMVC组件,属于Spring框架层级。2.拦截范围不同:Filter拦截所有请求,包括静态资源、接口请求;Interceptor只拦截Controller接口请求,不拦截静态资源。3.使用场景不同:Filter常用于跨域处理、编码过滤、请求预处理;Interceptor常用于登录校验、权限拦截、日志记录、接口限流。执行顺序:请求进来:Filter前置处理→DispatcherServlet→Interceptor前置处理→Controller接口执行→Interceptor后置处理→Filter后置处理→响应返回五、SpringBoot缓存、事务、整合中间件13.SpringBoot如何开启缓存?常用缓存注解及使用场景?参考答案:1.启动类添加@EnableCaching开启全局缓存功能。2.引入对应的缓存依赖(默认简易缓存、Redis缓存等)。常用缓存注解:-@Cacheable:查询缓存,先查缓存,没有则执行方法并缓存结果,适合查询接口。-@CachePut:更新缓存,每次都会执行方法,并更新缓存数据,适合修改、新增接口。-@CacheEvict:清除缓存,适合删除接口,删除数据后清空对应缓存。14.SpringBoot事务失效的常见场景有哪些?(高频面试重点)参考答案:日常开发中@Transactional事务失效的6大常见场景:1.方法权限问题:事务注解只对public方法生效,private、protected方法事务失效。2.内部调用问题:同类中A无事务方法调用B有事务方法,事务失效(AOP动态代理无法拦截内部调用)。3.异常类型错误:默认只回滚RuntimeException,普通Exception、Checked异常不回滚,需要手动指定rollbackFor。4.异常被捕获:方法内部try-catch捕获异常,没有向外抛出,框架无法感知异常,不会回滚。5.数据库引擎不支持事务:MySQL使用MyISAM引擎,不支持事务,必须使用InnoDB。6.传播机制使用不当:比如REQUIRES_NEW、SUPPORTS等传播机制使用错误,导致事务无法正常生效。15.SpringBoot整合MyBatis的核心步骤?参考答案:1.引入mybatis-spring-boot-starter启动器和数据库驱动依赖。2.配置文件中配置数据库连接参数(地址、账号、密码、驱动类)。3.配置MyBatis参数:mapper映射文件路径、实体类别名、日志、驼峰命名等。4.启动类添加@MapperScan注解,扫描Mapper接口包。5.编写Mapper接口和XML映射文件,实现数据库CRUD操作。六、SpringBoot部署、优化、常见问题16.SpringBoot项目打包部署方式有几种?区别?参考答案:两种主流打包部署方式:1.Jar包部署(主流):SpringBoot默认打包方式,内置Tomcat,直接通过java-jar命令运行,部署简单、无需外置服务器,适合微服务项目。2.War包部署:需要修改打包方式、排除内置Tomcat,打包后放到外置Tomcat服务器运行,传统老项目常用,微服务项目基本不用。17.SpringBoot启动缓慢的常见原因及优化方案?参考答案:常见原因:1.项目依赖过多、自动配置类加载过多;2.静态资源、日志初始化耗时;3.数据库、中间件连接初始化慢;4.未精简自动配置,加载大量无用组件。优化方案:1.排除无用的自动配置类,减少启动加载项;2.精简项目依赖,移除冗余包;3.优化数据库、Redis连接池配置;4.开启SpringBoot懒加载,延迟初始化非核心Bean;5.升级高版本SpringBoot和JDK。18.SpringBoot如何解决跨域问题?三种常用方式参考答案:1.局部跨域:在需要跨域的Controller类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论