[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-tech":3},[4,16,26,37,46,55,63,73,84,95,103,113,123],{"id":5,"slug":6,"title":7,"excerpt":8,"category":9,"tags":10,"publishedAt":14,"readingMinutes":15},2,"notes-on-ai-learning","AI 应用开发完整学习路线","AI 这行分三条赛道，应用开发是普通开发者最该走的那条。学习顺序和判断标准，这篇说清。","AI 学习",[11,12,13],"AI","学习方法","知识管理","2026-08-08T02:00:00Z",6,{"id":17,"slug":18,"title":19,"excerpt":20,"category":9,"tags":21,"publishedAt":25,"readingMinutes":15},36,"agent-complexity-is-not-ability","Agent 智能体工程落地：为什么复杂链路反而不稳定","工具越多、链路越长，Agent 反而越不稳定。我踩坑总结：Workflow 优先，Agent 兜底。",[22,23,24],"Agent","AI 工程","系统设计","2026-07-24T02:00:00Z",{"id":27,"slug":28,"title":29,"excerpt":30,"category":31,"tags":32,"publishedAt":36,"readingMinutes":15},1,"build-a-reliable-personal-site","个人网站工程架构与长期可维护设计","这个站从零搭起来，分享我用 Nuxt 加 Spring Boot 把个人项目做成敢一直改下去的经过。","工程实践",[33,34,35],"Nuxt","Spring Boot","部署","2026-07-20T02:00:00Z",{"id":38,"slug":39,"title":40,"excerpt":41,"category":9,"tags":42,"publishedAt":44,"readingMinutes":45},29,"agent-tool-call-design","Agent 工具调用工程规范：边界、拦截、容错、防失控","Agent 能不能可靠干活，一半看工具设计。轮次上限、高危拦截、容错兜底，一样都不能少。",[22,43,23],"工具调用","2026-07-10T02:00:00Z",5,{"id":47,"slug":48,"title":49,"excerpt":50,"category":9,"tags":51,"publishedAt":54,"readingMinutes":15},35,"rag-not-vector-demo","RAG 检索增强生成：完整流水线拆解（不止向量入库）","RAG 不是把文档丢进向量库就完事，预处理、分块、混合检索、重排、生成约束，缺一环都白搭。",[52,53,23],"RAG","检索","2026-06-26T02:00:00Z",{"id":56,"slug":57,"title":58,"excerpt":59,"category":9,"tags":60,"publishedAt":62,"readingMinutes":15},28,"rag-retrieval-evaluation","RAG 量化评测方案：召回率\u002F精准率人工测试集落地","改完 RAG 靠感觉说\"好像变好了\"？用测试集和召回率、精准率说话，才能真的定位问题。",[52,61,23],"评测","2026-06-12T02:00:00Z",{"id":64,"slug":65,"title":66,"excerpt":67,"category":31,"tags":68,"publishedAt":72,"readingMinutes":15},32,"personal-site-feature-bloat","个人项目如何规避「功能废墟」工程问题","功能越加越多，项目却越来越难改，最后重构比重写还贵——这是我踩过的\"功能废墟\"坑。",[69,70,71],"个人网站","工程管理","维护","2026-05-15T02:00:00Z",{"id":74,"slug":75,"title":76,"excerpt":77,"category":78,"tags":79,"publishedAt":83,"readingMinutes":15},3,"certificate-system-retrospective","去中心化数据存证系统｜业务拆解、技术选型、避坑复盘","存证系统真的需要区块链吗？我用哈希加时间戳加链式关联，给出了一个轻量答案。","项目复盘",[80,81,82],"密码学","Java","分布式系统","2026-03-20T02:00:00Z",{"id":85,"slug":86,"title":87,"excerpt":88,"category":31,"tags":89,"publishedAt":94,"readingMinutes":15},24,"vue-request-cache-implementation","Vue 全局请求缓存工程级实现、过期策略与脏数据规避","给 Vue 项目加全局缓存时踩过的坑：过期策略、脏数据、并发去重，一篇讲清楚。",[90,91,92,93],"Vue","TypeScript","缓存","性能","2026-01-25T02:00:00Z",{"id":96,"slug":97,"title":98,"excerpt":99,"category":31,"tags":100,"publishedAt":102,"readingMinutes":15},31,"virtual-list-is-not-enough","前端性能优化：虚拟列表真实适用场景与完整优化链路","列表卡顿别急着上虚拟列表，先排查网络、数据、渲染整条链路，最后才是它。",[90,101,93],"虚拟列表","2025-12-10T02:00:00Z",{"id":104,"slug":105,"title":106,"excerpt":107,"category":31,"tags":108,"publishedAt":112,"readingMinutes":15},30,"frontend-security-is-not-ui-permission","前端权限安全：为什么仅隐藏 DOM 是无效安全","前端隐藏按钮只是体验优化，安全必须全部下沉到服务端，否则就是给攻击者留后门。",[109,110,111],"前端安全","权限","接口设计","2025-10-15T02:00:00Z",{"id":114,"slug":115,"title":116,"excerpt":117,"category":31,"tags":118,"publishedAt":122,"readingMinutes":15},25,"spring-session-auth-design","SpringBoot 前后端分离 JWT 认证完整落地与坑点","JWT 无状态鉴权落地不难，难的是把密钥、过期时间、敏感数据和全局拦截这些坑都填平。",[34,119,120,121],"安全","认证","PostgreSQL","2025-08-20T02:00:00Z",{"id":124,"slug":125,"title":126,"excerpt":127,"category":78,"tags":128,"publishedAt":131,"readingMinutes":15},37,"data-circulation-platform-retrospective","数据流转确权平台｜数据模型、权限粒度、迭代重构问题","数据授权一次就拷贝一份副本，权限又粗到没法用——这个 B 端项目的前期债，后期还得很痛。",[90,129,130,78],"前端开发","业务系统","2025-07-10T02:00:00Z"]