kafka多个消费者消费同一个partition,牛皮轰轰
## 二、什么是循环依赖
循环依赖直白点就是发生在两个类,`你引用我,我引用你`的状态,如图:
![](http://www.icode9.com/i/li/?n=2&i=images/20210704/1625401064124578.jpg)
## 三、如果不依赖于Spring自己解决循环依赖如何解决
以上图为例,假设,我们能够创建完成`AService`之后,放置到到一个缓存中,再去注入属性!每次注入属性的时候,所需要的属性值都从缓存中获取一遍,缓存中没有再去创建不就解决了?如图所示:
![](http://www.icode9.com/i/li/?n=2&i=images/20210704/1625401064156183.jpg)
总结一下上面的流程:
1. `AService`创建完成后将自己加入到二级缓存,然后开始注入属性
2. 发现`AService`依赖`BService`于是先查询一级缓存是否有数据一级缓存没有就查询二级缓存,有就返回,没有就创建`BService`
3. 缓存中没有,开始实例化`BService`,然后注入内部属性!
4. 注入内部属性时发现依赖`AService`,于是先查询一级缓存是否有数据一级缓存没有就查询二级缓存,有就返回,没有就创建,很显然,二级缓存是有数据的。于是从二级缓存取出`AService`注入到`BService`。
5. `BService`创建完成后将自己从二级缓存挪到一级缓存,并返回。
6. `AService`获取到`BService`后,注入到自己的属性中并把自己从二级缓存挪的一级缓存,返回`AService`!
7. 至此,循环依赖创建完成!
那么有了上面的思路,我们如何用代码实现一遍我们的逻辑呢?
# **最后**
**最后,强调几点:**
* 1\. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
* 2\. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
* 3\. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
> **以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。**
**如何获取整理好的Java面试专题资料?**
**[资料获取方式:点击这里免费下载](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)**
# **面试答案**
![三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里](http://www.icode9.com/i/li/?n=2&i=images/20210704/1625401064158737.jpg)
![三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里](http://www.icode9.com/i/li/?n=2&i=images/20210704/1625401065332235.jpg)
![三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里](http://www.icode9.com/i/li/?n=2&i=images/20210704/1625401065716475.jpg)