Java面试题总结

1 Spring 是如何解决循环依赖的问题的?比如A autowired B,B autowired A,内部是如何是如何实现的?

循环依赖是对象之间的互相引用形成闭环,如A依赖B,B依赖C,C依赖A;
Spring无法解决构造器的循环依赖;
循环依赖的检测: 对象创建时打标记,递归调用回来发现正在创建中,说明存在循环依赖;
循环依赖解决: 递归找到依赖的Bean缓存起来,先实例化再延迟设置属性,用到了Spring三级缓存
三级缓存: 单例对象工厂缓存 提前曝光的单例对象的缓存 单例对象的缓存;
考虑A B互相依赖的情况,A先初始化尝试获取B,B未创建走创建流程,B初始化发现依赖A,尝试一二级缓存均没有,通过三级缓存获取提前曝光的A,B完成初始化进入一级缓存,A拿到B的对象完成初始化,从而B持有的A的对象也初始化完成
简单一句话: 允许不完美,但不能不做

2 Spring IOC的理解,原理与实现

由对象之间互相依赖改由对象均依赖Bean容器,降低耦合
Spring容器初始化时讲对象存入容器,程序使用时再从容器中获取

3 设计模式:
  • 代理模式与装饰模式的区别
  • 常用的设计模式:单例模式、代理模式、装饰模式等
  • 单例模式主要解决什么问题
  • 单例模式优缺点

持续更新中...

你可能感兴趣的:(Java面试题总结)