自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis存储时 采用Jackson序列化的问题

本文介绍了Redis使用Jackson序列化时遇到的问题。当序列化带有getter方法的Java对象时,Jackson会将getter方法也转换为字段存储,导致反序列化时找不到对应属性。例如,Line类的getFormattedTime()方法被序列化为formattedTime字段,但类中并无此字段。解决方法是给getter方法添加@JsonIgnore注解,排除不需要序列化的属性。这保证了Redis存储数据与Java对象结构的正确对应。

2025-10-28 13:21:45 253

原创 来财智投项目问题总结

分布式交易系统问题总结与解决方案 本文总结了构建分布式交易系统时遇到的8个核心问题及解决方案: 分布式事务:采用本地消息表+异步补偿机制实现最终一致性,避免Seata XA模式的性能瓶颈 OAuth2安全上下文传递:通过任务序列化传递安全信息、服务间Basic Token认证等方式解决定时任务中的授权问题 任务处理扩展性:使用模板方法模式将业务流程与业务逻辑分离,支持新增业务类型无需修改原有代码 幂等性设计:采用业务类型+任务ID作为唯一标识,通过缓存机制防止重复处理 Feign调用误区:Get请求必须明确

2025-10-27 18:14:37 1139

原创 CPU缓存失效与缓存一致性问题

摘要 本文探讨了在高频交易系统中遇到的CPU缓存失效问题及其解决方案。作者在设计数字资产交易系统时,发现盘口数据更新存在严重延迟。分析发现,这源于获取盘口数据的接口频繁访问导致CPU缓存一致性协议(MESI)开销过大,影响撮合效率。问题具体表现为:订单创建后长时间未撮合,盘口数据更新延迟严重。解决方案包括:1)使用ConcurrentHashMap替代数组存储事件处理器,实现O(1)查询;2)引入多级缓存机制(本地+Redis),通过JetCache缓存盘口数据快照,减少缓存失效。最终通过系统架构优化解决了

2025-10-27 18:09:48 554

原创 来财智投项目问题总结

本文总结了微服务项目开发中的六个关键问题及解决方案:1) 采用本地消息表+异步补偿机制实现分布式事务最终一致性;2) 通过任务信息传递、获取新token或服务间认证解决OAuth2上下文丢失问题;3) 使用模板方法模式实现任务处理器标准化,避免if-else判断;4) 引入幂等机制防止重复处理异步任务;5) OpenFeign的Get请求需明确标注@RequestParam参数;6) 配置classpath*解决微服务间资源文件扫描问题。这些问题涉及分布式事务、安全认证、设计模式、接口调用等微服务核心难点,

2025-10-24 11:18:33 578

原创 分布式系统中各服务通信与数据一致性问题探讨

大流程异步化:通过消息队列,将冗长的交易链路解耦,提升响应速度。小范围保原子:在单个服务内部,充分利用数据库事务和行锁,保证关键操作的原子性和一致性。跨服务最终一致:通过“异步任务表 + 定时任务补偿”的模式,可靠地完成跨服务的数据同步,保证系统最终会一致。冲突管理:通过“状态机、乐观锁、行锁”来管理并发写操作,防止数据错乱。步任务表 + 定时任务补偿”的模式,可靠地完成跨服务的数据同步,保证系统最终会一致。4.冲突管理:通过“状态机、乐观锁、行锁”来管理并发写操作,防止数据错乱。

2025-10-23 00:21:32 677

原创 BigDecimal对象比较时的注意事项

从double创建:可能丢失精度信息,结果不可预测从字符串创建:完全保留精度信息equals():严格比较值和精度:只比较数值大小,推荐用于数值比较所以在实际开发中,对于BigDecimal的数值比较应该使用而不是equals()(血淋淋的教训😓)。

2025-10-21 19:28:29 252

原创 Docker部署RocketMQ时Broker IP地址问题及解决方案

本文介绍了Docker部署RocketMQ时Broker注册内网IP导致生产者无法连接的问题及解决方案。问题表现为控制台显示Broker地址为Docker内网IP(如172.17.0.6),解决方法有两种:修改Broker配置文件添加brokerIP1参数指定公网IP,或通过Docker启动参数设置BROKER_IP环境变量。修改后Broker将正确注册公网IP,确保外部生产者能正常连接。该方案适用于需要外部访问Docker容器内RocketMQ服务的场景。

2025-10-20 23:06:04 522

原创 面向接口编程在消息中间件中的实战:从强耦合到灵活解耦的设计演进

在我之前开发的高并发商城项目中,遇到了一个典型的微服务通信问题:用户支付完成后需要更新订单状态,但支付服务和订单服务分属不同的微服务模块。在实际项目中,这种设计思路不仅适用于消息中间件,还可以扩展到数据库访问、缓存、RPC调用等各个层面,真正实现"面向接口编程,而非面向实现编程"的软件设计理念。技术选型会变,业务需求会变,但良好的架构设计能让系统在变化中保持稳定和可维护。最近在开发实时货币交易系统时,同样使用了消息中间件。通过面向接口编程的思想,我们将消息中间件的使用从技术实现细节提升到业务架构设计层面。

2025-10-19 18:50:04 685

原创 HTTPS的四次握手过程

第二次握手:服务端接收到客户端请求后,向客户端发起响应,内容包括选择一个TLS版本和加密算法(RSA等),除此之外,服务端还会发送一个数字证书(该证书包含服务器公钥、等信息,由证书机构颁发,这是为了确保服务器的可信)该数字证书通过机构私钥加密。第三次握手:客户端接收到服务器发来的信息后,使用预先保存的证书机构的公钥解密数字证书,验证服务器身份是否可信,接着再生成一个随机数,使用服务器刚刚发送的公钥进行加密该随机数,将该信息发送给服务器。双方使用这个密钥发送消息,这一步是确保双方可以正确的加密解密消息。

2025-10-19 10:00:41 349

原创 TCP/IP 四层模型

2025-10-17 18:06:29 437 1

原创 序列化时错误

public class RpcRequest implements Serializable 加上即可。这是因为Java对象进行序列化时,需要实现Serializable接口。NotSerializableException,序列化时出现异常。

2025-09-26 16:34:13 142

原创 Spring + Spring MVC + Spring Security 配置问题排查与解决总结

基于传统 SSM 架构(Spring + Spring MVC + MyBatis)整合 Spring Security,开发过程中因容器分层(根容器 / 子容器)、Bean 依赖注入、组件扫描规则不匹配,引发一系列 Bean 创建失败、依赖缺失异常,最终通过规范容器职责、明确 Bean 归属、修正扫描规则解决。UsersServiceImpl 归属于根容器,BCryptPasswordEncoder 若在 MVC 子容器(随 SecurityConfig),根容器无法访问子容器 Bean;

2025-09-15 00:38:59 922

原创 全是bug的小游戏平台,有胆你就来~

H5游戏大厅。

2025-06-11 16:33:18 453

原创 定时任务Spring_Task

Spring定时任务执行步骤:引入依赖→编写执行方法→配置任务调度(XML/注解)。Cron表达式包含6-7个字段(秒分时日月周[年]),支持特殊字符实现灵活调度。注解方式需开启@EnableScheduling并标记@Scheduled方法。默认单线程执行可通过配置线程池优化性能,SpringBoot项目需在启动类添加@EnableScheduling注解。文中提供20余个典型Cron案例参考,涵盖分钟/小时/日期/工作日等常见触发场景。

2025-06-10 09:30:27 399

原创 AOP面向切面编程

摘要:AOP(面向切面编程)是一种在不修改源码的情况下增强方法功能的技术。其核心术语包括连接点、切点、通知和切面,主要应用于事务处理、日志管理等场景。实现AOP需要配置依赖、创建切面类,并通过XML或注解方式定义切点表达式和通知类型(如前置、后置、环绕等通知)。注解配置更简洁,可通过@Aspect和@EnableAspectJAutoProxy实现。AOP的优势在于减少重复代码,提高开发效率和可维护性。

2025-06-10 09:01:03 1060

原创 kafka快速入门与知识汇总

Kafka快速入门与知识摘要 Kafka是一款高性能分布式消息中间件,广泛应用于大数据领域。本文从应用场景、架构设计到基础操作进行了系统介绍: 核心优势: 应用解耦 - 通过异步消息传递降低服务间耦合 异步提速 - 显著提升系统响应速度 削峰填谷 - 缓冲流量冲击保护后端系统 架构组成: 生产者/消费者模型 Topic主题分区存储 Broker集群协调管理 Zookeeper统一协调 基础操作指南: 服务配置启动 Topic管理命令 消息发送/消费实践 生产者原理: 消息封装(Topic/Key/Value

2025-06-10 00:25:10 1762

原创 基于SpringAI构建的剧情发展互动小游戏

在线访问地址: 沉浸式剧情交互系统

2025-06-05 11:01:52 214

原创 单调读一致性(Monotonic Reads Consistency)详解

单调读一致性在保证"不退回旧数据"的同时,比强一致性有更好的性能表现。选择合适的实现方案需要权衡系统复杂度、性能要求和业务需求。理解这些算法原理有助于设计更合理的分布式架构。

2025-04-20 09:29:19 417

原创 深入理解后读一致性及其解决方案

后读一致性是保障用户体验的重要特性,特别是在用户生成内容、实时交互等场景。理解各种解决方案的优缺点,才能根据业务特点做出合理选择。在分布式系统的设计中,我们总是在一致性、可用性和性能之间寻找平衡点。希望这篇文章能帮助你理解后读一致性及其解决方案。如果你有更多问题或不同见解,欢迎在评论区讨论。

2025-04-20 08:52:03 563

原创 从0~1写一个starer启动器

使用过Spring框架的伙伴都知道,虽然Spring在一定程度上帮助我们简化了集成其他框架,但在集成框架的同时仍少不了大量的XML配置,这些繁琐的工作无疑会加重我们的工作任务。而Spring Boot相较于Spring的一个突出优势即为简化了大量繁琐的配置,采用约定大于配置原则,让程序员将更多的精力花费在业务上。在一个基于Spring Boot搭建的Web项目中,我们常常使用。

2025-04-16 19:06:01 737

原创 力扣470 等概率随机数问题通解

【代码】力扣470 等概率随机数问题通解。

2025-04-08 17:25:36 368

原创 布隆过滤器

一个说「不存在」绝对靠谱,说「存在」可能误判的概率型数据结构核心组件位数组(Bit Array):长度为N的二进制向量K个哈希函数:将元素映射到位数组的不同位置。

2025-04-03 14:30:29 397

原创 TCP拥塞控制

通过动态平衡探测带宽(慢启动)与保守调整(拥塞避免),TCP能在效率与稳定性间取得平衡。

2025-04-03 10:56:13 435

原创 对G1垃圾回收器的个人理解

G1将堆内存划分为多个区域,每个区域可以充当为Eden、Survivor、Old、Humourgourous(对象大小超过区域大小的一半),区域间不要求物理上连续。G1的工作流程主要分为以下几个操作:youngGC(采用复制算法清除Eden和Survivor区域的垃圾,存活对象复制到空闲的Survivor或者晋身到老年代,该操作会导致STW,因为会造成对象的移动,引用需要调整);mixedGC:并发标记完成后,将新生代垃圾和高垃圾比例的老年代区域回收(包括Humongous区域)。

2025-04-01 10:10:26 318

原创 堆排序代码实现

以下是我对堆排序的个人理解,理解不到位希望佬们即时指正!

2025-03-30 23:50:54 261

原创 redis 几种常见数据类型

String是redis中我们最常用的一种数据类型,他是二进制安全的,可以存储任意格式的数据,像png,序列化对象等,同时还支持原子操作和键过期设置。当数据量较小时使用ziplist(压缩列表)作为存储结构,特点是内存紧凑,当数据量越来越大时,性能下降,转化为hashtable(哈希表)存储。可以快速统计不重复元素的个数(不精确),适合用于统计大量数据,比如说热搜访问次数。特点:和set几乎一样,多了个排序功能,可以按照score排序。每一位只存储0或1,1代表用户在线,0表示不在线。

2025-03-28 14:09:00 336

原创 设计模式之代理模式

代理模式:找个中介帮你干活。动态代理:让程序自动生成中介。

2025-03-28 00:03:21 1388

原创 mybatis缓存机制

缓存是保存在内存中的一块区域。使用缓存可以避免与数据库的直接交互,通过缓存将数据返回,提升查询效率的同时减少对数据库的压力。一级缓存:默认开启,注意会话内数据一致性二级缓存:读多写少用,写多读少慎用分布式环境:必须配合集中式缓存(如Redis)

2025-03-27 20:46:12 1016

原创 rocketmq从入门到精通~

现如今,各大网站访问流量越来越大,保证系统可用的同时提升用户的体验至关重要。RocketMQ 是一个由 Apache 开发的高性能、高可靠性、高实时性的分布式消息中间件平台。它支持多种消息传输模式,包括普通消息、顺序消息、事务消息和定时/延时消息,适用于微服务和大数据场景。RocketMQ 以其云原生、高吞吐量、流处理和金融导向的特点,广泛应用于物联网、数据集成、微服务等领域。(引用百度)总结:是一个高可用、低延迟、高可靠的消息中间件,可用于异步提速、 削峰填谷、应用解耦。RocketMQ的核心优势在于。

2025-03-27 11:49:47 2443

原创 Spring Security 入门

UserDetailsService用于处理自定义认证逻辑,它可以帮助我们检查用户密码是否正确,以及封装用户信息等操作。执行流程:用户提交表单,执行重写的loadUserByUsername方法,根据传入的用户名查找数据库(需程序员手动编写),如果用户为空,抛出异常,非空则封装权限,将用户名密码及权限封装为UserDetails对象,框架会将UserDetails中的密码项与表单中的密码自动进行比对。@Service。

2025-03-25 16:40:14 1762

原创 JVM类加载机制

JVM 的类加载机制是 Java 程序运行的核心部分之一,它负责将.class文件加载到内存中,并生成对应的Class对象。理解类加载机制对于深入掌握 Java 程序的运行原理、解决类加载相关的问题(如)以及实现自定义类加载器都非常重要。类的加载主要包括三个步骤:加载、链接、初始化。下面我们来详细分析这三个步骤1、加载:将 .class 文件加载到JVM内存中2、链接验证:检查字节码文件是否符合JVM规范。

2025-03-22 21:21:28 457

原创 Java 垃圾回收算法

JVM的垃圾回收机制帮助java程序员管理内存,提高了开发效率,而理解垃圾回收机制可以帮助我们提高代码质量,提升自己的硬实力。总的来说,Java的垃圾回收算法经过不断的优化和改进,采用了多种算法相结合的方式,以提高回收效率和减少内存碎片。分代回收算法是其中比较重要的一种,能够有效提升垃圾回收的效率。

2025-03-22 09:39:49 1064

原创 Java 中的四种引用

本文详细介绍了Java中强引用、软引用、弱引用、虚引用四种引用方式的特点和使用,通过了解他们各自的特性,可以帮助我们在开发过程中避免很多问题

2025-03-21 19:59:13 627

原创 Socket网络编程

提示:在学习网络编程之前我们先简单了解一下什么是计算机网络用一句话来说:计算机网络利用通信线路将所在不同位置的两台计算机连接起来,从而共享资源。

2025-03-21 10:05:53 989 3

空空如也

空空如也

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

TA关注的人

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