### HashMap
> 主体是一个数组 Node<K,V>[] table, 每个元素初始是一个Node, [链表方式 / 红黑树]
#### key hash计算方法
> 高16位与低16位的异或(相同为0,不同为1): hash ^ hash >>> 16
#### 保存方法
> HashMap可以接受null键值和值, hash取模计算bucket: (length - 1) & hash
#### hash碰撞
> 如果hash相同,必须要通过== 或者 equals 比较值,
> 如果值不同,如果是链表,直接放到后面即可
> 如果是红黑树,还需要需要调用*System.identityHashCode*计算未重写的hash值进行比较,来找到在红黑树的位置
> 所以使用值对象,应为是final类,所以hashCode方法不能被重写,不易发生hash碰撞
#### 变换存储结构
> 当单个节点的存储数量超过8个的时候会触发转化为红黑树(前提是map的size 大于64,如果是小于64的,会优先扩容)
#### 扩容
> 由于扩容一定是 * 2的方式,所以原来的每个值,要么还在当前节点,要么在节点+length的位置.
- 虚拟机
- JVM内存结构
- JVM调优手段
- java对象生命周期
- 垃圾回收判断对象死亡
- 垃圾回收算法
- 垃圾收集器
- JAVA基础知识
- java事件机制
- java反射机制
- jvm创建对象
- java异常
- finally语句一定会执行吗?
- 集合类介绍
- ArrayList
- LinkedList
- HashMap
- ConcurrentHashMap
- 多线程
- 为什么要使用线程池
- 线程死锁
- 死锁检测和解除
- jstack
- jconsole
- 死锁预防
- 常见线程池
- 线程池参数
- 工作队列介绍
- 拒绝策略
- ThreadLocal
- CAS
- ReentrantLock
- AQS
- CountDownLatch
- Spring
- spring中bean的作用域
- REDIS
- redis数据结构
- redis hash实现
- redis rehash与hashmap扩容的区别
- Redis使用场景
- Redis为何这么快
- redis连接数不足导致错误
- 分布式
- 分布式事务
- ACID
- CAP
- BASE
- 事务隔离性
- 一致性哈希算法
- 负载均衡算法
- Hystrix 信号量和线程池隔离的差异
- Spring Cloud
- eureka
- MYSQL
- mysql优化经验
- undo redo binlog
- web
- http协议
- http和https区别
- Cookie和session
- TCP三次握手、4次挥手
- TCP的time_wait和close_wait
- 算法问题
- 编辑距离算法
- MQ
- RabbitMq
- Kafka
- 安装教程
- Win ELK安装