面试八股文,
图片很多30多M,慎点

Java
查找算法
实现
公式优化防止溢出
使用移位
排序
冒泡
冒泡实现
优化1,减少内置循环
优化2,减少冒泡次数
最终优化使用变量控制避免无效冒泡
认为最后一次交之后的元素均已达成排序条件
选择
实现
插入
实现
快速排序
单边快排
双边快排
ArrayList
扩容机制
初始容量为0
(add)扩容容量都是上一次容量的1.5倍
旧数组长+旧数组长度右移一位(除2)(addAll)
空数组时,addall 扩容 10 与 实际元素个数 之间的较大值
非空数组时,addall 扩容 1.5倍原容量 与 实际元素个数 之间的较大值
迭代器
fail-fast 不允许在便利时修改list,
若修改则会使迭代器立即报错fail-safe 允许并发修改list,但会牺牲一致性
添加新元素的时候会复制一边数组,读写分离
LinkedList
读取
arrylist 实现了 RandomAccess 接口
所以可以直接可以使用get 获取元素, 效率比(LinkedList 沿着链表遍历找值 )高增删
arrylist 增删会导致数据移动效率会降低,头尾插入没有问题
LinkedList 只有头尾性能高空间占用
arrylist 因为局部性原理,可以避免频繁的内存与缓存的读写
HashMap
单例
并发
常识
sleep | wait
lock | synchronize
volatile
悲观锁,乐观锁
Hashtable | ConcurrentHashMap
ThreadLocal
JVM
内存结构
JVM内存参数
垃圾回收
垃圾回收 | GC
三色标记
并发漏标
内存溢出
双亲委派
四种 引用对象
finalize
Java面向对象有哪些特征
继承、封装、多态、
ArrayList和LinkedList有什么区别
- 一个数组,一个链表
- 插入、删除、访问
Java中抽象类和接口有什么区别
- 语义区别
- 抽象类是一个抽象的概念:动物、食物、
- 接口是一个共同事物的共同特征:会飞的、会发光的、
高并发的集合有哪些问题
- 第一代,默认线程安全,效率很低
- 第二代,非线程安全,ArrayList、HashMap,线程不安全但是效率比较高
- 第三代,线程安全集合类。。。。。。