自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(355)
  • 资源 (22)
  • 收藏
  • 关注

原创 自定义监听器实现代码解耦

后续如有新增其他业务场景,只需要新增对应的Listener,在此添加Bean即可,扩展灵活。自定义监听器可以有效解决大量业务代码大量耦合问题。2、相关监听器Listener。3、发票操作通知监听器接口。4、发票操作监听器管理器。

2025-08-03 13:48:23 353

原创 利用CompletableFuture优化查询效率

项目中的需要查询第三方接口,但是接口不支持批量查询,为了满足页面3秒钟要求,提升查询效率,所以利用CompletableFuture实现。

2025-08-01 22:58:41 163

转载 如果某个业务量突然提升100倍QPS你会怎么做?

假设你负责的系统,某个业务线的QPS突然暴增100倍,你会怎么应对?”需要从架构设计、资源调度、容灾兜底等多个维度拆解。

2025-07-30 06:22:04 29

原创 Redis大Key问题

在sit环境中,测试批量上传500个网元进行批量激活,突然发现激活任务执行失败,而且系统其他功能接口响应缓慢,系统几乎卡死,服务器OOM。

2025-07-27 20:44:58 411

原创 Metaspace耗尽导致OOM问题

生产检测到两台服务器内存仅剩50%,且CPU飙升到60%,产生告警。现网用户反映系统响应缓慢。

2025-07-25 22:39:22 182

原创 大数据量查询计算引发数据库CPU告警问题复盘

采用空间换时间方式,优化了大表关联查询性能,也是一种不错的方案。

2025-07-22 23:20:30 297

原创 【未限制消息消费导致数据库CPU告警问题排查及解决方案】

某天下午,上游系统同一时间突然下了三个大合同数据,平均每个合同数据实例在6万以上的量级,短短几分钟内瞬间有20万左右的流量涌入系统。而在正常情况下,系统1天处理的流量也不过2千量级,当时数据库指标监控告警,数据库会话直线上升,CPU毛刺增多,达到了80%。

2025-07-21 22:52:31 161

原创 【记某次线上消息积压问题排查及解决方案】

某版本需求,代码处理逻辑错误,导致配置新增服务范围扩大,造成消息成百倍增长,突增的消息通道部分拥堵。新增的服务会不断重试并重推消息,造成更严重的任务拥堵,无法及时消费,数据库压力增大,SQL执行变慢,导致核心业务受阻。

2025-07-20 22:07:06 212

原创 项目中大表治理方案实践

目前生产库数据库服务器数据存储达到了13T,其中license_spart表数据量达到了200亿,占用7.5T,空间占用率达到54%。而且这张表每年数据增长量达到30亿。其中有效VALID数据占20亿,无效数据INVALID占180亿。由于业务上有些场景,需要查询无效数据,所以不能直接删除。随着license_spart表规模持续扩大,会带来严重的性能问题、存储成本增加、备份与恢复困难、数据一致性问题(生产4台服务器)等等。

2025-07-04 23:38:21 874

原创 利用事务钩子函数解决业务异步发送问题

在某项业务中,需要在事务完成后,写入日志到某数据库中。需要要么都成功,要么都失败,而且需要异步实现。在不考虑分布式事务框架下,如何实现这个业务功能呢?可以利用事务钩子函数实现异步发送,保证同时成功和失败。注册事务钩子,在事务提交或回滚后执行。前提需要启动kafka_2.12-3.9.1内置的zookeeper和kafka。LogService注册钩子函数,异步发送。在kafka创建好topic。

2025-06-29 17:23:15 300

原创 基于SpringBoot利用死信队列解决RabbitMQ业务队列故障重试无效场景问题

Slf4j// 声明业务交换机@Bean// 声明死信交换机@Bean// 声明业务队列@Bean// 设置业务队列的死信交换机// 声明死信队列@Bean// 将业务队列绑定到业务交换机@Bean// 将死信队列绑定到死信交换机@Bean。

2025-06-08 18:10:24 1095

原创 基于SpringBoot解决RabbitMQ消息丢失问题

RabbitMQ提供了消息确认机制,即生产者在发送消息后,可以等待RabbitMQ服务器返回确认信息,以确保消息已经被正确地接收和处理。在发布消息时,可以设置消息的持久化标志,这样消息就会被写入磁盘中,而不是仅仅保存在内存中。可以通过设置重试次数和重试时间间隔来控制消息重试的行为。综上所述,RabbitMQ通过持久化、确认、事务和重试等机制来保证消息的可靠性,从而解决消息丢失的问题。可以看到由于接口中第1,4,5条消息会正常发送,所以在consumer已经进行了正常消费,并且针对第5条进行了业务重试。

2025-06-07 09:00:08 720

原创 基于SpringBoot+Redis实现RabbitMQ幂等性设计,解决MQ重复消费问题

配置死信交换机和死信队列,对于那些重复投递依然无法正确处理的消息,可以转移到死信队列,并设置相应的重试策略及最大重试次数,超过限制则记录日志、报警或手动介入处理。如果在执行消费的过程中,出错了(抛出Exception),则记录消费失败的状态,MQ会再次尝试去进行消费。这里是为了避免在消息开始消费后,RabbitMq宕机了,此时MQ并不知道这个消息最终有没有消费完成,因此重启MQ之后,MQ会重新消费这条消息。可以看到消费者服务,消费完第2个消息后,由于RabbitMQ宕机,本地服务报错,无法消费第3个消息。

2025-06-01 17:48:03 1987 1

原创 多任务并发锁优化

最近在我们项目中,出现了数据库死锁问题,这里简单记录下分析和解决的过程。

2025-05-11 07:29:47 179

原创 SpringBoot中接口签名防止接口重放

*** 获取请求体的字节数组* @return 请求体的字节数组*///参数字节数组,用于存储请求体的字节数据@Getter//Http请求对象/*** 构造函数,初始化包装类* @param request 原始HttpServletRequest对象* @throws IOException 如果读取请求体时发生IO错误*//*** 重写getInputStream方法,实现请求体的重复读取。

2025-05-04 16:18:18 1284

原创 利用无事务方式插入数据库解决并发插入问题

由于项目中同一个网元,可能会被多个不同用户操作,而且操作大部分都是以异步子任务形式进行执行,这样就会带来并发写数据问题,本文通过利用无事务方式插入数据库解决并发插入问题,算是解决问题的一种思路,算是抛砖引玉吧。

2025-05-01 22:20:35 654

原创 利用Redisson分布式锁解决多服务器数据刷新问题

Component@Override// 拒绝将任务保存起来if ([email protected]("执行了TaskInfo的run方法,执行了某某业务逻辑");System.out.println("保存了被拒绝的任务:" + node);

2025-05-01 06:46:58 586

原创 Spring源码中关于抽象方法且是个空实现这样设计的思考

通过提供一个默认的空实现,Spring 避免了强制子类实现该方法的负担,同时允许需要扩展的子类(如 ClassPathXmlApplicationContext 或 FileSystemXmlApplicationContext)根据需要重写它。在 AbstractApplicationContext 中,refresh() 方法是一个模板方法,它定义了上下文刷新过程的整体流程,而 onRefresh() 是其中的一个可扩展的钩子方法。它不是上下文刷新的核心步骤,因此可以提供一个空实现。

2025-04-20 23:02:50 561

原创 关于Redis中的事务的理解

可以看到Redis中关于事务的指令主要包含exex、multi、unwatch、watch等。

2025-04-19 16:26:30 300

原创 定时任务分批删除大表数据策略

随着时间的积累,数据量越来越大,其中最大的一个表数据量达到了22亿,因此需要对这些临时表进行定时清理,节省数据库存储空间和提升查询效率。分批执行的最大时间不超过默认配置时间2h,若在2h内还没有执行完成,则终止删除,等下次调度时间再重新发起执行删除操作。(1)新建相同表结构的数据表,新表补充creation_date的索引,利用同步工具同步最新15天的数据到新表。需要保留最近15天的数据且数据量太大,不能直接delete,所以采用定时任务分批进行删除策略。每次删除的最大数量按照10000条进行限制。

2025-04-19 10:09:26 397

原创 LeetCode-98. 验证二叉搜索树

给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。

2025-04-05 23:53:16 325

原创 爬楼梯问题-动态规划

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

2025-04-05 23:02:55 306

原创 利用MQ自动取消未支付超时订单最佳实践

当消息写入到 Broker 后,不会立刻被消费者消费,需要等待指定的时长后才可被消费处理的消息,称为延时消息。

2025-03-06 23:04:59 442

原创 记录一次利用条件索引优化接口性能的实践

某表数据量达到4000w,需要每天定时任务处理20w条。前2周内SQL执行无任何问题,非常快,效率比较高。随着处理完的数据量变大,处理完数据状态设置为1,SQL执行效率越来越差,已经达到了惊人的4.6秒。SQL如下:其中表A的expired_date是有索引的。

2025-03-06 22:14:54 264

原创 基于本地事务表+MQ实现分布式事务

分布式事务解决方案有许多比如二阶段提交、TCC、最大努力通知、Saga事务等,本文介绍本地消息表+MQ这种方式解决分布式事务消息最总一致性问题。目前利用本地消息表+MQ方案实现最终消息一致性的比较多,它的核心思想是,将分布式事务拆分成本地事务进行处理,不同事务之间通过消息表和MQ通信,最后通过定时任务扫描失败的数据进行重试,当在有效重试次数限制内,再次重试回调失败的数据,最终实现消息重复发送,达到一致性。本地消息表实现最终一致性。将rocketmq-dashboard导入到idea中,在idea编译启动。

2025-01-24 23:36:04 1661

原创 【CompletableFuture实战】

过去的一年,匆匆忙忙,换了一次工作,写博客的习惯就落下了,总之,有点懈怠。希望今年能重拾信心,步入正规!CompletableFuture的用法网上资料颇多,我这里就简单记录下自己项目中的真实场景(代码模拟思路),算是抛砖引玉~return;//模拟某线程执行业务,比如创建用户});//模拟某线程执行业务,比如根据ID列表查询用户});//等待两个线程执行完毕,最后执行主线程。

2025-01-18 09:49:24 347

原创 SpringBoot集成JWT和Redis实现鉴权登录功能

目前市面上有许多鉴权框架,鉴权原理大同小异,本文简单介绍下利用JWT和Redis实现鉴权功能,算是抛砖引玉吧。主要原理就是“

2024-12-14 16:46:55 1222

原创 使用CAS解决项目中高并发时数据一致性问题

最近项目中需要对退网资源进行扣减,由于项目中并没有分布式锁也没有引入Seta等一系列原因,所以采用CAS乐观锁解决高并发资源扣业务问题。

2024-12-01 08:04:15 220

原创 二叉树的层序遍历

/ 定义nextNodeList和curLevelList,每遍历一层,就将当前层节点curList添加到结果res中// 存储当前层的节点// 每遍历一层,就将当前层节点curList添加到结果res中while(!

2024-11-17 23:01:21 480

原创 leetcode-23.合并K个升序链表

给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。

2024-10-07 23:03:12 259

原创 LeetCode-25. 合并两个排序的链表

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。(0 <= 链表长度 <= 1000)l1l2。

2024-09-28 15:47:39 409

原创 SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句

最近做一个需求,关于SQL高可用优化,需要优化项目中的SQL,提升查询效率。

2024-09-28 00:52:22 687

原创 union和union all的区别,别再傻傻分不清楚了!

union会按照字段的顺序进行排序;union all 只是将两个结果集合并后就返回。从效率上讲,union all要比 union快的多,所以如果确定合并的两个结果集中没有重复且不需要排序就用Union all。union all是直接连接,取到的是所有值,记录可能有的重复;union是取唯一值,记录没有重复。union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果集全部显示出来。所以union在进行表链接后会筛选掉重复的记录,union all不会去除重复记录。

2024-09-14 23:01:44 5501

原创 分页查询结果并将结果分批保存,防止内存溢出

通过分页查询数据,然后再将分页查询的结果批量进行保存,防止一次性查询数据过大,导致内存溢出。

2024-09-09 23:57:22 435

原创 SaToken认证授权快速上手

SaToken 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。Sa-Token 旨在以简单、优雅的方式完成系统的权限认证部分。SaToken官网,原理如下自定义接口实现SaToken框架的StpInterface接口,自动帮我们进行执行业务逻辑(获取权限集合,获取角色集合)/*** 自定义权限认证接口扩展,Sa-Token 将从此实现类获取每个账号拥有的权限码。

2024-09-08 17:00:48 2758

原创 用空间换时间思路解决生产环境慢SQL性能问题总结

有个报表业务,需要查询当天之前的数据,涉及到6张表的关联查询,有些关联字段并没有索引而且有张表数据量达到了千万级,这个接口查询响应时间平均6~7分钟,别说用户忍不了,我们开发自己也真的忍不了!由于是小众业务场景,其它开发任务比较紧急,所以一直做为遗留技术债进行排期修复,这次终于把修复此慢SQL接口纳入开发管道中了!

2024-09-07 00:00:14 360

原创 【利用模板模式和责任链模式实现数据校验】

*** 网元调整数据校验抽象类**/@Component/*** 基础校验参数是否为空*//*** 网元校验信息初始化处理器**/@[email protected]("执行校验node是否在数据库中业务逻辑......");// 初始化校验结束,进入下一个节点next(node);/*** 网元字段权限校验处理器**/@Component@Override。

2024-08-10 13:52:46 395

原创 【高可用】利用AOP实现数据库读写分离

*** 动态数据源*//*** ThreadLocal 用于提供线程局部变量,在多线程环境可以保证各个线程里的变量独立于其它线程里的变量。* 也就是说 ThreadLocal 可以为每个线程创建一个【单独的变量副本】,相当于线程的 private static 类型变量。*//*** 决定使用哪个数据源之前需要把多个数据源的信息以及默认数据源信息配置好* @param targetDataSources 目标数据源。

2024-07-23 22:49:58 487

原创 利用队列Queue或栈Stack解决字符数组转换运算题

相同的特殊运算符,从左到右顺序计算。用例保证@,$,左右一定存在数字,且数字不存在前导为0。给定包含特殊运算符号@,$ ,转换规则如下。其中x,y都是非负整数且@优先级高于 $。

2024-06-30 18:55:56 220

原创 利用OPT算法解决最短访问次数问题

数据库缓存,模拟访问规则如下:当查询值在缓存中,直接访问缓存,不访问数据库。否则,访问数据库,并将值放入缓存。若缓存已满,则必须删除一个缓存。给定缓存大小和训练数据,依次模拟访问这组数据,请分析在此访问规则下最少的数据库访问次数输入2输出4。

2024-06-30 18:24:33 398

数据挖掘经典算法

数据挖掘经典算法,详细介绍,原理剖析。

2017-06-29

基于MapReduce的Apriori算法代码及其使用

基于MapReduce的Apriori算法代码及其使用,内含源代码及其实现。数据集为http://fimi.ua.ac.be/data/

2017-11-08

WebService配置

WebService配置详细配置步骤。按照操作文档提示步骤,配置webservice接口,欢迎指正,亲测可行!

2017-11-08

详细配置Hbase

hbase资料整理PPT,资料详细。为内部培训课程PPT,请勿转载!

2017-11-08

zookeeper安装配置

zookeeper安装配置,步骤明确而详细。此文档为培训班内部培训资料!

2017-11-08

Linux中安装Oracle12c介质.docx

Linux环境中安装Oracle12C介质操作手册,详细记载了安装过程以及安装问题。利用Xmanager的Xstart启动图形化安装界面进行安装,清晰明了,操作简单,本人亲测可行!

2020-08-03

基于MapReduce的Apriori算法并行化改进

基于MapReduce的Apriori算法并行化改进,包含改进思路与代码实现。该文档提供了详细的设计思路和方法,具有一定的借鉴意义,互相学习,互相进步!

2017-11-08

前端打印插件

前端打印插件,简单易用

2017-06-29

基于MapReduce的Apriori算法代码

mapreduce实现apriori算法,亲测可行!需要自行下载数据集。数据集链接如下http://fimi.ua.ac.be/data/

2017-11-08

基于MapReduce的Apriori算法

基于MapReduce的Apriori算法,关联规则并行化思路与解决方案。该方法具有一定的借鉴意义,可以用来进行学术研究。

2017-11-08

dubbo-admin-2.5.7.war.7z

dubbo-admin监控工程

2021-07-29

dubbotest1-master.7z

springboot整合dubbo+zookeeper https://blog.csdn.net/wangzibai/article/details/100106261

2021-07-29

dubbo-admin-2.5.4.war.7z

web页面服务查看,下载dubbo-admin监控工程,将war包解压后放入tomcat的webapps目录下,将\webapps\dubbo-admin-2.5.4\WEB-INF\dubbo.properties修改成自己的zookeeper地址即可

2021-07-29

echarts.min.js

优秀的报表制作插件,美观而简洁

2017-06-29

springboot.7z

SpringBoot整合Mybatis完整详细版,通过连接MySQL,实现增删改查功能。例子比较简单是非常适合入门练手。项目启动之后,直接在浏览器输入访问地址即可。

2020-07-18

springboottest1.7z

SpringBoot整合Mybatis完整详细版,通过连接MySQL,实现增删改查功能。例子比较简单是非常适合入门练手。项目启动之后,直接在浏览器http://localhost:8086/testBoot/getUser/2即可

2020-07-17

SpringShiroDemo.7z

SpringMVC与Shiro整合,实现登录授权功能。通过使用账号admin和密码admin登录进入,否则需要登录才能访问。登录链接地址:http://localhost:8080/ShiroDemo/login.jsp

2020-06-04

cmiadapter

1111

2016-07-10

python-2.7.10.amd64

python2.7

2016-07-10

《机器学习实战》源代码

《机器学习实战》源代码

2017-06-29

Myeclipse-2014-破解文件

Myeclipse-2014-破解文件

2017-06-29

bootstrap-3.3.7

一款非常优秀的前端插件

2017-06-29

空空如也

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

TA关注的人

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