自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 缓存三大问题:雪崩、击穿、穿透(核心区别 + 解决方案总结)

大量缓存 Key 在。

2025-08-16 19:56:22 487

原创 mybitsplus和mybits的区别

【代码】mybitsplus和mybits的区别。

2025-08-16 07:15:13 207

原创 MySQL事务隔离级别详解

隔离级别脏读不可重复读幻读性能适用场景读未提交(RU)可能可能可能最高极少使用读已提交(RC)不可能可能可能较高并发要求高,一致性要求低可重复读(RR)不可能不可能不可能中等大多数业务(MySQL 默认)串行化不可能不可能不可能最低极高一致性场景。

2025-08-14 21:26:54 452

原创 Mysql底层的锁机制

MySQL 中最常用的存储引擎是(支持事务和行级锁)在日常开发中,mysql默认用的是行级锁:执行增删改()或带锁的查询()时,InnoDB 会自动加行级锁。排他锁(x锁):执行增删改(会加 S 锁,允许其他线程加 S 锁(共同读),但阻止加 X 锁(修改)。

2025-08-14 18:19:54 173

原创 WebSocket vs SSE:核心区别对比

2025-08-14 15:33:22 137

原创 Mvcc是如何实现的

当事务修改数据时,旧数据会被复制到 undo 日志中,成为历史版本。新数据写入表中,同时更新 DB_TRX_ID(当前事务 ID)和 DB_ROLL_PTR(指向 undo 日志中的旧版本)。这样一行数据就有了多个版本,通过回滚指针串联成‘版本链’。:事务查询时,数据库会生成一个 Read View,记录当前活跃的事务 ID(未提交的事务)。“MVCC 的实现依赖三个关键机制:隐藏列、undo 日志和 Read View。

2025-08-13 14:45:18 237

原创 产生死锁的条件以及如何破解

资源只能被一个线程占用(如一把锁只能被一个线程持有),其他线程只能等待。例:线程 A 持有锁 1,线程 B 无法同时持有锁 1,只能等待。线程已经持有至少一个资源,又提出新的资源请求,而新资源被其他线程持有,此时线程不会释放已持有的资源,继续等待。例:线程 A 持有锁 1,又想获取线程 B 持有的锁 2,同时不释放锁 1。线程已持有的资源不能被强制剥夺,只能由线程主动释放。例:线程 A 持有锁 1,线程 B 不能强行夺走锁 1,只能等线程 A 主动释放。

2025-08-13 12:10:50 832

原创 CompletableFuture用法

是 Java 8 引入的一个强大工具,用于处理异步编程,它不仅能像Future那样获取异步任务的结果,还支持链式调用、组合多个异步任务、处理异常等复杂操作,让异步代码更简洁、易维护。

2025-08-13 09:38:34 534

原创 线程池发生线程异常,销毁还是复用

如果用的execute()提交的任务,会直接终止线程,打印错误日志,然后新创建一个线程。在这种情况下,线程不会因为异常而终止,它会继续存在于线程池中,准备执行后续的任务。方法时,可以捕获到一个。

2025-08-13 08:28:26 153

原创 线程池处理任务的流程

2025-08-13 08:22:55 126

原创 如何跨线程传递ThreadLocal

无论哪种方式,都要注意子线程执行后需调用。清除数据,避免内存泄漏和数据污染。

2025-08-12 23:23:50 341

原创 ThreadLocal 的内存泄漏的原因和解决办法

因强引用无法释放,尤其在线程池场景下会累积泄漏。解决办法很简单,就是使用完。

2025-08-12 23:12:41 386

原创 ThreadLocal的原理和用法

ThreadLocal核心是本地存储,核心作用是线程隔离get()remove()底层原理是每一个线程都有自己的专属map。

2025-08-12 22:43:15 164

原创 悲观锁和乐观锁

悲观锁:悲观锁的核心是 “”,其他线程看到标签就会等待。想最坏的情况,所以说只能一个一个线程进行,并发差加锁的方式分为隐式加锁和显式加锁。

2025-08-12 21:42:02 249

原创 线程的生命周期和状态

TIME_WAITING:超时等待状态,可以在指定的时间后自行返回而不是像 WAITING 那样一直等待。WAITING:等待状态,表示该线程需要等待其他线程做出一些特定动作(通知或中断)。TERMINATED:终止状态,表示该线程已经运行完毕。RUNNABLE: 运行状态,线程被调用了。初始时期:线程还没有start。阻塞状态:需要等到锁释放。

2025-08-12 18:07:23 164

原创 hashmap底层的理解

数组的容量是2的幂次方的16,32...这样方便计算,当我有数据放进来,首先是根据数据的名字计算哈希值,根据哈希值算出来你应该放到哪一个数组里面,然后可能有可能多个数据都放到一个数组里面,这个就叫做哈希碰撞,多的话也不怕,首先会形成链表,如果说桶的数量超过8,而且数组的长度超过64的时候,链表就会优化成为红黑树,在就是说,如果数组的里面的内容超过了百分之75,就会成2的倍数增长,未来的话,保护线程安全由ConcurrentHashMap通过分段锁来看管。

2025-08-12 16:21:51 197

原创 fail-fast和fail-safe

fail-fast是 “及时报错” 机制,通过检测modCount快速发现并发修改,适用于单线程或已知无并发修改的场景,优点是轻量高效,缺点是不允许迭代中修改集合。fail-safe是 “快照迭代” 机制,通过复制数据避免迭代受修改影响,适用于多线程并发修改的场景,优点是迭代安全无异常,缺点是内存开销大且可能读取旧数据。选择哪种机制取决于场景:单线程优先用fail-fast集合(如ArrayList),多线程并发修改则需用fail-safe并发集合(如。

2025-08-12 14:05:41 260

原创 反射的解释和用法总结

反射是java提供的一种动态获取和操作类信息的机制,就是说,在代码的编译期,不知道代码源码的情况下,然后在代码的运行时期,通过.class文件获取类信息,然后动态创建对象和方法或者修改字段” 获取类里面的方法,构造器。:用反射将数据库查询结果映射到 Java 对象的字段(不管字段是公有还是私有);)的生效,都依赖反射在运行时扫描并处理注解标记的类或方法。等注解的类,动态创建 Bean,并通过。调用任意构造器(包括私有构造,需用。即使不知道方法名,也能通过。:所有自定义注解(如。

2025-08-11 22:14:14 362

原创 浅拷贝、深拷贝、引用拷贝:

2025-08-11 15:28:22 112

原创 成员变量和局部变量的区别?

代码块执行结束后,局部变量立即被销毁,释放内存。

2025-08-11 11:02:20 265

原创 BigDecimal是怎么避免精度丢失的?

无法用有限的二进制位数精确表示,只能存储近似值,从而导致精度丢失。,它们的存储和运算基于二进制(基数为 2)。但很多十进制小数(如。BigDecimal是通过整数+标度来存储的。

2025-08-11 10:39:29 305

原创 Integer 缓存机制(IntegerCache)

/ 确保最大值不超过 Integer.MAX_VALUE - (-low) -1。// 缓存数组,存储Integer对象。// 缓存的最小值(固定不可变)// 计算缓存数组大小。// 缓存的最大值(可配置)// 依次创建并存储。private IntegerCache() {} // 私有构造方法,禁止实例化。// 3. 填充缓存数组:创建从 low 到 high 的所有整数对象。// 1. 设置缓存的最大值(默认127,可通过系统属性修改)// 赋值给缓存数组。// 2. 初始化缓存数组。

2025-08-11 10:33:59 401

原创 什么是Redis缓存雪崩?如何解决?

指的是在高并发的情况下,

2025-04-21 21:57:11 1799

原创 2. 什么是Redis缓存击穿?如何解决?

缓存击穿是指在高并发场景下,当一个热点数据的缓存失效(例如过期),并且该数据刚好被多个请求同时访问时,由于没有及时被更新到缓存中,所有请求都直接查询数据库,造成数据库的访问压力剧增,可能导致数据库的性能问题。

2025-04-21 19:49:53 768

原创 Redis缓存相关的10道面试题

解释什么是缓存穿透,为什么会发生?解决方案:布隆过滤器、缓存空对象等。

2025-04-21 19:36:06 566

原创 1. 什么是Redis缓存穿透?如何解决?(redis面试题)

缓存穿透是指当用户请求的数据,既不在。

2025-04-21 19:35:15 219

原创 缓存击穿问题

一般用逻辑过期,查数据的时候,因为主要还是在查数据库写入新的缓存的时候时间比较耗时,所以单开一个线程,当这个查询和更新线程没结束,返回的就是老的数据,省去了很多时间,所以说效率高,但是数据的一致性欠缺。的key突然失效了,无数的访问会在瞬间给数据库带来巨大的压力,主要还是出现在高并发的的时候。1.互斥锁(性能比较差),因为当多个线程的时候,只有一个线程能工作,其他的只能等着。2.逻辑过期,在传入redis的时候传入一个逻辑的过期时间。缓存击穿问题也叫热点Key问题,就是一个被。

2025-04-21 15:55:40 144

原创 缓存雪崩问题的原理和解决方案

出现的原因主要是当redis的缓存失效或者宕机的时候,大量的请求会打入数据库,导致雪崩。1.给不同的key的TTL添加随机值(在预热的时候,把缓存时间设为随机数)2.利用redis集群提高服务的可用性(宕机的时候有用,保证高可用性)3.给缓存业务添加降级限流策略(当一整个redis集群全部挂掉的时候)4.给业务添加多级缓存(多个层面进行缓存,相当于防弹衣)

2025-04-21 15:16:36 180

原创 redis缓存穿透问题的解决

而在这个更新请求中,先查数据库,然后再进行redis的缓存处理,可以避免多线程问题带来的影响.主要是指有人查一个数据库里也没有、缓存里也没有的 key,不断打爆你的数据库。这个问题一般在查询场景才需要专门处理,//缺点:短暂不一致性和内存压力。1.查 Redis 没有。

2025-04-21 14:52:12 231

空空如也

空空如也

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

TA关注的人

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