- 博客(333)
- 资源 (22)
- 收藏
- 关注
原创 利用MQ自动取消未支付超时订单最佳实践
当消息写入到 Broker 后,不会立刻被消费者消费,需要等待指定的时长后才可被消费处理的消息,称为延时消息。
2025-03-06 23:04:59
222
原创 记录一次利用条件索引优化接口性能的实践
某表数据量达到4000w,需要每天定时任务处理20w条。前2周内SQL执行无任何问题,非常快,效率比较高。随着处理完的数据量变大,处理完数据状态设置为1,SQL执行效率越来越差,已经达到了惊人的4.6秒。SQL如下:其中表A的expired_date是有索引的。
2025-03-06 22:14:54
225
原创 基于本地事务表+MQ实现分布式事务
分布式事务解决方案有许多比如二阶段提交、TCC、最大努力通知、Saga事务等,本文介绍本地消息表+MQ这种方式解决分布式事务消息最总一致性问题。目前利用本地消息表+MQ方案实现最终消息一致性的比较多,它的核心思想是,将分布式事务拆分成本地事务进行处理,不同事务之间通过消息表和MQ通信,最后通过定时任务扫描失败的数据进行重试,当在有效重试次数限制内,再次重试回调失败的数据,最终实现消息重复发送,达到一致性。本地消息表实现最终一致性。将rocketmq-dashboard导入到idea中,在idea编译启动。
2025-01-24 23:36:04
1109
原创 【CompletableFuture实战】
过去的一年,匆匆忙忙,换了一次工作,写博客的习惯就落下了,总之,有点懈怠。希望今年能重拾信心,步入正规!CompletableFuture的用法网上资料颇多,我这里就简单记录下自己项目中的真实场景(代码模拟思路),算是抛砖引玉~return;//模拟某线程执行业务,比如创建用户});//模拟某线程执行业务,比如根据ID列表查询用户});//等待两个线程执行完毕,最后执行主线程。
2025-01-18 09:49:24
313
原创 SpringBoot集成JWT和Redis实现鉴权登录功能
目前市面上有许多鉴权框架,鉴权原理大同小异,本文简单介绍下利用JWT和Redis实现鉴权功能,算是抛砖引玉吧。主要原理就是“
2024-12-14 16:46:55
1066
原创 使用CAS解决项目中高并发时数据一致性问题
最近项目中需要对退网资源进行扣减,由于项目中并没有分布式锁也没有引入Seta等一系列原因,所以采用CAS乐观锁解决高并发资源扣业务问题。
2024-12-01 08:04:15
181
原创 二叉树的层序遍历
/ 定义nextNodeList和curLevelList,每遍历一层,就将当前层节点curList添加到结果res中// 存储当前层的节点// 每遍历一层,就将当前层节点curList添加到结果res中while(!
2024-11-17 23:01:21
448
原创 LeetCode-25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。(0 <= 链表长度 <= 1000)l1l2。
2024-09-28 15:47:39
384
原创 SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句
最近做一个需求,关于SQL高可用优化,需要优化项目中的SQL,提升查询效率。
2024-09-28 00:52:22
625
原创 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
5190
原创 SaToken认证授权快速上手
SaToken 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。Sa-Token 旨在以简单、优雅的方式完成系统的权限认证部分。SaToken官网,原理如下自定义接口实现SaToken框架的StpInterface接口,自动帮我们进行执行业务逻辑(获取权限集合,获取角色集合)/*** 自定义权限认证接口扩展,Sa-Token 将从此实现类获取每个账号拥有的权限码。
2024-09-08 17:00:48
2434
原创 用空间换时间思路解决生产环境慢SQL性能问题总结
有个报表业务,需要查询当天之前的数据,涉及到6张表的关联查询,有些关联字段并没有索引而且有张表数据量达到了千万级,这个接口查询响应时间平均6~7分钟,别说用户忍不了,我们开发自己也真的忍不了!由于是小众业务场景,其它开发任务比较紧急,所以一直做为遗留技术债进行排期修复,这次终于把修复此慢SQL接口纳入开发管道中了!
2024-09-07 00:00:14
328
原创 【利用模板模式和责任链模式实现数据校验】
*** 网元调整数据校验抽象类**/@Component/*** 基础校验参数是否为空*//*** 网元校验信息初始化处理器**/@Component@OverrideSystem.out.println("执行校验node是否在数据库中业务逻辑......");// 初始化校验结束,进入下一个节点next(node);/*** 网元字段权限校验处理器**/@Component@Override。
2024-08-10 13:52:46
339
原创 【高可用】利用AOP实现数据库读写分离
*** 动态数据源*//*** ThreadLocal 用于提供线程局部变量,在多线程环境可以保证各个线程里的变量独立于其它线程里的变量。* 也就是说 ThreadLocal 可以为每个线程创建一个【单独的变量副本】,相当于线程的 private static 类型变量。*//*** 决定使用哪个数据源之前需要把多个数据源的信息以及默认数据源信息配置好* @param targetDataSources 目标数据源。
2024-07-23 22:49:58
454
原创 利用队列Queue或栈Stack解决字符数组转换运算题
相同的特殊运算符,从左到右顺序计算。用例保证@,$,左右一定存在数字,且数字不存在前导为0。给定包含特殊运算符号@,$ ,转换规则如下。其中x,y都是非负整数且@优先级高于 $。
2024-06-30 18:55:56
203
原创 利用OPT算法解决最短访问次数问题
数据库缓存,模拟访问规则如下:当查询值在缓存中,直接访问缓存,不访问数据库。否则,访问数据库,并将值放入缓存。若缓存已满,则必须删除一个缓存。给定缓存大小和训练数据,依次模拟访问这组数据,请分析在此访问规则下最少的数据库访问次数输入2输出4。
2024-06-30 18:24:33
307
原创 利用BFS或动态规划解决路径算法问题
令 f[i][j]表示从左上角到坐标(i,j)的路径数字和最小值,原问题即可被划分为多个求最优值的子问题,且由于每次只能向下或向右移动一步,因此。此题需要求出从左上角出发,到达坐标(m,n)的路径数字和最小值。因此不难想到,子问题就是从左上角出发,到达坐标(i,j)的路径数字和最小值。给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。输入:grid = [[1,3,1],[1,5,1],[4,2,1]]解释:因为路径 1→3→1→1→1 的总和最小。
2024-06-30 09:19:14
472
原创 利用BFS解决每个零售店到仓库最短距离之和问题
矩阵中有3种类型:0仓库,-1障碍,1零售店。现在每个零售店要去距离它最近的仓库取货物,请计算出所有零售店到最近仓库距离之和,假设矩阵中每个单元格之间距离为1。如果遇到障碍物,则表示无法通过。可以在单元格上下左右移动。注意无法到达仓库的零售店不参与计算没有零售店或者没有仓库,则返回0。
2024-06-25 23:38:35
357
原创 【课程表算法题--拓扑排序】
你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]。给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 2:输入: 2, [[1,0],[0,1]]输出: false。
2024-06-22 07:48:17
302
原创 记录下“where条件中select子查询“的优化
由于项目中流水线门禁规则的升级,导致新提交的sql代码where条件含有select子查询,导致codecheck扫描校验不通过,特此需要整改,简单记录下。
2024-06-12 07:28:20
287
原创 利用单调栈思路解决递增关系数据问题
在对数据进行排序的过程中,通常采用取1个数作为主元,通过比较交换,把比主元小的数挪到它左边;把比主元大的元素挪到右边。现给定一个划分后的正整数序列,请问有多少个元素可能是排序过程中选中的主元?并按顺序输出这些值。通过暴力解法,分别比较每个数的左边和右边值,如果当前值大于左边值且当前值小于右边值,则保存此值到列表中,最后对列表排序输出。由于满足主元的条件:其右边值一定大于它,其左边值一定小于它,相当于有一个隐藏的递增关系,可以考虑单调栈,此解法更加高效。
2024-06-08 16:47:51
256
原创 校验参数个数工具类
项目中有个需求:前后端参数一致性校验,在某业务场景下后端代码需要校验参数个数,因此设计了1个工具类方便大伙使用,特此简单记录下。
2024-06-07 23:47:44
629
原创 自定义对象池BasePooledObjectFactory的使用
System.out.println("ThreadName:" + Thread.currentThread().getName() + " 对象:" + name + "正在被创建。。。。。。");System.out.println("ThreadName:" + Thread.currentThread().getName() + " 对象:" + name + "正在被销毁。。。。。。");
2024-06-01 00:21:51
828
1
原创 关于模糊查询业务的一点思考
注意点:在业务数据量少的场景下,这样写没问题。但是如果数据量非常多,这样首先查询性能非常耗时,而且查询出来太多数据也不太符合公司内人员敏感信息安全规范和期望结果。所以要对查询结果处理,我这里的处理方式就是利用limit限制查询条数,这样既符合敏感信息安全规范,也一定量提升了查询效率,避免对服务器内存造成过大压力。最近项目上线了一个小的功能,业务逻辑非常简单,就是人员联想功能:2张表的关联模糊查询。实现方案:就是无脑在sql中利用like模糊查询。
2024-05-20 20:27:44
163
原创 通过AOP实现项目中业务服务降级功能
最近项目中需要增强系统的可靠性,比如某远程服务宕机或者网络抖动引起服务不可用,需要从本地或者其它地方获取业务数据,保证业务的连续稳定性等等。这里简单记录下业务实现,主要我们项目中调用远程接口失败时,需要从本地数据库中某表获取数据(本地数据库某表每天定时同步远程接口数据)。调用大致逻辑:前端–>服务A–>服务B(这里时公服,用于维护权限、人员等信息)其中服务B调用远程服务故障,进行服务降级,从服务B的本地数据库查询数据。项目中实际是通过故障注入方式,模拟远程接口宕机。这里简单通过除法异常模拟故障。二、测
2024-05-08 22:11:05
418
原创 利用策略模式+模板方法实现项目中运维功能
/ 这里只实现了查询方法,其他增加、删除、修改可以依次实现List<?IDataOperationService定义增删改查模板方法List<?
2024-05-05 05:48:01
779
1
原创 一道使用LinkedList和Stack解决的算法题
学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮:如果队列最前面的学生 喜欢 栈顶的三明治,那么会 拿走它 并离开队列。否则,这名学生会 放弃这个三明治 并回到队列的尾部。这个过程会一直持续到队列里所有学生都不喜欢栈顶的三明治为止。给你两个整数数组 students 和 sandwiches ,其中 sandwiches[i] 是栈里面第 i
2024-01-16 07:04:23
813
原创 处理含退格的字符串
字符串如果包含$,则将 $ 前的字符剔除,最后保留剔除后的字符串,输出其长度。利用String Builder对字符串处理。输出3,因为剔除后的字符串为abd。或者利用Stack对字符串处理。
2024-01-15 09:15:00
418
原创 数组中根据刷新时间间隔计算对应值
特斯拉发射火箭,从start时刻开始(包括start),由于发射台需要准备时间才能发射,因此需要period个单位时间就会有发射机会(不限制发射数量,只要若干火箭就绪则可以发射)。比如[[1,2],[4,6]],第一个订单在1时刻收到,需要2个单位时间准备就绪,在时刻3才能发射;现在有n个订单需要发射,用二维数组表示,即int[][] launches,第一个数字代表接收到该订单时刻,第二个数字代表准备就绪需要花费的时间。分享个关于数组中根据刷新时间间隔计算对应值的问题。未完待续-----------
2024-01-14 09:10:18
443
原创 数组中差值的最大值(寻找一个数组中左侧最大值与右侧最小值的差值)
今天跟大伙分享下关于数组中差值的最大值(寻找一个数组中左侧最大值与右侧最小值的差值)的计算思路的算法题,解决方案有许多,这里简单进行抛砖引玉。
2024-01-14 08:39:03
1170
原创 【奇偶数合并】及【奇数偶数排序】
由于要对偶数合并且将合并值增加到相邻且相等2个偶数之间,然后相邻且相等奇数合并,原始数组长度可能会发生改变,因此需要用额外的数据结构进行存储临时计算结果数据。将所有相邻且相同的偶数相加放入相邻偶数中间 将所有相邻且相同奇数相加,替换掉这两个相邻且相同的奇数 最后输出合并后的数组结果。第一轮计算之后,需要判断是否还需要递归进行计算,如果需要,则递归奇偶数合并即可,最后输出计算结果。数组奇偶数合并之后[1,2,4,2,7,8,6,12,6]数组[1,2,2,7,8,3,3,6]今天分享一道很有意思的算法题目,
2024-01-06 07:24:20
695
原创 力扣:单调栈算法思路题
🍒 通常是在数组中需要通过比较前后元素的大小关系来找最近的比它大(小)的元素问题时,可以使用单调栈进行求解。单调栈分为单调递增栈和单调递减栈,通过使用单调栈我们可以访问到最近一个比它大(小)的元素。🍋什么情况适合用单调栈来解决实际问题呢?3:LeetCode 42. 接雨水。2:寻找左边第一个小于它的数的下标。1:寻找左边第一个小于它的数。
2023-11-26 06:41:04
698
原创 力扣:盛最多水的容器
双指针代表的是 可以作为容器边界的所有位置的范围。在一开始,双指针指向数组的左右边界,表示 数组中所有的位置都可以作为容器的边界,因为我们还没有进行过任何尝试。在这之后,我们每次将 对应的数字较小的那个指针 往 另一个指针 的方向移动一个位置,就表示我们认为 这个指针不可能再作为容器的边界了。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。输入:[1,8,6,2,5,4,8,3,7]
2023-10-21 20:54:28
275
dubbotest1-master.7z
2021-07-29
dubbo-admin-2.5.4.war.7z
2021-07-29
Linux中安装Oracle12c介质.docx
2020-08-03
springboot.7z
2020-07-18
springboottest1.7z
2020-07-17
SpringShiroDemo.7z
2020-06-04
基于MapReduce的Apriori算法并行化改进
2017-11-08
基于MapReduce的Apriori算法代码及其使用
2017-11-08
基于MapReduce的Apriori算法代码
2017-11-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人