Java 基础
集合类
ArrayList 源码分析
为什么 ArrayList 查找快, 其实质是实现了 RandomAccess 接口
初始化大小
HashMap 源码分析
构造函数分析(不是所有的构造函数都初始化了 threshold)
Hash 数据初始化大小(inintal_Capacity, 默认 16)
加载因子(loadFactor, 默认 0.75)
至于为什么是 16 和 0.75, 是在大量数据测试下, 数学公式分析这两个值会使 Hash 分布更加均匀(面试时可以这么说 泊淞分布)
阈值大小(threshold, 扩容函数里面初始化)
扩容函数(不仅做了扩容, 还用于初始化哈希表)
TreeMap 源码分析
二叉查找树
平衡二叉树
红黑树结构
TreeMap 添加删除元素
... 其他
抽象类 与 接口 的实际应用(何时使用抽象类, 何时使用接口)
多线程和并发(JUC 包下的知识点暂时没有深入, 暂列几个知识点)
AQS
通过 state 值唤醒队列头线程
CAS 原理(深究原理)
Java 代码分析
C 语言代码分析
用户态 - 系统态(加锁), 而 synchronized 关键字都加锁了, 所以切换会消耗很多资源
CPU - 主存操作机制(硬件层面分析)
并发集合分析 - 对比 jdk7 和 jdk8 优化
synchronized 关键字(对象头分析)
锁升级 (轻量级 -> 自旋锁 ->偏向锁 ->重量锁)
锁膨胀(锁无法降级, 导致锁膨胀)
volatile 关键字
保证所有线程对 volatile 修饰的变量访问的可见性
当一个线程对 volatile 修饰的变量的值进行修改, 则其他线程访问的时候会得到最新的数据具体原理涉及到操作系统: 讲当前处理器缓存行的数据写回到系统内存中, 这个写回内存的操作会使在其他 CPU 里缓存了该内存地址的数据无效
ThreadLocal 共享变量使用
线程状态
线程池
线程池与队列都满了, 拒绝策略怎么定义?
Object 类默认控制线程状态函数分析
jdk8 面向函数编程
lamada 表达式
集合遍历
stream 操作 - 过滤, 合并, 遍历
创建线程
JVM
JVM 模型
方法区(类对象元信息 class-meta-info)
堆(对象)
栈(局部变量)
本地方法栈(用于 C 语言变量存储区)
静态区
代码区
GC 回收机制
java 采取分区回收机制, 针对不同区域回收无用对象
堆分区分块
年轻代
过渡区
老年代
OMM 问题产生原因
双亲委托
Java 编译器版本
设计模式学习
单例模式
可解决内存紧张问题
使用 ENUM 枚举类设计单例最佳, 其他都会出现单例规则破坏问题
破坏方法
反序列化
反射
模板方法模式
解决多业务, 一套逻辑代码即可问题
扩展性高, 测试方便, 易于排除问题
工厂方法模式
使用不多, 但是可以学一学
抽象工厂模式
框架设计使用多, 业务中使用少
框架设计中需要生产一个对象, 而对于需求的对象是不可测的, 此时这个产品对象也是抽象的, 那么这是生产的工厂也需要为抽象
适配器模式
这个模式是为了复用之前的接口, 在之前的接口增强逻辑, 为新的需求做扩展
Redis 生产环境问题(缓存穿透, 缓存雪崩问题解决)
缓存穿透
产生原因: 有人恶意通过传非正 id 查询, 缓存肯定找不到, 所以走数据库, 迟早数据库被搞挂, 导致系统瘫痪
解决方案:
缓存存储非正空数据, 控制失效时间非常短, 解决有人恶搞
业务层过滤非正 id 查询
缓存雪崩
产生原因: key 缓存时间设置基本相同, 导致一大批 key 同时失效, 导致大量请求忽略缓存层, 直接到数据库, 导致数据库挂了
解决方案:
缓存时间固定值加随机时间值
遗留问题(每个数据结构没有细致去分析)
- String(session 管理, 分布式锁, 限流)
- zset(排行榜)
- set(好友关系, 点赞)
- ...
Spring 源码阅读分析
学习解决 Spring 循环依赖问题
解决方案 - 三层缓存
新概念 - 非完美对象(个人定义的词)
Spring 的配置文件加载, 标签解析, bean 加载, bean 初始化
SpringMVC 适配器解决 Controller 扩展知识点
Spring 提供的钩子接口(这个没用到)
...
Dubbo 源码阅读分析
服务暴露 - 源码分析
服务引用 - 源码分析
Dubbo 如何整合 Spring, 运用到 Spring 的钩子接口实现工程启动服务发布与注入
SPI 机制进行框架扩展 - 源码分析
Dubbo 的集群调用链路, 以及 Mock 机制, Directory 服务路由, Router 服务过滤, 负载均衡源码分析
...
Netty 书籍阅读分析
传统 NIO 编程缺陷
Netty 风格编程优点
应用层网络传输载体 ByteBuf 类分析
自定义协议分析
Pipeline 管道线路 与 ChannelHandler 逻辑处理器分析
TCP 粘包问题产生
Netty 如何解决 拆包 与 粘包 问题(使用 Netty 的拆包类), 遗留问题就是 Netty 怎么做到拆包 - 源码分析
心跳检测机制(Netty 如何做到的 - 源码分析)
RocketMQ 中间件源码分析
...
来源: https://juejin.im/post/5c3daae7f265da612c5e1d8b