汇丰外包面经

一、面试题

  1. 英语自我介绍;
  2. 英语介绍项目,version Manegement,回GitLab;
  3. Collection集合都有哪些有什么区别数据结构是什么样子的 (英语);
  4. HashMap和HashTable的区别,引申到了线程安全的问题 (英语);
  5. spring和SpringMVC的区别;引申到spring的DI,如何解决版本依赖;回答版本依赖用@Lazy,@Resource,其实都是不能解决版本依赖问题的,应该回答三级缓存(三级缓存的设计使得在Bean还没有完全初始化完成之前,可以提前暴露出一个“早期引用”供其他依赖的Bean使用,从而打破循环依赖。)

二、三级缓存

1、三级缓存的组成​​​​​​​

        1. 一级缓存(singletonObjects)

        该缓存存放完全初始化好的单例Bean。一般情况下,我们直接从一级缓存获取Bean。

        2. 二级缓存(earlySingletonObjects)

        存放原始状态的Bean,即实例化但还没有进行属性注入和初始化的Bean。用于在循环依赖的情况下,提前暴露一个Bean的引用。

        3. 三级缓存(singletonFactories)

        存放能够生成Bean的工厂(ObjectFactory),这些工厂用于在需要的时候生成Bean的早期引用。

​​​​​​​​​​​​​​​​​​​​​2、三级缓存的工作机制

  1. 1. Bean的创建过程

    在Spring中,创建一个Bean的过程包括实例化、属性注入、初始化三个步骤。正常情况下,Bean在完全初始化之后,会被存放到一级缓存中。

    2. 暴露早期引用

    如果在Bean创建过程中发现循环依赖,Spring会从三级缓存中获取对应的ObjectFactory,然后使用这个工厂来获取Bean的早期引用,并将这个引用存放到二级缓存中。这样,其他Bean在依赖这个Bean时,可以从二级缓存中获取早期引用,而不必等待它完全初始化。

    3. 从三级缓存到二级缓存

    在实际使用中,如果检测到某个Bean正在创建(处于early singleton状态),但其他Bean依赖这个Bean,Spring会:

    • 首先从一级缓存中查找Bean,如果找到就直接返回。

    • 如果在一级缓存中找不到,就从二级缓存中查找早期引用。

    • 如果在二级缓存中也找不到,最后从三级缓存中查找ObjectFactory,并通过工厂生成早期引用,然后放入二级缓存。

    4. 完成Bean的创建

    在整个依赖注入和初始化完成后,Spring会将Bean从二级缓存中移除,并将完全初始化好的Bean存放到一级缓存中。同时,将该Bean对应的三级缓存中的ObjectFactory删除。

    例子说明

    假设有两个Bean A 和 B,它们之间存在循环依赖,即 A 依赖 B,B 依赖 A。在Spring中,解决这种循环依赖的过程如下:

    1. Spring开始创建Bean A,并将其标记为正在创建。

    2. 在创建过程中,Spring发现 A 依赖于 B,于是开始创建 B。

    3. 在创建 B 的过程中,Spring发现 B 依赖于 A。

    4. 此时,A 正在创建中,因此从三级缓存中获取 A 的ObjectFactory,生成 A 的早期引用并放入二级缓存。

    5. B 获取到 A 的早期引用,并继续创建 B。

    6. B 完全初始化后,Spring将 B 放入一级缓存,并将其从二级缓存中移除。

    7. 回到 A 的创建过程,现在可以完成 A 的创建和初始化。

    8. A 完成初始化后,将其从二级缓存中移除,并放入一级缓存。

    总结​​​​​​​

    三级缓存机制有效解决了Spring框架中的循环依赖问题。通过提前暴露Bean的早期引用,三级缓存打破了Bean之间的循环依赖,保证了应用程序的正常启动和运行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值