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

下载本文档

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

文档简介

Spring核心笔试试题及详细答案(企业真实版)适用人群:Java后端初级开发、实习面试、基础技能考核考核范围:Spring核心原理、IOC、AOP、Bean生命周期、事务、依赖注入、Spring容器特性题型:选择题、填空题、简答题、场景实操题一、单项选择题(共10题)1.Spring框架的核心思想是?()A.面向对象编程  B.面向切面编程  C.控制反转与依赖注入  D.函数式编程答案:C解析:Spring两大核心是IOC(控制反转)和AOP(面向切面),其中最核心、贯穿整个框架的核心思想是控制反转和依赖注入。AOP是重要拓展特性,并非核心根基。2.以下不属于SpringBean作用域的是?()A.singleton  B.prototype  C.global  D.request答案:C解析:Spring官方标准Bean作用域包含:singleton(单例,默认)、prototype(多例)、request、session、application、websocket,无global作用域。3.Spring中依赖注入优先级最高的方式是?()A.构造器注入  B.Setter方法注入  C.字段注入  D.静态注入答案:A解析:Spring官方推荐且优先级最高的是构造器注入。Spring4.3之后,单Bean类可省略@Autowired注解;构造器注入能保证组件初始化时依赖完全,避免空指针、循环依赖隐患。4.关于Spring单例Bean,说法正确的是?()A.Spring单例Bean是全局JVM单例  B.Spring单例是容器级单例,一个IoC容器一个实例C.所有Bean默认都是多例  D.单例Bean线程绝对安全答案:B解析:Spring的singleton是IoC容器级单例,同一个容器中仅创建一个Bean实例,不同容器可创建多个实例。单例Bean无状态时线程安全,有成员变量等状态时线程不安全。5.SpringAOP的核心原理是?()A.静态代理  B.动态代理(JDK/CGLIB)  C.反射  D.字节码重写答案:B解析:SpringAOP基于动态代理实现:目标类有接口则使用JDK动态代理,无接口则使用CGLIB子类代理。6.以下注解中,不属于Spring组件注册注解的是?()A.@Component  B.@Service  C.@Data  D.@Repository答案:C解析:@Data是Lombok注解,用于自动生成get/set、toString等方法,不具备将类注册为SpringBean的能力。其余三个均为Spring组件注册注解。7.Spring事务默认的传播级别是?()A.REQUIRES_NEW  B.REQUIRED  C.SUPPORTS  D.MANDATORY答案:B解析:REQUIRED是Spring事务默认传播机制:当前有事务则加入当前事务,无事务则新建一个事务。8.Spring中Bean的初始化顺序正确的是?()A.实例化→属性填充→初始化→销毁  B.属性填充→实例化→初始化→销毁C.实例化→初始化→属性填充→销毁  D.初始化→实例化→属性填充→销毁答案:A解析:完整Bean生命周期:容器启动实例化Bean→依赖注入填充属性→执行初始化方法(afterPropertiesSet、自定义init方法)→容器关闭执行销毁方法。9.@Transactional注解失效的场景不包括?()A.同类中非事务方法调用事务方法  B.方法被private修饰C.捕获异常未抛出  D.不同类之间调用事务方法答案:D解析:不同类调用会经过Spring代理对象,事务可正常生效。其余三种场景均会导致事务失效。10.Spring中用于实现组件扫描的注解是?()A.@Import  B.@ComponentScan  C.@Configuration  D.@Bean答案:B解析:@ComponentScan用于指定扫描路径,自动加载标注@Component、@Service等注解的组件到容器。二、填空题(共5题)1.SpringIOC容器的核心作用是________、________。答案:管理Bean的创建与销毁、实现组件之间的依赖解耦2.SpringAOP中常见的通知类型有前置通知、后置通知、________、________、环绕通知。答案:异常通知、最终通知3.Spring解决循环依赖的核心是________三级缓存机制。答案:singletonObjects、earlySingletonObjects、singletonFactories4.Spring事务默认只对________类型异常回滚。答案:RuntimeException(运行时异常)5.想要手动向Spring容器注册第三方类Bean,需要使用________注解配合@Configuration。答案:@Bean三、简答题(共6题,核心高频考点)1.简单说说IOC(控制反转)的原理和好处?参考答案:原理:传统开发中,开发者主动new对象创建依赖关系;IOC将对象的创建、管理、依赖装配的权限交给Spring容器,实现控制权反转,开发者无需手动管理对象生命周期和依赖关系。核心好处:1.解耦:组件之间低耦合,无需硬编码依赖;2.统一管理:容器统一管控Bean的创建、销毁、作用域;3.便于拓展:新增、替换组件无需修改原有业务代码;4.方便统一配置、事务、切面等功能统一增强。2.构造器注入、Setter注入、字段注入的区别和优缺点?参考答案:字段注入(@Autowired直接注入字段)优点:代码简洁、开发速度快;缺点:隐藏依赖、容易产生循环依赖、不利于单元测试、不符合Spring规范。Setter方法注入优点:适合可选依赖、对象创建后可动态修改依赖;缺点:无法保证依赖必填,可能出现空指针。构造器注入(官方推荐)优点:保证依赖必填、对象初始化完全、有效避免循环依赖、方便单元测试、代码健壮性高;缺点:依赖过多时构造器参数冗余。3.SpringBean的完整生命周期是什么?参考答案:1.资源加载与解析:容器启动,扫描配置类、注解、XML,解析Bean定义信息;2.实例化:通过反射创建Bean实例(单例Bean容器启动时创建,多例Bean使用时创建);3.属性填充:完成依赖注入,装配各类依赖Bean;4.前置处理:执行BeanPostProcessor前置增强方法;5.初始化:执行InitializingBean的afterPropertiesSet方法、自定义init初始化方法;6.后置处理:执行BeanPostProcessor后置增强方法,生成代理对象;7.就绪使用:Bean完成初始化,存入容器,供业务调用;8.销毁:容器关闭时,执行DisposableBean销毁方法、自定义destroy方法。4.Spring三级缓存如何解决单例Bean循环依赖?参考答案:Spring仅能解决单例、Setter/字段注入的循环依赖,无法解决构造器循环依赖。三级缓存分工:1.一级缓存(singletonObjects):存放完全初始化完成的单例Bean;2.二级缓存(earlySingletonObjects):存放已实例化、未完成属性填充的半成品Bean,避免重复创建;3.三级缓存(singletonFactories):存放Bean工厂对象,提前暴露Bean引用,解决循环引用依赖。核心流程:A、B相互依赖,A先实例化,将自身工厂放入三级缓存,再填充属性时发现依赖B;B实例化后从三级缓存获取A的引用,完成自身初始化,A后续完成剩余属性填充和初始化,最终解决循环依赖问题。5.说说SpringAOP的应用场景和使用场景限制?参考答案:常见应用场景:统一日志记录、权限校验、事务控制、接口限流、性能耗时统计、缓存增强等,实现业务与非业务逻辑解耦。使用限制:1.仅能拦截public方法,private、protected方法无法拦截;2.同类内部方法调用,无法触发AOP代理增强;3.静态方法、final方法无法被代理,AOP失效;4.基于动态代理实现,仅能作用于Spring容器中的Bean。6.@Transactional事务失效的常见场景有哪些?参考答案:1.方法权限非public,事务注解无法生效;2.同类中普通方法调用事务方法,绕过代理对象,事务失效;3.业务捕获异常后未抛出,Spring无法感知异常,不会回滚;4.抛出检查型异常(Exception),未手动配置回滚规则,默认不回滚;5.数据库引擎不支持事务(如MyISAM);6.事务传播机制配置不当(如REQUIRES_NEW、NOT_SUPPORTED)。四、场景实操题(面试高频)场景:项目中出现Service层同类方法内部调用,导致事务失效,如何解决?写出两种解决方案并说明原理。参考答案:失效原因:Spring事务基于代理对象实现,同类方法内部调用,是通过this调用原生对象方法,未经过Spring代理,事务无法被增强,直接失效。解决方案1:通过Spring上下文获取当前代理对象调用方法在Service中注入ApplicationContext,通过上下文获取当前类的代理Bean,用代理对象调用事务方法,触发事务增强。解决方案2:使用AopContext获取当前代理对象开启暴露代理注解@EnableAspectJAutoProxy(exposeProxy=true),通过AopContext.currentProxy()获取代理对象调用方法,简单高效,项目最常用。解决方案3:拆分业务将事务方法拆分到不同Service类中,通过跨类调用,天然经过代理对象,保证事务生效。五、附加核心问答题(进阶面试)问题:Spring中J

温馨提示

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

评论

0/150

提交评论