zoukankan      html  css  js  c++  java
  • 借鉴 spring 面试内容

    1.Spring的IOC有三种注入方式 : 
    第一是根据属性注入,也叫set方法注入; 
    第二种是根据构造方法进行注入; 
    第三种是根据注解进行注入
    Spring的优点:主要是根据它的IOC和AOP体现的。IOC主要是解决了代码的耦合性问题,而AOP是面向切面编程的最好解释!

    2.Spring中IOC, AOP 
    IOC就是控制翻转或是依赖注入。通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过Spring的bean工厂为你长生这样一个对象。 
    AOP就是面向切面的编程。比如说你每做一次对数据库操作,都要生成一句日志。如果,你对数据库的操作有很多类, 
    那你每一类中都要写关于日志的方法。但是如果你用AOP,那么你可以写一个方法,在这个方法中有关于数据库操作的方法,

    3.Spring的IOC/AOP/代理 
    IOC是控制反转,是Spring的核心思想。通过面向接口编程来实现对业务组件的动态依赖。 aop是面向切面编程,它并不是只在Spring或者java中才有的,它和面向对象编程(oop)是相对而言的另一种编程思想。 
    Spring在实现AOP编程时利用的是java的代理机制。个人觉得java代理机制真的是很神奇。核心内容并不多

    4.Spring的IOC是解耦,AOP是干什么的 
    AOP面向切面编程将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。 
    比如:很多方法可能会抛异常,你要记录这个异常到日志中去,可以写个拦截器类,在这个类中记录日志, 
    在spring.xml中配置一个对这些要记录日志的方法的AOP拦截器在这个方法执行后调用这个拦截器,记录日志。

    5.讲解一下Java中Spring中IOC和AOP 
    IOC:说直白点,就是通过配置文件(XML或.properties)指定需要实例化的JAVA类(类名的完整字符串),包括该JAVA类的一组初始化值,然后我们在代码中加载该配置文件,然后通过 .getBean() 函数就可以得到一个该JAVA类的对象, 并且该对象已经根据配置文件中指定的属性值进行了初始化。 
    AOP:这个比IOC更简单,直白点说就是实现调用某个方法之前或/和之后,自动执行一系列自定义的语句

    6.简述Spring框架中IOC和AOP 
    IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制; 
    第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。 
    AOP:面向切面,是一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。 
    Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。 
    不过AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便 

    7.什么是事务

    事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题

    事务最重要的两个特性,是事务的传播级别数据隔离级别

    传播级别:的是事务的控制范围,

    事务隔离级别:的是事务在数据库读写方面的控制范围。

    8.spring  7种事务传播级别

    1) propagation_required ,默认的spring事务传播级别 上下文中已经存在事务,那么就加入到事务中执行,如果当前上下文中不存在事务,则新建事务执行
    2)propagation_supports 上下文存在事务,则支持事务加入事务,如果没有事务,则使用非事务的方式执行
    3)propagation_mandatory 该级别的事务要求上下文中必须要存在事务,否则就会抛出异常
    4)propagation_requires_new 每次都会新建一个事务,并且同时将上下文中的事务挂起,执行当前新建事务完成以后,上下文事务恢复再执行
    5)propagation_not_supported 上下文中存在事务,则挂起事务,执行当前逻辑,结束后恢复上下文的事务
    6)propagation_never 上下文中不能存在事务,一旦有事务,就抛出runtime异常
    7)propagation_nested 上下文中存在事务,则嵌套事务执行,如果不存在事务,则新建事务

    9.spring 五种隔离级别

     1、ISOLATION_DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应

    2、serializable :最严格的级别,事务串行执行,资源消耗最大;
    3、repeatable read :保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。
    4、read committed :大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。
    5、read uncommitted :保证了读取过程中不会读取到非法数据。

    脏读 :所谓的脏读,其实就是读到了别的事务回滚前的脏数据。比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形成了脏读。
     
    不可重复读 :事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。
     
    幻读 : 事务A首先根据条件索引得到5条数据,然后事务B改变了数据库一条数据,导致也符合事务A当时的搜索条件,这样事务A再次搜索发现有6条数据了,就产生了幻读。

    Serializable 最安全 伴随而来的是高昂的性能开销
    事务常用的两个属性:readonly和timeout
    readonly:设置事务为只读以提升性能
    timeout:设置事务的超时时间,一般用于防止大事务的发生

  • 相关阅读:
    解决Warning: mysql_connect(): Headers and client library minor version mismatch. 警告
    读取微博feed伪代码
    [待续]不为人知的PHP-SPL标准库
    封装pyMysql
    捉“客”记
    实现小程序插件自定义导航栏
    圆形与矩形的碰撞检测--Mr.Ember
    mpvue原理分析
    webpack学习--Mr.Ember
    原型链、继承--Mr.Ember
  • 原文地址:https://www.cnblogs.com/wcnwcn/p/7742160.html
Copyright © 2011-2022 走看看