开源项目经历

开源项目经历
mengnankkzhouGithub
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 | List<ToolCall> validToolCalls = toolCalls.stream() |
解决了一个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和处理属性的数组,和属性映射之间的关系