1.volatile的底层:
volatile是轻量级的synchronized
一个变量使用volatile修饰,则素有线程中该变量一致
volatile
1.保证可见性,不保证原子性
2.禁止指令重排
用volatile对变量写操作不依赖当前值,该变量没有包含在具有其他变量的不变式中
2.java中常用的垃圾收集算法
1.标记-清除:先标记出所回收对象,在标记完成后统一回收标记内容
2.复制算法:将可用的内存分成2块,每次只用一块,在该内存用完后,将存活对象复制到另一块上,用过的内存空间一次清理
3.标记-整理:标记后向一段移动,在移动中,清除可回收对象.
4.分代收集:根据内存中对象存活周期不同,java分成新生与中年代
新创建在新生代分配,当新生分配几次后,仍存活移到年老代,大对象无法穿件直接在年老代
3.java垃圾回收器
串行:parNew,gc垃圾回收期
并行:pararlled,paralled old cms收集器
hash方向
Entry为hashmap内部表。key-value;
hash方法:计算hash值
如何解决hash冲突
1.开放定址:线性探测再散列,顺序查看下一单元,知道找出一个单元或查遍全表
2.二次探测再散列:在表的左右跳跃或探测
3.再哈希法:增加时间,再次调用hashcode();
4.链地址法:将所有地址为i的存入一个单链表,单指针存入哈希表
5.建立公共溢出区:凡和基本表冲突,一律填入溢出表
线程池方向
java.util.concurrent.Exectors提供java.util.concurrent.Exector接口用于创建线程池,解决cpu单元多个线程执行的问题
T1创建线程,T2线程中执行时间,T3销毁线程时间
T1+T3远大于T2采用线程池
线程池的四个基本组成部分:
1.线程池管理器:用于创建并管理线程池,exclute:创建线程池.销毁,添加新任务
2.工作线程
3.任务接口
4 任务队列
new cocheThreadExecutor:可缓存线程池
java面试题(二)
最新推荐文章于 2023-02-08 16:43:58 发布