前两天晚上,正当我加班沉浸在敲代码的快乐中时,听到前桌的同事在嘀咕:Spring究竟是如何解决的循环依赖?
这让我想起最开始学Java的时候,掌握了一点基本语法和面向对象的一点皮毛。当时心里也是各种想法:
比如说面向切面是什么鬼?我面向我的对象还不够吗?
依赖注入是什么玩意儿?直接new一个不就行了吗......
现在再回过头看当时觉得有点不知天高地厚了。
因为Spring中的循环依赖非常重要,一方面是源码中为了解决循环依赖做了很多处理,另一方面是面试中一旦问到Spring中比较高阶的问题,循环依赖必定逃不掉。如果回答得好,那么这就是必杀技,反之就是被面试官反杀。
到现在,再面对Spring究竟是是如何解决循环依赖这个问题的时候,我已经可以明确的给出答案:Spring通过三级缓存解决了循环依赖,一级缓存为单例池、二级缓存为早期曝光对象、三级缓存为早期曝光对象工厂。
仅仅知道这个还不够,为了知道你掌握spring框架的程度,面试官还会追问:为什么要使用三级缓存来解决循环依赖问题呢?
这个简单的循环依赖问题,其实蕴含的是Spring最核心的两个点:
了解Bean的生命周期了解AOP原理
解决了这个疑问,才能够说是真正进入了Spring框架源码的世界。以小见大,在如今Spring生态系统如此庞大的情况下,要独自一人梳理好这些技术脉络并不容易。
因为Spring应用了很多优雅的设计理念,在学习Spring的同时,也同样是在加强Java基础知识的学习。掌握了Spring后,很多Java特性就能理解得更透彻。
不过要进入到实际项目的开发,Mysql、Springboot、JVM等等也绕不过。
下面是来自阿里、华为、京东的工程师朋友整理的一些常考的面试题,这些面试题可以供大家参考一下
阿里面试官详解Spring高级面试题
Spring中Bean的生命周期有哪些步骤?什么是BeanDefinition?它为什么非常重要?什么是Bean的后置处理器?什么是Bean工厂的后置处理器?什么是BeanFactory?它与ApplicationContext的区别?什么是FactoryBean?它与BeanFactory的区别?
Import、Component、Bean的区别是什么?什么是ImportBeanDefinitionRegistrar?它的作用是什么?阿里云技术专家首次分享JVM调优秘籍class文件被加载后在内存中是如何存储的?什么是方法区?永久代?元空间?热点代码缓存区?什么是动态链接?返回现场?类加载器、运行时数据区、程序计数器是如何协调工作的?对象是如何被回收的?回收过程中会经过哪些步骤?拟机栈、方法区、堆区之间的关系到底是什么?普通场景下我们该如何进行JVM调优?高并发场景下我们该如何进行JVM调优?华为架构师首次分享深入理解Springboot底层原理
SpringBoot是如何做到零配置的?SpringBoot启动过程中到底发生了什么?SpringBoot是怎么做到与Tomcat无缝连接使用的?如果你去华为,面试官会怎么问你SpringBoot相关知识点?京东面试官详解Mysql高级面试题
Mysql中使用B+树来实现索引,why?什么是覆盖索引、索引下推、索引扫描,what?Mysql中的主键索引是如何生成的,how?Mysql中的联合索引是如何生成的,how?千万级数据量下如何利用索引进行优化,实战!而这只是面试中的一小部分问题,针对不同的行业和面试的层级,不同的面试会有不同的面试针对点,需要在面试前进行相近的准备,为此,我做了两手准备给大家
第一相应的技术脑图
别看这只是图片,没关系,别着急
基础
进阶
需要这份思维导图合集的,