ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring面试可能被问到的相关知识点

2019-09-09 15:07:51  阅读:225  来源: 互联网

标签:知识点 事务 调用 隔离 Spring PROPAGATION bean 问到


1. 说说Spring事务什么情况下才会回滚

当所拦截的方法有指定异常抛出,事务才会自动进行回滚。默认情况下是捕获到方法的RuntimeException异常,也就是说抛出只要属于运行时的异常(即RuntimeException及其子类)都能回滚;但当抛出一个不属于运行时异常时,事务是不会回滚的。如果是其他异常想要实现回滚,可以进行配置。

2. 说说Spring事务的传播属性

事务的传播性一般在事务嵌套时候使用,比如在事务A里面调用了另外一个使用事务的方法,那么这俩个事务是各自作为独立的事务执行提交,还是内层的事务合并到外层的事务一块提交那,这就是事务传播性要确定的问题。spring支持7种事务传播行为:

  1. PROPAGATION_REQUIRED – 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

  2. PROPAGATION_SUPPORTS – 支持当前事务,如果当前没有事务,就以非事务方式执行。

  3. PROPAGATION_MANDATORY – 支持当前事务,如果当前没有事务,就抛出异常。

  4. PROPAGATION_REQUIRES_NEW – 新建事务,如果当前存在事务,把当前事务挂起。

  5. PROPAGATION_NOT_SUPPORTED – 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

  6. PROPAGATION_NEVER – 以非事务方式执行,如果当前存在事务,则抛出异常。

  7. PROPAGATION_NESTED – 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

备注:常用的两个事务传播属性是1和4,即PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW

3. 说说Spring事务的隔离性

事务的隔离性是指多个事务并发执行的时候相互之间不受到彼此的干扰。

事务的隔离级别也分为四种,由低到高依次分别为:read uncommited(读未提交)、read commited(读提交)、read repeatable(读重复)、serializable(序列化),这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

  1. read uncommited:是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。

  2. read commited:保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。

  3. repeatable read:这种事务隔离级别可以防止脏读,不可重复读。但是可能会出现幻象读。它除了保证一个事务不能被另外一个事务读取未提交的数据之外还避免了以下情况产生(不可重复读)。

  4. serializable:这是花费最高代价但最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读之外,还避免了幻读。

  5. DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.

4. 说说Spring事务的特性

事务特性分为四个:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)简称ACID。

  1. 原子性(Atomicity):事务是数据库逻辑工作单元,事务中包含的操作要么都执行成功,要么都执行失败。

  2. 一致性(Consistency):事务执行的结果必须是使数据库数据从一个一致性状态变到另外一种一致性状态。当事务执行成功后就说数据库处于一致性状态。如果在执行过程中发生错误,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这是数据库就处于不一致状态。

  3. 隔离性(Isolation):一个事务的执行过程中不能影响到其他事务的执行,即一个事务内部的操作及使用的数据对其他事务是隔离的,并发执行各个事务之间无不干扰。

  4. 持续性(Durability):即一个事务执一旦提交,它对数据库数据的改变是永久性的。之后的其它操作不应该对其执行结果有任何影响。

5. 说说你对SpringIOC容器的理解

SpringIOC负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。

6. 什么是Spring的依赖注入

依赖注入,是IOC的一个方面。这概念是说你不用创建对象,而只需要描述它如何被创建。你不在代码里直接组装你的组件和服务,但是要在配置文件里描述哪些组件需要哪些服务,之后一个容器(IOC容器)负责把他们组装起来。

7. IOC(依赖注入)方式

  • 构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。

  • Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。

  • 用构造器参数实现强制依赖,setter方法实现可选依赖。

8. Springboot启动过程

  • 构造SpringApplication的实例

  • 调用SpringApplication.run()方法

    • 构造SpringApplicationRunListeners 实例

    • 发布ApplicationStartedEvent事件

    • SpringApplicationRunListeners 实例准备环境信息

    • 创建ApplicationContext对象

    • ApplicationContext实例准备环境信息

    • 刷新的上下文

9. 说说几个常用的注解

@Autowried

@Resource

@webservice:

@Entity

@Component

@Service

@Controller

10. spring的bean的生命周期

  1. Spring 容器根据配置中的 bean 定义中实例化 bean。

  2. Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置。

  3. 如果 bean 实现 BeanNameAware 接口,则工厂通过传递 bean 的 ID 来调用 setBeanName()。

  4. 如果 bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用 setBeanFactory()。

  5. 如果存在与 bean 关联的任何 BeanPostProcessors,则调用 preProcessBeforeInitialization() 方法。

  6. 如果为 bean 指定了 init 方法( 的 init-method 属性),那么将调用它。

  7. 最后,如果存在与 bean 关联的任何 BeanPostProcessors,则将调用 postProcessAfterInitialization() 方法。

  8. 如果 bean 实现 DisposableBean 接口,当 spring 容器关闭时,会调用 destory()。

  9. 如果为 bean 指定了 destroy 方法( 的 destroy-method 属性),那么将调用它。

标签:知识点,事务,调用,隔离,Spring,PROPAGATION,bean,问到
来源: https://blog.csdn.net/weixin_37702260/article/details/100662221

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有