自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(996)
  • 收藏
  • 关注

原创 大表查询方式

1,2,应该相信哪个数字?如果需要精确行数,使用 COUNT(*)如果只是大概了解表大小,可以使用 SHOW TABLE STATUS 的值3,4,5,

2025-06-06 11:46:28 916

原创 小表驱动大表更快吗,不是

"小表驱动大表"是通用原则,但在LEFT JOIN、特殊索引结构和特定数据分布下,可能会出现大表驱动更优的情况。优化器根据成本估算选择了更适合当前表结构和数据分布的执行计划。

2025-05-29 22:56:25 919

原创 电商平台中订单未支付过期如何实现自动关单?

1,用户多次点击支付按钮2,调用支付中心,超时失败时(实际已经支付成功),重试,导致再次支付解决方案1,前端控制按钮,不允许重试点击;接口加分布式锁;状态机乐观锁,判断前置状态2,针对支付结果进行记录,写入或者写入缓存,调用支付接口时,判断是否支付成功想一下,支付中心,应该有做重复支付逻辑,就算重复发起支付,实际应该没有影响。影响的是,已支付成功过,重试,后续支付中心返回失败时,后续根据这个判断,无法正常更新状态及库存等操作。1,前端控制,2,分布式锁。

2025-05-22 11:13:29 685

转载 为什么重写equals一定也要重写hashCode方法?

"==" 是运算符如果比较的对象是基本数据类型,则比较的是其存储的值是否相等;如果比较的是引用数据类型,则比较的是所指向对象的地址值是否相等(是否是同一个对象)。int a = 10;int b = 10;//true//显然不是同一个对象,false。

2025-05-20 18:18:46 31

原创 Rocketmq leader选举机制,通过美国大选解释

若一个Follower节点宕机(如Georgia计票中断),只要剩余节点满足多数派(2/3),集群仍可正常选举和工作。类似大选的“届数”(如2020年是第59届),每次选举Term+1,确保旧Leader无法干扰新选举。若某节点获得多数派(N/2+1)认可,则成为新Leader,其他节点转为Follower。各州(Broker节点)统计选民投票(日志复制),并提交给选举人团(Quorum)。当选总统(新Leader)从现任总统(旧Leader)接管权力(消息写入权)。

2025-05-20 18:15:39 536

原创 Rocketmq刷盘机制和复制机制区别及关系

解决数据高可用问题,通过多副本(主从同步)避免单点故障,确保Broker宕机时数据不丢失且服务可用。:解决单机数据持久化问题,确保消息写入磁盘,避免进程崩溃或机器断电导致数据丢失。:异步刷盘(ASYNC_FLUSH) + 同步复制(SYNC_MASTER)。:同步刷盘(SYNC_FLUSH) + 同步复制(SYNC_MASTER)。:机器断电时可能丢失未刷盘的数据(通常丢失约1秒内的数据)。异步复制:允许短暂数据不一致的场景(如日志、监控数据)。:主节点宕机时,未同步到Slave的数据会丢失。

2025-05-20 18:14:32 881

原创 不同消息队列保证高可用实现方案

消息队列的高可用性(High Availability, HA)是分布式系统中的核心需求,不同消息队列通过多种技术手段实现高可用。

2025-05-20 18:13:56 502

原创 Rocketmq Broker与队列关系,怎么存储的

在RocketMQ中,Broker是消息存储和转发的核心组件,而队列(Queue)是消息存储的基本单位。理解它们之间的关系对于设计高效的消息系统至关重要。

2025-05-20 18:09:50 841

原创 Rocketmq broker 是主从架构还是集群架构,可以故障自动转移吗

RocketMQ的Broker架构同时采用了和,并且支持故障自动转移。

2025-05-20 18:08:41 1079

转载 RocketMQ高级使用

消息队列 RocketMQ 允许 Consumer 启动的时候设置最大重试次数,重试时间间隔将按照如下策略:最大重试次数小于等于 16 次,则重试时间间隔同上表描述。最大重试次数大于 16 次,超过 16 次的重试时间间隔均为每次 2 小时。

2025-05-20 18:07:59 21

原创 子查询对多层join优化记录

查询时间从300ms级优化到10ms内IO消耗降低98%支持每秒5000+次的高并发查询天然防SQL注入(使用参数化查询时)

2025-05-16 18:22:07 943

原创 java算法的核心思想及考察的解题思路

典型应用:霍夫曼编码、Dijkstra算法、最小生成树。将问题分解为重叠子问题,存储子问题的解避免重复计算。典型应用:背包问题、最长公共子序列、斐波那契数列。将大问题分解为小问题,递归解决小问题后合并结果。典型应用:链表环检测、滑动窗口、有序数组求和。典型应用:归并排序、快速排序、二分查找。:设计典型、边界和随机测试用例验证代码。典型应用:八皇后问题、数独、排列组合。:状态定义、状态转移方程、边界条件。:双指针、滑动窗口、哈希表记录。:考虑空输入、极端值等特殊情况。:虚拟头节点、快慢指针、递归。

2025-05-07 22:40:23 796

原创 项目中数据结构为什么用数组,不用List

1,从内存和性能角度,数组占用更小的内存(),访问性能更高()分配效率:数组在内存中是连续分配的一块固定空间访问速度:直接操作内存,数组的读写操作是直接通过索引计算偏移量(O(1)时间复杂度),无额外开销2,List好处,更符合开发习惯,方法丰富。

2025-04-24 11:07:35 1070

原创 redis setnx及版本关系

接口方法。

2025-04-24 09:44:14 306

原创 redis client.ttl(key)

对应 Redis 的命令:bash复制下载TTL key。

2025-04-23 18:06:45 863

原创 redis close+连接参数设置+并发情况风险分析

如果并发很高,每次查询都需要获取连接查询,并发几万的情况下,需要设置很大吗,如果设置比如200,每次查询完成后,可以及时释放连接吗。

2025-04-23 12:09:42 229

原创 记录一次会议警示内容

5,不要觉得理所当然,事情小,不要把脑袋陷入一个局限区域的困境。要以第一次做的情况,去思考,去检查。3,对自身掌握能力和承担风险能力要有自知之明,不做能力之外,和无法掌控,后果无法承担后果事情。1,每一行代码都去检查,不检查就极大可能出现问题。4,不仅要做好,还要持续做好。2,细心,不能出错,就一次机会。买股票投入过大,可能一次输光。一次事故,导致前期的努力白费。

2025-04-18 09:21:50 130

原创 mybatis 单值或多值传参存在风险举例分析

WHERE budget_year = 2023 AND budget_year IN (2024) -- 永远无结果。-- 改为不同名 -->-- 如果是集合则用!子句随着数组变大可能影响性能(建议超过 1000 值时改用临时表)-- 添加 javaType 确保类型安全 -->内部使用时可能产生歧义(取决于 MyBatis 版本)可能是 Collection 而非数组,需要改用。-- 单值优先 -->-- 多值备选 -->

2025-04-17 17:42:11 575

原创 @Async 默认线程池为什么 在高并发场景下会导致耗尽系统资源

如果线程数超过 CPU 核心数(如 8 核 CPU 跑 1000 个线程),CPU 会花费大量时间在线程调度上,而不是真正执行任务,导致。线程的创建、销毁和上下文切换(Context Switching)会占用大量 CPU 资源。每个线程可能打开 Socket、文件等资源,占用文件描述符(FD)。✅ 根据业务特点(CPU 密集型 / IO 密集型)调整线程池参数。(CPU、内存、线程数限制等)。(CPU 100%、内存 OOM、线程数超限),因此。(减少创建/销毁开销,提高性能)。

2025-04-14 14:01:03 678

原创 @Async 为什么要自定义线程池,使用默认线程池风险

资源控制可以设置核心线程数、最大线程数,防止资源耗尽可以设置合理的队列容量隔离性可以为不同业务配置不同的线程池,实现隔离避免一个业务影响其他业务的异步处理可配置性可以设置线程名前缀,便于监控和问题排查可以配置拒绝策略,处理任务满的情况性能优化根据业务特点(CPU密集型/IO密集型)优化线程池参数可以设置合理的线程存活时间。

2025-04-14 13:50:42 337

原创 延时双删除实现方案

log.warn("缓存删除失败,尝试重试({}/{}), key: {}", attempts, maxAttempts, key);log.error("延时双删失败,将记录日志人工处理", e);log.info("延时双删成功,key: {}", key);log.error("缓存删除最终失败", e);log.info("执行延时双删,key: {}", key);log.error("延时任务提交失败,直接同步删除", e);log.error("延时双删异常", e);

2025-04-02 13:48:14 555

转载 redis缓存为什么要延时双删

另外,该方式(第5种,相对第2种,只后删缓存的,可以大大的减少获取到旧缓存的数量)哈希锁因为引入的分段锁来保证锁创建和销毁的同步,这个锁的思想是借助java的弱引用来创建锁,把锁的销毁交给jvm的垃圾回收,来避免额外的消耗。问题2:为了避免缓存清除失败带来的风险,起到在每次操作数据库之前,都还原到没有产生缓存之前的效果。在三中,第二次清空缓存之前,多延时一会儿,等B更新缓存结束了,再删除缓存,这样就缓存就不存在了,其他事务查询到的为新缓存。问题:先删缓存,在改库前,其他事务又把旧数据放到缓存里去了。

2025-04-02 13:35:50 135

原创 redolog与binlog区别

**强制刷盘策略** | 依赖`sync_binlog`参数配置 | 默认每次事务提交刷盘(innodb_flush_log_at_trx_commit=1) |- **binlog**:由 **MySQL Server 层**实现,与存储引擎无关(如InnoDB、MyISAM均支持)。2. **Commit阶段**:写入`binlog`后,提交`redo log`(标记为commit状态)。- **redo log**:由 **InnoDB 引擎**特有,其他存储引擎(如MyISAM)没有此日志。

2025-04-02 08:38:11 366

原创 sql优化

**组合索引策略**:遵循最左匹配原则(如索引 `(a,b,c)` 支持 `a=1`、`a=1 AND b=2`,但不支持单独 `b=2`)。- **索引覆盖**:将查询字段包含在索引中(如 `SELECT a,b FROM table`,索引设为 `(c,a,b)`)。- **常用列加索引**:对高频查询的 `WHERE`、`JOIN`、`ORDER BY` 列建立索引。- 关注 `type` 列:避免 `ALL`(全表扫描),目标至少为 `range` 或 `ref`。

2025-04-01 08:22:47 422

原创 企业微信token及相关接口关联分析

用户级权限,只能访问授权用户的数据。access_token: 企业的 access_token,通过 corpid 和 corpsecret 获取。access_token: 企业的 access_token,通过 corpid 和 corpsecret 获取。如果用户是非企业成员(如外部联系人),返回 OpenId(用户在微信中的唯一标识)。8,企业 access_token 与用户 access_token 的区别。如果用户是企业成员,返回 UserId(用户在企业微信中的唯一标识)。

2025-03-27 23:12:05 635

原创 RocketMQ怎么实现延时消息的?

修改Broker配置文件properties复制# 自定义延时级别(时间单位为毫秒)注意:需要重启Broker生效,且必须保持18个级别。

2025-03-27 14:01:10 880

原创 雪花算法ID重复一种优化方案

高并发访问。

2025-03-27 09:33:27 283

原创 redis与mysql一致性解决方案代码示例

【代码】redis与mysql一致性解决方案代码示例。

2025-03-26 23:54:12 248

转载 7个方面总结:审批工作流设计

审批流程是中后台工作流的基础应用,我们在设计的过程中,把握的核心要点是“提高效率,规范管理”,在设计过程中要时时回头审视,以免脱离了这个最重要的目标。

2025-03-21 17:04:41 431

转载 常见的工作流引擎(osworkflow、jbpm、activiti、flowable、camunda)比较

-imptt市场上比较有名的开源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。其中:Jbpm4、、Flowable、camunda四个框架同宗同源,祖先都是Jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个。开发低代码平台、OA系统、BPM软件均需要流程可视化功能,而流程可视化核心是流程引擎和流程设计器,对于市场上如此多的开源流程引擎,哪个功能和性能好,该如何选型呢?

2025-03-21 14:37:35 234

原创 Kafka常见问题

• Topic: 消息队列,生产者和消费者面向的都是一个Topic• Broker: 一个Kafka服务器就是一个Broker,一个集群由多个Broker组成。一个Broker可以容纳多个Topic• Producer: 消息生产者,向Kafka Broker发生消息的客户端• Consumer: 消息消费者,向Kafka Broker取消息的客户端• Consumer Group(CG): 消费者组,由多个Consumer组成。

2025-03-21 09:07:10 708

原创 Docker原理最全详解

镜像可以基于其他镜像构建,并且是层叠的,每一层都代表了对原始镜像的修改,镜像可以从 Docker Hub 、或者私有仓库中获取。当创建一个新的容器时,Docker 会在基础镜像的基础上添加一个读写层,这个读写层包含了:容器中新增的文件、和修改过的文件。Docker 仓库,是存储和分享 Docker 镜像的地方,开发者可以从仓库中获取镜像,并将自己的镜像推送到仓库中。这样,容器的文件系统实际上是由多个层组成的,每个层都代表了对原始镜像的修改,从而实现了文件系统的共享和高效利用。

2025-03-21 09:05:28 358

原创 加密算法对比

加密算法是用于保护数据安全的核心技术,通过对数据进行加密,确保只有授权方能够访问原始数据。

2025-03-20 10:47:16 887

转载 Java百万数据导出Excel性能优化

在导出的数据量比较多的时候(分页查询有很多页),上述代码会比较慢,一是因为此代码写入时会阻塞下一页的查询,如果每次写入需要0.1秒,百万数据的导出,分页查询每页1万条,则有近10秒的时间浪费了;二是,查询性能通常数倍慢于写入速度,查询一般都经过网络,网络耗时+SQL执行耗时比较多,而写入一般是直接写入到本地磁盘中(或先写入本地临时文件,再通过IO流输出到HTTP响应中),所以上述代码有两个性能优化的点,一是读写分离,写入时不要影响到下一页的读,二是,可以改为。,减少因为写入太快而需要等待查询数据的时间;

2025-03-20 00:10:32 185

转载 MySQL 事务和锁

MySQL 事务和锁 - Juno3550 - 博客园

2025-03-19 23:01:53 58

转载 MySQL 慢 SQL & 优化方案

MySQL 慢 SQL & 优化方案 - Juno3550 - 博客园

2025-03-19 22:59:47 41

原创 vscode记录

2,插件不生效,无法查看history。1,安装插件与git集成。

2025-03-18 13:40:47 348

原创 零拷贝分析

零拷贝是一种高效的数据传输技术,通过减少数据拷贝次数来提升系统性能。常见的零拷贝技术包括sendfilemmap、DMA 和splice。零拷贝广泛应用于文件传输、消息队列、网络通信和数据库等场景。Kafka 和 RocketMQ 等高性能消息队列系统都使用了零拷贝技术来优化消息的读写性能。

2025-03-17 22:38:39 1119

原创 扫码登录分析

手机端扫码,判断二维码是否生效。根据token+二维码ID,获取pc端token。pc端生成二维码(请求服务),通过轮询服务端判断是否过期。pc端token存redis key=二维码ID value=token。二维码状态:未扫描,已扫描,已过期。手机端:已登陆,获取token。手机端 pc端 服务端。

2025-03-17 22:30:30 173

原创 kafka rocketmq rabbitmq 都是怎么实现顺序消费的

特性KafkaRocketMQRabbitMQ顺序性保证分区内有序,分区间无序队列内有序,队列间无序默认不保证顺序全局顺序消费单分区主题或按 Key 分区单队列主题或按 Key 选择队列单队列单消费者或消息分组并行处理能力高(多分区)高(多队列)低(单队列单消费者)实现复杂度中等中等高(需要外部排序或分组)适用场景高吞吐量、分区顺序消费高吞吐量、队列顺序消费低吞吐量、简单顺序消费Kafka和RocketMQ通过分区或队列的机制,天然支持分区或队列内的顺序消费,适合高吞吐量的场景。

2025-03-14 00:22:39 1112

空空如也

空空如也

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

TA关注的人

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