Spring 高频真实面试题(无套路实操版)_第1页
Spring 高频真实面试题(无套路实操版)_第2页
Spring 高频真实面试题(无套路实操版)_第3页
Spring 高频真实面试题(无套路实操版)_第4页
Spring 高频真实面试题(无套路实操版)_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

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

文档简介

Spring高频真实面试题(无套路实操版)一、Spring核心基础面试题1.简单说说你对Spring的理解,核心作用是什么?Spring是一款轻量级的Java开发框架,核心目的就是简化企业级开发,解耦代码。它最核心的两个思想是IOC控制反转和AOP面向切面编程。整体来看,Spring帮我们做了对象的创建、管理、依赖注入,不用手动new对象,降低了代码耦合度;同时通过切面能统一处理日志、事务、权限等通用逻辑,避免代码冗余,让业务代码更纯粹。除此之外,Spring还整合了很多主流框架,让开发、整合、运维都更便捷。2.Spring的优缺点分别是什么?优点:解耦性强:通过IOC管理对象依赖,彻底摆脱硬编码依赖,代码扩展性更好切面编程:统一处理通用业务,复用性高,不侵入核心业务代码轻量便捷:基础核心包体积小,无侵入式设计,对原有代码改动极小事务管理:提供声明式事务,无需手动编写事务开启、提交、回滚代码生态完善:兼容各类主流框架,开发社区成熟,问题解决方案多缺点:上手有门槛,底层原理较多,新手容易只会用不会懂项目依赖增多后,启动速度会变慢部分场景下反射、动态代理会带来微小的性能损耗3.Spring、SpringMVC、SpringBoot三者的区别和联系?Spring:是核心底层框架,提供IOC、AOP、事务、Bean管理等基础核心功能,是后面两个框架的基础,专注于整体代码解耦和对象管理。SpringMVC:是Spring的一个Web模块,专门用来做Web开发,提供控制器、请求分发、参数解析、视图跳转等功能,属于Spring的子集。SpringBoot:是基于Spring+SpringMVC的快速开发脚手架,简化了繁琐的配置,自动装配、内置服务器、依赖整合,用来快速开发独立可运行的Spring项目。简单总结:Spring是基础核心,SpringMVC做Web开发,SpringBoot简化开发、整合全家桶。二、IOC容器核心面试题(必考)1.什么是IOC控制反转?和传统开发有什么区别?IOC就是把对象的创建、依赖管理、生命周期控制权,从开发者代码交给Spring容器管理。传统开发中,我们需要依赖某个类,就自己new对象,主动创建依赖,控制权在开发者手里;IOC模式下,我们只需要声明依赖,不用手动创建,由Spring容器统一实例化、注入依赖,控制权反转给了框架。核心目的就是解耦。2.什么是DI依赖注入?常见的注入方式有哪些?DI是IOC的具体实现手段,容器自动给Bean注入对应的依赖对象,不用手动赋值。常见三种注入方式:构造器注入:通过类构造方法注入,Spring官方推荐,能保证对象初始化完成后依赖完全,避免空指针、循环依赖隐患更少Setter方法注入:适合可选依赖、动态修改依赖的场景字段注入:通过@Autowired直接注入,写法简单,但耦合度高,不推荐在正式项目大量使用3.SpringBean的生命周期?完整流程:实例化→依赖注入→初始化→销毁容器启动,扫描配置,根据Bean定义进行实例化(通过反射创建对象)依赖注入:给对象的属性、构造器、setter注入依赖Bean前置处理:执行BeanPostProcessor的前置处理方法初始化:执行InitializingBean方法、自定义init方法后置处理:执行BeanPostProcessor的后置处理方法Bean完成创建,存入单例池,供业务调用容器关闭时,执行销毁方法(DisposableBean、自定义destroy方法)4.Bean的作用域有哪些?默认是什么?Spring共6种作用域,常用4种:singleton(默认):单例,整个容器中只创建一个Bean对象,全局共享prototype:多例,每次获取、注入都会创建一个新对象request:Web场景,一次请求对应一个Beansession:Web场景,一个会话对应一个Bean默认是singleton单例,也是项目中最常用的。5.Spring单例Bean是线程安全的吗?为什么?不安全。Spring的单例是容器层面的单例,整个容器只有一个对象实例,但多线程并发访问这个Bean时,如果Bean中有成员变量,多个线程会共享这个变量,会出现线程安全问题。解决方式:尽量不让Bean定义可变成员变量,可变数据放到方法局部变量;或者加锁、使用ThreadLocal。6.Spring怎么解决循环依赖问题?哪些场景解决不了?循环依赖:A依赖B,B又依赖A,互相嵌套依赖。Spring通过三级缓存解决单例Bean的循环依赖:一级缓存:存放完整初始化完成的单例Bean二级缓存:存放已实例化、未完成初始化的Bean对象三级缓存:存放Bean的工厂对象,提前暴露对象引用Bean实例化后先放入三级缓存,提前暴露引用,对方可以先拿到引用完成注入,后续再完成自身初始化,解决循环依赖。无法解决的场景:多例Bean、构造器注入的单例Bean循环依赖(启动直接报错)。三、AOP核心面试题1.什么是AOP?核心作用是什么?AOP是面向切面编程,是对OOP的补充。核心是把项目中通用的、重复的逻辑抽离成切面,比如日志、事务、限流、权限校验,在不修改业务代码的前提下,对方法进行增强。优势就是解耦通用逻辑和业务逻辑,代码复用性高,业务代码更干净。2.AOP核心术语有哪些?切面(Aspect):封装通用逻辑的类,就是我们写的切面类连接点(JoinPoint):可以被拦截的所有方法切入点(Pointcut):真正被拦截的方法,是连接点的子集通知(Advice):切面具体执行的逻辑,分为前置、后置、异常、最终、环绕通知目标对象:被切面增强的原始Bean对象代理对象:AOP生成的增强后的对象,最终执行的是代理对象方法3.SpringAOP的动态代理方式?区别是什么?SpringAOP有两种代理模式,自动适配:JDK动态代理:基于接口实现,目标类必须有接口,性能较好CGLIB代理:基于子类继承实现,无需接口,直接对类代理,通过继承目标类重写方法实现增强Spring默认规则:有接口用JDK代理,无接口用CGLIB。SpringBoot后续版本默认统一使用CGLIB。4.AOP五种通知的执行顺序?正常执行顺序:环绕前置→前置通知→方法执行→环绕后置→后置通知→最终通知方法异常时:环绕前置→前置通知→方法报错→异常通知→最终通知(后置、环绕后置不执行)四、Spring事务高频面试题1.Spring事务的实现方式有哪些?编程式事务:手动开启、提交、回滚事务,灵活性高但代码冗余,几乎不用声明式事务:基于注解@Transactional实现,简洁高效,项目主流用法2.@Transactional失效的常见场景(超高频)这是面试重点,实际开发经常遇到:方法不是public修饰,事务无法生效同类中内部方法调用(this.方法),不走代理对象,事务失效异常类型不对:默认只回滚RuntimeException,普通Exception、Checked异常不回滚方法内部手动try-catch捕获异常,未抛出,事务无法感知异常数据库引擎不支持事务(如MyISAM)传播机制使用不当,导致事务无法正常开启、回滚3.Spring事务的传播属性有哪些?常用的几种?共7种传播属性,日常开发常用3种:REQUIRED(默认):有事务就加入,没有就新建事务(最常用)REQUIRES_NEW:无论是否有事务,都新建一个独立事务,互不影响SUPPORTS:有事务就加入,没事务就非事务运行其余NOT_SUPPORTED、MANDATORY、NEVER、NESTED为场景化使用4.事务的隔离级别?默认级别是什么?解决并发事务的脏读、不可重复读、幻读问题,共5级:READ_UNCOMMITTED:读未提交,问题最多,基本不用READ_COMMITTED:读已提交,解决脏读,Oracle默认级别REPEATABLE_READ:可重复读,解决脏读、不可重复读,MySQL默认、Spring默认SERIALIZABLE:串行化,最高级别,无并发问题,性能最差五、Spring核心杂项高频题1.@Autowired和@Resource的区别?@Autowired是Spring注解,默认按类型装配,可配合@Qualifier按名称匹配@Resource是JSR原生注解,默认按名称装配,找不到名称再按类型Autowired支持构造器、setter、字段注入;Resource不支持构造器注入2.Spring配置类@Configuration、@Bean的作用?@Configuration标记当前类为配置类,Spring启动时会扫描

温馨提示

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

评论

0/150

提交评论