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