spring面试题

1、什么是spring?优势是什么?

Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发的复杂性而诞生的:
目的:解决企业级应用开发的复杂性。
功能:使用基本的JavaBean代替EJB。
范围:任何Java应用。
spring的优势
低侵入式设计,代码污染极低。
Write Once,Run Anywhere
DI有效的降低了耦合度。
AOP提供了通用的任务的集中管理。
ORM和DAO简化了对数据库的访问。
高度开放性,并不强制(贯穿于变现层,业务层,持久层)

2、spring的核心功能是什么?

IOC(控制反转)
创建对象的权力交给spring容器。
由spring容器帮助我们创建好对象,然后将对象存在spring容器中管理。
如果我们想要使用这些对象,直接拿工厂模式从spring容器中获取对象。
DI(依赖注入)三种方式
setter注入,根据方法名获取的,利用反射
通过构造器进行属性设置。constructor-arg
自动装配。autowired。可以根据名字或类型来装配,但类型时只能有且只有一个
AOP(面向切面编程)
**底层:**动态代理
jdk动态代理:目标对象需要接口
cglib动态代理:目标对象不需要接口
相关概念:
切面:通知+切点
通知:切面类中定义的用于增强的方法
连接点:被增强的目标对象的方法。
切点:它是一个描述,对哪些连接点进行增强。
切点表达式:

 <aop:pointcut id="切点名称" expression="execution(选择的方法)"/>

五种通知:
(1)前置通知before
在目标方法之前织入。
可以没有参数,也可以有参数,比如JoinPoint。
(2)后置通知after-retuning
在目标方法之后织入。
(3)环绕通知around
(4)最终通知after
(5)异常通知after-throwing

3、什么是ioc?实现原理是什么?

控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理
使用IOC目的:为了耦合度降低
实现原理:
工厂模式加反射
读取xml配置文件中配置的bean对象
解析xml配置,通过反射获取bean的class对象进行实例化操作
Spring提供IOC容器实现两种方式:(两个接口)
(1)BeanFactory:IOC容器基本实现接口
特点:加载配置文件时候不会创建对象,在获取对象或使用对象时才去创建对象
(2)ApplicationContext:BeanFactory接口的子接口,提供更多功能,一般由开发人员进行使用
特点:加载配置文件时候就会把在配置文件中对象进行创建

4、什么是工厂模式?

工厂模式是用来创建对象的一种最常用的设计模式。不暴露创建对象的具体逻辑,而是将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂。

5、什么是反射?

JAVA机制反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

6、什么是aop?实现原理是什么?

面向切面编程
实现原理:
AOP的实现原理是动态代理
jdk动态代理:目标对象需要接口
cglib动态代理:目标对象不需要接口
代理对象提供与真实对象相同的接口,以便代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

7、什么是代理模式?分类有哪些?

动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。
静态代理:代理和被代理对象在代理之前是确定的。它们都实现相同的接口或者继承相同的抽象类。
动态代理:jdk、cglib

8、2种动态代理的区别?

(1)JDK动态代理是实现了被代理对象的接口,CGLib是继承了被代理对象。
(2)JDK和CGLib都是在运行期生成字节码,JDK是直接写Class字节码,CGLib使用ASM框架写Class字节码,CGLib代理实现更复杂,生成代理类比JDK效率低。
(3)JDK调用代理方法,是通过反射机制调用,CGLib是通过FastClass机制直接调用方法,CGLib执行效率更高。

9、什么是事务?事务的特性有哪些?

在数据库中,用于完成一个功能的多个操作的集合。
特性:
(1)原子性 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。
(2)一致性 事务开始前和结束后,数据库的完整性约束没有被破坏 。
(3)持久性 事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
(4) 隔离性 同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。

10、spring事务管理的方式?

(1)编程式事务管理
使用spring框架提供的api,自己写代码,实现事务管理。

try{//事务操作//事务提交
}catch(e){//事务回滚
}

缺点:代码耦合度比较高。
优点:细粒度管理。
(2)声明式事务管理
底层是通过aop实现的。
不需要写代码,配置一下就可以了。
配置形式:xml和注解。
优点:统一管理,低耦合。
缺点:粗细度管理。

11、声明事务管理的底层原理?

Spring 的声明式事务管理在底层是创建在 AOP 的基础之上的。其本质是对方法先后进行拦截,而后在目标方法开始以前建立或者加入一个事务,在执行完目标方法以后根据执行状况提交或者回滚事务。

12、事务隔离级别

(1)并发事务引起的问题
在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务。并发虽然是必须的,但可能会导致一下的问题。

  • 脏读(Dirty reads)——脏读发生在一个事务读取了另一个事务改写但尚未提交的数据时。如果改写在稍后被回滚了,那么第一个事务获取的数据就是无效的。
  • 不可重复读(Nonrepeatable read)——不可重复读发生在一个事务执行相同的查询两次或两次以上,但是每次都得到不同的数据时。这通常是因为另一个并发事务在两次查询期间进行了更新。
  • 幻读(Phantom read)——幻读与不可重复读类似。它发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录。

(2)隔离级别

隔离级别含义
ISOLATION_DEFAULT使用后端数据库默认的隔离级别
ISOLATION_READ_UNCOMMITTED最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
ISOLATION_READ_COMMITTED允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
ISOLATION_REPEATABLE_READ对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生
ISOLATION_SERIALIZABLE最高的隔离级别,完全服从ACID的隔离级别,确保阻止脏读、不可重复读以及幻读,也是最慢的事务隔离级别,因为它通常是通过完全锁定事务相关的数据库表来实现的

13、事务的传播机制

spring定义了7中事务传播机制:
REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED)
支持当前事务,如果没有事务会创建一个新的事务
SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS)
支持当前事务,如果没有事务的话以非事务方式执行
MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY)
支持当前事务,如果没有事务抛出异常
REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW)
创建一个新的事务并挂起当前事务
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED)
以非事务方式执行,如果当前存在事务则将当前事务挂起
NEVER(TransactionDefinition.PROPAGATION_NEVER)
以非事务方式进行,如果存在事务则抛出异常
NESTED(TransactionDefinition.PROPAGATION_NESTED)
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

**区别:**NESTED如果父事务回滚,子事务也回滚。PROPAGATION_REQUIRED父子事务是独立的,父事务回滚,子事务不回滚。

14、spring的事务管理用在什么地方?

service层

15、bean如何配置

xml或者注解,java config

16、aop的相关概念

切面:通知+切点
通知:切面类中定义的用于增强的方法
连接点:被增强的目标对象的方法。
切点:它是一个描述,对哪些连接点进行增强。

17、通知类型

前置通知
后置通知
环绕通知
异常通知
最终通知

18、aop如何配置

注解?
xml?
相关链接

19、事务管理如何配置?

注解:@Transactional
xml?

20、spring-bean的常用注解

@Component
@Controller
@Service
@Respotories
@Autowired
@Resource

@Aspect
@Before
@After
@After-returning
@After-throwing
@Around
@PointCut

@Tansactional

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值