Java
2021-10-15 17:01:41 0 举报
AI智能生成
java 基础
作者其他创作
大纲/内容
实现原理
锁升级流程
与Reentrantlock的区别
保证了原子性和可见性
与Object的wait方法与signal方法配合使用的条件队列
synchronized
底层原理:cas
AtomicInteger
AtomicLong
相比AtomicLong,降低了并发竞争烈度
通过追加列表方法,降低了并发竞争程度
LongAdder
原子类
用了模板方法模式
等待队列
抢锁流程
条件队列
AQS
作用
原理
Thread类里的ThreadLocalMap如何解决hash冲突
为何会出现内存泄露
ThreadLocal
有序性、可见性如何保证
volatile
数据结构,比起1.7的分段锁优化在哪
ConcurrentHashMap
常驻线程池的线程数量
核心线程数
最多允许创建线程数量
最大线程数
非核心线程空闲等待任务最长时长,超时销毁
等待时间
时间单位
核心线程无空闲时任务等待队列,队列满,则创建非核心线程执行
无可供使用线程,队列满,则执行相应的拒绝策略处理任务
丢任务抛异常
丢任务不抛异常
任务交还提交任务线程处理
丢弃队列最前面任务,重新提交
四种策略
拒绝策略
线程工厂
核心参数,各自作用
实现流程
running
shutdown
stop
tidying
terminated
有什么状态
统一创建,节约创建、销毁时间开销
避免无节制创建导致资源耗尽
提供资源调度
提供功能扩张:定时、延时等
资源池化思想
作用
ThreadPoolExecutor
如何基于AQS实现读写锁
ReentrantReadWriteLock
如何基于AQS实现公平锁和非公平锁
ReentrantLock
并发编程
JMM
堆
程序计数器
虚拟机栈
方法区
字符串常量池
本地方法栈
运行时数据区
垃圾回收算法
垃圾回收器
垃圾可回收判断
垃圾回收
优先分配年轻代
大对象直接进老年代
存活年龄达到要求升级老年代
年轻代内存不足以分配,触发内存担保机制,存入老年代
年轻代某年龄存活对象数量占半,则大于该年龄对象升级老年代
内存分配策略
强引用
软引用
弱引用
虚引用
四大引用类型
1. 加载
校验加载内容正确性、安全性
2.验证
为 类变量分配空间
3.准备
将符号引用转直接引用
4. 解析
对类变量,静态代码块执行初始化操作
5. 初始化
6. 使用
7. 卸载
类生命周期
连接
类加载器
破坏双亲委派模型
双亲委派模型
类加载机制
-xms 初始化堆大小
-xmx 最大堆大小
常见JVM参数
常见问题及排查&解决思路
JVM
jstate
jps
jmap
JDK常用工具
反射
专用接口优于通用接口,职责单一在接口上的体现
接口隔离
使用父类的地方能替换为子类,保证父子类功能逻辑一致
里氏替换
一个类和接口只有一个职责,专门的人做专门的事
职责单一
面向扩展开放、面向修改关闭
开闭原则
与其他类的互动越少越好
最少知道
面向接口开发,面向抽象开发
依赖倒置
设计原则
都是数组加链表,数组容量大于64,且链表长度大于等于8则链表转红黑树
1.7扩容头插法,1.8扩容尾插发。头插法并发扩容会可能导致死循环
底层数据结构(1.7和1.8的区别)
hashcode 与 数组长度取模,由于是2的幂次方,可以用与运算替代,性能更高
扩容,数组为原数组两倍。由于长度为2的幂次方,所以键值对要么在原下标,要么在原下标+原数组长度
如何定位?如何扩容?
定位方法为取模,容量为2的幂次方可用位运算替代,更快
同时由于是2的幂次方,扩容方便
为何容量要求为2的幂次方
线程安全吗
数组空间利用率越高则哈希冲突率越高,何时扩容需在这两者间取得折中,而满足泊松分布的0.75就是折中的结果
加载因子为何默认是0.75
什么时候转红黑,什么时候转链表
equals和hashcode方法为何要求实现
HashTable 用过方法级的Synchronized保证了线程安全,目前已被淘汰
与HashTable的关系
HashMap
底层数据结构
扩容
初始容量
ArrayList
与ArrayList的区别
LinkedList
基于HashMap
作用,去重集合
HashSet
底层都是char数组
String不可变,线程安全
StringBuilder和StringBuffer可变
StringBuffer通过synchronized保证线程安全
String、StringBuilder、StringBuffer区别
-127~128的缓存对象
毕竟相等不能直接用==要用equals
Interger
Long
Double
包装类
BigDecimal
JDK常用类
观察者模式
工厂模式
单例模式
策略模式
责任链模式
门面模式
代理模式
设计模式
整型,4字节,取值范围:正负20亿
int
整型、8字节
long
浮点数、8字节
double
浮点数、4字节
float
boolean
2字节
char
1字节
byte
特殊的对象
数组
默认为null内部通过char数组存储字符串,创建后不可变。在堆中字符串常量池缓存着 String 对象
String
数据类型
Java
高内聚、低耦合;找出变化、隔离变化的体现
0 条评论
回复 删除
下一页