我在华为做Java外包的真实经历!使用指南
作者:互联网
## 二、什么是循环依赖
循环依赖直白点就是发生在两个类,`你引用我,我引用你`的状态,如图:
![](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625536146399836.jpg)
## 三、如果不依赖于Spring自己解决循环依赖如何解决
以上图为例,假设,我们能够创建完成`AService`之后,放置到到一个缓存中,再去注入属性!每次注入属性的时候,所需要的属性值都从缓存中获取一遍,缓存中没有再去创建不就解决了?如图所示:
![](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625536146285727.jpg)
总结一下上面的流程:
1. `AService`创建完成后将自己加入到二级缓存,然后开始注入属性
2. 发现`AService`依赖`BService`于是先查询一级缓存是否有数据一级缓存没有就查询二级缓存,有就返回,没有就创建`BService`
3. 缓存中没有,开始实例化`BService`,然后注入内部属性!
4. 注入内部属性时发现依赖`AService`,于是先查询一级缓存是否有数据一级缓存没有就查询二级缓存,有就返回,没有就创建,很显然,二级缓存是有数据的。于是从二级缓存取出`AService`注入到`BService`。
5. `BService`创建完成后将自己从二级缓存挪到一级缓存,并返回。
6. `AService`获取到`BService`后,注入到自己的属性中并把自己从二级缓存挪的一级缓存,返回`AService`!
7. 至此,循环依赖创建完成!
那么有了上面的思路,我们如何用代码实现一遍我们的逻辑呢?
### 那么如何才能正确的掌握Redis呢?
为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
* 并发编程面试题汇总
* JVM面试题汇总
* Netty常被问到的那些面试题汇总
* Tomcat面试题整理汇总
* Mysql面试题汇总
* Spring源码深度解析
* Mybatis常见面试题汇总
* Nginx那些面试题汇总
* Zookeeper面试题汇总
* RabbitMQ常见面试题汇总
JVM常频面试:
![Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625536147713008.jpg)
Mysql面试题汇总(一)
![Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625536147605201.jpg)
Mysql面试题汇总(二)
![Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625536147745232.jpg)
Redis常见面试题汇总(300+题)
![Redis高频面试笔记:基础+缓存雪崩+哨兵+集群+Reids场景设计](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625536147671590.jpg)
**有需要的朋友,可以[直接点击这里免费获取](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)**
绝无套路!!
标签:面试题,缓存,Java,Redis,AService,汇总,华为,使用指南,com 来源: https://blog.51cto.com/u_15290981/2985767