
Java学习之路
文章平均质量分 87
记录学习过程中的问题和解决方案
sjsjsbbsbsn
这个作者很懒,什么都没留下…
展开
-
幂等处理方案学习
什么是幂等简单来说,**对于同一个系统,在同样条件下,一次请求和重复多次请求对资源的影响是一致的,就称该操作为幂等的**。比如说如果有一个接口是幂等的,当传入相同条件时,其效果必须是相同的。一般我们在系统中,幂等可能存在两种类型的问题:- 接口幂等:常说的接口防重复提交。- 消息队列幂等:如何保障消息队列客户端对相同的消息仅消费一次。原创 2024-11-06 10:01:18 · 1028 阅读 · 0 评论 -
使用Redis处理MQ消费幂等
在本方案中,通过使用 Redis 实现 MQ 消息的幂等处理,确保了消息在消费过程中只会被处理一次,避免了重复消费带来的业务异常和资源浪费。幂等性保证:使用 Redis 的来判断消息是否已被处理,确保消息在消费过程中仅被执行一次,避免重复消费的风险。通用性设计生产者代码采用通用模板,通过UUID生成消息的唯一标识messageId,并将其嵌入到消息体中,保证每条消息的唯一性。消费者代码采用幂等处理器模板,支持多种状态检查和异常处理。细化的异常处理。原创 2024-11-04 11:06:25 · 1268 阅读 · 1 评论 -
SpringAI入门:对话机器人
Spring 通过 Spring AI 项目正式启用了 AI(人工智能)生成提示功能。本文将带你了解如何在 Spring Boot 应用中集成生成式 AI,以及 Spring AI 如何与模型互动。原创 2025-04-18 14:13:50 · 796 阅读 · 0 评论 -
Java 线程中断和LockSupport
首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运。所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。其次,在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的协商机制―—中断,也即中断标识协商机制。中断只是一种协作协商机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现。原创 2025-04-09 17:00:15 · 702 阅读 · 0 评论 -
深入并发之Runnable、Callable、FutureTask原理分析
在FutureTask出现之前,Java中的多线程编程执行任务后是不能获取执行结果的,当我们需要多线程执行后的结果时则需要自己经过复杂的实现(如写到缓存或者全局变量中主线程再去读取)。而FutureTask整合了Runnable、Callable、Future三个接口,使得我们的多线程任务执行后可以异步获取到多线程的执行结果。FutureTask会将执行结束后的结果保存在成员变量:outcome中,等待获取执行结果的线程则读取outcome成员值即可。ask对象中的一个Callable成员的call。原创 2025-04-06 16:57:36 · 745 阅读 · 0 评论 -
MYSQL锁的分类
整个数据库处于只读状态 ,增删改会被阻塞通常用于数据备份如何避免全局锁?在可重复读级别下会开启一个事务,整个事务执行期间会使用这个readView。原创 2025-03-04 16:26:20 · 746 阅读 · 0 评论 -
事务的隔离级别
在数据库的并发控制中,(Transaction Isolation Level)和(Read Types)对解决并发问题至关重要。常见的并发问题包括和。不同的隔离级别和读类型使用不同的锁机制来解决这些问题。原创 2025-02-26 21:25:13 · 621 阅读 · 0 评论 -
Spring Boot集成Redis + Lua脚本实现原子性操作:小白入门指南
在分布式系统中,多个Redis命令的组合操作(如先查询后修改)可能因网络延迟、并发竞争导致数据不一致。Lua脚本可以将多个命令封装为一个原子操作,确保,避免中间状态。原创 2025-02-23 12:58:06 · 559 阅读 · 0 评论 -
Java中的锁
在并发编程中,多个线程可能会同时访问共享资源,这时就会产生线程安全问题。为了避免数据的竞争和不一致性,我们通常使用锁来控制访问共享资源的顺序。锁的实现和类型多种多样,本文将深入探讨Java中的锁的类型和应用。原创 2025-02-13 13:40:02 · 417 阅读 · 0 评论 -
学习记录-责任链模式验证参数
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求沿着一个处理链传递,直到链中的某个对象处理它。这样,发送者无需知道哪个对象将处理请求,所有的处理对象都可以尝试处理请求或将请求传递给链上的下一个对象。原创 2025-01-13 10:20:05 · 772 阅读 · 0 评论 -
ReentrantLock学习
非公平锁允许后来的线程“插队”,可能导致等待队列中的线程长期得不到执行(饥饿问题)。那么假设Tread-0线程还没有解锁,后续线程继续加锁,会变成如下图所示。中是循环,并再次尝试使用cas获取锁,如果还没有获取到所,会被挂起。来数一数,Thread-1线程竞争锁到被挂起,最多会尝试几次获取锁。方法,直到获取到锁,由于是非公平锁,有可能被其他插队的线程获取到锁。假设第一个线程没有释放掉锁,有另一个线程来竞争锁,根据上文的。那么我们假设释放锁成功,依照这幅图,他会执行。第一次进入的时候,由于前驱节点不是。原创 2024-11-20 15:41:29 · 1400 阅读 · 0 评论 -
Springboot线程池异常处理
在 Java 多线程编程中,)是一个常用的工具,用于管理线程的生命周期并提升应用程序的性能。然而,在使用线程池时,异常处理可能会被忽略,从而导致潜在的程序问题甚至崩溃。如果任务出现了异常,会发生什么呢?该怎么处理呢?怎么获取到异常信息来解决异常?想要知道如何解决,就需要了解了解线程池提交任务的两个方法execute与submit。原创 2024-11-18 10:46:37 · 1209 阅读 · 0 评论 -
项目异常的定义与处理
自定义异常在项目中非常重要,主要作用是帮助更明确地处理业务逻辑错误、增强代码的可读性和可维护性。以下几点解释了我们为什么需要自定义异常:1. **精确传达业务错误信息**:系统中可能会发生很多不同类型的异常,标准的`Exception`或`RuntimeException`等系统异常无法明确传达业务层面的错误含义。通过自定义异常`BusinessException`,我们可以为不同的业务逻辑定义具体的异常类型,便于开发者和维护者快速了解问题所在。2. **标准化错误信息**:通过`ErrorEnum`原创 2024-11-12 11:20:44 · 570 阅读 · 0 评论 -
SpringBoot集成Redis消息队列
本文介绍了如何在 Spring Boot 中集成 Redis Stream 消息队列的配置与消费逻辑,主要包括:- **消息消费配置**:通过 `StreamMessageListenerContainer` 实现消息的异步消费。配置了批量拉取的数量、阻塞超时、线程池等自定义参数,帮助提升系统的并发处理能力。- **多消费者并行处理**:通过消费者组(Consumer Group)机制,实现多消费者并行消费同一个 Stream,提高消息处理的吞吐量和效率。- **幂等性与消费确认**:通过 `Mes原创 2024-11-09 15:49:17 · 2086 阅读 · 0 评论 -
学习记录之游标翻页实现
我们在传递值的时候,不再取传递`pageNo`字段,而是传递`cursor`游标字段.`cursor`是上一次查询结果的位置,作为下一次查询的游标,由后端返回.但是游标翻页不适合跳页,只能不断的往下翻原创 2024-11-07 16:34:43 · 1145 阅读 · 0 评论 -
Java学习之雪花算法
其中:第一部分(41bit)由时间戳来组成,第二部分(10bit)由机器储存码组成,第三部分(12bit)由序列码组成。以下是用long类型变量定义时间戳,机器码,序列码,初始化时间戳(采用元年位时间戳的起始点),偏移量的初始化参数。需要注意的是:二进制的第一位0为正数1为负数,而雪花算法生成的数字都是正数默认第一位是0所以三部分共63bit。将时间戳左移22位,机器储存码左移12位后和序列码拼接就将雪花算法完成了。对于范围的定义我门直接采用1左移变量的位数-1来实现相当于2的n次方-1。原创 2024-11-05 09:23:38 · 858 阅读 · 0 评论