面试小结综合篇

 

  • 两种动态代理的比较:CGLib所建立的动态代理对象的性能比JDK所建立的代理对象性能高很多,大概10倍,但CGLib在建立代理对象时所花费的时间却比JDK动态代理多大概8倍,因此对于singleton的代理对象或者具备实例池的代理,由于无需频繁的建立新的实例,因此比较适合CGLib动态代理技术,反之则适用于JDK动态代理技术。另外,因为CGLib采用动态建立子类的方式生成代理对象,因此不能对目标类中的final,private等方法进行处理。因此,你们须要根据实际的状况选择使用什么样的代理了。一样的,Spring的AOP编程中相关的ProxyFactory代理工厂内部就是使用JDK动态代理或CGLib动态代理的,经过动态代理,将加强(advice)应用到目标类中。

 

  • Spring框架中bean的生命周期:
Spring容器从XML文件中读取bean的定义,并实例化bean。
Spring根据bean的定义填充全部的属性。
若是bean实现了BeanNameAware接口,Spring传递bean的ID到setBeanName方法。
若是Bean实现了BeanFactoryAware接口,Spring传递beanfactory给setBeanFactory方法。
若是有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。
若是bean实现IntializingBean了,调用它的afterPropertySet方法,若是bean声明了初始化方法,调用此初始化方法。
若是有BeanPostProcessors和bean关联,这些bean的postProcessAfterInitialization() 方法将被调用。
若是bean实现了DisposableBean,它将调用destroy()方法。

BeanPostProcessor接口做用是:若是咱们须要在Spring容器完成Bean的实例化、配置和其余的初始化先后添加一些本身的逻辑处理,咱们就能够定义一个或者多个BeanPostProcessor接口的实现,而后注册到容器中。java

 

MySql的事务隔离级别有哪几种?

  • 隔离级别用于表述并发事务之间的相互干扰程度,其基于锁机制进行并发控制。
  • 可序列化(Serializable):事务一个接一个的执行,彻底相互独立;实现可序列化要求在选定对象上的读锁和写锁保持直到事务结束后才能释放;在SELECT的查询中使用一个WHERE子句来描述一个范围时应该得到一个“范围锁”。
  • 可重复度(Repeatable Read):事务A读取数据以后,对涉及的数据加锁,不容许其余事务进行修改,因为其余事务会插入新的数据,所以会产生幻读;对选定对象的读锁和写锁一直保持到事务结束,但不要求“范围锁”,所以可能会发生幻读;可重复读是MySQL的默认事务隔离级别。
  • 读取已提交(Read Committed):只能看到其余事务已经提交的数据,避免了脏读,但存在不可重复读、幻读;DBMS须要对选定对象的写锁(write locks)一直保持到事务结束,可是读锁(read locks)在SELECT操做完成后立刻释放,且不要求“范围锁”。
  • 读取未提交(Read Uncommitted):能够看到其余事务没有提交的数据,出现脏读、不可重复读、幻读;

[PS补充]
不可重复读的重点是修改:一样的条件,读取过的数据,再次读取出来发现值不同了。
幻读的重点在于新增或者删除:一样的条件,第1次和第2次读出来的记录数不同。
编程

 

http://ginobefunny.com/post/java_other_interview_questions/并发

 

https://mp.weixin.qq.com/s/0bHjVq4yONx8OxtiKx_usA框架

相关文章
相关标签/搜索