摘要:
1 之前的分布式锁toy存在以下问题 1.1 分布式锁不可重入: 不可重入是指同一线程不能重复获取同一把锁。 比如,方法A中调用方法B,方法A需要获取分布式锁,方法B同样需要获取分布式锁, 线程1进入方法A获取了一次锁,进入方法B又获取一次锁,由于锁不可重入,所以就会导致死锁 1.2 分布式锁不可重 阅读全文
posted @ 2025-04-23 18:44
kuki'
阅读(139)
评论(0)
推荐(0)
摘要:
1 思路解析 用户 → seckillVoucher() ↓ [Redis Lua 脚本校验库存和下单资格] ↓ 通过? → 否:返回失败信息 ↓ 是:发送订单消息到 Kafka 后台 → Kafka 消费线程 ← 订单消息 ↓ 调用 createVoucherOrder() ↓ 更新数据库(扣减库 阅读全文
posted @ 2025-04-23 18:19
kuki'
阅读(316)
评论(0)
推荐(0)
摘要:
此坑不补了,直接用redisson 阅读全文
posted @ 2025-04-23 17:39
kuki'
阅读(16)
评论(0)
推荐(0)
摘要:
超时重传 其原理是在发送某个数据后开启一个计时器,如果在一定时间内没有得到发送数据报的 ACK 报文,就重新发送数据,直到发送成功为止。 重传包括超时重传、快速重传、带选择确认的重传(SACK)和重复 SACK 四种。 快速重传 TCP 还有另外⼀种快速重传(Fast Retransmit)机制,它 阅读全文
posted @ 2025-04-23 15:24
kuki'
阅读(20)
评论(0)
推荐(0)
摘要:
②、序列号/确认机制: TCP 将数据分成多个小段,每段数据都有唯一的序列号,以确保数据包的顺序传输和完整性。同时,发送方如果没有收到接收方的确认应答,会重传数据。 ④、超时重传: 如果发送方发送的数据包超过了最大生存时间,接收方还没有收到,发送方会重传数据包以保证丢失数据重新传输。 阅读全文
posted @ 2025-04-23 14:50
kuki'
阅读(79)
评论(0)
推荐(0)
摘要:
TCP 三次握手吗? TCP 首先通过三次握手和四次挥手来保证连接的可靠性 阅读全文
posted @ 2025-04-23 14:46
kuki'
阅读(13)
评论(0)
推荐(0)
摘要:
TCP 是面向连接的,而 UDP 是无连接的。 阅读全文
posted @ 2025-04-23 14:41
kuki'
阅读(10)
评论(0)
推荐(0)
摘要:
https://javabetter.cn/sidebar/sanfene/network.html#_25-tcp-握手为什么是三次-为什么不能是两次-不能是四次 为什么 TCP 握手不能是两次? 为了防止服务器一直等,等到黄花菜都凉了。 为了防止客户端已经失效的连接请求突然又传送到了服务器。 阅读全文
posted @ 2025-04-23 14:38
kuki'
阅读(15)
评论(0)
推荐(0)
摘要:
①、第一次握手:SYN(最开始都是 CLOSE,之后服务器进入 LISTEN) 发起连接:客户端发送一个 TCP 报文段到服务器。这个报文段的头部中,SYN 位被设置为 1,表明这是一个连接请求。同时,客户端会随机选择一个序列号(Sequence Number),假设为 x,发送给服务器。 目的:客 阅读全文
posted @ 2025-04-23 14:27
kuki'
阅读(31)
评论(0)
推荐(0)
摘要:
问题 那不同的业务,就是我们大家用不同的业务,可能会共用同一个RabbitMQ组件,不同的业务之间是怎么区分的?他这个消息是谁去消费的?就我发的消息,谁去消费,谁不消费? 回答Demo 在 RabbitMQ 中,不同业务之间的区分主要依赖于 Exchange(交换机)、Queue(队列) 和 Rou 阅读全文
posted @ 2025-04-23 13:41
kuki'
阅读(53)
评论(0)
推荐(0)
摘要:
消息队列是什么 你可以把消息队列理解为一个使用队列来通信的组件。它的本质,就是个转发器,包含发消息、存消息、消费消息的过程。最简单的消息队列模型如下: 作用 ①、解耦 生产者将消息放入队列,消费者从队列中取出消息,这样一来,生产者和消费者之间就不需要直接通信,生产者只管生产消息,消费者只管消费消息, 阅读全文
posted @ 2025-04-23 13:21
kuki'
阅读(38)
评论(0)
推荐(0)
摘要:
了解。Java 堆被划分为新生代和老年代两个区域。 新生代又被划分为 Eden 空间和两个 Survivor 空间(From 和 To)。 新创建的对象会被分配到 Eden 空间。当 Eden 区填满时,会触发一次 Minor GC,清除不再使用的对象。存活下来的对象会从 Eden 区移动到 Sur 阅读全文
posted @ 2025-04-23 13:06
kuki'
阅读(19)
评论(0)
推荐(0)
摘要:
Java 通过可达性分析算法来判断一个对象是否还存活。 通过一组名为 “GC Roots” 的根对象,进行递归扫描,无法从根对象到达的对象就是“垃圾”,可以被回收。 这也是 G1、CMS 等主流垃圾收集器使用的主要算法。 什么是引用计数法? 每个对象有一个引用计数器,记录引用它的次数。当计数器为零时 阅读全文
posted @ 2025-04-23 12:55
kuki'
阅读(17)
评论(0)
推荐(0)
摘要:
垃圾回收是什么 垃圾回收就是对内存堆中已经死亡的或者长时间没有使用的对象进行清除或回收。 JVM 在做 GC 之前,会先搞清楚什么是垃圾,什么不是垃圾,通常会通过可达性分析算法来判断对象是否存活。 Java 的垃圾回收过程主要分为 标记存活对象、 清除无用对象、 以及内存压缩/整理三个阶段。 不同的 阅读全文
posted @ 2025-04-23 12:50
kuki'
阅读(11)
评论(0)
推荐(0)
摘要:
导致原因 ThreadLocalMap 的 Key 是 弱引用,但 Value 是强引用。 如果一个线程一直在运行,并且 value 一直指向某个强引用对象,那么这个对象就不会被回收,从而导致内存泄漏。 怎么解决 很简单,使用完 ThreadLocal 后,及时调用 remove() 方法释放内存空 阅读全文
posted @ 2025-04-23 12:41
kuki'
阅读(10)
评论(0)
推荐(0)
摘要:
强引用 我先说一下强引用,比如 User user = new User("沉默王二") 中,user 就是一个强引用,new User("沉默王二") 就是强引用对象。 当 user 被置为 null 时(user = null),new User("沉默王二") 对象就会被垃圾回收;否则即便是内 阅读全文
posted @ 2025-04-23 12:22
kuki'
阅读(18)
评论(0)
推荐(0)
摘要:
1 问题 对ThreadLocal怎么理解的,它有哪些特性?又有哪些需要注意的地方。 为什么会有内存泄漏 2 ThreadLocal 是什么? ThreadLocal 是一种用于实现线程局部变量的工具类。 它允许每个线程都拥有自己的独立副本,从而实现线程隔离。 使用 ThreadLocal 通常分为 阅读全文
posted @ 2025-04-23 11:13
kuki'
阅读(16)
评论(0)
推荐(0)

浙公网安备 33010602011771号