自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 收藏
  • 关注

原创 如何排查索引效果,expalin结果中常见字段及其取值的含义

MySQL索引并不总是生效,当表较小时可能采用全表扫描。通过EXPLAIN分析执行计划可排查索引效果,重点关注:type字段:最优为system/const,最差为all(全表扫描)key字段:显示实际使用的索引key_len:表示索引使用长度rows:预估扫描行数常见访问类型包括:const(主键查询)、ref(非唯一索引)、range(索引范围)、all(无索引)等。优化时应避免出现all和index类型查询。

2025-05-29 22:35:53 196

原创 04 Redis与mysql数据库数据一致性问题解决方案

以上是经典的双删,还可以再第二种更新策略之上,再加一次监听binlog,删除缓存,也就是,先更新数据库,再删缓存,监听,再删,这种策略同样能保证最终一致性,但是出问题的概率,略高于经典双删(都不加锁的情况下),因为多了一个,更新数据库之前,旧数据回填的风险。另外,若数据库采用了主从模式,因为主从同步有延迟,可能会有线程去从库读取旧数据,回填到缓存(出现概率比第一种低很多)删除缓存后,其他线程,读取旧数据,回填到了缓存中,无法保证最终一致性。3. 先删除缓存,再更新数据库,间隔一段时间,再删缓存。

2025-05-17 21:23:26 419

原创 003 CopyOnWriteArrayList如何保证线程安全的以及适合的场景

修饰变量(volatile后续细说),使该变量所有线程可见,即修改会立即看到,写入时,会复制一份原数组,在新数组之上修改,这样不会影响到原数组,同时使用volatile关键字修饰elements数组,使写操作对elements数组引用的修改,所有线程可见。对于读操作,不加锁,读操作操作的是elements数组,这个数组内部是稳定的,不会被修改,所有修改操作,都是复制一份新的数组,在新的数组上进行修改,所以读操作是线程安全的。的场景,因为读没有锁,而写需要加锁并且,需要复制一份element数组。

2025-05-17 01:36:17 155

原创 学习记录02

存入元素时,如果目标位置上已经有了元素,会判断key是否相等,相等就直接覆盖,不相等就向后插入,链表长度大于8就会将链表转为红黑树,提升查询性能,小于6就会再转为链表,降低维护成本。当n为2的m次方倍时,(n - 1) & hash == hash % n,而%运算很慢,始终确保HashMap的Capacity 为2的m次方倍,可以用这个属性来提高计算速度,并且可以让元素分布更均匀 2^n - 1后的二进制表现形式,后n 位都是1,相比于有0的情况,元素分布更均匀。2. 根据实际业务,调整负载因子。

2025-05-17 01:33:03 691

原创 学习记录001

1. arraylist默认初始容量为10,容量不够会扩容为旧容量的1.5倍,扩容通过Arrays.copeOf实现,需要将旧数组的内容拷贝到新数组,非常耗时,所以已知可能需要多大容量时,直接初始化时指定容量,避免频繁扩容。计算需要的容量,会判断是不是默认容量初始化的,如果是,要保证扩容后空间为默认初始容量和当前所需容量较大的一个。范围检查,确保容量充足,将index之后的都向后移动一位,插入,size++;是直接将数组的引言赋值给底层数组,所以对原来数组的修改,会影响到list。底层使用数组实现,适合。

2025-05-17 01:31:16 494

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除