AOP、IOC、Spring面试题(个人总结)

一、什么是IOC?

IOC就是一个Spring特有的,用来装类对象的,就是我们用Spring框架时,不需要new对象了,不过我们需要让我们的Spring知道我们写了哪些配置和需要用什么,所以这时我们就要引用Spring的注解或者在配置xml文件上配置我们的类配置,就是在我们自己写的类上加上@Component、@Controller、@Service、@Repository等等这些让我们的Spring知道我们等下要调用有哪些类,让它先准备准备,等下我们需要用了,就getBean或者通过@Autowrite、@Resource来取就行了,给个生活比喻吧,我们就是少爷,IOC是一个管家,我们的类是我们努力的家产,但我的东西太多了,平时要用的时候还要自己一个一个的去拿,这时很容易把自己“累趴”,在Java中我们所说的就是效率太低,和耦合度太高了,这时我们有钱以后肯定想生活更加好,更加方便所以这时就去请人过家要就行了,来帮我们打理家常等这不,IOC管家就来了吗,从此我们在编程时需要什么就直接向管家要就行了,不过你要确定你自己的东西是存在的,而且管家已经知道了才行,不然你又要停下来慢慢的找你的“异常”了。
AOP、IOC、Spring面试题(个人总结)_第1张图片

二、 什么是AOP?

AOP就是一个面向切面的编程,它包含者几个步骤,切面(对应的切面类)、连接点(需要扫描的方法)、切点(符合条件的方法)、增强(加入事务,自己写的条件)、目标对象(自己写的代码对象)、织入(把事务或过滤的条件融合成一个代理对象)之所以需要AOP,是因为我们在写程序的时候由于大量的逻辑要做,往往很容易疏忽了我们的程序的安全,且我们在做完程序的编写之后又要去做大量的安全编写时是非常耗时间耗脑力的,
又或者我们想把以前做的不是很好的项目拿出来重新做时,又要改动原来的代码这过程是非常痛苦的,因此我们程序界大佬就做出了AOP这个伟大的程序,以前什么安全问题和插入新条件等从此就交由AOP来帮我们做了
AOP、IOC、Spring面试题(个人总结)_第2张图片

三、 Spring是什么?

Spring是一个开源【容器】框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系,其核心就是控制反转IOC,和面向切面AOP,简单的说就是一个分层的轻量级无侵入式开源框架

四、 事务是什么,作用?

事务是用来保障一件事要内部所有小节全部完成而不会出现卡壳的意外出现的,
就好像银行取钱,当个人把钱取出时,银行卡相对的金额就会出现变动,这里取钱,
就出现了两个步骤了,一扣一取,这两个步骤是需要一起完成而不可分开的,为了 防止他们分开,事务发挥了他的特性跟功能:

事务的四个特性:

  1. 原子性: 一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作,这就是事务的原子性
  2. 一致性:事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。
  3. 隔离性:
    事务的隔离性是指在并发环境中,并发的事务时相互隔离的,一个事务的执行不能不被其他事务干扰。不同的事务并发操作相同的数据时,每个事务都有各自完成的数据空间,即一个事务内部的操作及使用的数据对其他并发事务时隔离的,并发执行的各个事务之间不能相互干扰。
  4. 持久性:
    一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。–即使发生系统崩溃或机器卡住障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束的状态

而在其中事务的隔离性又有四个特性:

  • 读未提交(Read Uncommited): 该隔离级别允许脏读取,其隔离级别最低;比如事务A和事务B同时进行,事务A在整个执行阶段,会将某数据的值从1开始一直加到10,然后进行事务提交,此时,事务B能够看到这个数据项在事务A操作过程中的所有中间值(如1变成2,2变成3等),而对这一系列的中间值的读取就是未授权读取

  • 授权读取也称为已提交读(Read Commited): 授权读取只允许获取已经提交的数据。比如事务A和事务B同时进行,事务A进行+1操作,此时,事务B无法看到这个数据项在事务A操作过程中的所有中间值,只能看到最终的10。另外,如果说有一个事务C,和事务A进行非常类似的操作,只是事务C是将数据项从10加到20,此时事务B也同样可以读取到20,即授权读取允许不可重复读取。

  • 可重复读(Repeatable Read): 是保证在事务处理过程中,多次读取同一个数据时,其值都和事务开始时刻是一致的,因此该事务级别禁止不可重复读取和脏读取,但是有可能出现幻影数据。所谓幻影数据,就是指同样的事务操作,在前后两个时间段内执行对同一个数据项的读取,可能出现不一致的结果。在上面的例子中,可重复读取隔离级别能够保证事务B在第一次事务操作过程中,始终对数据项读取到1,但是在下一次事务操作中,即使事务B(注意,事务名字虽然相同,但是指的是另一个事务操作)采用同样的查询方式,就可能读取到10或20;

  • 串行化: 是最严格的事务隔离级别,它要求所有事务被串行执行,即事务只能一个接一个的进行处理,不能并发执行

五、 IOC和AOP之间的关系?

IOC是通过Spring的容器帮我造对象跟零件的,而AOP是帮我把我写好的类通过容器帮我封装成代理对象来供外界访问和使用的,但AOP在帮我增强代码使用事务时,又要从我们的IOC中拿出对应的类来实现这个功能,总结AOP为我们增强程序的健康,而IOC为我们程序创造资源

六、 AOP和事务间的关系?

AOP就是一个帮派的总称,事务就是其中的一名大佬,专门保护程序这一块的安全的,所以要交保护费的,保护费好像就是我们的(性能吧),就是我们平时写东西时总会出现安全的问题时,这时事务就会在我们AOP为我们程序工作时出现在我们的程序中保护我们程序的行动,但我们平时在自己调用时就是没有用到AOP的代理对象时

七、 Spring和SpringBoot是什么,区别

这里我就总结我在用他们时的感知吧,Spring是无侵入式轻量级的开发框架,他们归根到底都是要用到IOC和AOP这两位大哥的,IOC呢就帮我们管理了平时我们要用的类对象和某些外部资源,不在需要我们在这些配置上绞尽脑汁了,而AOP呢就是帮我们管理程序的事务安全啊,还有一些旧的代码我们可以通过它做到无修改原版的基础上去加入我们想要增强的功能以及其他的一些新的操作。

他们的区别呢又在于,SpringBoot是Spring的子项目来的,SpringBoot2.4.4集成了Spring5.3.4,Spring早期刚刚开发出来人们发现它极大的满足和方便了人们的开发需求,所以就很多人用它,但人嘛,野心总是很大的,这不用久了,就感觉到Spring的手动配置环境太麻烦了,就开始研究新的门路为了满足更方便的开发环境,这时Spring它的好大儿SpringBoot就来到了我们人类面前,别说它还真的不错,这不零配置来帮助我们开发这是多么的牛呀,可是万物都不是十全十美的,在没网的时候SpringBoot就成了你的开发最大的烦恼了。所以老的也有老的好,新的也有新的妙。

你可能感兴趣的:(spring,aop,ioc)