Spring面试题学习记录

目录

1、Spring是什么?

2、Spring,Spring MVC,Spring Boot 之间什么关系?

3、谈谈对IoC的理解?

4、谈谈对AOP的理解?

1、AOP的基本理念?

2、通知的类型

5、Spring的优缺点?

6、Bean的生命周期

7、Bean的作用域有哪些

8、Bean是线程安全的吗?

9、Spring事务

1、事务的特性

2、Spring支持两种方式的事务管理(事务实现方式)

3、Spring事务的传播行为

10、Spring的设计模式


1、Spring是什么?

spring是轻量级Java框架,有两个核心特性:IoC(控制反转)和AOP(面向切面编程)

spring是一个容器,管理对象的生命周期和对象与对象间的关系

2、Spring,Spring MVC,Spring Boot 之间什么关系?

Spring MVC是Spring框架的一部分,用于构建模型(Model)-视图(View)-控制器(Controller)模式的Web应用程序。核心思想是将业务逻辑、数据、显示分离

Spring Boot是简化Spring开发(减少配置文件,快速启动功能)

Spring的核心功能为Spring MVC,Spring Boot提供了基础

3、谈谈对IoC的理解?

IoC(控制反转)是一种设计思想,IoC思想是将原本在程序中手动创建对象的控制权交给Spring框架来管理。将对象之间的相互依赖关系交给IoC容器来管理,并且让IoC容器完成注入。

IoC容器实际上是一个HashMap集合(),存储所有的Bean。spring通过DI(数据注入)实现IOC。

IoC的三种注入方式:构造方法注入、setter方法注入(属性注入)、接口注入(已废弃)

IoC的实现原理是工厂模式和反射机制

4、谈谈对AOP的理解?

AOP(面向切面编程)是将与业务无关的,但是被业务模块共同调用的逻辑和责任封装成一个可重用的模块,来减少系统的重复代码,降低模块间的耦合。

AOP实现的关键是代理模式,AOP代理分为静态代理和动态代理。AspectJ是静态代理,编译时增强。Spring AOP是动态代理,是运行时增强。

1、AOP的基本理念?

  • 目标:需要被代理的类
  • 连接点:目标对象所属类中定义的所有方法
  • 切入点:被切面拦截/增强的连接点
  • 通知/增强:所要增强或增加的功能
  • 织入:将通知应用到目标对象,生成代理对象的过程动作
  • 切面:切入点+通知

2、通知的类型

前置通知(Before):在连接点之前执行的通知

后置通知(After):在连接点退出的时候执行的通知

环绕通知(Around):

5、Spring的优缺点?

优点:

  • 方便解耦,简化开发:将所有对象的创建和依赖关系的维护,都交给Spring容器管理
  • AOP编程支持:可以实现日志和权限拦截功能
  • 声明事务支持:通过配置完成对事务的管理,不需手动编程
  • 方便测试、方便集成框架

缺点:

  • Spring依赖反射,占用内存,影响性能

6、Bean的生命周期

Bean指被Ioc容器所管理的对象

  • 实例化:启动Spring时,IoC容器为每一个Bean创建一个实例
  • 属性赋值:Spring通过反射机制给Bean赋值
  • 调用初始化方法
  • Bean运行期
  • 应用程序关闭:关闭IoC容器,处理配置了销毁方法的Bean
  • 调用销毁方法:在IoC容器关闭之前调用它

7、Bean的作用域有哪些

单例模式(singleton):默认作用域,IoC容器中一个Bean只创建一个实例,Spring中的Bean都是默认单例的。适用无状态的bean(无状态:不会保存数据)

原型模式(prototype):每次获取都会创建一个新的Bean实例。适用有状态的bean(有状态:有数据存储功能)

请求作用域(request):为每一个HTTP请求创建一个实例,在请求完成以后,Bean会失效,会被垃圾回收器回收

会话作用域(session):为每一个HTTP会话创建一个实例,不同会话使用不同实例,该 bean 仅在当前 HTTP session 内有效。

8、Bean是线程安全的吗?

Bean是否线程安全,取决于作用域和状态

在单例模式下,Bean是无状态的这种情况下,Bean是线程安全的。Bean是有状态的,则存在线程安全问题

在原型模式下,每次获取都会创建一个新的Bean实例,不存在资源竞争问题,所以不存在线程安全问题

对于有状态单例Bean的线程安全问题解决办法:

  1. 在Bean中避免定义可变的成员变量
  2. 在类中定义一个ThreadLocal成员变量,将可变的成员变量保存在ThreadLocal中

9、Spring事务

事务是逻辑上的一组操作,要么都执行,要么都不执行

程序是否支持事务,首先取决于数据库。mysql数据库中innodb引擎是支持事务的,myisam不支持

1、事务的特性

原子性:确保动作要么全部完成,要么都不起作用

一致性:执行事务后,数据保持不变

隔离性:并发访问数据库时,一个用户的事务不被其他干扰,各并发事务之间的数据库是独立的

持久性:事务被提交后,对数据库中数据的改变是持久的

只有保证了事务的原子性、隔离性、持久性之后,一致性才能保障

2、Spring支持两种方式的事务管理(事务实现方式)

编程式事务管理:不推荐使用,通过TransactionTemplate或者TransactionManger手动管理事务

声明式事务管理:利用注解或者xml配置,将事务和业务分离,(@Transactional 注解进行事务管理)

3、Spring事务的传播行为

10、Spring的设计模式

单例模式:Bean默认为单例模式

工厂模式:通过BeanFactory和ApplicationContext创建Bean对象

代理模式:AOP使用JDK的动态代理模式

观察者模式

适配器模式

装饰者模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安风\(`Δ’)/

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值