- 博客(363)
- 资源 (22)
- 收藏
- 关注
原创 【实操】SpringAI+通义大模型带你撸一个前后端分离智能助手项目!
本文是学习徐庶老师的一个SpringAI+通义大模型课程,所做的一个资料实现,感谢徐庶老师的分享!SpringAI+通义大模型带你撸一个前后端分离智能助手项目JDK17+、Node.js 18+、阿里通义大模型api_key(免费)2、主启动类SpringAiDemoApplication3、控制层BookingController和OpenAiControllerBookingControllerOpenAiController4、服务层FlightBookingService和Booking
2025-11-15 16:30:04
619
原创 利用CountDownLatch批量处理解决实际业务问题
项目中发现针对批量网元回退时候,会出现性能问题,接口响应很慢。发现性能瓶颈在于数据规模比较大,SQL执行无性能问题,因此特意采用CountDownLatch多线程处理,提高接口响应速度。
2025-10-01 16:09:18
236
原创 【分页处理工具类】
分页处理工具类主要用于分批解析查询的List<?>数据,防止一次性加载到内存中,引发OOM问题。今天分享一个自定义批处理工具类,欢迎使用。
2025-09-27 16:29:58
166
原创 通过内存去重替换SQL中distinct,优化SQL查询效率
运维同事收到了生产环境的一条慢SQL告警,执行时间达到了10+秒,分析了业务场景,属于正常查询业务,而且SQL语句是上个版本新增的需求,于是在慧眼上,将SQL链路截图发给了开发进行修复。
2025-09-13 15:49:22
271
原创 滥用Mybatis一级缓存引发OOM问题
查询服务器日志,代码中有分页执行的日志,但是在第5页和第6页后,再也没有正常结束的日志记录,代表执行完第6页之后,服务器就不可用了。4:继续查看MAT工具,发现使用了PerpetualCache,单后存储到HashMap中,这是一级缓存操作类,sqlSession会话级缓存,也称为本地缓存。分析定时任务运行代码,通过数据库分页处理数据,初步分析可能是每次从数据库获取7.5万条数据,一次性加载到服务器内存,导致内存溢出。2:使用jconsole工具,连接远程dev环境,查询JVM信息,堆内存峰值最大为4G。
2025-08-27 22:52:46
644
原创 大批量查询数据库大字段导致OOM问题
业务上通过某任务id查询数据治理日志全部字段,其中待治理内容content字段超大。当某业务待治理的content数据存储较大时候,批量查询此数据,直接导致服务器内存利用率飙升,引发OOM问题,导致服务器自动重试重启。(1) 查询数据库的大字段(text、blob、binary等),分析大字段的使用场景,是否涉及大批量查询等。(2)查看大字段大小和查询列表的数据量,评估是否存在大批量数据单次读取。优化前:查询待治理内容content;优化后:查询待治理id和治理结果id。(3)mysql查询方法。
2025-08-27 22:15:56
378
原创 利用无事务方式插入数据库解决并发插入问题(最小主键id思路)
由于某业务需要回退某产品数据缓存列表Asset资源,主任务执行后,通过并行执行批量子任务进行数据回退,子任务中会记录缓存列表Asset和缓存列表行AssetLine数据,并行执行过程会出现缓存列表行AssetLine重复插入问题,导致后续业务执行变更资源时候报错。以前写过一篇也是利用无事务方式解决并发问题,主要是通过获取插入后的自增主键id,防止并发场景,再次查询一次,如果id一致,则代表插入成功,如果id不一致,则代表插入失败,删除这条旧数据。,本文通过另一种思路无事务解决并发插入数据库,数据重复问题。
2025-08-20 22:26:31
372
原创 生产环境某业务服务JVM调优总结
堆内存配置 -Xms1500M-Xmx4800M-XX:MinHeapFreeRatio = 12 # GC策略 -XX:CMSInitiatingOccupancyFraction = 85 -XX:MaxTenuringThreshold = 10 -XX:+CMSParallelRemarkEnabled # 元空间 -XX:MetaspaceSize = 768M-XX:CompressClassSpaceSize = 512M # 线程栈 -Xss768K。
2025-08-09 22:37:49
850
原创 通过减少回表和增加冗余字段,优化SQL查询效率
可以将t表新增1个冗余字段insert_month,直接将date_format(insert_date,‘%Y-%m’)结果保存到t表中,然后索引修改为index_test1_test2_test3_insert_month。虽然走了索引但是发现执行计划"Using index condition",代表使用了索引下推来减少回表,于是需要减少回表,才能提升查询效率。where条件虽然命中索引,但是insert_date未命中,而且where查询条件做函数运算,严重影响查询效率。
2025-08-07 23:21:10
433
原创 自定义监听器实现代码解耦
后续如有新增其他业务场景,只需要新增对应的Listener,在此添加Bean即可,扩展灵活。自定义监听器可以有效解决大量业务代码大量耦合问题。2、相关监听器Listener。3、发票操作通知监听器接口。4、发票操作监听器管理器。
2025-08-03 13:48:23
429
原创 利用CompletableFuture优化查询效率
项目中的需要查询第三方接口,但是接口不支持批量查询,为了满足页面3秒钟要求,提升查询效率,所以利用CompletableFuture实现。
2025-08-01 22:58:41
192
转载 如果某个业务量突然提升100倍QPS你会怎么做?
假设你负责的系统,某个业务线的QPS突然暴增100倍,你会怎么应对?”需要从架构设计、资源调度、容灾兜底等多个维度拆解。
2025-07-30 06:22:04
66
原创 Redis大Key问题
在sit环境中,测试批量上传500个网元进行批量激活,突然发现激活任务执行失败,而且系统其他功能接口响应缓慢,系统几乎卡死,服务器OOM。
2025-07-27 20:44:58
432
原创 【未限制消息消费导致数据库CPU告警问题排查及解决方案】
某天下午,上游系统同一时间突然下了三个大合同数据,平均每个合同数据实例在6万以上的量级,短短几分钟内瞬间有20万左右的流量涌入系统。而在正常情况下,系统1天处理的流量也不过2千量级,当时数据库指标监控告警,数据库会话直线上升,CPU毛刺增多,达到了80%。
2025-07-21 22:52:31
197
原创 【记某次线上消息积压问题排查及解决方案】
某版本需求,代码处理逻辑错误,导致配置新增服务范围扩大,造成消息成百倍增长,突增的消息通道部分拥堵。新增的服务会不断重试并重推消息,造成更严重的任务拥堵,无法及时消费,数据库压力增大,SQL执行变慢,导致核心业务受阻。
2025-07-20 22:07:06
294
原创 利用事务钩子函数解决业务异步发送问题
在某项业务中,需要在事务完成后,写入日志到某数据库中。需要要么都成功,要么都失败,而且需要异步实现。在不考虑分布式事务框架下,如何实现这个业务功能呢?可以利用事务钩子函数实现异步发送,保证同时成功和失败。注册事务钩子,在事务提交或回滚后执行。前提需要启动kafka_2.12-3.9.1内置的zookeeper和kafka。LogService注册钩子函数,异步发送。在kafka创建好topic。
2025-06-29 17:23:15
348
原创 基于SpringBoot利用死信队列解决RabbitMQ业务队列故障重试无效场景问题
Slf4j// 声明业务交换机@Bean// 声明死信交换机@Bean// 声明业务队列@Bean// 设置业务队列的死信交换机// 声明死信队列@Bean// 将业务队列绑定到业务交换机@Bean// 将死信队列绑定到死信交换机@Bean。
2025-06-08 18:10:24
1184
原创 基于SpringBoot解决RabbitMQ消息丢失问题
RabbitMQ提供了消息确认机制,即生产者在发送消息后,可以等待RabbitMQ服务器返回确认信息,以确保消息已经被正确地接收和处理。在发布消息时,可以设置消息的持久化标志,这样消息就会被写入磁盘中,而不是仅仅保存在内存中。可以通过设置重试次数和重试时间间隔来控制消息重试的行为。综上所述,RabbitMQ通过持久化、确认、事务和重试等机制来保证消息的可靠性,从而解决消息丢失的问题。可以看到由于接口中第1,4,5条消息会正常发送,所以在consumer已经进行了正常消费,并且针对第5条进行了业务重试。
2025-06-07 09:00:08
832
原创 基于SpringBoot+Redis实现RabbitMQ幂等性设计,解决MQ重复消费问题
配置死信交换机和死信队列,对于那些重复投递依然无法正确处理的消息,可以转移到死信队列,并设置相应的重试策略及最大重试次数,超过限制则记录日志、报警或手动介入处理。如果在执行消费的过程中,出错了(抛出Exception),则记录消费失败的状态,MQ会再次尝试去进行消费。这里是为了避免在消息开始消费后,RabbitMq宕机了,此时MQ并不知道这个消息最终有没有消费完成,因此重启MQ之后,MQ会重新消费这条消息。可以看到消费者服务,消费完第2个消息后,由于RabbitMQ宕机,本地服务报错,无法消费第3个消息。
2025-06-01 17:48:03
2216
1
原创 SpringBoot中接口签名防止接口重放
*** 获取请求体的字节数组* @return 请求体的字节数组*///参数字节数组,用于存储请求体的字节数据@Getter//Http请求对象/*** 构造函数,初始化包装类* @param request 原始HttpServletRequest对象* @throws IOException 如果读取请求体时发生IO错误*//*** 重写getInputStream方法,实现请求体的重复读取。
2025-05-04 16:18:18
1455
原创 利用无事务方式插入数据库解决并发插入问题
由于项目中同一个网元,可能会被多个不同用户操作,而且操作大部分都是以异步子任务形式进行执行,这样就会带来并发写数据问题,本文通过利用无事务方式插入数据库解决并发插入问题,算是解决问题的一种思路,算是抛砖引玉吧。
2025-05-01 22:20:35
702
原创 利用Redisson分布式锁解决多服务器数据刷新问题
Component@Override// 拒绝将任务保存起来if (!@OverrideSystem.out.println("执行了TaskInfo的run方法,执行了某某业务逻辑");System.out.println("保存了被拒绝的任务:" + node);
2025-05-01 06:46:58
640
原创 Spring源码中关于抽象方法且是个空实现这样设计的思考
通过提供一个默认的空实现,Spring 避免了强制子类实现该方法的负担,同时允许需要扩展的子类(如 ClassPathXmlApplicationContext 或 FileSystemXmlApplicationContext)根据需要重写它。在 AbstractApplicationContext 中,refresh() 方法是一个模板方法,它定义了上下文刷新过程的整体流程,而 onRefresh() 是其中的一个可扩展的钩子方法。它不是上下文刷新的核心步骤,因此可以提供一个空实现。
2025-04-20 23:02:50
586
原创 定时任务分批删除大表数据策略
随着时间的积累,数据量越来越大,其中最大的一个表数据量达到了22亿,因此需要对这些临时表进行定时清理,节省数据库存储空间和提升查询效率。分批执行的最大时间不超过默认配置时间2h,若在2h内还没有执行完成,则终止删除,等下次调度时间再重新发起执行删除操作。(1)新建相同表结构的数据表,新表补充creation_date的索引,利用同步工具同步最新15天的数据到新表。需要保留最近15天的数据且数据量太大,不能直接delete,所以采用定时任务分批进行删除策略。每次删除的最大数量按照10000条进行限制。
2025-04-19 10:09:26
513
原创 LeetCode-98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。
2025-04-05 23:53:16
362
原创 利用MQ自动取消未支付超时订单最佳实践
当消息写入到 Broker 后,不会立刻被消费者消费,需要等待指定的时长后才可被消费处理的消息,称为延时消息。
2025-03-06 23:04:59
530
原创 记录一次利用条件索引优化接口性能的实践
某表数据量达到4000w,需要每天定时任务处理20w条。前2周内SQL执行无任何问题,非常快,效率比较高。随着处理完的数据量变大,处理完数据状态设置为1,SQL执行效率越来越差,已经达到了惊人的4.6秒。SQL如下:其中表A的expired_date是有索引的。
2025-03-06 22:14:54
284
原创 基于本地事务表+MQ实现分布式事务
分布式事务解决方案有许多比如二阶段提交、TCC、最大努力通知、Saga事务等,本文介绍本地消息表+MQ这种方式解决分布式事务消息最总一致性问题。目前利用本地消息表+MQ方案实现最终消息一致性的比较多,它的核心思想是,将分布式事务拆分成本地事务进行处理,不同事务之间通过消息表和MQ通信,最后通过定时任务扫描失败的数据进行重试,当在有效重试次数限制内,再次重试回调失败的数据,最终实现消息重复发送,达到一致性。本地消息表实现最终一致性。将rocketmq-dashboard导入到idea中,在idea编译启动。
2025-01-24 23:36:04
1826
原创 【CompletableFuture实战】
过去的一年,匆匆忙忙,换了一次工作,写博客的习惯就落下了,总之,有点懈怠。希望今年能重拾信心,步入正规!CompletableFuture的用法网上资料颇多,我这里就简单记录下自己项目中的真实场景(代码模拟思路),算是抛砖引玉~return;//模拟某线程执行业务,比如创建用户});//模拟某线程执行业务,比如根据ID列表查询用户});//等待两个线程执行完毕,最后执行主线程。
2025-01-18 09:49:24
360
原创 SpringBoot集成JWT和Redis实现鉴权登录功能
目前市面上有许多鉴权框架,鉴权原理大同小异,本文简单介绍下利用JWT和Redis实现鉴权功能,算是抛砖引玉吧。主要原理就是“
2024-12-14 16:46:55
1335
原创 使用CAS解决项目中高并发时数据一致性问题
最近项目中需要对退网资源进行扣减,由于项目中并没有分布式锁也没有引入Seta等一系列原因,所以采用CAS乐观锁解决高并发资源扣业务问题。
2024-12-01 08:04:15
259
原创 二叉树的层序遍历
/ 定义nextNodeList和curLevelList,每遍历一层,就将当前层节点curList添加到结果res中// 存储当前层的节点// 每遍历一层,就将当前层节点curList添加到结果res中while(!
2024-11-17 23:01:21
509
原创 LeetCode-25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。(0 <= 链表长度 <= 1000)l1l2。
2024-09-28 15:47:39
456
原创 SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句
最近做一个需求,关于SQL高可用优化,需要优化项目中的SQL,提升查询效率。
2024-09-28 00:52:22
728
基于MapReduce的Apriori算法代码及其使用
2017-11-08
Linux中安装Oracle12c介质.docx
2020-08-03
基于MapReduce的Apriori算法并行化改进
2017-11-08
基于MapReduce的Apriori算法代码
2017-11-08
dubbotest1-master.7z
2021-07-29
dubbo-admin-2.5.4.war.7z
2021-07-29
springboot.7z
2020-07-18
springboottest1.7z
2020-07-17
SpringShiroDemo.7z
2020-06-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅