开源项目经历

Github

close

1.

2025.7.15晚上十点,提交了我人生中的第一个PR,

是阿里巴巴的https://github.com/alibaba/fastjson2/项目。

看到一个issue没有人哈哈,我直接在vscode跑了一下,然后发现是

在 Android 10 的系统中,
com.alibaba.fastjson2.util.IOUtils.isNULL(IOUtils.java:2)
会产生一个 native 侧的 crash,Signal 7(SIGBUS), Code 1(BUS_ADRALN)出现了问题

我发现是内存对齐问题: 在 Android 10 ARM 架构上,IOUtils.getLongUnaligned(char[] buf, int offset) 方法直接使用 UNSAFE.getLong() 访问 char 数组内存,ARM 处理器要求 8 字节 long 读取必须在 8 字节对齐的地址上进行,当计算出的内存地址 ARRAY_CHAR_BASE_OFFSET + ((long) offset << 1) 不是 8 字节对齐时,触发 Signal 7(SIGBUS), Code 1(BUS_ADRALN) 崩溃
我已经提交PRhttps://github.com/[/pull/3639](https://github.com/alibaba/fastjson2/pull/3639)

然后直接进行测试,测试的三个类全部通过。overall

看看对不对,能不能给我合并了吧哈哈,好了睡觉舒服了,该PR已经解决

然后后来根据我的代码发布了一个快照,然后我测试完之后发现成功!他采纳了我的建议

open

1.

2025.7.16八点左右

提交了我的第三个PR,是rocketMQ的。也是到知名中间件的issue了哈哈

这个问题是一个时序问题,一个topic被创建的时候,队列为null,最大偏移量为0
然后生产者发送第一条消息的时候,最大偏移量为1。
消费者启动的时候,查询最大偏移量为-1,然后调用maxoffset(mq),就会返回1.这样我们为0的消息就被跳过了。
可以在发送消息前,可以先启动 Consumer 实例,或者在 Consumer 启动后等待一段时间再发送消息。
然后在配置的时候,设置从ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET开始消费。
也可以在代码方面更改再前面加一层校验,如果maxoffset<=1的话,就返回0L

然后else就返回maxoffset

maxoffset=this.mQClientFactory.getMQAdminImpl().maxOffset(mq);

https://github.com/apache/rocketmq/pull/9552

然后发现这个issue很久没解决了哈哈,看看我的能不能被通过吧

3.

2025.7.28

这次还是springaialibaba

调用mcp工具,调用了能有全链路的traceid,串联不了链路

  • 实现了 McpTraceExchangeFilterFunction,用于在 HTTP 请求中自动注入 traceId、spanId 等分布式链路追踪相关 header,支持 Micrometer Tracing。
  • 通过 Spring Boot 自动配置(McpTracingAutoConfiguration),自动装配 tracing filter,无需手动配置,提升易用性。
  • 客户端传输层支持 tracing filter 注入
  • 让 MCP 客户端具备分布式链路追踪能力,方便排查问题和性能分析。

https://github.com/alibaba/spring-ai-alibaba/pull/1837

merged

1.

2025.7.16中午头,提交了我的第二个PR

这个PR是https://github.com/alibaba/spring-ai-alibaba/ 仓库的, https://github.com/alibaba/spring-ai-alibaba/pull/1645

是解决了一个人的issue,node枚举字段里面没有template-transform他非要调用,肯定是失败的啊

然后我就在枚举类里添加了template-transform节点,然后写了一个NodeData类和一个NodeDataConverter类

NodeData就设置一下setter和getter,然后Conventer就是一个模板转换节点数据转换器 的 Java 类,属于阿里云 AI 服务中工作流 DSL 处理模块

实现了实现了TemplateTransformNodeDataConverter转换器类

  • 继承抽象Converter类
  • DIFY方言: 完整的解析和导出逻辑
  • CUSTOM方言: 使用默认自定义方言转换器
  • 输入处理: 变量选择器解析
  • 输出管理: 固定string类型结果
  • 变量命名: templateTransformNode{count}格式
  • 后处理: 自动设置输出键名

然后添加其node节点的具体实现, 实现了完整的模板转换功能:

  • 占位符模式: 支持{{key}}语法
  • 正则引擎: 使用\\{\\{\\s*(.+?)\\s*\\}\\}匹配
  • 高效处理: StringBuffer + Matcher进行字符串替换
  • 安全机制: 自动转义特殊字符防止正则注入
  • 容错设计: 缺失变量时保留原占位符,不中断执行
  • 状态管理: 正确使用state.data().containsKey(key)检查变量存在性

在代码生成层实现了nodesection

  • 实现了TemplateTransformNodeSection代码生成器
  • 完整的Builder模式实现,支持流式配置
  • 提供了完善的错误处理和SLF4J日志记录

然后通过了他的CI测试,其中代码格转为spring的格式和头信息,java格式化卡了我一点时间,没注意格式的问题。

然后通过全部的lint测试

2.

2025.7.22完事八点,继续干spring ai alibaba

这次主要是修复了一个空指针异常,DashScope API返回数据质量问题,ToolCall对象的function.name字段为null。在buildGeneration方法中,Toolcall对象的时候,这里如果toolCall.function().name()返回null,就会导致后续Spring AI框架在DefaultToolCallingManager.executeToolCall中执行toolName.equals()(时出现NPE。导致streaming 和 non-streaming 聊天调用都受影响。可以添加null过滤器,然后记录日志。这是防御性编程的经典模式,添加空值过滤。

然后我们就添加了两个null的校验。

1
2
3
4
List<ToolCall> validToolCalls = toolCalls.stream()
.filter(toolCall -> toolCall.function() != null &&
toolCall.function().name() != null)
.collect(Collectors.toList());

解决了一个issue https://github.com/alibaba/spring-ai-alibaba/pull/1766

3.

2025.7.23 下午

今天修复了还是我们熟悉的fastjson2的一个小issue

因为他jsonfactory设定的内存的最大阈值时2048.然后我看他们反馈实际应用的是比这要打的

那么我们就可以去自己去设定这一个max值。但是这样内存太大的话,又会出现oom问题。不知道怎么处理

https://github.com/alibaba/fastjson2/pull/3658

4.

fastjson2的一个版本兼容的问题,但是他的checkstyle格式实在是改不过来我吐。我就用的main函数来直接测试了

添加了判断方法和set方法,字段默认值类型转换

然后默认值的实际类型与目标字段类型不匹配开始,当启用兼容模式时,对于 String → Date 的转换进行特殊处理

  • isJSONFieldDefaultValueCompatMode(): 检查是否启用 FastJSON 1.x 兼容模式
  • defaultValue instanceof String: 默认值是字符串类型
  • Date.class.isAssignableFrom(fieldClass): 目标字段是 Date 类型或其子类

https://github.com/alibaba/fastjson2/pull/3661

算了,不做了我吐

5.

又是一个fastjson2的项目的pr,这次主要是修复了fastjson2在处理set list等集合的解析的问题,他们在反序列化的时候会出现问题。然后不同编码使用不同的读取方式

让他们在操作的时候直接进行byte的操作,如果是set的化就进行特殊处理+去重

https://github.com/alibaba/fastjson2/pull/3701

7.

2025.7.28

这次还是springaialibaba

调用mcp工具,调用了能有全链路的traceid,串联不了链路

  • 实现了 McpTraceExchangeFilterFunction,用于在 HTTP 请求中自动注入 traceId、spanId 等分布式链路追踪相关 header,支持 Micrometer Tracing。
  • 通过 Spring Boot 自动配置(McpTracingAutoConfiguration),自动装配 tracing filter,无需手动配置,提升易用性。
  • 客户端传输层支持 tracing filter 注入
  • 让 MCP 客户端具备分布式链路追踪能力,方便排查问题和性能分析。

https://github.com/alibaba/spring-ai-alibaba/pull/1837

8.

还是spring ai alibaba

Spring AI Alibaba Graph模块中Tool节点Dify平台集成时的属性映射问题。原有的ToolNodeData只支持基础的tool相关属性,无法完整支持Dify平台的丰富工具配置。

添加更多的属性的setter 和getter和处理属性的数组,和属性映射之间的关系

https://github.com/alibaba/spring-ai-alibaba/pull/1948