大纲:T31系统功能树、集合规约、并发处理
T31系统功能树梳理
用例图:关注有哪些角色,角色能够干什么?
功能树:关注有哪些大的功能模块,功能模块能够实现什么能力。
先有用例图,再有功能树。功能树是对用例图的重新聚合。
集合规约
集合是数据结构的载体
聊聊数据结构与时间复杂度
数据结构:指逻辑意义上的数据组织方式(线性结构、树结构、图结构、哈希结构)及其相应的处理方式(增删改查)
数据结构的优化与运算规模有关,也与调用频率有关
O(1)>O(logN)>O(N)>O(NlogN)>O(N^2)>O(2N)>O(N!)
HashMap的基本概念
table:存储所有节点数据的数组
slot:哈希槽。即table[I]这个位置
bucket:哈希桶。table[i]上所有元素形成的表或树的集合
ArrayList的subList结果不可强转成ArrayList
在subList场景中:
- 在subList场景中,高度注意对父集合元素的增加或删除,均会导致子列表的遍历、增加、删除产生ConcurrentModificationException异常
- 每次sublist子列表的遍历、增加、删除都会调用checkForComodification()
并发处理
- 并行:同时处理多任务的能力
- 并发:交替处理的能力
- 同一CPU不同时刻交替执行不同的方法,就是并发
- 不同CPU同一时刻执行不同的方法,就是并行
保证高并发场景下的线程安全,可以从以下四个维度考量:
数据单线程内可见;只读对象;线程安全类;同步与锁机制
锁
java中常用锁实现的方式:
- 用并发包中的锁类
- 利用同步代码块
AQS透过现象看本质
- Abstract抽象:包含tryAcquire、tryRelease等5个抽象方法,具体由子类实现;
- Queued队列:利用队列来管理竞争共享资源的多线程,这个队列是Node节点的引用虚拟实现;
- Synchronizer同步器:是一个解决多线程同步问题的工具
AQS的本质:解决多线程访问共享资源并发问题的同步管理框架(抢的是int state)
AQS的使用场景:线程同步类、线程池、线程安全Queue/List/Map
线程池的作用包括:
- 利用线程池管理并复用线程、控制最大并发数等
- 增加对线程的管理,快速排查问题(jstack)
- 实现任务线程队列缓存策略和拒绝机制
- 实现某些与时间相关的功能,如定时执行、周期执行等
- 隔离线程环境