Spring 核心笔试真题及详细答案(企业实战版)_第1页
Spring 核心笔试真题及详细答案(企业实战版)_第2页
Spring 核心笔试真题及详细答案(企业实战版)_第3页
Spring 核心笔试真题及详细答案(企业实战版)_第4页
Spring 核心笔试真题及详细答案(企业实战版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

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

文档简介

Spring核心笔试真题及详细答案(企业实战版)说明:整套题目贴合Java后端面试高频考点,无空洞套话,答案通俗易懂、贴合开发实战,适合校招、社招笔试复习。涵盖Spring核心容器、IOC、AOP、事务、Bean生命周期、循环依赖等核心重难点。一、单项选择题(10题)1.Spring容器的核心思想是?()A.面向对象、封装继承

B.IOC控制反转、AOP面向切面

C.高并发、高可用

D.模块化、组件化答案:B解析:IOC和AOP是Spring最核心的两大基石,所有Spring功能都是基于这两个思想延伸出来的。IOC负责对象创建和依赖管理,AOP负责统一公共逻辑解耦。2.以下关于IOC控制反转说法正确的是?()A.由开发者手动new对象管理依赖

B.对象的创建、依赖注入由Spring容器负责

C.只能通过注解实现IOC

D.IOC就是依赖注入答案:B解析:传统开发是开发者主动创建对象(正向操作),IOC是把对象控制权交给Spring容器,容器负责创建、组装、管理对象,实现控制权反转。依赖注入是IOC的实现方式,二者不能等同。3.SpringBean默认的作用域是?()A.prototype

B.singleton

C.request

D.session答案:B解析:SpringBean默认单例(singleton),整个容器中只创建一个实例。prototype是多例,每次获取都会新建对象;request、session仅用于Web环境。4.以下注解不属于Spring组件注册注解的是?()A.@Component

B.@Service

C.@Controller

D.@Autowired答案:D解析:@Component、@Service、@Controller、@Repository都是用于将类注册为SpringBean的注解;@Autowired是依赖注入注解,用于自动装配对象,不负责注册Bean。5.SpringAOP的核心原理是?()A.反射机制

B.动态代理

C.序列化机制

D.字节码增强答案:B解析:SpringAOP底层基于动态代理实现:目标类有接口用JDK动态代理,无接口用CGLIB动态代理。字节码增强是MyBatis等框架常用方式,并非SpringAOP核心。6.Spring事务默认的传播级别是?()A.REQUIRES_NEW

B.SUPPORTS

C.REQUIRED

D.MANDATORY答案:C解析:REQUIRED是默认传播级别:当前有事务就加入,没有就新建一个事务,是开发中最常用的事务级别。7.以下场景中,Spring事务会失效的是?()A.外部调用带@Transactional的public方法

B.同类中普通方法调用本类事务方法

C.事务方法抛出RuntimeException

D.事务方法执行数据库写操作答案:B解析:Spring事务基于AOP动态代理实现,同类内部方法调用不会经过代理对象,事务注解无法生效,是开发中最常见的事务失效场景。8.解决SpringBean循环依赖主要依靠?()A.单例池

B.三级缓存

C.多例模式

D.延迟加载答案:B解析:Spring通过三级缓存机制解决单例Bean的Setter/字段注入循环依赖,构造器注入的循环依赖无法解决,会直接报错。9.@Autowired默认的装配规则是?()A.按名称装配

B.按类型装配

C.按优先级装配

D.随机装配答案:B解析:@Autowired默认根据Bean类型装配,容器中同类型Bean存在多个时会报错,可配合@Qualifier指定名称精准装配。@Resource默认按名称装配。10.Spring中,Bean的初始化顺序正确的是?()A.实例化→属性填充→初始化方法→销毁方法

B.属性填充→实例化→初始化方法

C.初始化→实例化→属性填充

D.实例化→初始化→属性填充答案:A解析:核心流程:Spring通过反射创建Bean实例→完成属性依赖注入→执行初始化前置处理、init-method→容器关闭执行销毁方法。二、填空题(5题)1.SpringIOC容器的顶层核心接口是________和________。答案:BeanFactory、ApplicationContext解析:BeanFactory是Spring容器最顶层接口,提供基础Bean操作;ApplicationContext是BeanFactory的子接口,扩展了国际化、事件发布、资源加载等功能,开发中常用的容器都是ApplicationContext实现类。2.SpringAOP中,切点、通知、切面的关系:________是切入点和通知的结合。答案:切面(Aspect)解析:切点(Pointcut)定义拦截哪些方法,通知(Advice)定义拦截后执行的逻辑,切面就是两者的组合,统一封装横切逻辑。3.Spring事务默认只对________类型异常回滚,对检查异常不回滚。答案:运行时异常(RuntimeException)、错误(Error)解析:默认情况下,@Transactional只捕获RuntimeException和Error回滚,普通CheckedException(如IOException)不会触发回滚,需要手动配置rollbackFor属性。4.Spring三级缓存分别是:________、________、________。答案:一级缓存(单例池)、二级缓存(半成品Bean缓存)、三级缓存(Lambda表达式缓存)解析:一级缓存存放完全初始化好的Bean;二级缓存存放已实例化但未填充属性的半成品Bean;三级缓存存放Bean的工厂Lambda,用于提前暴露Bean引用,解决循环依赖。5.Spring中,开启组件扫描的注解是________。答案:@ComponentScan解析:该注解用于指定扫描包路径,自动扫描包下所有带组件注解的类,注册为SpringBean,SpringBoot中@SpringBootApplication已内置该功能。三、简答题(6题,面试高频)1.简单说说IOC的执行流程?参考答案:1.容器启动,加载配置类/配置文件,扫描指定包下的所有组件;2.解析扫描到的类,生成Bean定义信息(BeanDefinition),保存到注册表;3.容器遍历所有Bean定义,优先实例化单例Bean;4.通过反射创建Bean实例,完成属性依赖注入;5.执行Bean的初始化前置、后置处理和自定义初始化方法;6.完全初始化的Bean存入单例池,供全局使用;7.容器关闭时,执行Bean的销毁方法。2.@Autowired和@Resource的区别?参考答案:1.来源不同:@Autowired是Spring专属注解;@Resource是JSR250Java原生规范注解,兼容性更好;2.装配规则不同:@Autowired默认按类型装配;@Resource默认按名称装配,找不到名称再按类型;3.依赖要求不同:@Autowired默认必须找到Bean,否则报错,可搭配required=false取消强制依赖;@Resource无强制依赖限制;4.附加功能:@Autowired可配合@Qualifier精准指定Bean名称,解决同类型多Bean冲突。3.SpringAOP的五种通知类型及执行顺序?参考答案:五种通知:前置通知、后置返回通知、后置异常通知、最终后置通知、环绕通知。完整执行顺序:1.环绕通知前置逻辑→2.前置通知→3.目标方法执行→4.环绕通知后置逻辑→5.后置返回通知(正常执行)/后置异常通知(抛出异常)→6.最终后置通知。4.说说SpringBean的单例和多例区别,以及使用场景?参考答案:1.单例(singleton):默认作用域,全局只创建一个Bean实例,容器启动时初始化(非懒加载),所有请求共享同一个对象;适合无状态Bean,比如Controller、Service、Dao(无成员变量,不存用户数据)。2.多例(prototype):每次获取、注入都会新建一个实例,容器不管理多例Bean的生命周期,不会执行销毁方法;适合有状态Bean,比如存储用户临时数据的实体类、带可变成员变量的工具类。5.列举5种Spring事务失效的场景?参考答案:1.同类内部方法调用事务方法(未经过代理对象);2.事务方法非public修饰(AOP无法拦截);3.事务方法抛出普通检查异常,未配置rollbackFor;4.数据库引擎不支持事务(如MyISAM);5.事务传播级别配置错误(如REQUIRES_NEW嵌套不当、NOT_SUPPORTED忽略事务);6.手动捕获异常未重新抛出,Spring无法感知异常。6.Spring为什么要用三级缓存解决循环依赖?一级缓存不行吗?参考答案:只用一级缓存无法解决循环依赖。一级缓存存放的是完全初始化完成的Bean,循环依赖场景下,两个Bean互相依赖,初始化时都无法完成完整创建,会互相等待,直接死循环报错。三级缓存的核心作用是提前暴露半成品Bean引用:1.Bean实例化后,先把自身工厂放入三级缓存;2.依赖注入时,对方可以从三级缓存获取半成品引用完成注入;3.所有Bean属性填充、初始化完成后,再移入一级缓存对外提供服务;二级缓存主要用于存储初始化中的Bean,避免重复创建代理对象,保证循环依赖中Bean唯一性。四、原理分析题(2题,进阶面试必考)1.为什么构造器注入无法解决循环依赖,Setter注入可以?参考答案:1.构造器注入:对象创建时必须通过构造方法传入所有依赖对象,对象还未实例化完成就需要依赖对方,双方都处于创建阶段,没有任何半成品引用可以暴露,直接抛出循环依赖异常;2.Setter/字段注入:Spring先通过反射完成对象实例化,此时对象已经存在内存中,再进行属性依赖注入。实例化后会提前将半成品Bean放入三级缓存,对方可以直接获取引用,从而打破循环依赖闭环。2.SpringAOPJDK动态代理和CGLIB代理的区别?Spri

温馨提示

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

评论

0/150

提交评论