HashMap 说透
HashMap 为什么是 2 次方扩容
Volatile 说透
解决问题:Volatile关键字主要是保证了内存可见性和有序性的问题
作用流程:在字节码层面会看到变量加上了ACC_VOLATILE的标识,到了汇编语言会产生一条Lock前缀指令,而这个指令最终会产生一个Lock信号,Lock信号会让硬件对这个变量添加缓存一致性协议的处理
缓存一致性,目前主流的都是MESI协议,当然了早期技术比较落后的时候使用的IO总线锁,当MESI失效的时候也仍然还会退化为IO总线锁
缓存一致性什么情况下会失效?跨缓存行的时候就会失效,缓存行其实就是缓存的一个计量单位,默认情况下都是64字节,当你标识的变量超过这个值的时候MESI就会失效
Static 和 非 static 修饰的类
静态类为什么能访问外部的方法和变量
匿名内部类 为什么能访问外部的变量和方法?
labada 表达式里面为什么能访问外面
Java 泛型,类型擦除
隔离级别,MVCC 说透
B+ 树说透
B+树实际上就是由最原始的二分搜索树演变而来的,在非叶子节点中只存储索引,真正的数据存储在叶子节点中,这样做的目的主要是为了降低树的一个高度,从而可以更快的查找到数据
和 B-树的区别
数据页
数据页其实就是Innodb引擎中的叶子节点,数据页里面主要包含有几个东西
用户数据:就是数据库中真正的一行行数据
页目录:就是对用户数据进行分组所用,以便更快的查找到数据
指针:前一页和后一页的指针,方便范围查找的
缓存页
索引,联合索引,回表,最左匹配原则
有长文本如何设计索引
截取后另外存一个字段,需要注意区分度
用 hash算法将长文本转为32位,不是范围查询的情况下
索引的最长长度为 256
Spring 是通过什么机制加载配置文件的
SPI
severless
servermesh
k8s