HsahMap的面试详解及源码分析
本次接着上篇说jdk 中的HashMap,这个是一个比较复杂的重点,因为看懂了这个,后面Redis 的数据结构基本上就懂一半,而且之后所有涉及hash 表的逻辑都可以套用,最主要的就是这玩意儿面试问jdk 基本都要被问到。本次我会和结合hash表、hash碰撞的解决来聊一下hashMap 的源码,同时会将jdk1.7 和1.8 之间hashMap 区别更新说一下,至于1.8 扩容出现的红黑树这里会简单聊一下,具体的后面算法文章再详谈。
本次接着上篇说jdk 中的HashMap,这个是一个比较复杂的重点,因为看懂了这个,后面Redis 的数据结构基本上就懂一半,而且之后所有涉及hash 表的逻辑都可以套用,最主要的就是这玩意儿面试问jdk 基本都要被问到。本次我会和结合hash表、hash碰撞的解决来聊一下hashMap 的源码,同时会将jdk1.7 和1.8 之间hashMap 区别更新说一下,至于1.8 扩容出现的红黑树这里会简单聊一下,具体的后面算法文章再详谈。
本次会将剩下的AOP 内容全部聊一下,其实就是剩一个请求调用全流程了,后续Spring 系列文章就还剩boot 和cloud 呢,boot 在我面试前应该还能讲一讲,但是cloud 因为这些年一直在保险行业混,现在也不是很清楚,分布式现在能记住的就是dubbo 体系的了,这个只能后面再说了,如果面试这个必须上的话,我就再看看cloud 然后整理一下相应文章,不行的话,只能等面试结束了,不过今年应该能写完。
Spring IOC 一系列文章下来,我们已经了解了整个spring IOC 核心refresh 方法的全部内容,这个方法名我是每篇文章都有提到,一定要记住。本次就聊一下IOC 的最后一个知识点:循环依赖的问题。
很多小伙伴都在各种渠道听到过“循环依赖”这个词,也应该有一定了解,但是我这里还是要重新在具体描述一下循环依赖的概念。
循环依赖是指:在spring IOC 容器初始化的时候,记住是初始化,不是实例化,上篇文章IOC流程解析-实例化和初始化 就已近说过了spring 对于bean 的实例化和初始化是分开的,一定要记住这里是指初始化,也就是为bean 对象属性赋值的是时候,如果目前初始化的对象A,其中有一个属性对象B,那么这里就会先去加载注册对象B,但是如果B中又有属性对象A,但是A目前还在初始化过程,这样就会形成了循环依赖。
简单描述就是:A 对象加载B 对象的时候,B 对象反过来需要加载A 对象。甚至可以再加多个中间对象,比如加一个C 对象,那么这就是A 对象加载B 对象的时候,B 对象需要加载C 对象,而C 对象又需要加载A 对象。只要形成加载循环,那么就会存在循环依赖的问题。
spring 现在算是针对java语言的企业级业务的基本框架了,现在中高级面试基本都要问spring,其中的区别就是深度问题,我后面的文章也是对于spring 源码的分析,不再针对初级内容做解析了,主要就是简单说下spring 的基本概念,然后就是说IOC 容器部分的内容了,如果不知道spring 基本使用的初学者建议还是要先看看基础的相关文章。
spring 是面向bean的编程,bean 在spring 中才是真正的主角。bean 在spring 中的作用就相当于是object 对于oop 的意义一样。spring 中没有bean 也就没有spring 存在的意义。spring 提供了IOC 容器通过配置文件或者注解的方式来管理对象之间的依赖关系。
控制反转也就是IOC,是面向对象编程中的一种设计原则,可以用来降低代码之间的耦合。其中常见的方式叫做依赖注入,还有一种方式叫依赖查找。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将所有依赖的对象的引用传递给它。
本篇作为JDK 源码分析的第一篇,就先从简单的说起。本篇主要分析的就是Object、ArrayList 以及LinkedList 的源码,Object 主要就是简单介绍一下hashCode 的生成还有一些基本的概念,object 本身来说也并不是很复杂,面试的时候也不会问到太多,所以也就不多聊。剩下的ArrayList 和LinkedList 都是从数据结构、初始化、增删改查以及扩容流程来详谈。
本次文章就算是开始对于aop 的流程源码分析了。区别于IOC,aop 相对来说简单一点,我们后续的主要内容就是从aop 相关配置信息的解析、代理的创建、代理流程的调用,这三个部分着手来简单说一下aop 的源码分析。
时间许久再次捡起博客,新的一年开始学习新的内容,没什么好说的,还是得卷,本篇主要是总结最近一段时间在学习的docker 命令,后续在总结阿里云服务器的购买和使用流程,以及docker 的安装流程。
上篇讲了keycloak 的概述和项目搭建流程,本篇的主要内容就是配置权限粒度管理、RBAC-API配置、单点登出等,算是对上篇keycloak 基础内容的一个加强,至于集成网关、用户数据注册存储、docker 部署等内容后面再说。
keycloak 目前算是完全空白的一开内容,后续的一系列文章都是来整理学习这块内容的,目前本篇要做的就是了解keycloak 是什么?用于做什么?然后怎么配置启动?怎么集成到项目中?
本次内容为解析核心方法剩下的全部内容,重点是bean 的实例化和初始化部分。对于其余IOC 部分内容感兴趣的小伙伴可以根据文章最后的导航栏直接跳跃。
接着上篇文章(上篇文章是:[IOC流程解析-BeanFactoyPostProcessor和BeanPostProcessor](https://liwqtm.github.io/2022/03/14/Spring IOC-3/#more)),我们还是继续看IOC 的核心方法refresh 方法的内容。这次会提到两个面试常问的问题:BeanFactory 和FactoryBean 的区别、FactoryBean 和普通Bean 的区别,这个文章的最后我会细说一下,有需要面试的小伙伴可以直接跳到文章最后查看。