自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 去中心化金融的无常损失

无常损失是一种去中心化金融 (DeFi) 现象,当自动做市商 (AMM) 算法驱动的代币再平衡公式在流动性池内的资产价格与流动性池外的资产价格之间产生差异时,就会发生这种现象。

2022-08-22 23:48:46 791

原创 什么是自动做市商?

自动化做市商 (AMM) 是去中心化金融 (DeFi) 生态系统的一部分。它们允许数字资产通过使用流动性池而不是传统的买卖双方市场以无需许可和自动的方式进行交易。AMM 用户为流动性池提供加密代币,其价格由恒定的数学公式确定。流动性池可以针对不同的目的进行优化,并被证明是 DeFi 生态系统中的重要工具。自动做市商(AMM) 允许通过使用流动性池而不是传统的买卖双方市场,在未经许可的情况下自动交易数字资产。在传统的交易平台上,买卖双方为资产提供不同的价格。

2022-08-22 23:33:12 2100

原创 Tomcat线程模型 BIO模型源码与调优

BIO模型:一个请求创建一个工作线程,每个请求都是同步阻塞的,也就是顺序访问完成之后才会给出响应. 其中收到请求分为几步:1.收到请求,2创建工作线程,3.读取socket请求内容,4.执行业务逻辑,5.写socket响应. 这几步都是顺序执行的,同步调用,阻塞的.意思就是有一个步骤卡顿响应都收不回来. 好处,编码简单, 坏处:一个请求一个线程,线程过多会造成服务器压力过大.一...

2018-04-15 21:25:33 1189

原创 【无标题】

服务器配置:8核16G服务类型:Java交易柜台运行状态:稳态压测,整机CPU占用90%

2026-09-03 22:37:00 348

原创 彻底搞懂 AI Agent 记忆系统:分级存储、用户隔离、长会话优化(生产级落地指南)

本文深入探讨AI Agent记忆系统的核心架构与落地实践,指出记忆系统是区分普通对话机器人和智能Agent的关键。文章提出三级记忆架构:瞬时记忆(实时推理上下文)、中期记忆(会话持久化存储)和长期记忆(跨会话向量化存储),强调生产环境中必须严格遵循租户+用户+会话的三重隔离机制。针对实际落地,详细解析了Redis+MySQL+OSS的多层存储方案,包括数据结构设计、多模态处理及性能优化策略,并给出可直接复用的存储样例。文章特别指出,完善的记忆系统是Agent实现持续学习、个性化服务和复杂任务处理的基础能力。

2026-08-15 17:41:35 387

原创 一次典型线上故障:线程池配置不合理导致CPU永久抖动问题复盘

摘要:在线服务中,一次1分钟的Redis瞬时超时触发了线程池扩容,但由于JDK线程池的单向不可逆特性,扩容后的151个线程无法回收,导致永久性CPU周期性抖动。故障表现为:业务指标正常但CPU系统态(sy)显著升高,大量线程处于TIMED_WAITING状态。根本原因是线程池配置不当与高频低效IO设计,放大了瞬时抖动的影响。解决方案包括优化线程池配置(缩短keepAlive时间、限制最大线程数)、改造批量Redis写入、增加定时任务防护等。核心经验:高频IO场景应避免弹性线程池,需通过合理配置和监控预防类似

2026-08-13 08:26:34 298

原创 Kafka Producer 隐藏深坑:Sender 线程自阻塞(自死锁)导致 BufferExhaustedException 完整复盘

摘要 线上订单推送系统出现BufferExhaustedException,根源是Kafka Sender IO线程陷入自死锁。问题代码在异步发送失败后,在IO线程内同步重试,导致线程阻塞自身,无法继续处理消息。由于默认单IO线程配置,该线程卡死导致消息堆积,最终缓冲区耗尽。核心教训:避免在IO线程回调中执行阻塞操作,必须指定独立线程池处理回调逻辑。解决方案包括使用异步重试、增加IO线程数等。

2026-08-13 07:47:41 724

原创 Disruptor

stateMachine.onApply() 运行在 Disruptor 单消费线程,一旦阻塞,整个节点所有 Raft 任务停滞。SnapshotSaveTask / InstallSnapshotTask 快照任务。⚠️ 回调逻辑绝对不能直接处理 Raft 状态,必须投递任务进 Disruptor。RequestVoteTask / PreVoteTask 选举任务。✅ 运行在 Disruptor 队列(RaftTask)TimeoutNowTask 选举超时触发任务。关键标记汇总(对照图理解)

2026-07-27 11:47:57 221

原创 零拷贝(Zero\-Copy)梳理

优点:支持文件动态修改,相比传统IO减少一次CPU 拷贝;缺点:内存映射占用进程虚拟内存,超大文件易 OOM,缓冲区回收低效。零拷贝技术CPU拷贝次数适用场景优缺点0次大文件转发、静态资源下载、文件传输性能最高,不支持数据修改mmap 内存映射1次文件读写、内容修改、日志落地支持动态编辑,超大文件易 OOM2次高频网络 RPC、HTTP 接口、报文传输无隐式拷贝,通用高性能方案传统 BIO 堆数组3次小数据、低并发简单业务实现简单,性能最差。

2026-07-22 08:53:10 319

原创 高频交易低延迟场景落地零拷贝核心原理

高频交易系统与普通业务系统的核心区别在于对极致低延迟和稳定性的严苛要求,普通系统容忍微秒级延迟波动,而高频交易需追求纳秒级稳定延迟。传统CPU内存拷贝在高频交易中会引发致命问题:抢占绑核CPU算力、导致Cache颠簸产生长尾延迟、增加上下文切换开销,尤其在小包高并发场景下拷贝耗时甚至超过业务计算。Java交易系统需使用堆外内存避免隐式拷贝和GC停顿。零拷贝技术分为内核级(如sendfile)和应用层(如Direct内存、缓冲区复用),通过消除无效CPU拷贝、减少态切换、保障Cache命中率,将算力100%用

2026-07-22 08:15:25 332

原创 Disruptor 阻塞策略、超时机制及队列满处理完整文档

本文详细解析了Disruptor框架中的等待策略与超时机制。主要内容包括: 等待策略分类: 自旋类(BusySpin/Yielding/Sleeping):无锁、低延迟但高CPU占用 阻塞类(Blocking/LiteBlocking):低CPU、稳定但存在上下文切换 超时阻塞类(TimeoutBlocking/LiteTimeoutBlocking):支持限时等待 混合退避类(PhasedBackoff):阶梯式退避机制 超时机制区分: 消费者超时:通过TimeoutBlockingWaitStrateg

2026-07-21 09:28:39 304

原创 Spring Kafka 消息积压场景完整定位手册

Kafka消费积压问题可归纳为四大根因:业务处理瓶颈、消费并发不足、频繁重平衡和Broker限流。通过监控指标可精准识别三种积压类型:假性积压(重启预热)、稳态积压(持续上涨)和抖动型积压(中断导致)。核心排查流程包括:优先检查重平衡次数判断中断问题,分析处理延迟识别业务阻塞,确认Broker限流指标,评估并发度匹配性,以及排查异常重试阻塞。典型场景特征鲜明:波动积压多因重平衡,匀速上涨伴高延迟是业务瓶颈,低延迟但吞吐封顶则需扩容并发,拉取受限需关注Broker状态。

2026-07-20 21:13:57 420

原创 Spring Kafka 消费端线程模型与完整数据流详解

本文系统剖析了Spring Kafka的线程模型与消费全链路机制。核心要点包括:1)Spring Kafka复用原生KafkaConsumer,构建三层线程体系(消费主线程、心跳守护线程、可选业务线程池);2)完整消费流程包含7个阶段,从初始化到Offset提交再到重平衡处理;3)生产注意事项强调线程隔离、合理并发配置、异步处理优化等。文章指出,稳定消费的关键在于解耦业务与消费线程,控制处理时长,并采用静态消费者ID等优化措施。通过深入理解这套机制,可有效避免重平衡、消息堆积等问题。

2026-07-20 09:25:19 462

原创 Java GC日志完整分析实战指南

本文系统介绍了Java GC日志的解读与分析实战方法,涵盖GC日志开启参数、核心字段解析、主流收集器日志解读及标准化分析四步法。重点讲解了GC触发类型(如Allocation Failure、Promotion Failure等)的诊断意义,通过指标统计、根因定位、内存变化分析和异常判别,帮助开发者快速排查内存抖动、OOM等问题。文章适配G1/CMS收集器及JDK8+版本,提供从日志采集到问题解决的完整指导。

2026-07-19 12:14:14 319

原创 Java 序列化与反序列化原理、内存痛点与优化

本文系统分析了Java序列化/反序列化的核心原理、技术分类及性能痛点,重点阐述了其作为新生代GC频繁、接口毛刺的核心诱因。文章对比了文本型(JSON)与二进制(Protobuf)序列化技术的优劣,指出JSON解析会创建大量短命对象导致YGC压力。针对性地提出了从代码到架构的九级优化方案:包括序列化器单例、字节数组解析、流式处理、DTO优化、对象复用、AOT编译及Protobuf协议升级等。最后强调优化核心在于减少临时对象创建,普通业务通过编码优化即可见效,高并发场景需结合二进制协议和编译优化。

2026-07-19 11:49:59 179

原创 SpringBoot监控及Dubbo服务优化总结

文章摘要 本文深入剖析SpringBoot监控在生产环境中的性能瓶颈问题,并针对纯Dubbo服务场景提供最优配置方案。通过分析9大核心性能问题(如端点全开、健康检查串行、指标Tag高基数等)及Dubbo服务的4个特殊痛点(如Web容器空转、线程池复用等),给出可直接上线的高性能配置方案:关闭Web容器、独立监控端口、最小化端点暴露、并行健康检查等。同时提供Dubbo接口无损耗监控埋点代码和Prometheus标准采集配置,量化实施后可降低内存占用10%-20%,监控CPU损耗降至1%以下,彻底解决业务线程抢

2026-07-19 11:29:11 170

原创 Redis 全链路序列化性能优化

Redis 本身只存储二进制字节流,所有 Java/业务对象写入 Redis 都必须经过:**对象序列化 → 网络传输 → 磁盘存储 → 反序列化**。绝大多数 Redis 线上慢查询、内存暴涨、GC 频繁、带宽打满、兼容报错,**并不是 Redis 慢,而是序列化方式太差**。本文为生产可用的标准化序列化优化方案,覆盖:序列化选型、Spring 配置、体积压缩、GC 优化、BigDecimal 特殊处理、集群兼容、线上避坑。

2026-07-19 11:16:47 378

原创 Java 热路径内存优化实战:批量下单接口的 5.3 MB/s 短命垃圾消除

1. 中间参数载体是热路径隐性成本Builder、VO、record 用作参数传递时,若在循环内调用且生命周期极短,优先考虑内联消除,不依赖 JIT。2. 集合预分配要区分语义集合语义策略预期有 N 个元素(正常路径)通常为空(异常路径)懒分配盲目预分配所有集合可能在正常路径反而多分配。3. JIT 标量替换不是底线代码优化应在编译期确定,JIT 是锦上添花。内联限制、冷启动、EA 传播失败都会让「JIT 应该能优化」的假设落空。4. 热路径日志 guard 要彻底。

2026-07-18 22:57:44 410

原创 彻底搞懂 JVM 堆内存分配与 TLAB 机制:原理、流程、优化与避坑

栈上分配(未逃逸)> TLAB无锁堆分配 > Eden公共CAS分配 > 老年代直接分配;2. TLAB是Eden线程私有缓冲区,仅优化分配阶段,不改变GC回收逻辑,序列化、跨线程不会使其失效;3. TLAB单块固定、多轮自适应伸缩,默认2KB~512KB,无需盲目调参;4. 高并发小对象场景TLAB收益极高,多线程锁竞争大幅降低,是Java底层核心性能优化;5. 所有TLAB内存均参与Minor GC,GC后全部重建,无特殊优待。

2026-07-18 20:19:29 343

原创 NFT 的技术结构解释

NFT 代表了存在于区块链上的艺术,但这究竟意味着什么?每个 NFT 都包含特定的元数据,即指向 Internet 上文件的唯一数字签名。提示:以下是本篇文章正文内容,下面案例可供参考不可替代代币 (NFT)正在获得广泛认可,远远超出了该技术最初出现的加密社区圈子。NFT 以令人难以置信的高价成为新闻头条,并向数百万人介绍了构成数字艺术的新概念和模型。可以说:NFT 革命如火如荼。这对视觉艺术、音乐产业和游戏领域产生了深远的影响,每天都会出现更多的用例。

2022-08-24 16:59:03 3221

原创 如何对数字货币进行投资分析--基本面

近一个世纪以来,基础研究和分析领域一直是评估几乎所有证券的主要方法。基本面分析源于本杰明·格雷厄姆和大卫·多德于 1934 年出版的开创性著作《证券分析》。作者警告投资者不要仅仅依赖少数几个量化因素,而是要考虑围绕证券的所有业务基本面,以达到其真正价值。基本面分析构成了沃伦巴菲特“价值投资”的基础,许多人认为这是审慎的投资。最初,基本面分析只适用于股票和债券;后来,分析师使用该学科的一部分来研究大多数其他类型的证券。而且,尽管加密资产与传统资产不同,但部分基本面分析也有助于辨别其价值。

2022-08-24 16:52:34 2587

原创 什么是市场流动性?

流动性是一种资产可以在不影响其当前市场价格的情况下转换为另一种资产的容易程度。买卖双方都受益于流动性所带来的基本市场动态,流动性低的市场更容易受到资产价格波动、交易僵局和市场操纵的影响。流动性对于促进快速和无缝的市场交易至关重要。。区块链技术的去中心化和抗审查特性极大地改善了价值和信息的转移方式。然而,虽然代币化资产具有广泛的区块链优势,但购买和交易数字资产的平台仍受多种传统市场动态的影响。这些动态中最普遍的是市场流动性,它在促进资产转移和减少市场波动方面发挥着至关重要的作用。

2022-08-23 14:01:58 3533

原创 什么是做市商

当个人投资者在股票和加密交易所买卖他们最喜欢的资产时,做市商在幕后工作以确保过程顺利进行。做市商负责向市场注入流动性并在整个交易日维持市场,并根据美国证券交易委员会的规定帮助保持市场公平有序。很容易理所当然地认为您今天可以快速高效地进行交易。但请记住,无论何时买卖资产,交易的另一方都必须有人。做市商促进双方之间的销售,并确保在任何给定时间市场上都有特定证券的买家和卖家。

2022-08-23 12:13:01 1377

原创 分布式事务

文章目录前言一、事务二、分布式事务1.什么情况会产生分布式事务2.分布式事务理论基础3.分布式解决方案之强一致4.分布式解决方案之最终一致4.1基本原理4.1.1 获取结果,再决定如何处理4.1.2 试着把事务完成4.1.3 把事务回滚掉4.1.4 TCC4.2解决方案4.2.1 可靠消息模型4.2.1 最大努力通知模型4.2.1 TCC模型总结前言介绍分布式事务:从最基础的事物开始,到分布式事务的几种解决方案。一、事务ACID。二、分布式事务1.什么情况会产生分布式事务跨jvm之间.

2022-01-07 14:55:22 822

原创 kafka 常见问题

1、消息丢失情况:消息发送端:(1)acks=0: 表示producer不需要等待任何broker确认收到消息的回复,就可以继续发送下一条消息。性能最高,但是最容易丢消息。大数据统计报表场景,对性能要求很高,对数据丢失不敏感的情况可以用这种。(2)acks=1: 至少要等待leader已经成功将数据写入本地log,但是不需要等待所有follower是否成功写入。就可以继续发送下一条消息。这种...

2020-03-24 13:23:03 533

原创 如何打造一个验证服务

在一个网站中,经常需要输入验证码,例如一个注册功能,需要邮箱验证码或者短信验证码,在有些服务中还有人机验证等,这些功能都属于验证服务。那么如何打造一个验证服务呢?验证服务都有哪些功能呢?验证服务包含的功能:生成验证码验证码的生成需要随机数,可动态配置生成的策略。发送验证码的文案配置,对于多语言的服务还要考虑多语言的设置。发送验证码合理的发送间隔来防刷,短信邮件等服务都是花钱的。稳定...

2019-11-25 11:47:34 481

原创 ribbon配合restTemplate实现客户端负载均衡、超时重试

背景:最近项目中要求实现请求转发的中间层,其中包含负载均衡和超时重试的功能。具体场景是:我们的服务作为客户端调用第三方服务,第三方服务提供了一个服务的IP和端口号的列表。我们需要根据不同的负载均衡算法来进行服务的调用。实现方式:在restTemplate,中使用注解@loadbalance,配合合理的ribbon的配置进行实现。核心实现摘要:restTemplate的bean ...

2019-05-30 14:05:56 1827 1

原创 已知服务的端口和IP,如何找到该服务所在的位置

登录服务器根据端口 查询启动的程序名称根据名称查询 进程号根据进程号查询 启动目录

2019-05-24 15:57:00 2595

转载 VRF的应用加密抽取

简单来说,加密抽签用密码学的方法来产生一个随机数生成器,用来决定下一个区块的提议者或验证委员会成员,这一随机数生成的概念是Algorand的核心技术亮点之一。这其中将使用可验证随机函数(Verifiable Random Function,简称VRF)来实现随机数的产生,而这个随机函数正是由Algorand创始人Micali于1999年的一篇论文中提出。值得一提的是,Dfinity项目中随机数的生...

2019-05-16 17:51:51 666

转载 MySQL 执行计划 详细实践

使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的。分析你的查询语句或是结构的性能瓶颈

2019-03-22 11:53:29 7697

原创 GO协程号,修改GO源码,编译安装

在开发中,为了实现获取GO协程号,对GO进行源码修改。之后编译安装,本文记录过程,方便以后使用。1、编译GO高版本(1.5版本之上)的需要 先编译GO1.4版本。先下载GO1.4版本。https://storage.googleapis.com/golang/go1.4.3.src.tar.gz下载地址。2、解压 go 到 ~/go 下 tar -zxvf go1.4.3.src.t...

2019-03-20 14:51:16 423

原创 kafka如何保证数据不丢失

kafka笔记之如何保证数据不丢失@TOCkafka笔记之如何保证数据不丢失Kafka是一种高吞吐量的分布式发布订阅消息系统。在使用过程中如果使用不当,经常会出现消息丢失的情况,这是业务系统不能容忍的,消息系统最重要的是保证数据不丢失。本文主要记录kafka是如何保证数据不丢失的,主要从三方面来介绍,消息发送端保证数据不丢失,kafka服务保证消息不丢失,消费者保证消息不丢失。基础知识k...

2019-03-20 10:27:57 8634

原创 面试整理---京东/58到家

最近参加了京东的面试,岗位是Java开发,同时参加了58到家的面试,简单整理一下.58到家面试: 一轮电话面试,三轮技术面试,之后是HR聊了聊谈薪资.具体问题如下:多线程锁的分类(重入锁,读写锁,排他锁,共享锁)分布式锁Redis 实现分布式锁zookeeper 实现分布式锁线程池(参数,线程创建过程,拒绝策略), 实际应用线程安全的集合synchronize和...

2018-05-04 13:46:13 1722

翻译 京东区块链白皮书摘要

简介京东集团拥有全渠道零售和端到端供应链的高质量大数据,区块链技术天然可以解决京东业务场景中多个主体的信息记录与分享,可信数据交换与传递的业务诉求.。早在2016年,京东集团就全面启动了区块链技术在京东业务场景中的应用探索与研发实践,先后在数据交易、供应链管理、金融科技等领域落地了不同的区块链应用,过程中积累了大量的区块链部署经验与底层技术研发能力。建立社会化共享的可信数据库,技术搭建一张...

2018-04-26 00:40:15 4840

原创 Java的异常处理细节

规则一对于try里面发生的异常,它会根据发生的异常和catch里面的进行匹配:按照catch块从上往下匹配,当它匹配某个catch块的时候,就直接进入到这个catch块里面去了,而忽略后面所有的catch块。规则二另外:在写异常处理的时候,一定要把异常范围小的放在前面,范围大的放在后面,即如果多个catch块中的异常出现继承关系,子类异常catch块放在上面(否则,连编译都都法通过)...

2018-04-18 16:29:47 349

原创 TCP 三次握手

网络模型:网络模型有七层网络模型,四层网络模型. 在这里网络传输方面考虑四层模型. 四层网络模型有哪四层?从上到下分为: 1.应用层:具体的协议体现层,常见有HTTP协议 2.传输层:主要进行端对端的交流,找到具体端口对端口的数据传输. 3.网络层:基于网络IP的层,主要是根据IP找到具体的端. 4.数据链路层:基础的二进制,数据传输. Http、tcp、udp、socket...

2018-04-18 16:12:12 320

原创 记录一次session问题

背景描述:用户具有多个身份,比如一个人同时兼任技术经理又兼任项目经理,登录时会有多个身份.具体操作就是用户点击登录后 ,弹框选择身份, 不同身份具有不同的权限. 系统是采用两台服务做得集群,服务器是weblogic,集群是F5硬负载.这还是当时负责集群的人留下的坑. 问题用户反映,当前是A身份登录,操作一段时间按F5刷新,之后变成B身份,问题非常奇怪, 测试难以重现. 可能...

2018-04-17 14:15:32 1516

转载 Truffle开发入门

以太坊是区块链开发领域最好的编程平台,而truffle是以太坊(Ethereum)最受欢迎的一个开发框架,这是我们第一篇区块链技术文章介绍truffle的原因,实战是最重要的事情,这篇文章不讲原理,只搭建环境,运行第一个区块链程序(Dapp)。安装truffle $ npm install -g truffle依赖环境 NodeJS 访问https://nodejs.org 官方网站...

2018-04-17 00:29:52 616

原创 IO模型学习(一)IO模型分类

IO分类在java中,IO分为Bio、Nio、Aio三类,三者有本质的区别,下面主要讲解其在网络IO中的区别。Bio 阻塞式IO,客户端类为Socket,服务端类为ServerSocket。该类中提供的方法全部为阻塞方法,即该操作完成后,该方法才会返回。举例说明,如果调用了Socket输入流的readLine方法,那么该方法必须在读取到换行符才会返回。优点:实现简单缺点:针对每一个客户端...

2018-04-15 16:43:45 513

原创 go语言学习笔记(一):*和&的区别

*和&的区别 :& 是取地址符号 , 即取得某个变量的地址 , 如 ; &a *是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值 .从代码中验证 ://先构建一个Person类型 : package main import "fmt" type Person struct{ ...

2018-04-15 16:19:43 14018

空空如也

空空如也

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

TA关注的人

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