SpringBoot 高频面试题及真实口语化答案_第1页
SpringBoot 高频面试题及真实口语化答案_第2页
SpringBoot 高频面试题及真实口语化答案_第3页
SpringBoot 高频面试题及真实口语化答案_第4页
SpringBoot 高频面试题及真实口语化答案_第5页
全文预览已结束

下载本文档

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

文档简介

SpringBoot高频面试题及真实口语化答案一、SpringBoot基础认知(入门必问)1.什么是SpringBoot?它和Spring有什么区别?答案:SpringBoot是Spring的快速开发脚手架,核心就是简化Spring开发、零配置、快速落地项目。和原生Spring的区别:Spring需要手动写大量XML配置、管理依赖版本、配置Tomcat服务器,繁琐且容易出错;SpringBoot自动帮我们完成配置,自带依赖版本管理、内嵌服务器,不用手动配XML,开箱即用,专注业务开发。2.SpringBoot的核心优势是什么?答案:日常开发中最直观的优势就四点:自动配置:根据项目引入的依赖,自动装配对应的Bean,不用手动创建;依赖管理:统一管控所有依赖版本,避免版本冲突,不用手动写版本号;内嵌容器:自带Tomcat、Jetty,项目可直接打成jar包运行,不用单独部署服务器;无XML配置:全程注解开发,简化项目搭建和维护。3.SpringBoot2.x和3.x最核心的区别?答案:面试常问重点,核心两点:SpringBoot3最低支持JDK17,彻底淘汰JDK8,2.x主流适配JDK8;SpringBoot3基于Spring6,全面支持原生镜像GraalVM,启动速度、内存占用大幅优化,2.x不支持;部分包路径和注解调整,废弃了大量过时配置和方法。二、核心原理(面试高频重点)1.SpringBoot自动配置原理是什么?答案:核心就是@SpringBootApplication注解驱动,底层靠三个注解实现:@Configuration:标记当前类是配置类;@EnableAutoConfiguration:开启自动配置,读取框架自带的自动配置类,根据依赖是否存在,自动创建Bean;@ComponentScan:自动扫描当前包及子包下所有加了注解的组件(Controller、Service等)。简单说:引入什么依赖,SpringBoot就自动帮我们配好对应的功能,无需手动干预。2.说说@Conditional系列注解的作用?答案:这是自动配置的核心条件注解,意思就是满足条件才自动配置,不满足就不生效。常用的几个:@ConditionalOnClass:项目存在某个类时,才生效;@ConditionalOnMissingBean:容器中没有这个Bean时,才自动创建(我们自己定义的Bean会优先覆盖自动配置的);@ConditionalOnProperty:配置文件配置了对应参数,才生效。3.SpringBoot启动流程简单说一下?答案:日常开发的启动流程很清晰,分四步:执行main方法,调用SpringApplication.run();初始化Spring容器,加载项目配置、环境变量;开启自动配置,扫描所有组件,注册Bean到容器;启动内嵌Tomcat容器,项目启动完成,接收请求。三、配置文件相关(实操必考)1.perties和application.yml区别?答案:核心就是语法和层级不同,功能完全一致:properties:键值对格式,层级不清晰,适合简单配置;yml:缩进层级格式,结构清晰,支持数组、对象、多行配置,可读性更强,现在项目主流用yml。优先级:properties优先级高于yml,同一配置项,properties会覆盖yml。2.SpringBoot多环境配置怎么实现?答案:项目开发、测试、生产环境配置不同,一般用多环境配置:创建三个配置文件:application-dev.yml(开发)、application-test.yml(测试)、application-prod.yml(生产);在主配置文件中指定激活环境:files.active=dev/test/prod;启动项目就会加载对应环境的配置,互不冲突。3.怎么自定义配置,并且读取配置文件中的值?答案:两种常用方式,工作中都在用:@Value:适合读取单个简单配置,用法简单,适合零散配置;@ConfigurationProperties:适合批量读取一组配置,绑定实体类,结构化更强,推荐配置参数多的时候使用。四、Web核心开发(业务面试重点)1.SpringBoot如何解决跨域问题?答案:工作中三种常用方式,按需使用:局部跨域:在Controller或方法上加@CrossOrigin注解,简单快捷;全局跨域:实现WebMvcConfigurer,重写addCorsMappings方法,统一配置所有接口跨域;过滤器方式:自定义Cors过滤器,优先级更高。2.@RestController和@Controller区别?答案:@Controller:单纯标记控制器,返回页面视图,想要返回JSON数据需要单独加@ResponseBody;@RestController:是@Controller+@ResponseBody的合体,直接返回JSON格式数据,前后端分离项目全程用这个。3.SpringBoot拦截器和过滤器的区别?答案:核心是执行顺序、作用范围、底层不一样:过滤器(Filter):属于Servlet原生组件,在Spring容器外执行,请求进来先经过过滤器,能拦截所有请求,包括静态资源;拦截器(Interceptor):属于Spring框架组件,在过滤器之后、Controller之前执行,只拦截Controller请求,不拦截静态资源;过滤器适合做全局编码、跨域、限流;拦截器适合做登录校验、权限拦截、日志记录。五、异常处理与事务1.SpringBoot全局异常处理怎么做?答案:项目统一异常处理用@RestControllerAdvice+@ExceptionHandler:新建全局异常处理类,加@RestControllerAdvice;自定义不同异常的处理方法,用@ExceptionHandler捕获对应异常(空指针、参数异常、自定义业务异常);统一返回前端固定格式的错误结果,避免前端拿到杂乱的异常信息。2.SpringBoot事务注解@Transactional失效场景?答案:面试高频坑点,常见4种失效情况:方法不是public修饰,事务不生效;同类中方法内部调用(A方法调B方法,B加了事务),AOP无法拦截,事务失效;异常是try-catch手动捕获,没有抛出,事务不会回滚;数据库引擎不支持事务(比如MyISAM),必须用InnoDB。六、部署与优化(进阶面试)1.SpringBoot项目如何部署?答案:日常两种主流部署方式:Jar包部署(主流):Maven/Gradle打包成jar,服务器直接java-jar命令启动,简单方便;War包部署:修改打包方式为war,排除内嵌Tomcat,上传到外部Tomcat容器部署,现在很少用。2.SpringBoot启动慢、运行卡顿怎么优化?答案:工作中常用优化手段:排除项目无用自动配置,减少启动加载类;合理配置Tomcat线程池参数,调大核心线程数、最大连接数;开启懒加载,非核心Bean延迟初始化;优化依赖,剔除冗余jar包,减少项目体积。七、高频冷门但常问问题1.SpringBoot的starter是什么?自定义过starter吗?答案:starter就是SpringBoot的依赖启动器,把依赖和自动配置封装好,我们引入一个starter就直接拥有对应功能,不用自己配依赖和配置。自定义starter简单流程:写自动配置类、绑定配置参数、META-INF配置自动配置文件,打包后其他项目引入即可使用。2.SpringBoot内置Tomcat可以替换吗?答案:可以。默认内嵌Tomcat,只需排除Tomcat依赖,引入Jetty或Under

温馨提示

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

评论

0/150

提交评论