Archive
全部文章
按时间倒序排列。可用主题筛选,或对照下方系列说明选读。
并发与类型
context、errgroup、泛型约束——关注请求生命周期与 API 边界。
检索与评测
嵌入、分块、提示词回归——把智能应用做成可迭代的工程。
结构与搜索
二分、并查集、拓扑序——写成能带走的模板。
-
Go channel 与 select:编排而不是堆砌
goroutine 容易开,难在收口。channel 与 select 是把并发从「能跑」变成「可推理」的关键。
-
混合检索:关键词与向量如何一起用
纯向量召回擅长语义,关键词召回擅长专有名词。多数业务需要二者协作。
-
滑动窗口:双指针背后的不变量
窗口题看起来多,骨架却相似:维护合法区间,并在扩张与收缩间切换。
-
Go 接口与 nil:为什么「看起来是 nil」却不是
最经典的 Go 坑之一:把 nil 指针放进接口后,接口本身往往不再等于 nil。
-
上下文窗口不够用时:裁剪、摘要与分层投放
模型窗口再大,也会被检索片段与历史消息填满。预算管理是应用层责任。
-
堆与优先队列:Top-K 与合并问题的底座
排序能做 Top-K,但堆通常更省;合并 K 个有序表时,堆几乎是标配。
-
大模型流式输出:SSE 与后端转发要点
流式不是装饰:首字延迟下降后,长回答才可交互。工程上要处理好缓冲与取消。
-
理解 Go context:取消、超时与请求级值传递
context 不是万能钥匙,却是请求生命周期里最可靠的约定。本文梳理 WithCancel、WithTimeout 与 Value 的边界。
-
RAG 实践:分块策略如何影响检索质量
固定长度、语义分段与重叠窗口,三种分块方式在中文技术文档上的实测对比与取舍。
-
拓扑排序:从课程表到构建依赖
Kahn 与 DFS 两种实现,以及在包管理、CI 流水线排序中的常见坑。
-
Go 泛型约束:从 comparable 到自定义类型集
何时用约束、何时用接口,以及泛型 API 设计里「少即是多」的几条经验。
-
提示词不是玄学:一套可复现的评测清单
把「感觉更好」变成可对比的指标:黄金集、一致性抽样与失败样例归档。
-
二分查找的边界写法:下界、上界与答案二分
统一循环不变量,减少 off-by-one。附 Go 实现模板。
-
sync 包选型:Mutex、RWMutex 与 Once
在锁、读写锁与一次性初始化之间做务实选择,并避开常见误用。
-
errgroup:有限并发与错误传播的惯用法
SetLimit、WithContext 与「第一个错误即取消」的语义,以及何时不该用它。
-
前缀树 Trie:补全、路由与词频
按字符分层的树,让「公共前缀」变成共享路径——补全与字典类问题很吃这套。
-
向量嵌入入门:相似度、维度与归一化
余弦相似为何常用,以及维度与归一化约定如何影响检索分数的可比性。
-
Few-shot 示例设计:少而准比多而杂更好
示例是提示词里信息密度最高的部分。选错例子,模型会学错模式。
-
并查集:连通性、按秩合并与路径压缩
从朋友圈到最小生成树预处理,一套近乎线性的数据结构。
Paths
若不知从哪读起
三条小路,覆盖本站主要主题。
- 并发入门
- 检索实践
- 结构基础