美文网首页
成为Java顶尖程序员,先过了下面问题!(六)

成为Java顶尖程序员,先过了下面问题!(六)

作者: d394af621d4c | 来源:发表于2017-12-24 18:00 被阅读127次

    六、框架使用

    1.描述一下Hibernate的三个状态?
    hibernate.jpg
    2.Spring中Bean的生命周期。
    springbean.jpg
    3.SpringMVC或Struts处理请求的流程。
    springmvcdispathcer.jpg
    4.Spring AOP解决了什么问题?怎么实现的?

    面向切面编程,可以在某一些方法执行之前或之后执行一些方法。

    5.Spring事务的传播属性是怎么回事?它会影响什么?

    MySQL事务隔离级别和Spring事务关系介绍

    mysql-stran.jpg
    • 未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据
    • 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)
    • 可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读,但是innoDB解决了幻读
    • 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

    其中spring七个事务传播属性:

    • PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
    • PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。
    • PROPAGATION_MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。
    • PROPAGATION_REQUIRES_NEW -- 新建事务,如果当前存在事务,把当前事务挂起。
    • PROPAGATION_NOT_SUPPORTED -- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    • PROPAGATION_NEVER -- 以非事务方式执行,如果当前存在事务,则抛出异常。
    • PROPAGATION_NESTED -- 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

    五个隔离级别:

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

    • ISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。
      这种隔离级别会产生脏读,不可重复读和幻像读。

    • ISOLATION_READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取
      该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。

    • ISOLATION_REPEATABLE_READ 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证
      一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。

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

    关键词:

    • 1)幻读:事务1读取记录时事务2增加了记录并提交,事务1再次读取时可以看到事务2新增的记录;
    • 2)不可重复读取:事务1读取记录时,事务2更新了记录并提交,事务1再次读取时可以看到事务2修改后的记录;
    • 3)脏读:事务1更新了记录,但没有提交,事务2读取了更新后的行,然后事务T1回滚,现在T2读取无效。
    6.Spring中BeanFactory和FactoryBean有什么区别?
    1. BeanFactory
        BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。

    Spring为我们提供了许多易用的BeanFactory实现,XmlBeanFactory就是常用的一个,该实现将以XML方式描述组成应用的对象及对象间的依赖关系。XmlBeanFactory类将持有此XML配置元数据,并用它来构建一个完全可配置的系统或应用。

    1. FactoryBean
        以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean<T>接口的Bean,根据该Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FactoryBean本身,如果要获取FactoryBean对象,请在id前面加一个&符号来获取。

    例如自己实现一个FactoryBean,功能:用来代理一个对象,对该对象的所有方法做一个拦截,在调用前后都输出一行LOG,模仿ProxyFactoryBean的功能。

    7.Spring框架中IOC的原理是什么?

    控制反转,Spring统一管理Bean

    8.spring的依赖注入有哪几种方式

    三种依赖注入方式,即构造方法注入(constructor injection),setter方法注入(setter injection)以及接口注入(interface injection).

    9.struts工作流程
    struts.jpg
    10.用Spring如何实现一个切面?

    配置AOP

    11.Spring 如何实现数据库事务?

    @Transaction

    12.Hibernate对一二级缓存的使用,Lazy-Load的理解;
    13.mybatis如何实现批量提交?

    目录列表
    一、数据结构与算法基础
    二、Java基础
    三、JVM
    四、多线程/并发
    五、Linux使用与问题分析排查
    六、框架使用
    七、数据库相关
    八、网络协议和网络编程
    九、Redis等缓存系统/中间件/NoSQL/一致性Hash等
    十、设计模式与重构
    本文是针对知乎文章《成为Java顶尖程序员,先过了下面问题》的解答

    相关文章

      网友评论

          本文标题:成为Java顶尖程序员,先过了下面问题!(六)

          本文链接:https://www.haomeiwen.com/subject/pnphgxtx.html