- 博客(55)
- 收藏
- 关注
原创 从0到1搭建可靠消息链路:RocketMQ重试 + Redis幂等实战
三方消息对接的工业级解决方案 针对三方平台对接中常见的消息重复消费、状态混乱等问题,本文提出了一套基于RocketMQ+Redis的完整解决方案。核心架构包括:定时任务拉取三方消息后通过RocketMQ分片发送,消费者端实现Redis幂等过滤和业务处理。关键设计点包括: 消息处理:分页拉取+双重分片发送,失败自动重试 幂等控制:基于业务键+版本时间的Redis幂等模型 容错机制:Token过期自动刷新重试,延迟删除消息 工程实践:提供可复用的伪代码模板和7个常见避坑指南 该方案有效解决了三方对接中的可靠性
2026-04-10 16:20:35
380
原创 全量类目分批同步时「子在前、父在后」导致落库失败——拓扑排序一次理顺依赖顺序
摘要 在第三方类目全量同步过程中,由于类目数据的分批处理导致父子依赖顺序问题。当子类目先于父类目被处理时,会出现"父类目不存在"的写入失败。问题根源在于接口返回顺序不保证父先于子,且分批截断放大了顺序依赖问题。解决方案是采用拓扑排序算法,在分批前先对全量类目列表进行依赖排序,确保父节点始终位于子节点之前。具体实现通过构建类目依赖图,使用Kahn算法进行拓扑排序,使得任意批次的处理都能满足父子依赖关系,从而避免写入失败。对于可能存在的循环依赖情况,建议增加告警机制和兜底处理策略。
2026-03-30 11:02:00
303
原创 告别 N+1:MyBatis-Plus 批量同步优化套路(预加载、去重、批量落库)
摘要: 针对批量同步500条数据耗时过长的问题,提出系统性优化方案: 合并查询:将逐条查询改为单次批量查询(IN语句),减少数据库往返次数; 差异更新:通过字段比对避免无变化记录的冗余更新,降低写IO; 批量写入:分片执行批量插入/更新(如200条/批),结合MyBatis-Plus的saveBatch; 索引优化:确保业务键(bizKey)建立索引,提升查询效率; 数据去重:同批数据去重,避免重复处理; 日志精简:仅输出批次摘要和错误详情,减少I/O压力。 效果:优化后从初始10秒降至1秒,若变更率低可进
2026-03-25 17:31:02
371
原创 从结算需求出发:基于库存日快照与分区的结算报表的Java实践
本文介绍了一套基于「库存日快照 + 分区」的结算报表系统设计方案。针对财务结算需要历史库存数据可复现、可对账的核心需求,通过建立专门的库存快照表(EtonInventorySnapshot),配合定时快照生成任务(InventorySnapshotJob)和分区管理任务(InventorySnapshotPartitionManageJob),实现了在任意时间点准确还原结算日库存状态的能力。相比直接查询实时库存或回放库存流水,该方案解决了数据实时变化、计算复杂度高和查询压力大的问题,通过每日全量快照+分区管
2026-03-09 17:48:48
458
原创 MySQL索引失效的隐藏陷阱:一个字符引发的性能血案!
摘要:MySQL查询中,字段类型与条件的匹配方式对索引使用有重大影响。当VARCHAR字段使用数字条件时,会导致逐行转换,使索引失效;而INT字段使用字符串条件时,仅需转换常量,索引仍有效。测试显示,VARCHAR字段错误使用数字条件时,查询性能可能下降22倍。最佳实践包括:严格匹配字段类型(VARCHAR使用字符串条件,INT使用数字条件)、代码中使用正确参数类型、以及合理设计表结构(如纯数字字段优先使用INT类型)以避免性能问题。
2025-07-15 10:28:48
383
原创 以游戏的方式,一分钟教你学会滑动窗口算法思路~
新解读滑动窗口(全程游戏化教学,配有动画示意和对比表格)持续该过程直到货架尽头,找到最长窗口为3(B,A,C)(比如查生产日期),目标是用最少的移动步数完成检查
2025-02-11 10:36:27
387
原创 Java中的设计模式全解及电商应用场景示例
意图:提供一个创建一系列相关或相互依赖对象的接口。电商场景:根据用户地区生成不同风格的UI组件。以上补充了外观模式组合模式享元模式桥接模式和装饰器模式的详细内容及电商示例代码。结构型模式主要用于处理类和对象的组合关系,通过这些模式,开发者可以设计出更灵活、高效且易维护的代码结构。结合实际业务场景,能够更直观地理解这些模式的意义及作用。通过本文,我们详细讲解了Java中的23种设计模式,并结合电商场景给出了对应的示例代码。
2024-12-16 15:53:22
1399
原创 微信获取签名接口开发指南
微信的签名机制广泛应用于微信公众平台、微信小程序等场景中,用于确保接口调用的安全性和数据的完整性。本文将详细介绍如何使用Java实现微信API的签名生成过程,包括获取和,并生成请求签名。
2024-11-26 11:09:28
974
原创 Redis分布式锁的原理与Redisson实现
本文将详细讲述Redis分布式锁的原理,并介绍如何使用Redisson实现Redis分布式锁。而Redisson作为一个成熟的Redis客户端,提供了易于使用的API和丰富的功能,帮助开发者快速实现分布式锁。在实际应用中,开发者需要根据具体的业务需求和系统架构选择合适的锁实现方案,并注意锁的获取、释放和续约机制,以确保系统的稳定性和性能。2.在给一段业务代码使用分布式锁之后,最后一定要记得释放锁,避免后续业务代码无法进入,导致某个线程一直无法获取锁。
2024-11-21 15:20:05
1010
原创 解密Java RPC:从基础到实现,掌握分布式通信的核心技术(附demo)
本文详细介绍了RPC的基本概念及其核心技术点,列举了目前主流的RPC框架,并通过实现一个简单的Java示例展示了RPC的基本工作流程。RPC作为分布式系统中的重要技术,极大地简化了跨网络调用的复杂性,使得开发者可以专注于业务逻辑的实现。
2024-11-20 14:59:01
1421
原创 了解二八定律,提高工作效率、生活质量
28定律,又称帕累托法则(Pareto Principle),是由意大利经济学家维尔弗雷多·帕累托提出的。他发现,在许多领域中,80%的效果往往来自于20%的原因。简单来说,这个定律告诉我们:在任何一组事物中,关键的少数(20%)往往比其他次要的多数(80%)更为重要。
2024-09-20 15:18:09
2759
原创 使用Redis记录错误次数、序列号锁定和冻结时间的实现步骤示例[超详细]
在本文中,我们将详细介绍如何使用Redis来记录错误次数、序列号锁定和冻结时间。通过Spring Boot和Spring Data Redis,我们能够轻松实现这些功能。
2024-08-16 18:01:13
727
1
原创 # 服务治理中间件详解:Spring Cloud与Dubbo
Spring Cloud和Dubbo在服务治理中间件领域各具优势,开发者可以根据实际需求选择合适的框架。Spring Cloud提供了一整套微服务架构的解决方案,适合构建复杂的分布式系统;而Dubbo则以其高性能和灵活性,适用于对性能要求较高的应用场景。无论选择哪种框架,都需要结合实际业务需求进行优化和调整,确保系统的高效运行和稳定性。希望本文的介绍能帮助读者更好地理解和应用Spring Cloud和Dubbo,从而提升微服务架构的治理能力。常见问题。
2024-08-08 15:46:10
1492
原创 数据库中间件 MySQL Proxy 深度解析与实战
MySQL Proxy 是一个中间件工具,位于 MySQL 客户端和 MySQL 服务器之间。它可以截获、分析和修改客户端与服务器之间的 SQL 语句,从而实现负载均衡、读写分离、查询缓存等功能。
2024-08-07 17:15:13
2101
原创 RabbitMQ 消息队列中间件详解
RabbitMQ是一个开源的消息队列中间件,实现了高级消息队列协议(AMQP)。它主要用于异步通信、任务调度和负载均衡等场景,广泛应用于分布式系统中。RabbitMQ由Erlang编写,具有高并发、高可用和高可靠性的特点。RabbitMQ作为一款强大的消息队列中间件,广泛应用于各种分布式系统中。本文详细介绍了RabbitMQ的基本概念、安装配置方法以及在Java环境下的使用示例。希望有疑问和补充欢迎大家在评论区探讨。
2024-08-06 15:44:50
1663
原创 Java常用中间件(后续更新)
中间件是一种软件层,位于操作系统和应用程序之间,负责管理数据和应用程序的交互。在分布式系统中,中间件能够让不同的应用或服务相互通信,协调各种服务,从而实现高效的数据处理和服务调用。在Java开发中,合理选择和使用中间件可以极大地提高系统的性能、扩展性和可维护性。无论是消息队列、数据库管理、服务治理还是缓存技术,都在现代分布式系统中发挥着重要作用。本文先总结一些当前常用的中间件技术,后续会进行详解,想追更的朋友们可以先点个关注哦。
2024-08-06 15:30:24
7919
原创 docker详细笔记
Docker是一个开源的容器化平台,旨在使应用程序在任何环境中都可以简单和一致地运行。通过使用操作系统层的虚拟化,Docker可以将软件包及其依赖项封装成一个标准化的单元(即容器)。通过本文的学习,我们详细介绍了Docker的基础知识、环境安装、基本命令、以及进阶操作。希望这些内容能帮助你更好地理解和使用Docker,提高开发和部署效率。Docker作为一个强大的工具,在现代软件开发中扮演着越来越重要的角色,掌握它将极大提升你的技术能力。
2024-08-03 14:54:21
1837
2
原创 mysql8.0规范
在开发中,虽然性能大多决定于架构设计,但是合理的使用sql语句,是开发人员的必修课,今天基于mysql官方文档,给大家整理一些mysql的规定。约束度:【强制】规范描述同一项目(产品)中存储相同数据的列类型必须一致,列名必须一致。同业务字段在不同项目数据表需要使用同一字段名。使用 DTS 同步的数据表和原表保持一致的字段定义,表名可根据业务不同。同一个业务线采用统一字符集,避免隐式转换。控制单库表个数,单库表个数不超过 4096 个。
2024-08-02 17:20:25
1510
原创 MQTT协议详解及Java简易实现指南
MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的消息传输协议,在物联网领域广泛应用。它具有轻量、开放、简单、易实现等特点,非常适合资源受限和网络条件较差的环境。本文将从概念、特性、版本、使用几个方面进行详细讲解,最后通过一个Java简单示例来展示如何实现MQTT通信。
2024-08-01 17:02:18
3360
1
原创 sql查询优化小知识-01,非等值条件查询影响
为了优化查询性能,尽量使用等值条件进行筛选。如果业务逻辑确实需要使用非等值条件,可以考虑使用复合索引来提高性能。此外,也可以借助数据库的查询计划(使用EXPLAIN关键字)来了解具体的索引使用情况,并据此做进一步优化。
2024-07-30 16:17:45
796
原创 TWR写法简化finally块中显示关闭资源
try-with-resources (TWR) 是 Java 7 引入的一种特性,用于简化资源管理。资源指的是那些必须在使用后关闭的对象,例如文件、数据库连接、网络连接等,通常它们实现了。
2024-07-30 15:36:37
444
原创 面向对象编程的精髓你真的掌握了吗?
面向对象编程(Object-Oriented Programming, OOP)是一种基于“对象”概念的编程范式。对象是数据与操作该数据的方法的封装,通过对象的相互交互来实现系统的功能。
2024-07-29 16:03:26
439
原创 aop-原理、使用简介
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在增加程序模块的横切关注点。横切关注点是指那些影响多个模块的功能,例如日志记录、事务管理、权限控制等。切面是AOP中的一种抽象,它将横切关注点封装到了一个模块中。@Aspect@Component// 切入点和通知将在后面定义通知是实际插入到程序中的代码。前置通知(Before)后置通知(After)返回通知(AfterReturning)异常通知(AfterThrowing)
2024-07-26 15:12:47
1123
原创 反射与动态代理初谈
在 Java 编程中,我们常常会遇到需要通过面向对象特性动态创建实例、调用方法或获取字段的场景。Java 提供了强大的反射机制和动态代理,实现了运行时对类、方法、属性的操作。本文将详细介绍反射与动态代理的基本概念、实现原理、以及使用场景,并通过丰富的例子帮助读者更好地理解和应用这些强大的编程工具。反射(Reflection)是一种可以在程序运行时动态获取类的结构及其成员信息,并对其成员进行操作的机制。通过反射,程序能够在运行时检查和调用类的方法、字段、构造函数等信息。
2024-07-24 15:02:31
759
原创 用动态规划轻松解决问题:从日常生活到编程
动态规划是一种非常高效的算法设计方法,适用于分阶段解决问题。其核心思想是将问题分解为相互重叠的子问题,存储子问题的结果,避免重复计算,从而降低时间复杂度。
2024-07-22 17:34:23
907
原创 深入分析MapStruct源码:为什么只需写抽象接口就能自动生成代码
在Java开发中,数据对象之间的转换是一个非常常见的需求。手动进行这些转换不仅冗长且容易出错,因此,引入自动化转换工具显得尤为必要。MapStruct 就是这样一个高效、强大的类型转换工具,它通过注解和接口自动生成转换代码。本文将深入探讨MapStruct为什么只需定义一个抽象接口,就能自动生成实现代码的奥秘。MapStruct 是一款Java的代码生成器,旨在通过注解方式自动生成Java Bean之间的转换代码。
2024-07-19 14:19:53
1770
原创 解决前端和后端时间不一致问题的实践指南
造成前端和后端时间不一致的常见原因是时区差异。在后端代码中生成的时间可能是以系统默认时区(如 UTC)为基础的,而前端可能在不同的时区环境下解释该时间。因此,在时间传递过程中,必须确保时区信息的一致性和正确处理。当你在spring:jackson:将日期格式统一设置为。将默认时区设置为GMT+8(中国标准时间,即 CST)。通过在文件中配置 Jackson 的日期格式和时区,你可以确保在序列化和反序列化过程中使用一致的时间格式和时区。
2024-07-19 13:55:44
3687
原创 探索热部署与热加载:全面提升开发与运维效率的最佳实践
热部署(Hot Deployment)指的是在服务器运行时,重新部署应用,而无需停止服务器容器的操作。这种方式会释放原应用占用的内存,适用于生产环境。热部署可以实现整个应用的重新加载,确保应用在不停机状态下完成升级或变更。无需重启服务器,节约时间。避免服务中断,适用于高可用性要求的生产环境。实现较为复杂。不适用于所有类型的变更(特别是涉及底层依赖的变更)。热加载(Hot Reloading)在应用运行时重新加载类文件,主要依赖于 Java 的类加载机制。
2024-07-18 14:29:20
766
原创 解决ElasticJob项目重启ZooKeeper注册冲突以及zkCli删除目录
问题原因定时任务使用了代理,默认情况下会读取代理类名称,而不是原始类名称,导致任务名冲突。解决思路自定义一个,在项目重启时,确保读取到的是原始类名称,而不是代理类名称。实现自定义@Override在这里,我们使用方法获取原始类名,这样就避免了代理类引起的冲突问题。
2024-07-18 13:57:33
1304
原创 避开精度导致的误判:正确使用Java BigDecimal比较的方法
在Java中使用BigDecimal进行数值比较时,一定要注意其equals方法的行为,它不仅考虑数值,还包括精度。为了避免因精度问题导致的BigDecimal比较不相等,建议使用compareTo方法进行数值比较。希望这篇博客能帮助大家更好地理解和处理BigDecimal的精度问题,若有任何问题欢迎在评论区交流讨论!希望这篇文章能够帮助你更好地处理BigDecimal的精度问题。
2024-07-17 10:54:22
1717
原创 Zookeeper是什么,为什么要用,怎么用?
Zookeeper是一个开源的分布式协调服务,它提供了一种简单的、高性能的、高可用的协调机制。Zookeeper可以用来做配置管理、命名服务、分布式锁和集群管理等。它最初由雅虎开发,现在是Apache Software Foundation的顶级项目之一。通过创建临时顺序节点来实现分布式锁的竞争,节点序列最小的获得锁,其余的监听比自己小的节点,释放锁时将节点删除,通知下一个节点进行竞争。Zookeeper作为分布式协调服务,广泛应用于各种分布式系统中。
2024-07-16 09:48:00
7076
原创 CollectionUtils.isEmpty你真的会用吗?CollectionUtils.isEmpty可能存在的坑
前言:最近在复盘时,发现之前在开发中遇到的一些小问题:我们先来看看这段代码:如果这里的ids为[null,null,null]这段代码可以走下去吗?可能有同学会说:当然啦,这不相当于ids就是null恭喜你,这边文章又帮你扫了一个知识点我们来看看CollectionUtiles.isEmpty()的源码:我们可以看出,如果ids为[null,null,null],实际上这里返回的是false验证一下:可以看到,我在这个needSynEmployTOS中添加了很多空对象,并把他的id收集为
2024-07-15 13:59:13
829
原创 记录-left join 左外连接可能出现的坑
原因:条件在 LEFT JOIN 的 ON 子句中而不是 WHERE 子句中。修正:迁移条件到 WHERE 子句。
2024-07-10 16:34:47
580
1
原创 圣诞树源码
等一下哈 马上来啦...</div>';'<div class="text-loading">等一下哈 马上来啦...或者</li><li class="title">请选择音乐
2023-12-07 01:16:25
607
1
原创 线程池如何知道一个线程已经执行完毕【超详细版】
不管是线程池内部还是外部,要想知道线程是否执行结束,我们必须要获取线程执行结束后的状态,而线程本身没有返回值,所以 只能通过阻塞-唤醒的方式来实现参考文章:https://www.51cto.com/article/720389.html。
2023-08-10 18:33:50
7497
1
原创 为什么阿里巴巴Java开发手册中强制要求线程池不允许使用Executors创建?
【代码】为什么阿里巴巴Java开发手册中强制要求线程池不允许使用Executors创建?
2023-08-06 11:58:43
616
1
原创 Java中常见五种线程池及其使用线程池弊端
根据不同的需求,可以选择不同的线程池来优化并发编程的效率。FixedThreadPool和CachedThreadPool适合不同长度的任务,ScheduledThreadPool适合定时或延迟执行任务,SingleThreadExecutor适合需要执行的任务,WorkStealingPool适合任务之间需要相互协作的任务。
2023-08-05 17:45:38
813
1
原创 JAVA中几种垃圾回收器及其特点
前言:在java中垃圾回收机制发挥着极其重要的作用,能够实现无用对象内存自动释放、减少内存碎片、加快分配速度,本文将介绍几种常用的垃圾回收器以及其特点特点:1.当eden(伊甸园区)内存不足时,发生Minor GC,采用标记复制(因为新生代区的存活对象较少,使用标记复制法的效率高),STW(stop the world),在进行gc时暂时停止用户线程.2.old 内存不足发生Full GC,标记整理STW发生Full GC ,新生代和老年代会根据分代回收算法,同时进行垃圾回收,新生代通过标记复制法来
2023-06-10 13:35:45
3258
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅