自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从暴力审查到 Harness 工程化:一个 AI 时代程序员的觉醒

《AI时代程序员的复杂度转移与约束管理》摘要:本文记录了作者从无限token时期的AI辅助开发到建立系统化审查机制的过程。初期依赖顶级模型进行大规模重构(46次提交),虽产出丰富却陷入"上下文污染-纠正"循环,深刻体会到"复杂度只会转移不会消失"的架构本质。面对token限制后,作者通过建立AGENTS.md框架(240行)、审查指南和已知上下文文档,实现了模型约束管理,使同级别模型的审查误判率从43.75%降至0%。核心启示在于:AI时代程序员需兼具系统设计内功(理

2026-05-10 02:15:49 459

原创 #从偶发无字幕到补偿探测链路:一次 B 站字幕导入问题的完整收敛过程

本文记录了作者在开发B站视频字幕问答系统时遇到的字幕导入问题的完整解决过程。最初发现部分视频偶发读取不到字幕的问题后,通过样本实验发现两类失败:视频本身无字幕和首轮读取失败但可恢复。最终方案采用后端自治的分流结构:首轮读取失败后触发页面探测,根据结果决定直接失败或有限重试。此外还解决了子进程输出流阻塞问题,通过及时消费stdout/stderr避免死锁。整个解决过程不仅实现了功能,更完善了异常处理和系统稳定性,体现了工程问题的复杂性及系统性思考的重要性。

2026-04-27 13:59:54 397

原创 重读《凤凰架构》,从分布式演进史看技术选型的本质

《凤凰架构》揭示的技术演进本质:复杂度不会消失,只会转移。从早期的DCE、CORBA试图隐藏复杂度,到SOA集中到ESB导致瓶颈,再到微服务分散治理却面临跨语言适配问题,技术发展始终在探索复杂度的最佳归属。边车模式、Kubernetes和Serverless等现代方案,都在尝试将复杂度转移到更合适的层面——基础设施层、运维团队或云厂商。技术选型的核心在于判断"该把复杂度放在哪里",而非盲目追求新技术。分布式架构演进史证明,真正的智慧是让复杂度归位到最能处理它的地方,而非幻想彻底消除它。

2026-04-24 02:06:27 697 3

原创 从 `importQuestions()` 到分阶段导入协议:复杂度该放在哪里?

文章探讨了Excel导入流程的设计优化,从"先校验再解析"的分阶段处理,到解决"分批传输与原子提交"的核心矛盾。作者通过医保局实习经历,强调用户友好性:用户可处理的错误应前置暴露,系统内部错误则应保持原子性。为此提出"Batch+Chunk+临时表"方案,将原有一次性的importQuestions()拆分为四个接口:创建批次、追加数据块、完成批次和提交批次。这种设计虽增加了状态管理等复杂度,但将隐藏的复杂度显式化,更符合业务需求。核心观点是:复杂

2026-04-13 01:21:38 350

原创 从 HashMap 到基因法:同一套位运算思想,如何从 JVM 走到分布式数据库

本文揭示了HashMap与基因分库分表法在底层逻辑上的惊人相似性。两者都利用2的幂次方的位运算特性实现高效路由定位:HashMap通过hash(key) & (n-1)确定桶下标,基因法则将路由信息直接编码进ID的低位(如Order_ID & 63)。关键区别在于,HashMap需要扰动高位来改善随机分布,而基因法刻意保持低位不变以确保多维度查询的路由一致性。这种设计使系统无需额外映射表即可实现跨维度查询,将复杂度从O(n)降至O(1)。文章通过对比两者的位运算哲学,展示了分布式系统中&qu

2026-04-10 00:50:02 505

原创 Excel 导入为什么要先校验再解析:一次复盘后的重新理解

文章摘要: 本文通过实习经历反思Excel数据导入系统的设计问题,指出传统导入流程存在错误反馈不明确、问题暴露过晚等弊端。作者提出将导入拆分为前置校验和正式导入两阶段,强调通过前置校验提前发现数据问题并给出明确错误提示,将复杂度从用户转移回系统内部。文章阐释了这种设计如何实现更早的错误暴露、更清晰的错误解释以及用户控制权的归还,最终得出优秀导入系统的核心标准:不仅要实现数据导入功能,更要让非技术用户清楚理解错误原因及修正方法。这种设计本质是系统责任的重新分配,体现了"复杂度不会消失,只会转移到它该

2026-04-01 01:33:32 372

原创 从存 URL 到存 objectKey:一次 OSS 上传链路重构背后的抽象反思

这篇文章探讨了文件上传系统从简单设计到复杂重构的演进过程。作者最初认为只是修改上传接口,后来发现核心问题是资源身份与访问方式的混淆。早期直接存储URL的设计在小系统中合理,但随着系统复杂度增加(如UUID命名、临时访问凭证判断厂商差异等),这种设计暴露出问题。重构的关键在于将资源和访问方式分开建模,存储稳定的资源标识(objectKey)而非具体URL,使系统能更好地处理补偿、对账、厂商切换等需求。作者总结出重要经验:增加的中间状态不是凭空制造复杂度,而是将原本隐藏的复杂度放到正确位置。这一认知转变不仅改变

2026-03-29 23:55:00 431

原创 异步处理链路的演进:从状态拆分到 Outbox 模式

本文探讨了异步处理链路中的状态管理和双写一致性问题。作者最初通过拆分状态(引入DISPATCHING状态)来明确处理阶段,但发现这并未解决根本问题。随后意识到这是一个典型的双写一致性问题,即数据库更新与消息发送难以保证原子性。最终采用Outbox模式,将问题转化为数据库内部事务:业务数据更新与Outbox记录写入放在同一事务中,后续由后台处理消息发送。这一方案体现了"承认中间态、记录中间态、管理中间态"的核心思想,通过分阶段处理复杂问题而非追求原子操作。作者通过自主推演得出这一经典解决方

2026-03-25 00:01:11 224

原创 从验证码到题目流转,我突然又想通了一件事

文章探讨了系统设计中"中间态"的重要性。作者通过验证码登录和题目流转两个案例发现,任何需要分阶段完成的流程都必须承认"中间状态"的存在。这种设计思想在不同场景下表现为凭证、状态或任务表等形式,本质都是对非原子性流程的诚实表达。作者认为,成熟的系统设计不在于追求高级概念,而在于正视流程的非理想性,合理处理中间阶段。这一发现将原本分散的设计经验串联起来,揭示了系统设计的底层逻辑。

2026-03-24 01:35:50 375

原创 这两天我被验证码登录狠狠上了一课

本文通过一个验证码登录功能的优化过程,深入探讨了系统设计中的核心问题。作者从最初的Redis并发问题入手,逐步发现并解决了分布式链路中的部分失败、幂等性保证、错误语义传递、职责边界划分等多个系统设计难题。文章特别强调了系统设计不是简单的技术堆砌,而是在真实场景中不断做出取舍:区分强一致与近似控制、权衡复杂度与收益、明确各层职责边界。最终提炼出一套系统设计的判断方法:问题层级划分、一致性需求评估、复杂度转移考量,以及当前最优解的取舍。这些思考比具体技术方案更有价值,展现了系统设计的本质是在约束条件下寻找平衡点

2026-03-19 17:20:58 546

原创 Spring 事务陷阱:当异常必须抛出,失败记录又必须保存

摘要:Spring事务失效的5种常见场景包括:非public方法、final/static方法、同类内部调用、异常被catch吞没、rollbackFor配置错误。这些问题源于Spring AOP代理机制的限制。此外,还存在更隐蔽的问题:当业务需要部分数据回滚而部分保留时,单事务无法满足。如在视频导入失败时,既要回滚主数据又要保存失败记录。解决方案包括使用REQUIRES_NEW独立事务、手动提交或异步记录,其中REQUIRES_NEW是推荐方案,通过新建独立事务确保关键记录持久化。

2026-03-18 15:42:36 510

原创 深入剖析:为什么 String 是 HashMap Key 的最佳选择?

String 为什么适合做 HashMap 的 key? String 适合作为 HashMap 的 key 主要有四个原因: 不可变性:String 内容不可变,确保哈希值稳定,避免桶定位错误。 重写 equals() 和 hashCode():按内容而非对象地址比较,满足哈希容器的契约要求。 缓存哈希值:String 会缓存 hashCode() 结果,提升重复查找性能。 优化的哈希算法:采用 31 作为乘数,在冲突率和计算效率之间取得平衡。 此外,String 的哈希算法虽无法完全避免冲突,但结合 e

2026-03-08 01:02:22 568

原创 从一个面试案例看分库分表中的路由误区:为什么“模8再模8”不等于“模64”?

文章反思了技术面试中术语与逻辑推导的关系。通过一个"8库8表"分片算法的案例,指出面试者虽能谈论"基因分片"等高级概念,却在基础数学逻辑上犯错:误以为"模8再模8"等同于模64,实际仍只能覆盖8个槽位。作者强调正确做法应是通过模64均匀分布数据,再映射到具体库表。最后呼吁技术人回归基础,避免"术语正确、推导错误"的情况,认为扎实的基础比追求高级概念更重要。

2026-03-07 23:15:25 330

原创 我让AI当导师,用一下午“推导”出了Java垃圾回收的整个体系

本文针对 Java 垃圾回收(GC)机制学习中,普遍存在的术语晦涩、知识点易忘、理解长期停留在 “黑盒子” 的行业痛点,分享了一套基于 AI 引导式对话的全新学习范式。作者放弃传统啃书、看视频的被动输入模式,通过与 AI 开展苏格拉底式的互动,以图书馆场景化比喻切入,以设计师角色扮演的方式自主权衡决策,一步步推导出 GC 的完整核心知识体系:从垃圾判定的底层逻辑、三大基础回收算法的优劣取舍,到分代回收的设计思想、Eden+Survivor 区的优化逻辑,再到不同垃圾回收器的选型核心矛盾。文章不仅完整还原了自

2026-03-06 17:17:26 337 1

原创 跨50年的技术共鸣:布隆过滤器与RAG的灵魂相通之处

摘要 布隆过滤器与RAG架构虽相隔50年,却展现了相同的工程哲学:两者都采用概率型前置过滤机制,以零假阴性为底线,容忍可控假阳性,从而在资源效率与精准度间取得平衡。布隆过滤器通过哈希函数实现低成本存在性判定,保护下游数据库;RAG通过嵌入模型筛选相关文档,优化大模型输入。二者均采用"前置快速过滤+后置精准兜底"的双层架构,并将高维数据压缩为低维特征以加速匹配。这一跨时代的技术共鸣启示我们:经典数据结构思想可复用于现代AI系统优化,例如用布隆过滤器提升RAG的检索效率与合规性。

2026-02-24 22:45:48 788

原创 Nacos注册成功控制台却空了?从新手踩坑到看懂Nacos命名空间的核心设计逻辑

本文深入剖析了Nacos注册成功但控制台看不到实例的问题,揭示了其背后的核心设计逻辑。作者通过测试环境复现问题,发现当配置文件中填写的是命名空间名称而非ID时,服务会注册到一个"幽灵命名空间"中,导致控制台无法显示。进一步研究发现,Nacos的设计理念是将namespace作为逻辑隔离单元,采用"弱校验+先使用后声明"的模式,以保障生产环境大规模部署的灵活性。官方文档明确指出,Nacos的naming模块不会预检查namespace是否存在,仅将其作为隔离单元使用。这

2026-02-22 00:33:13 843

原创 从 Claude 到生活助手:我如何用一个 Skill 实践“AI 技能生活化”的未来

本文介绍了如何将AI技能从编程领域扩展到日常生活场景,通过开源项目task-reminder实现了AI提醒功能的"生活化"。该项目采用自适应环境探测、自动化初始化和轻量级架构设计,让普通用户无需技术背景即可使用。作者指出当前AI技能生态过度集中于编程领域,提出未来AI技能应像App一样独立运行,成为连接数字智能与物理生活的桥梁。该项目验证了低门槛、生活化AI技能的可行性,呼吁更多开发者关注这一方向,推动AI从工具向生活伴侣转变。

2026-02-06 23:09:08 771

原创 记我的第一次开源贡献:修复 Spring Cloud Alibaba 中的 Nacos 凭据泄露风险

摘要:本文记录了作者首次为开源项目 Spring Cloud Alibaba 贡献代码的经历。在备战实习期间,作者发现项目存在 Nacos 凭据泄露风险,便主动修复了 NacosConfigProperties 类中敏感信息明文打印的问题。通过添加脱敏方法和单元测试,最终代码被合并到主分支。这次贡献让作者深刻体会到行动胜于焦虑、工业级代码的严谨性以及参与开源项目的成就感,也坚定了继续参与开源生态建设的决心。(149字)

2026-02-04 21:52:40 570

翻译 一站式管理多平台 AI 技能:skills.sh CLI 工具完全指南(支持 Claude/Cursor/Codex 等)

Agent Skills CLI 工具简介 Agent Skills 是一个命令行工具,用于管理可扩展 AI 编码助手(Agent)能力的技能生态系统。它支持 35+ 种主流 AI 编码助手,包括 OpenCode、Claude Code、Codex 和 Cursor 等。 主要功能: 从 GitHub/GitLab 等来源安装技能 支持项目级和全局安装 提供技能搜索、列表、更新和移除功能 支持符号链接或复制安装方式 可针对特定 Agent 或所有 Agent 安装技能 典型用法: npx skills a

2026-02-03 21:10:08 1417

原创 深入底层:解密 synchronized 与 volatile 的内存模型与实现机制

摘要:本文深入探讨了Java并发编程中synchronized和volatile的底层实现机制。从Java内存模型(JMM)的核心原理出发,分析了volatile通过内存屏障和MESI协议保证可见性,以及synchronized基于对象头、Monitor和锁升级的实现策略。重点揭示了JDK15+中偏向锁被废弃的原因,并对比了两者的内存语义、原子性保证及适用场景。文章通过硬件层到JVM层的多维度分析,为开发者提供了从理论到实践的完整并发编程知识框架,帮助读者在编写高并发代码时做出更精准的技术选型。

2026-02-02 20:10:08 640

原创 ThreadLocal 深度剖析:自动清理、哈希策略与性能权衡

本文深入剖析了 ThreadLocal 的内部机制,重点探讨了其 ThreadLocalMap 的哈希策略与自动清理机制。ThreadLocalMap 采用开放地址法处理哈希冲突,通过精心设计的哈希增量实现均匀分布。其自动清理机制包括探测式清理(修复探测链)和启发式清理(平衡性能与清理效率),但仍有局限性,需手动调用 remove() 避免内存泄漏。与 HashMap 相比,ThreadLocalMap 在线性探测、弱引用等方面做出不同设计权衡,适用于线程数据隔离场景。全文揭示了 ThreadLocal 在

2026-02-01 21:00:28 599

原创 AI Skills:从低代码工作流到“包管理”生态的范式跃迁

AI Skills:从封闭工具到开放生态的范式变革 本文探讨了AI代理能力的范式转变,从低代码工作流向标准化"包管理"生态的演进。早期低代码平台(如Coze/Dify)通过工作流封装能力,但存在互操作性不足的问题。Anthropic推动的Model Context Protocol(MCP)实现了程序性知识的标准化定义,为AI代理建立了统一交互框架。Vercel推出的skills.sh目录则借鉴npm模式,通过命令行工具简化了34,000+个Skills的分发与集成。这种标准化生态不仅打

2026-01-30 16:47:47 1235

原创 内存阻塞vs信号量阻塞

笔者最近在学习操作系统的内存管理时,发现由于内存不足会将进程暂时移到外存,可以称之为阻塞。而前面学习信号量时由于等待资源也会导致阻塞,二者有何异同?于是笔者便查询了相关资料,写下了这篇文章。笔者知识有限,如有错误的地方,请大佬支出,谢谢支持!

2025-04-21 23:20:15 603 1

空空如也

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

TA关注的人

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