自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 全民AI:RocketMQ 已接入 AI

RocketMQ接入AI,到底接了什么?RocketMQ没有变成一个大模型,也没有变成一个AI推理引擎。它做的是把自己变成AI应用最可靠的消息底座。LiteTopic让每个AI会话都有了独立的“消息通道”异步通信让Multi-Agent协作不再被长耗时阻塞会话状态管理让断线重连不再丢失上下文智能调度让每一分GPU算力都用在刀刃上在AI应用从“单机玩具”走向“企业级系统”的今天,RocketMQ正在成为那个连接AI Agent、调度AI任务、管理AI会话的关键基础设施。

2026-07-01 14:36:54 357

原创 ​​LangChain4j和LangGraph4j是合作还是竞品

最近这几个月,AI Agent 技术简直火得一塌糊涂。GitHub Copilot、Cursor、Claude Code 这些工具已经把“AI 辅助编程”这件事推到了一个新的高度。但当我们回头看 Java 生态,AI 智能体开发这个赛道上,出现了两个绕不开的名字——和。很多小伙伴跑来问我:“三哥,这两个到底有什么区别?我该选哪个?这个问题问得太到位了。Java 开发者做 AI 智能体,确实面临着和当初做微服务时完全一样的选择困境。今天这篇文章就专门跟大家一起聊聊这个话题,希望对你会有所帮助。场景。

2026-06-30 09:20:34 322

原创 Claude Code的自动化编程

错误认知:很多人把 Skill 理解成“插件”或者“扩展”。不是的。本质定义:Skill 本质上是一套标准化工作流。核心差异无 Skill:你告诉 AI “处理这个 PDF”,它必须从零开始现场编写 Python 脚本。在此期间可能产生 Bug、依赖缺失或格式错误。有 Skill:它走的是封装好的成熟流程,每一步都经过标准化验证,直接从“AI 写代码”跨越到“AI 执行标准化流程。

2026-05-26 09:17:57 337

原创 RAG落地方案

要理解 Rerank 的价值,得先理解向量检索到底"差"在哪。RAG 的第一阶段检索,通常用的是双塔(Bi-Encoder)架构的 Embedding 模型。它的工作方式是把 Query 和每个文档编码成一个向量,然后通过余弦相似度或点积来计算相关性。这种方式的最大优势是速度快——文档向量可以提前算好存进向量数据库,线上只需要算一次 Query 向量,然后做一次近似最近邻(ANN)搜索,毫秒级就能从百万级文档中捞出 Top-K。但速度的代价是精度。。

2026-05-15 10:41:12 371

原创 Nacos升级到AI智能体

最近在技术圈看到Nacos 3.2发布的新闻,本以为只是常规迭代,但仔细研究后我发现——Nacos正在发生一场悄无声息的质变。它不再仅仅是微服务注册中心和配置中心,而是进化成了企业级AI资产的“统一治理平台”。从1.x的服务发现,到2.x的配置管理,再到3.x的MCP Registry、Agent Registry、Prompt Registry、Skill Registry……Nacos正在把AI工程化中最难啃的骨头——资源散落、协议异构、安全失控,用一套统一的治理体系给系统性解决了。

2026-05-14 11:14:45 406

原创 Claude Code的安装和使用

CC‑Switch 是给 Claude Code / Codex 等做代理配置的,所以先装 Claude Code。输入 claude 能进入交互界面就说明装好了(先关掉,后面用 CC‑Switch 启动)。因为国内模型中,DeepSeek V4 Pro挺不错的,那我们的CC 就搭配它吧。https://nodejs.org/ 下载 LTS 版,安装时默认选项即可。打开 CC‑Switch,点右上角 + 号,添加 Provider。充值(至少 10 元,不然调不了,我自己充值了10块)

2026-05-08 16:37:19 297

原创 RAG 准确率提升方案

当用户提问时,单独被检索出来的下半块数据根本没有表头的定义,别说大模型看了是一头雾水,换我去看也是一样懵逼。除了重写,还可以顺手做 Query 扩展,让模型根据用户的原始提问,变异出三四个近义问题,用多路查询去并发检索,这能极大弥补用户自身表达不准导致的数据遗漏。如果只把这句话存进向量库,将来检索出来也是毫无意义的,因为你根本不知道它说的是哪个设备。如果 RAG 系统直接拿着“密码忘了怎么办”这几个字去检索文档库,召回的结果大概率是各种乱七八糟业务系统的密码找回规则,毫无针对性。

2026-04-20 17:48:14 368

原创 Redis+Caffeine 多级缓存

随着不断的发展,这一架构也产生了改进,在一些场景下可能单纯使用Redis类的远程缓存已经不够了,还需要进一步配合本地缓存使用,例如Guava cache或Caffeine,从而再次提升程序的响应速度与服务性能。缓存的本质就是存储在内存中的KV数据结构,对应的就是jdk中线程安全的ConcurrentHashMap,但是要实现缓存,还需要考虑淘汰、最大限制、缓存过期时间淘汰等等功能;本地缓存基于本地环境的内存,访问速度非常快,对于一些变更频率低、实时性要求低的数据,可以放在本地缓存中,提升访问速度。

2026-01-20 16:10:12 691

原创 最常用的6种API网关介绍

end-- API Key验证end-- 验证API Key格式end-- 请求体验证endend-- 业务规则验证endend-- 添加验证通过标记-- 记录审计日志end通过本文的介绍,我们对6种主流API网关有了全面的认识。技术栈匹配:选择与团队技术栈最匹配的方案性能要求:根据业务并发量选择性能合适的网关功能需求:评估需要的功能特性,如限流、认证、监控等运维成本:考虑部署、监控、维护的复杂度团队能力:评估团队对网关技术的掌握程度。

2025-11-18 10:38:36 952

原创 系统激增消息积压了100万解决实施方案

在工作中可能遇到过这种场景:某天系统监控告警响了——MQ队列里突然积压了100万条消息,整个系统卡顿如蜗牛。你第一反应是不是“赶紧加机器,扩容消费端”?没错,这招能临时救火,但成本高、见效慢,如果根源问题没解决,积压只会卷土重来。我曾在一次餐饮大促中就处理过类似灾难:我们用的是RocketMQ,每秒生产百万级订单消息,但由于消费逻辑bug,消息堆积到200万条。当时,团队想加服务器扩容,但预算有限、时间紧迫,我们只能另辟蹊径。结果通过优化代码和策略,问题解决了!为什么MQ会积压100万数据?

2025-11-17 11:05:01 1057

原创 Redis百万并发大解密

有些小伙伴可能会疑惑:Redis是单线程的,为什么还能支持这么高的并发?这里需要澄清一个概念,Redis的"单线程"指的是网络IO和键值对读写是由一个线程来完成的,但Redis的整个系统并不是只有一个线程。为什么单线程反而更快?避免了线程切换的开销:多线程环境下,CPU需要在不同线程间切换,这个过程需要保存和恢复线程上下文,开销很大。避免了锁竞争:单线程模型下,不需要考虑线程安全问题,避免了各种锁的开销。CPU缓存友好:单线程执行时,CPU缓存命中率更高,减少了内存访问延迟。让我们看一个简单的对比:1

2025-09-12 13:53:46 105

原创 代码重构的实践技巧

当需要添加新的运输方式时,只需创建一个新的策略类,并将其添加到策略映射中,而不需要修改现有的代码。通过使用方法引用,我们将简单的Lambda表达式替换为更简洁的方法引用,使得代码更加简洁和可读。通过使用多态,我们将不同类型的支付处理逻辑分散到各自的类中,使得代码更加模块化,也更容易扩展。通过使用策略模式,我们将不同的运费计算逻辑分散到各自的类中,使得代码更加模块化,也更容易扩展。通过使用Stream API,我们将命令式的代码转换为声明式的代码,使得代码更加简洁和可读。

2025-09-12 13:49:09 1170

原创 MQ的工作中的实现方案

在深入具体场景之前,我们先来思考一个基本问题:为什么要使用消息队列?系统间的直接调用:引入消息队列后:接下来我们将通过10个具体场景,带大家来深入理解MQ的价值。在我早期参与的一个电商项目中,订单创建后需要通知多个系统:这种架构存在严重问题:紧耦合:订单服务需要知道所有下游服务单点故障:任何一个下游服务挂掉都会导致订单创建失败性能瓶颈:同步调用导致响应时间慢引入MQ后,架构变为:代码实现:技术要点 消息协议选择:根据业务需求选择RabbitMQ、Kafka或RocketMQ消息格式:使

2025-09-04 11:22:45 1047

原创 Spring 状态机实现方案

先来解释什么是“状态”( State )。现实事物是有不同状态的,例如一个自动门,就有 open 和 closed 两种状态。我们通常所说的状态机是有限状态机,也就是被描述的事物的状态的数量是有限个,例如自动门的状态就是两个 open 和 closed。状态机,也就是 State Machine ,不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换图。例如,根据自动门的运行规则,我们可以抽象出下面这么一个图。

2025-09-03 15:10:00 987

原创 Binlog Server守护MySQL数据0丢失

其中绿色线表示Binlog Server控制流,主要是从Admin管理员发送的管控SQL,在SQL解析器处理后,在Manage模块进行处理,可以对MasterSession(和主库的连接),SlaveSession(和下游从库的连接),Binlog(本地存储文件)进行管理。这里无法采用MySQL解析器,因为MySQL的词法解析部分全部自行编写,而不是采用FLEX(全局变量,不支持多线程并发),以提升SQL解析性能,从而支持每秒几十万次的SQL解析速度,缺点就是代码非常复杂,难以将所需功能进行剥离。

2025-08-21 13:45:13 138

转载 Easy-cache:统一缓存解决方案

Easy-cache通过统一的设计解决了开发人员在缓存使用中的痛点,实现了以下核心价值:重复代码问题:通过注解驱动,让开发者告别重复的缓存处理代码缓存穿透问题:通过空值缓存和智能防护机制,有效防止恶意请求穿透到数据库缓存击穿问题:通过分布式锁机制和标记删除方式,防止热点数据失效导致的数据库崩溃数据不一致问题:通过Redis-Hash结构+Lua脚本实现分布式锁,确保缓存与数据库的数据同步Redis宕机问题:通过自动降级和探活机制,保证服务的高可用性。

2025-08-19 16:47:51 225

原创 深挖SPI 机制

1SPI 全称为,是一种服务发现机制。SPI 的本质是将的中,并由。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。

2025-03-19 13:21:46 825 1

原创 SpringBoot 集成logback日志链路追踪

用途:每一次链路,线程维度,添加最终的链路 ID traceId.MDC(Mapped Diagnostic Context) 诊断上下文映射,是@Slf4j提供的一个支持动态打印日志信息的工具。/*** 日志拦截器*/@Override//可以考虑让客户端传入链路ID,但需保证一定的复杂度唯一性;如果没使用默认UUID自动生成if (!returntrue;@Override// 请求处理完成后,清除MDC中的traceId,以免造成内存泄漏/**

2025-03-14 09:38:21 1213

原创 CompletableFuture工作常遇到的6个天坑

CompletableFuture 的回调地狱指的是在异步编程中,过度依赖回调方法(如 thenApply、thenAccept 等)导致代码嵌套过深、难以维护的现象。当多个异步任务需要顺序执行或依赖前一个任务的结果时,如果直接嵌套回调,代码会变得臃肿且难以阅读。如果任务阻塞或执行时间过长,可能会导致线程池耗尽,影响其他任务的执行。假设我们有两个任务服务,一个查询用户基本信息,一个是查询用户勋章信息。任务编排时,如果任务之间有依赖关系,可能会导致任务无法按预期顺序执行。时,手动传递上下文。

2025-03-14 09:32:48 713

原创 import javax.annotation.Resource; 和import jakarta.annotation.Resource;使用区别

在Java EE 8之前,javax.annotation.Resource用于注入资源,例如数据源、JMS连接工厂等。因此,javax.annotation.Resource被移动到了jakarta.annotation.Resource。所以,如果您的项目是基于Java EE 8及之后的版本,您应该使用import jakarta.annotation.Resource;而如果您的项目是基于Java EE 8之前的版本,您应该使用import javax.annotation.Resource;

2025-03-12 17:46:52 485

原创 java中String的传参和不可变问题

通常我们使用以为String为引用类型,所以在传递的时候传递的是地址,因此在函数modifyStr中改变了str的值。但是经过测试实际情况并不是这样,输。出的仍然是original,可见str的值并没有因为modifyStr而改变。其实本质的原因在于String是一个封装类。方法创建了一个新的字符串,而不是修改原始的。

2025-03-10 14:48:54 265

原创 地图如何找出方圆一千米内的人、物、地址

首先我想先介绍一下GeoHash这种算法「基本原理」,再讨论如何进行应用。对于每一个坐标都有它的经纬度(lng,lat),而GeoHash的原理就是将经纬度先通过一个二分的思路拿到一个二进制数组的字符串,然后再通过base32编码去进行压缩存储。举一个例子,比如经纬度为(116.3111126,40.085003),对其进行二分步骤如下:bitleftmidright1-18001801090180090135180190112.51350112.5。

2025-03-06 11:38:53 930

原创 炸裂!Spring 宣布接入 DeepSeek

首先,您需要获取 DeepSeek API 密钥,配置基本 URL,并选择其中一个受支持的模型。DeepSeek 是深度求索公司发布的大模型,是国产之光。大家应该学会如何使用 DeepSeek 大模型,下面我们将看下如何开发基于 DeepSeek 大模型的智能应用。现阶段 DeepSeek 服务受资源限制可能无法提供在线服务,那么可以本地部署一个DeepSeek 大模型进行学习和使用。DeepSeek AI提供开源的 DeepSeek V3 模型,该模型以其尖端的推理和解决问题的能力而闻名。

2025-02-21 09:51:28 298

原创 Redis的15种常用场景

它通过位图(bit array)存储和操作数据,可以高效地处理大量的签到操作,特别适合于需要频繁更新并查询某个用户是否已签到的场景。Redis适合实现用户消息时间线(Timeline)功能.用户消息时间线通常用于展示用户动态、朋友圈、微博等场景,核心需求是按时间顺序存储和展示用户的相关消息或动态。利用 Sorted Set 的 有序性 和 范围查询 特性,将任务的执行时间作为分数(score),任务数据作为成员(member),定时轮询获取到期的任务。每次请求时,移除时间窗口外的旧记录,并添加新记录。

2025-02-20 09:59:41 1322

原创 canal实现Mysql数据同步

阿里巴巴MySQL数据库binlog增量订阅与消费组件,基于数据库增量日志解析,提供增量数据订阅与消费,目前主要支持了MySQL。Canal开源地址:https://github.com/alibaba/canal。

2025-02-10 09:56:26 318

原创 CompletableFuture使用中的生产事故

此时,尽管异步线程还在进行数据处理和外部 API 调用,但由于主线程的退出,所有异步操作都被中断,导致了未完成的任务丢失,数据处理中断,API 请求未能完成。这种行为在某些情况下会导致异步任务的中断或丢失,尤其是在异步线程需要较长时间执行的情况下,主线程退出后,异步线程的生命周期会受到影响,从而导致任务没有被正确完成。在没有线程池管理的情况下,当主线程退出时,如果没有其他活跃的用户线程,JVM 会检测到这是最后一个活跃的用户线程,因此会自动终止所有其他用户线程,包括异步线程。而引发线上事故的故事。

2025-01-22 15:46:47 976

原创 Function 接口使用新技巧

在。

2025-01-21 11:01:15 677

原创 SpringBoot + LiteFlow:实现复杂业务逻辑流程编排

LiteFlow是什么?LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑。通过支持热加载规则配置,开发者能够即时调整流程步骤,将复杂的业务如价格计算、下单流程等拆分为独立且可复用的组件,从而实现系统的高度灵活性与扩展性,避免了牵一发而动全身的问题。旨在优化开发流程,减少冗余工作,让团队能够更聚焦于核心业务逻辑,而将流程控制层面的重任托付给该框架进行自动化处理。LiteFlow整合了流程编排与规则引擎的核心特性,提供XML

2024-11-29 11:12:21 2872 1

原创 微服务架构技术栈选型

该篇文章主要是介绍当前比较流行的一些微服务技术栈以及常用的应用服务,仅仅是个人的一些看法,目前你公司常用的微服务架构有哪些呢?

2024-11-14 20:25:06 1484

原创 规则引擎之LiteFlow流程编排

在日常的开发过程中,经常会遇到一些串行或者并行的业务流程问题,而业务之间不必存在相关性。在这样的场景下,使用策略和模板模式的结合可以很好的解决这个问题,但是使用编码的方式会使得文件太多,在业务的部分环节可以这样操作,在项目角度就无法一眼洞穿其中的环节和逻辑。

2024-11-11 10:55:08 3414

原创 微服务的注册中心Nacos

Nacos是阿里巴巴开源的服务注册中心以及配置中心,致力于给开发者提供一款便捷、简单上手的开源框架。Nacos究竟有什么惊人的地方呢?看下图:从上图不难看出阿里巴巴的野心,一个Nacos干掉了Spring Cloud的三大组件,分别是注册中心Eureka服务配置Config服务总线Bus。Nacos的服务注册发现很简单,比Eureka简单多了,无需自己构建个注册中心。Nacos实现配置管理和动态配置刷新很简单,总结如下步骤:添加对应依赖使用原生注解@Value()导入配置使用原生注解刷新配置。

2024-11-05 10:10:11 1118

原创 Spring Boot 的配置动态刷新

对于微服务而言配置本地化是个很大的鸡肋,不可能每次需要改个配置都要重新把服务重新启动一遍,因此最终的解决方案都是将配置外部化,托管在一个平台上达到不用重启服务即可一次修改多处生效的目的。但是对于单体应用的Spring Boot项目而言,动态刷新显然是有点多余,反正就一个服务,改下重启不就行了?添加数据源:对接某个第三方平台的时候,你不可能每次添加一个数据源都要重启下服务固化的对接:大量的固定对接方式,只是其中的某个固定的代码段不同,比如提供视图中的字段不同,接口服务中字段不同等情况。

2024-11-05 10:05:35 1810

原创 深度解析阿里的Sentinel

这是《Spring Cloud 进阶》专栏的第五篇文章,这篇文章介绍一下阿里开源的流量防卫兵Sentinel,一款非常优秀的开源项目,经过近10年的双十一的考验,非常成熟的一款产品。sentinel顾名思义:卫兵;在Redis中叫做哨兵,用于监控主从切换,但是在微服务中叫做流量防卫兵。Sentinel 以流量为切入点,从流量控制熔断降级系统负载保护等多个维度保护服务的稳定性。丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一。

2024-11-05 09:50:42 3391

原创 探究Spring中所有的扩展点

Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配。由spring提供的、在容器或bean生命周期各个阶段、供spring框架回调使用的函数方法,即为扩展点。扩展点体现了Spring框架的灵活性、业务亲和性。

2024-10-29 16:50:41 286 1

原创 Linux 命令总结大全

反之,若系统中并没有指定软件包的较旧版本,rpm 命令并不会安装此软件包。find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 从一个目录查找并复制所有以 '.txt' 结尾的文件到另一个目录。mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 创建一个目录的iso镜像文件。

2024-10-16 10:23:25 604 1

原创 浅谈合理设置线程池参数

提交一个任务,线程池会判断当前线程数是否小于核心线程数,如果是则会立即创建一个工作线程执行任务,即使当前线程池中有空闲线程(ps:之前提交任务所创建的线程执行完任务之后就空闲下来了)可以用来执行当前提交的任务,也会创建一个新的线程去执行,概括来说就是如果没有达到核心线程数,不管当前线程池中有没有空闲线程,都会立即新建一个工作线程去执行当前任务。,即有非核心线程(线程池中核心线程以外的线程)时,这些非核心线程空闲后不会立即销毁,而是会等待,直到等待的时间超过了。如果非要回收空闲的核心线程,可以将线程池的。

2024-10-12 15:41:26 946

原创 IaaS,PaaS和SaaS的区别讲解

IaaS、PaaS和SaaS有什么区别吗?这三个概念只不过在说它们仨的区别前,有个常识需要知道一下:我们传统开发一个软件,需要9个东西:作为使用软件的人,左边的【应用】和【数据】,是最右边的【虚拟化】、【服务器】、【存储】、【网络】是制作一个软件的基础条件,除了虚拟化技术其他都是硬件,所以在云计算领域中,这块被称为基础设施。而中间的这些,就是的基础设施搭建出的平台,从而的【应用】和【数据】。

2024-10-12 11:23:10 1194

原创 十大编程算法

动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是 在表格中简单地查看一下结果,从而获得较高的效率。BFPRT算法解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分 析,BFPRT可以保证在最坏情况下仍为线性时间复杂度。深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。

2024-09-24 11:44:10 1035 1

原创 7种限流算法打开新方式

最近几年,随着微服务的流行,服务和服务之间的依赖越来越强,调用关系越来越复杂,服务和服务之间的稳定性越来越重要。在遇到突发的请求量激增,恶意的用户访问,亦或请求频率过高给下游服务带来较大压力时,我们常常需要通过缓存、限流、熔断降级、负载均衡等多种方式保证服务的稳定性。其中限流是不可或缺的一环,这篇文章介绍限流相关知识。这篇文章介绍实现限流的几种方式,主要是窗口算法和桶算法,两者各有优势。

2024-09-23 10:20:21 1645

原创 RocketMQ消费者消费的时候,宕机了,消息会丢失吗?

一个消息从,主要经过这3个过程:因此,本文将从以下这几个维度来回答:生产者如何保证不丢消息存储端如何保证不丢消息消费者如何保证不丢消息最后消费者消费的时候,宕机,消息会不会丢呢?

2024-09-23 10:07:44 1328

空空如也

空空如也

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

TA关注的人

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