- 用例图和功能树和部署图
- 集合规约
- 集合框架图
- 数据结构与时间复杂度
- HashMap
- 基本存储概念
- 哈希算法
- Collectors.toMap
- ArrayList的subList结果不可强转成ArrayList
- 并发处理
- 线程安全
- 锁
- AQS
- 线程与线程池
用例图:关注哪些角色,角色能够干什么
功能树:关注有哪些强大的功能模块,功能模块能够实现什么能力
部署图:关注部署元素,微服务、数据库;关注部署关联元素,注册中心,消息中间件
数据组织方式:线性结构、树结构、图结构、哈希结构
数据处理方式:CRUD
时间复杂度排序
table: 存储所有节点数据的数组
slot: 哈希槽。即table[i]这个位置
bucket: 哈希桶。table[i]上所有元素形成的表或树的集合
HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含Node内部类(Node实现Entry接口)
分配存储空间:通过二进制运算找寻最左边的1的位置(用到二分思想)
哈希槽(table[i])i的确定:(n-1)&hash
hash值确定(高低位异或):key.hashCode()^(h>>>16)
hashmap节点添加:
还要注意merge方法中的value的NPE
原因:从代码结构查看
subList的使用场景注意
并行:同时处理多任务的能力
并发:某个时间段内,多任务交替处理的能力
在多线程环境下才出现,单线程串行执行不存在
考量:数据单线程内可见、只读对象、线程安全类、同步与锁机制
- Abstract 抽象: 包含 tryAcquire、tryRelease 等 5 个抽象方法,具体由子类实现;
- Queued 队列: 利用队列来管理竞争共享资源的多线程,这个队列是 Node 节点的引用虚拟实现;
- Synchronizer 同步器:是一个解决多线程同步问题的工具;
AQS同步器:
Lock、AQS与AOS的关系
程序=数据结构+算法
AQS同步队列
AQS通过CLH机制来管理Node节点的先来后到,其中依据Node对象的next、prev串起来的一个双向的同步队列
AQS独占模式下的同步队列
线程状态转换
线程池操作
线程池作用
- 利用线程池管理并复用线程、控制最大并发数等
- 增加对线程的管理、快速排查问题
- 实现任务线程队列缓存策略和拒绝机制
- 实现某些与时间相关的功能、如定时执行、周期执行
- 隔离线程环境
比如,交易服务和搜索服务在同一条服务器上,分别开启两个线程池。配置独立的线程池,避免服务线程相互影响。
线程池类图



