[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-info":3,"article-categories":4,"articles--3-1":25,"articles-hot":92},null,{"list":5,"total":23},[6,11,15,19,22],{"id":7,"name":8,"sort":7,"createdAt":9,"updatedAt":9,"articleCount":10},1,"技术笔记","2026-11-12T18:30:42.000Z",16,{"id":12,"name":13,"sort":12,"createdAt":9,"updatedAt":9,"articleCount":14},2,"前端开发",38,{"id":16,"name":17,"sort":16,"createdAt":9,"updatedAt":9,"articleCount":18},3,"后端与架构",53,{"id":20,"name":21,"sort":20,"createdAt":9,"updatedAt":9,"articleCount":7},4,"产品与思考",{"id":23,"name":24,"sort":23,"createdAt":9,"updatedAt":9,"articleCount":12},5,"生活随笔",{"list":26,"total":18,"page":7,"pageSize":91},[27,34,41,47,53,59,65,71,77,84],{"id":12,"title":28,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":30,"createdAt":31,"updatedAt":32,"excerpt":33},"Redis 缓存设计中最容易踩的五个坑",false,1564,"2026-11-09T18:30:42.000Z","2026-11-14T00:34:46.000Z","缓存能解决性能问题，也能制造性能问题。下面这五个坑，是我在几个真实项目里反复见到的。 一、缓存雪崩 大量 key 在同一时刻过期，请求瞬间全部打到数据库。解决办法是给过期时间加随机抖动： const ttl = 300 + Math.floor(Math.random() * 60); await redis.set(…",{"id":35,"title":36,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":37,"createdAt":38,"updatedAt":39,"excerpt":40},18,"深入理解 REST 与 GraphQL 选型",1036,"2026-11-06T21:30:42.000Z","2026-11-14T00:34:47.000Z","这是「REST 与 GraphQL 选型」主题下的一篇实践记录：深入理解 REST 与 GraphQL 选型。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，REST 与 GraphQL 选型往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍…",{"id":42,"title":43,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":44,"createdAt":45,"updatedAt":39,"excerpt":46},19,"深入理解 Node.js 流式处理",1171,"2026-11-06T02:30:42.000Z","这是「Node.js 流式处理」主题下的一篇实践记录：深入理解 Node.js 流式处理。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，Node.js 流式处理往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍，遇到问题时才有判断依据。 实…",{"id":48,"title":49,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":50,"createdAt":51,"updatedAt":39,"excerpt":52},20,"深入理解 MySQL 事务隔离级别",1305,"2026-11-05T07:30:42.000Z","这是「MySQL 事务隔离级别」主题下的一篇实践记录：深入理解 MySQL 事务隔离级别。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，MySQL 事务隔离级别往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍，遇到问题时才有判断依据。 实…",{"id":20,"title":54,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":55,"createdAt":56,"updatedAt":57,"excerpt":58},"从零设计一套多应用统一登录方案",992,"2026-11-04T18:30:42.000Z","2026-11-14T00:34:45.000Z","当项目从一个应用变成五六个应用时，登录就成了一件必须统一的事情。这篇笔记记录我们的 OAuth 2.0 授权码方案。 整体结构 认证中心：负责登录页、令牌签发、用户信息 业务应用：注册为 OAuth 客户端，拿到 clientId \u002F clientSecret API 服务：校验令牌，返回受保护资源 授权码流程 应用跳…",{"id":60,"title":61,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":62,"createdAt":63,"updatedAt":39,"excerpt":64},21,"深入理解 Redis 持久化与主从",1436,"2026-11-04T12:30:42.000Z","这是「Redis 持久化与主从」主题下的一篇实践记录：深入理解 Redis 持久化与主从。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，Redis 持久化与主从往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍，遇到问题时才有判断依据。 实…",{"id":66,"title":67,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":68,"createdAt":69,"updatedAt":57,"excerpt":70},22,"深入理解 Docker 镜像体积优化",1573,"2026-11-03T17:30:42.000Z","这是「Docker 镜像体积优化」主题下的一篇实践记录：深入理解 Docker 镜像体积优化。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，Docker 镜像体积优化往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍，遇到问题时才有判断依据…",{"id":72,"title":73,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":74,"createdAt":75,"updatedAt":39,"excerpt":76},23,"深入理解 接口幂等设计",1710,"2026-11-02T22:30:42.000Z","这是「接口幂等设计」主题下的一篇实践记录：深入理解 接口幂等设计。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，接口幂等设计往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍，遇到问题时才有判断依据。 实践要点 先明确目标与边界，再挑选方案…",{"id":78,"title":79,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":80,"createdAt":81,"updatedAt":82,"excerpt":83},24,"深入理解 分布式锁实现",1865,"2026-11-02T03:30:42.000Z","2026-11-14T00:34:49.000Z","这是「分布式锁实现」主题下的一篇实践记录：深入理解 分布式锁实现。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，分布式锁实现往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍，遇到问题时才有判断依据。 实践要点 先明确目标与边界，再挑选方案…",{"id":85,"title":86,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":87,"createdAt":88,"updatedAt":89,"excerpt":90},25,"深入理解 消息队列选型",184,"2026-11-01T08:30:42.000Z","2026-11-14T00:34:48.000Z","这是「消息队列选型」主题下的一篇实践记录：深入理解 消息队列选型。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，消息队列选型往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍，遇到问题时才有判断依据。 实践要点 先明确目标与边界，再挑选方案…",10,{"list":93,"total":124,"page":7,"pageSize":125},[94,95,100,106,112,118],{"id":78,"title":79,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":80,"createdAt":81,"updatedAt":82,"excerpt":83},{"id":16,"title":96,"categoryId":12,"categoryName":13,"isTop":29,"viewCount":97,"createdAt":98,"updatedAt":89,"excerpt":99},"前端性能优化：从首屏 3.2s 到 1.1s",1852,"2026-11-07T18:30:42.000Z","上个月接手一个后台项目，首屏加载 3.2 秒，用户反馈「点开要等一下」。经过一周优化，稳定在 1.1 秒左右。下面按收益从高到低记录。 1. 先量化，再优化 优化之前必须建立基线。我使用的是 Lighthouse + 真实用户监控两条线：实验室数据看瓶颈，真实数据看用户感受。 2. 拆包与懒加载 路由级代码分割，首屏只…",{"id":101,"title":102,"categoryId":12,"categoryName":13,"isTop":29,"viewCount":103,"createdAt":104,"updatedAt":89,"excerpt":105},37,"微前端拆分方案 实践笔记",1846,"2026-10-22T20:30:42.000Z","这是「微前端拆分方案」主题下的一篇实践记录：微前端拆分方案 实践笔记。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，微前端拆分方案往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍，遇到问题时才有判断依据。 实践要点 先明确目标与边界，再挑…",{"id":107,"title":108,"categoryId":7,"categoryName":8,"isTop":29,"viewCount":109,"createdAt":110,"updatedAt":82,"excerpt":111},50,"单元测试实践 实践笔记",1826,"2026-10-12T13:30:42.000Z","这是「单元测试实践」主题下的一篇实践记录：单元测试实践 实践笔记。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，单元测试实践往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍，遇到问题时才有判断依据。 实践要点 先明确目标与边界，再挑选方案…",{"id":113,"title":114,"categoryId":16,"categoryName":17,"isTop":29,"viewCount":115,"createdAt":116,"updatedAt":89,"excerpt":117},63,"接口幂等设计 的十个细节",1805,"2026-10-02T06:30:42.000Z","这是「接口幂等设计」主题下的一篇实践记录：接口幂等设计 的十个细节。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，接口幂等设计往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍，遇到问题时才有判断依据。 实践要点 先明确目标与边界，再挑选方…",{"id":119,"title":120,"categoryId":12,"categoryName":13,"isTop":29,"viewCount":121,"createdAt":122,"updatedAt":89,"excerpt":123},76,"一次 前端监控体系 的踩坑记录",1787,"2026-09-21T23:30:42.000Z","这是「前端监控体系」主题下的一篇实践记录：一次 前端监控体系 的踩坑记录。内容用于填充示例数据，方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里，前端监控体系往往不是孤立的知识点，而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍，遇到问题时才有判断依据。 实践要点 先明确目标与边界，再…",110,6]