其他分享
首页 > 其他分享> > 常识小知识点

常识小知识点

作者:互联网

ArraryList 和 Vector区别

Vector有synchronized保证线程安全

HashMap

1.8后 数组+链表+红黑树(链表长度超过八之后改红黑树)
线程不安全 并发环境最好不要使用ConcurrentHashMap代替
预估大小 避免频繁扩容 消耗内存
size一定为2的n次幂 这样可以使产生的hashCode值与运算后产生的index值分布更加均匀(2的n次幂&hash 全一与运算 减少了很多hash碰撞)
put
1.对key的hashCode()做hash运算,计算index;
2.如果没碰撞直接放到bucket⾥;
3.如果碰撞了,以链表的形式存在buckets后;
4.如果碰撞导致链表过⻓(⼤于等于TREEIFY_THRESHOLD),就把链表转换成红⿊树(JDK1.8中的改动);
5.如果节点已经存在就替换old value(保证key的唯⼀性)
6.如果bucket满了(超过load factor*current capacity),就要resize
get
1.对key的hashCode()做hash运算,计算index;
2.如果在bucket⾥的第⼀个节点⾥直接命中,则直接返回
3.如果有冲突,则通过key.equals(k)去查找对应的Entry
4.若为树,则在树中通过key.equals(k)查找O(logn);
5.若为链表,则在链表中通过key.equals(k)查找,O(n)。

HashMap,HashTable,ConcurrentHashMap

HashMap key和value都可以为null
HashTable key和value都不可以不为null
ConcurrernHsahMap 添加了synchronized锁

缓存穿透

请求非法数据:缓存中没有数据 数据区也没有数据
解决方法:前后端校验 空值缓存(时间较短) 哈希校验 布龙过滤器

缓存击穿

大量请求(同一个key) 同时请求数据库
解决方法:保证当缓存失效时候 不让大量请求访问到数据库 分布式锁 只放一个请求进去 热点数据不过去 二级缓存

缓存雪崩

缓存失效(不同的key) 大量请求到数据库
缓存时间随机(避免不同缓存同时失效) 上锁

标签:知识点,缓存,hash,请求,常识,链表,key,HashMap
来源: https://blog.csdn.net/qq_44407005/article/details/120783554