Archives
All the articles I've archived.
as-java-review: Tracing Middleware 支持应用自有 OpenTelemetry SDK
复盘 AgentScope Java PR #3250:OtelTracingMiddleware 为何被 GlobalOpenTelemetry 绑死,以及注入调用方 SDK 后如何保持 lazy global 与 Reactor hook 语义。
as-java-review: 声明式 Subagent 的独立 Compaction 配置
Updated:复盘 AgentScope Java PR #2378:声明式 Subagent 为何只能用默认 compaction,以及 Java Builder 与 YAML 三态语义如何补齐 override / inherit / disable。
as-java-review: 修复迁移 version=0 行上的幽灵 CAS 冲突
复盘 AgentScope Java PR #3165:ensureVersionColumn 用 DEFAULT 0 回填,与 getVersioned 的「行不存在」哨兵撞车,以及 INSERT 冲突后自愈到 version 1 的修法。
as-java-review: 让 Prompt 暴露正确的 Session Workspace 路径
复盘 AgentScope Java PR #3020:session isolation 下 prompt 仍广告 base workspace,模型按错路径写产物,以及如何与 NamespaceFactory 对齐。
从 Contributor 到 Committer:开源框架维护的完整工作流
从贡献代码、Review PR/MR 和本地验证,到 Apache 社区讨论、投票、Release 与签名 Tag,理解开源框架如何被共同维护。
如何优雅地 Cancel:从 CompletableFuture.allOf() 看 Java 与 Go 的取消机制
从 CompletableFuture.allOf() 的任务取消问题出发,深入分析 Java 中 HTTP、Dubbo、Redis、MySQL 的真实取消与超时机制,并对比 Go context 的协作式取消设计。
从对象头、栈帧到锁与 JIT:我的 JVM 学习脉络
以对象头、栈帧、锁与 JIT 为主线,把 JVM、并发、Spring 与操作系统串成一条可追踪的执行链路。
as-java-review: 声明式 Subagent 继承父 Agent Hooks
复盘 AgentScope Java PR #2996:声明式 Subagent 为什么会绕过父 Agent Hook,以及继承 Hook 后如何继续守住工具白名单。
1.2 基于 one-logger 的业务服务韧性支持方案
以 Sentinel Core 为执行内核,为接入 one-logger 的 Spring Boot 服务设计统一的限流、熔断、降级与可观测能力。
AgentScope Java Review 系列
Updated:AgentScope Java PR 审查:从复现、调用链追踪和测试验证,到明确可合并范围与后续风险。
1.1 服务韧性的基本原理
从限流、自适应保护、熔断、降级和资源隔离出发,梳理服务在过载与依赖故障下保持可用的核心机制。
as-java-review: 修复 Sandbox 下 Task Record 维护失败
梳理 call 生命周期外的任务记录读写,验证 host workspace 路由、后台维护线程与回归测试。
as-java-review: 支持 Harness 异步 Memory Flush
从响应尾部阻塞切入,审查异步 memory flush 的队列上限、丢弃语义、关闭行为与测试边界。
as-java-review: 修复并发调用下的 Sandbox Fallback 生命周期
围绕多 session 并发,分析 sandbox fallback 的绑定、释放顺序与仍需 follow-up 的隔离边界。
as-java-review: 修复 Harness Shell 管道死锁
从进程管道死锁的复现出发,拆解并发 drain、超时回收、输出上限与回归测试的审查方法。
as-java-review: 修复并发下的 Sandbox 按 call 绑定隔离
复盘 AgentScope Java PR #2675:agent 级单槽 sandbox 在跨 session 并发下如何互相踩踏,以及如何把绑定迁到 per-call RuntimeContext。
as-java-review: 修复 legacy wait 丢失异步任务完成通知
Updated:复盘 AgentScope Java PR #2797:legacy wait_async_results 为何只盯 inbox,以及回退 TaskRepository 后仍未覆盖的 terminal-but-undelivered 缺口。
AI Agent分享
AI Agent分享
大数据场景下的高效过滤器:布隆过滤器 vs 布谷鸟过滤器深度解析
大数据场景下的高效过滤器:布隆过滤器 vs 布谷鸟过滤器深度解析
小小自走棋
小小自走棋
React学习记录 Day02
本文记录了作者在学习React的第二天的内容,主要包括以下几个部分:表单数据提交、高阶函数与函数柯里化、组件的生命周期
React学习记录 Day01
这篇文章是关于学习React三大组件的记录。文章包括了State练习、Props使用、Ref的使用等内容。通过这些练习,可以学习到React的基本概念和用法。
记录一次压测经验总结
记录一次压测经验总结
HTTP请求方式和编码
HTTP请求方式和编码
小一一闯荡江湖攻略
爸爸积累的经验
Random和ThreadLocalRandom区别
既然已经有了 Random 为什么还需要 ThreadLocalRandom?
随机生成六位不碰撞的数字
如果需要生成随机且不会产生碰撞的6位数字,可以参考本文。
可重复读导致的幻读
八股文背完好久,又忘记了,和同事今天讨论又重新实践了一下,记录一下。
redis持久化策略
长时间没用又忘了,简单记录下
为什么mac地址不能直接用作路由
纸上得来终觉浅,绝知此事要躬行!
四层、七层负载均衡的区别(转)
转自 https://jaminzhang.github.io/lb/L4-L7-Load-Balancer-Difference/
TCP须知-上
记录tcp状态机状态类型和相关基础知识
TCP须知-下
讲解tcp重传算法和拥塞控制算法
记录一些最佳实践
持续更新…
版本分支管理标准 - Trunk Based Development 主干开发模型(转)
转自 https://cloud.tencent.com/developer/article/1505551
Git中你可能不知道的命令
Git中你可能不知道的命令
关于读写分离的想法
MySQL服务的读写分离,在实际生产代码中的一些汇总和想法
SSL证书的工作原理是怎样的?
SSL证书中的对称加密是一种加密类型,它使用相同的密钥来加密和解密数据。发送者和接收者都具有相同的密钥副本,它们是秘密的,不会与任何人共享。这与非对称加密不同,后者使用两个密钥-一个公共密钥(任何人都可以访问)来加密信息和一个私有密钥来解密信息。
git查看单独一个文件的修改历史
git查看单独一个文件的修改历史
一句鸡汤文
读《左耳听风-极客时间专栏》
ElasticSearch curl命令
记录工作中常用的es rest api命令
上传自己的项目到maven中央仓库
记录自己开源项目上传到maven中央仓库
自研框架 one-logger
仅需一个日志框架,打印全流程审计日志 欢迎指教讨论
mac m2环境下docker镜像build问题解决
记录在m2上编译并推送docker镜像的步骤
深入理解分布式系统(第三章)
第三章 分布式数据基础
一句鸡汤文
成年人最大的自律,就是克制自己去纠正别人的欲望。
建议用rebase而不是merge
开发中使用git工具,尽量使用rebase命令而不是merge命令
重学Vue-day02
监视属性、样式绑定
重学Vue-Day01
又一次重学Vue,记录一些知识点
深入理解分布式系统(前两章)
简单记录读《深入理解分布式系统》这本书前两章觉得令人印象深刻的,值得记录学习的内容。
颜值是第一生产力吗?
如题
折腾搭建AIRobot平台
之前搭建的chatgpt的网页,因为apiKey到期了就没有在用了,最近谷歌推出了自己的LLM,gemini,试了一下虽然很蠢,但是聊胜于无,就重新部署了一下。
魔改RestTemplate支持我司参数加密
因为我司服务在不同集群,服务之间调用走外网且为http协议,因此存在调用时的参数加解密问题,之前是每个服务自己保留一份Utils.java,使用此文件进行调用。这种方式不利于统一管理和升级,若是加密方式有调整或修改,则需要把这个文件拷来拷去,很是麻烦。作为架构组成员,则把这一能力下放到基础架构中,让开发同学可以无感知使用加密,也不用关心加密策略。
一句鸡汤文
李傲:不怕吃苦,吃苦半辈子,怕吃苦,吃苦一辈子
每日一句鸡汤文
尤雨溪:你写的代码到底有多少是为自己而写
异步编程可以服务器提高吞吐量吗?(一、浅谈进程间的异步、同步、阻塞和非阻塞 )
浅谈一下我们开发中常常遇到的异步、同步、阻塞和非阻塞的概念,为后面实践异步编程打下理论基础。从进程级通信的维度讨论时, 阻塞和同步(非阻塞和异步)就是一对同义词。
Synchronized到底锁了什么
本次主要讨论synchronized锁的对象到底是什么
又折腾了一个博客系统
以往搞了n多次的博客,这次是终极方案了吗?基于notionNext的建站教程;
gRPC实战(五、错误处理)
grpc中的错误处理
JAVA基础(一、synchronized关键字)
synchronized关键字“给某个对象加锁”,示例代码:等价于:实例方法的锁加在对象myClass上;静态方法的锁加在MyClass.class上。 1.2 锁的本质如果一份资源需要多个线程同时访问,需要给该资源加锁。加锁之后,可以保证同一时间只能有一 个线程访问该资源。资源可以是一个变量、一个对象或一个文件等。锁是一个“对象”,作用如下: 1. 这个对象内部得有一个标志位(state变量),记录自己有没有被某个线程占用。最简单的情况 是这个state有0、1两个取值,0表示没有线程占用这个锁,1表示有某个线程占用了这个锁。 1. 如果这个对象被某个线程占用,记录这个线程的thread ID。 1. 这个对象维护一个thread id list,记录其他所有阻塞的、等待获取拿这个锁
JAVA基础(五、JVM垃圾回收机制及算法 )
1.1 什么是垃圾回收说起垃圾收集(Garbage Collection, 下文简称GC) , 有不少人把这项技术当作Java语言的伴生产物。 事实上,垃圾收集的历史远远比Java久远, 在1960年诞生于麻省理工学院的Lisp是第一门开始使 用内存动态分配和垃圾收集技术的语言。垃圾收集需要完成的三件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 1.2 java垃圾回收的优缺点优点: • 不需要考虑内存管理, • 可以有效的防止内存泄漏,有效的利用可使用的内存。 • 由于有垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"缺点:java开发人员不了解自动内存管理, 内存管理就像一个黑匣子,过度依赖就会降低我们解决内存溢出/内存泄漏等问题的能力。
gRPC实战(三、拦截器)
grpc中的拦截器
gRPC实战(六、负载均衡(一))
grpc如何负载均衡
gRPC实战(四、使用metadata传输数据)
grpc使用metadata
gRPC实战(二、流式传输)
grpc的stream能力
JAVA基础(二、JMM内存模型 )
1.1 为什么会存在“内存可见性”问题下图为x86架构下CPU缓存的布局,即在一个CPU 4核下,L1、L2、L3三级缓存与主内存的布局。 每个核上面有L1、L2缓存,L3缓存为所有核共用。因为存在CPU缓存一致性协议,例如MESI,多个CPU核心之间缓存不会出现不同步的问题,不会有 “内存可见性”问题。 缓存一致性协议对性能有很大损耗,为了解决这个问题,又进行了各种优化。例如,在计算单元和 L1之间加了Store Buffer、Load Buffer(还有其他各种Buffer),如下图:
JAVA基础(三、并发编程基础 )
JAVA基础(三、并发编程基础 )
gRPC实战( 一、快速开始 )
讲解Java/go环境下使用grpc
JAVA基础(六、JVM元空间、方法区和直接内存 )
一、元空间它和永久代有什么不同的? • 存储位置不同:永久代在物理上是堆的一部分,和新生代、老年代的地址是连续的,而元空间属于本地内存。 • 存储内容不同:在原来的永久代划分中,永久代用来存放类的元数据信息、静态变量以及常量池等。现在类的元信息存储在元空间中,静态变量和常量池等并入堆中,相当于原来的永久代中的数据,被元空间和堆内存给瓜分了。 1.1 为什么要废弃永久代,引入元空间?相比于之前的永久代划分,Oracle为什么要做这样的改进呢? • 在原来的永久代划分中,永久代需要存放类的元数据、静态变量和常量等。它的大小不容易确定,因为这其中有很多影响因素比如类的总数,常量池的大小和方法数量等,-XX:MaxPermSize 指定太小很容易造成永久代内存溢出。 • 移除永久代是为融合HotSpot VM与 JRockit VM而做出的努力,因为JRockit没有永久代,不需要配置永久代 • 永久代会为GC带来不必要的复杂度,并且回收效率偏低。
JAVA基础(四、JVM类加载机制 )
1.1 类加载子系统介绍 1. 类加载子系统负责从文件系统或是网络中加载.class文件,class文件在文件开头有特定的文件标识。 1. 把加载后的class类信息存放于方法区,除了类信息之外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射); 1. ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定; 1. 如果调用构造器实例化对象,则该对象存放在堆区;
gRPC实战(七、负载均衡(二))
grpc如何负载均衡
JAVA基础(七、JVM运行内存-堆 )
1.1 简介对于Java应用程序来说, Java堆(Java Heap) 是虚拟机所管理的内存中最大的一块。 Java堆是被所 有线程共享的一块内存区域, 在虚拟机启动时创建。 此内存区域的唯一目的就是存放对象实例, Java 世界里“几乎”所有的对象实例都在这里分配内存。“几乎”是指从实现角度来看, 随着Java语 言的发展, 现在已经能看到些许迹象表明日后可能出现值类型的支持, 即使只考虑现在, 由于即时编译技术的进步, 尤其是逃逸分析技术的日渐强大, 栈上分配、 标量替换优化手段已经导致一些微妙的变化悄然发生, 所以说Java对象实例都分配在堆上也渐渐变得不是那么绝对了。Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、 From Survivor 区和 To Survivor 区)和老年 代。 1.2 特点 1. 是Java虚拟机所管理的内存中最大的一块。 1. 堆是jvm所有线程共享的。 1. 堆中也包含私有的线程缓冲区 Thread Local Allocation Buffer (TLAB) 1. 在虚拟机启动的时候创建。 1. 唯一目的就是存放对象实例,几乎所有的对象实例以及数组都要在这里分配内存。 1. Java堆是垃圾收集器管理的主要区域。 1. 因此很多时候java堆也被称为“GC堆”(Garbage Collected Heap)。从内存回收的角度来看,由于现在收集器,基本都采用分代收集算法,所以Java堆还可以细分为:新生代和老年代;新生代又可以分为:Eden 空间、From Survivor空间、To Survivor空间。 1. java堆是计算机物理存储上不连续的、逻辑上是连续的,也是大小可调节的(通过-Xms和-Xmx控制)。 1. 方法结束后,堆中对象不会马上移出仅仅在垃圾回收的时候时候才移除。 1. 如果在堆中没有内存完成实例的分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。 二、 设置堆空间大小Xmx20m -Xms5m -XX:+PrintGCDetails
JAVA基础(八、JVM线程和内存区域 )
JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。 JVM 是运行在操作系统之上的,它与硬件没有直接 的交互。 二、运行过程我们都知道 Java 源文件,通过编译器,能够生产相应的.Class 文件,也就是字节码文件, 而字节码文件又通过 Java 虚拟机中的解释器,编译成特定机器上的机器码 。 也就是如下: ① Java 源文件—->编译器—->字节码文件 ② 字节码文件—->JVM—->机器码 每一种平台的解释器是不同的,但是实现的虚拟机是相同的,这也就是 Java 为什么能够 跨平台的原因了 ,当一个程序从开始运行,这时虚拟机就开始实例化了,多个程序启动就会 存在多个虚拟机实例。程序退出或者关闭,则虚拟机实例消亡,多个虚拟机实例之间数据不 能共享。
Maven多模块下依赖引用问题
服务之间有依赖关系,如何进行引入
编写starter的正确方式以及感悟
结合工作中遇到的问题,分析和解决使用我司在自定义starter上的错误方式
Redis设计与实现(第一部分 数据结构 )
聚焦Redis中使用到的数据结构,《Redis设计与实现》读书笔记