2018-个人年度技术总结及清单
技术深度改造
- 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
中间件源码分析
- ...
- 2019-年度展望
-
RocketMQ源码分析
-解决生产上问题所需 -
Dubbo源码继续分析
-学习更多框架设计模式和完成业务需求 -
Spring源码
-业务所需 -
Netty源码
-网络通信 -
Java基础
-必不可少的学习 -
ElaticSearch
搜索引擎-新知识点 -
Elatic-Job
定时任务框架-新知识点