版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring框架高频面试题及详细真实答案(职场完整版)说明:本套题目均为一线互联网、传统软件企业Java后端面试高频原题,覆盖Spring核心基础、IOC、AOP、事务、Bean生命周期、循环依赖、Spring执行流程等核心考点,答案贴合实际开发工作场景,摒弃纯理论空话,适合求职面试、技术复盘使用。一、基础概念面试题1.简单说说你对Spring框架的理解,Spring的核心作用是什么?参考答案:Spring是一款轻量级的Java开源分层框架,主打解耦、简化开发,是Java后端开发的基础框架,几乎所有JavaWeb、微服务项目都基于Spring体系搭建。它的核心作用主要有三点:第一,解耦,通过IOC容器将对象的创建、管理、依赖注入统一交给框架处理,不再由开发者手动new对象,彻底解除代码之间的硬依赖;第二,统一管控,统一管理项目中所有组件Bean的生命周期、依赖关系,让项目结构更规范;第三,简化通用开发,通过AOP实现日志、事务、权限等通用功能的统一切入,避免重复代码,同时封装了大量JDBC、事务管理、资源整合的工具能力,大幅减少冗余代码。2.Spring的核心四大特性是什么?分别简单说明作用参考答案:Spring四大核心特性为:IOC、AOP、事务管理、容器管理。IOC(控制反转):将对象的创建、依赖赋值、生命周期管理的控制权,从开发者代码反转交给Spring容器,核心目的是解耦;AOP(面向切面编程):在不修改原有业务代码的前提下,对方法进行增强,实现通用横向功能,比如事务、日志、限流、权限校验;声明式事务:基于AOP实现,通过注解或配置即可快速开启数据库事务,无需手动编写事务提交、回滚代码,简化事务开发;Bean容器管理:统一管理项目所有组件对象,单例复用、统一初始化、销毁,保障项目资源可控、稳定运行。3.说说Spring和SpringMVC、SpringBoot的区别与联系参考答案:Spring:是底层核心框架,提供IOC、AOP、事务等基础核心能力,是整个Spring生态的根基,本身不具备web请求处理能力;SpringMVC:是Spring的web层组件,基于Spring开发,专门用于处理HTTP请求、实现前后端交互,是传统SSM架构的web核心,需要手动配置xml、视图解析器、拦截器等;SpringBoot:是Spring的快速开发脚手架,整合了Spring、SpringMVC以及各类第三方依赖,通过自动配置、starters启动器简化配置,摒弃繁琐的xml配置,快速开发独立可运行的Java项目。三者关系:SpringBoot包含Spring和SpringMVC,Spring是基础,SpringMVC是web扩展,SpringBoot是一站式开发解决方案。二、IOC容器核心面试题(高频重点)1.什么是IOC控制反转?和传统new对象方式相比有什么优势?参考答案:IOC全称控制反转,是一种设计思想,并非具体技术。传统开发中,开发者主动通过new创建对象、管理依赖,控制权在代码本身;而IOC将对象创建、依赖注入、对象销毁的控制权交给Spring容器,由容器统一管理,这就是控制反转。核心优势:1.彻底解耦,业务代码无需关心对象创建细节,只需要使用对象,降低类与类之间的耦合度;2.统一管理,容器统一维护Bean,默认单例复用,减少对象创建开销,节省内存资源;3.便于扩展,替换底层实现类时,无需修改业务代码,只需要修改容器配置,符合开闭原则。2.什么是DI依赖注入?Spring有几种依赖注入方式?推荐使用哪种?参考答案:DI依赖注入是IOC的具体实现手段,容器自动将依赖的对象赋值给当前Bean,无需开发者手动赋值。Spring主要有三种注入方式:1.构造器注入:通过类的构造方法注入依赖;2.setter方法注入:通过setXxx方法注入依赖;3.字段注入(注解注入):通过@Autowired直接注入字段。推荐使用构造器注入。原因:Spring官方推荐,能够保证对象初始化完成后所有依赖全部就绪,避免空指针;可以保证依赖不可变,线程安全;便于单元测试,没有字段注入的强容器依赖问题。字段注入仅适合快速开发,不推荐在正式项目大量使用。3.SpringBean的作用域有哪些?默认是什么?日常开发最常用的是哪种?参考答案:Spring提供6种Bean作用域,常用的为前两种:1.singleton(单例):默认作用域,整个容器中仅创建一个Bean实例,全局复用;2.prototype(多例):每次从容器获取Bean都会创建一个新实例;3.request:每次HTTP请求创建一个实例,仅web环境有效;4.session:每个用户会话一个实例,仅web环境有效;5.application:整个web应用一个实例;6.websocket:每个websocket连接一个实例。默认作用域是singleton,日常开发中Service、Mapper、Controller基本都使用单例,只有非线程安全、需要独立实例的对象才使用多例。4.说说SpringBean的完整生命周期参考答案:SpringBean从创建到销毁分为完整的7个步骤,流程清晰:1.实例化:Spring容器启动扫描注解/配置,通过反射创建Bean实例;2.属性填充(依赖注入):自动完成@Autowired、构造器等依赖注入,给字段赋值;3.前置处理:执行Bean后置处理器的前置方法,对Bean做预处理;4.初始化:先执行InitializingBean的afterPropertiesSet方法,再执行自定义init初始化方法;5.后置处理:执行Bean后置处理器的后置方法,可对Bean进行代理增强(AOP核心在此步骤);6.就绪使用:Bean完成初始化,放入单例池,供业务代码调用;7.销毁:容器关闭时,执行DisposableBean销毁方法或自定义destroy方法,释放资源。5.Spring单例Bean是线程安全的吗?为什么?如何解决线程安全问题?参考答案:Spring单例Bean不是线程安全的。原因:Spring单例是容器层面的单例,整个容器只有一个Bean实例,多线程并发访问、修改Bean的成员变量时,会存在线程竞争,出现数据覆盖、数据错乱问题。但如果Bean中没有可变成员变量,只有方法逻辑,那么就是线程安全的。解决方式:1.尽量不要在Bean中定义可变成员变量,业务数据通过方法参数传递;2.对需要线程隔离的Bean设置为prototype多例;3.使用ThreadLocal存储线程私有变量,实现线程隔离;4.对共享变量加锁,保证并发安全。6.什么是Spring循环依赖?Spring能解决哪些循环依赖?无法解决的是什么?参考答案:循环依赖就是两个或多个Bean互相依赖,比如A依赖B,B又依赖A,导致容器初始化时出现循环引用问题。Spring通过三级缓存解决循环依赖:一级缓存:存放完整初始化完成的单例Bean;二级缓存:存放已实例化但未填充属性的Bean实例;三级缓存:存放Bean的工厂对象,用于提前暴露实例。可解决:setter注入、字段注入的单例Bean循环依赖;无法解决:构造器注入的循环依赖、多例Bean的循环依赖。因为构造器注入必须在实例化时完成依赖赋值,无法提前暴露实例,直接报错。三、AOP核心面试题1.什么是AOP?AOP的核心应用场景有哪些?参考答案:AOP即面向切面编程,是基于动态代理的编程思想,核心是在不修改原有业务代码的前提下,对方法进行横向增强,抽取通用公共逻辑,实现业务逻辑与通用逻辑解耦。日常开发核心场景:1.统一事务管理,通过切面拦截方法,自动开启、提交、回滚事务;2.统一日志记录,记录方法入参、出参、执行耗时、异常信息;3.权限校验、接口限流、防重复提交;4.数据缓存、数据脱敏、接口统一返回值封装。2.SpringAOP的五种通知类型及执行顺序参考答案:五种通知类型:1.@Before前置通知:目标方法执行前执行;2.@After后置通知:目标方法执行完毕后执行(无论是否异常都会执行);3.@AfterReturning返回通知:目标方法正常执行结束、有返回值后执行;4.@AfterThrowing异常通知:目标方法抛出异常时执行;5.@Around环绕通知:包裹目标方法,可手动控制方法执行、前后增强、异常捕获,功能最强。正常执行顺序:环绕前置→前置通知→目标方法执行→环绕后置→返回通知→后置通知;异常执行顺序:环绕前置→前置通知→目标方法报错→环绕异常处理→异常通知→后置通知。3.SpringAOP的动态代理两种方式的区别?默认使用哪种?参考答案:SpringAOP包含JDK动态代理和CGLIB代理两种方式:JDK动态代理:基于接口实现,只能代理实现了接口的类,原生JDK自带,无需引入额外依赖,性能稳定;CGLIB代理:基于子类继承实现,无需接口,可以代理普通类、没有接口的类,通过字节码增强实现代理。Spring默认规则:目标类有接口则使用JDK代理,无接口则使用CGLIB代理。SpringBoot2.0之后默认统一使用CGLIB代理。四、Spring事务高频面试题1.Spring事务的传播机制有几种?常用的是哪几种?参考答案:Spring共7种事务传播机制,日常开发只用4种核心即可:1.REQUIRED(默认):当前有事务就加入,没有就新建事务,最常用;2.SUPPORTS:当前有事务就加入,没有就非事务运行;3.REQUIRES_NEW:无论当前是否有事务,都新建一个独立事务,暂停原有事务;4.NESTED:嵌套事务,依赖父事务,父事务回滚子事务必须回滚,子事务回滚不影响父事务;其余三种:MANDATORY强制使用事务、NOT_SUPPORTED始终非事务、NEVER禁止事务,业务极少使用。2.Spring事务失效的常见场景(面试必问)参考答案:实际开发中最常见的8种事务失效场景:1.方法权限不是public,@Transactional注解仅对public方法生效;2.同类中方法内部调用,比如A方法(无事务)调用本类B方法(有事务),事务失效,因为绕过了AOP代理;3.异常类型不匹配,默认只捕获RuntimeException和Error,普通Exception不会触发回滚;4.业务代码手动捕获了异常,没有抛出,切面无法感知异常,不会回滚;5.数据库引擎不支持事务,比如MySQL使用MyISAM引擎,必须使用InnoDB;6.事务传播机制配置错误,比如配置为NOT_SUPPORTED、SUPPORTS无事务场景;7.多线程场景下,子线程操作数据库,无法继承主线程事务;8.方法执行过程中,数据库连接被手动提交/关闭,导致事务失效。3.如何解决同类方法调用事务失效问题?参考答案:核心原理:事务基于AOP代理,内部调用不会走代理对象,直接走原生对象,所以事务失效。解决方式:1.手动获取代理类调用:通过AopContext.currentProxy()获取当前代理对象,通过代理对象调用方法;2.拆分业务:将带事务的方法抽离到新的Service类中,跨类调用天然走代理;3.开启Spring暴露代理对象配置,配合注解使用。五、进阶实操面试题1.@Autowired和@Resource的区别?参考答案:1.来源不同:@Autowired是Spring提供的注解;@Resource是JSR250Java原生规范注解;2.注入规则不同:@Autowired默认按类型byType注入;@Resource默认按名称byName注入,找不到名称再按类型;3.必填性不同:@Autowired默认必须找到Bean,否则报错,可通过required=false取消强制;@Resource允许为空;4.适用场景:项目统一使用@Autowired,兼容性更好;@Resource多用于老项目兼容场景。2.Spring中@Component、@Controller、@Service、@Repository区别参考答案:四个注解功能本质一致,都是将类交给Spring管理,注册为Bean,只是语义分层不同:1.@Component:通用组件注解,用于不属于三层架构的通用工具类、组件;2.@Service:用于业务逻辑层Service层;3.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026-2030年中国环保用新材料行业需求状况及投资盈利预测报告
- 餐饮店厨房切片机正确使用与保养指南
- 教师教学技能与学生学业进步评估表
- 快消品市场部经理品牌建设绩效考评表
- 确认签订合作协议具体条款确认函(3篇)
- 零售行业商品采购经理采购效率绩效评定表
- 电商企业财务分析报表编制指引
- 2026年度合作项目延期谈判通知5篇
- (正式版)DB14∕T 724-2012 《公路土建工程施工质量保证资料编制规范》
- 商议2026年联合品牌推广计划的具体执行事宜确认函(5篇)
- 恶性胸腔积液诊断与治疗教学课件
- 2026年宁波市文化旅游投资集团有限公司人员招聘笔试备考试题及详细答案解析
- 2026年广东南粤集团有限公司人员招聘参考题库及详细答案解析
- 冶金行业班组安全管理制度培训
- 肘管综合征诊疗规范
- 2026中国教育出版传媒集团有限公司招聘笔试历年难易错考点试卷带答案解析
- 【数 学】从算式到方程(第1课时方程的概念与列方程)课件2025-2026学年人教版七年级数学上册
- 【MOOC】《奥运裁判教你学规则(排球篮球)》(西南交通大学)章节期末慕课答案
- 科普非法营运知识培训课件
- 肛肠科进修汇报
- 用英语讲好中国故事课件
评论
0/150
提交评论