{"nodes":[{"id":"c:学习文档","tier":"category","name":"学习文档","url":"/archive/?category=%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3","colorIndex":0,"categoryId":"c:学习文档","value":8,"publishedAt":1775952000000},{"id":"c:设计文档","tier":"category","name":"设计文档","url":"/archive/?category=%E8%AE%BE%E8%AE%A1%E6%96%87%E6%A1%A3","colorIndex":1,"categoryId":"c:设计文档","value":5,"publishedAt":1777593600000},{"id":"c:实践笔记","tier":"category","name":"实践笔记","url":"/archive/?category=%E5%AE%9E%E8%B7%B5%E7%AC%94%E8%AE%B0","colorIndex":2,"categoryId":"c:实践笔记","value":4,"publishedAt":1764633600000},{"id":"c:部署文档","tier":"category","name":"部署文档","url":"/archive/?category=%E9%83%A8%E7%BD%B2%E6%96%87%E6%A1%A3","colorIndex":3,"categoryId":"c:部署文档","value":2,"publishedAt":1778112000000},{"id":"c:测试","tier":"category","name":"测试","url":"/archive/?category=%E6%B5%8B%E8%AF%95","colorIndex":4,"categoryId":"c:测试","value":1,"publishedAt":1785024000000},{"id":"t:AI","tier":"tag","name":"AI","url":"/archive/?tag=AI","colorIndex":0,"categoryId":"c:学习文档","value":6,"publishedAt":1775952000000},{"id":"t:认证","tier":"tag","name":"认证","url":"/archive/?tag=%E8%AE%A4%E8%AF%81","colorIndex":1,"categoryId":"c:设计文档","value":5,"publishedAt":1777593600000},{"id":"t:安全","tier":"tag","name":"安全","url":"/archive/?tag=%E5%AE%89%E5%85%A8","colorIndex":1,"categoryId":"c:设计文档","value":4,"publishedAt":1777593600000},{"id":"t:登录","tier":"tag","name":"登录","url":"/archive/?tag=%E7%99%BB%E5%BD%95","colorIndex":1,"categoryId":"c:设计文档","value":3,"publishedAt":1777593600000},{"id":"t:Bitmap","tier":"tag","name":"Bitmap","url":"/archive/?tag=Bitmap","colorIndex":2,"categoryId":"c:实践笔记","value":2,"publishedAt":1778025600000},{"id":"t:Java","tier":"tag","name":"Java","url":"/archive/?tag=Java","colorIndex":0,"categoryId":"c:学习文档","value":2,"publishedAt":1778112000000},{"id":"t:Redis","tier":"tag","name":"Redis","url":"/archive/?tag=Redis","colorIndex":2,"categoryId":"c:实践笔记","value":2,"publishedAt":1778025600000},{"id":"t:Skill","tier":"tag","name":"Skill","url":"/archive/?tag=Skill","colorIndex":0,"categoryId":"c:学习文档","value":2,"publishedAt":1775952000000},{"id":"t:博客","tier":"tag","name":"博客","url":"/archive/?tag=%E5%8D%9A%E5%AE%A2","colorIndex":0,"categoryId":"c:学习文档","value":2,"publishedAt":1781395200000},{"id":"t:并发编程","tier":"tag","name":"并发编程","url":"/archive/?tag=%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B","colorIndex":0,"categoryId":"c:学习文档","value":2,"publishedAt":1778112000000},{"id":"t:性能优化","tier":"tag","name":"性能优化","url":"/archive/?tag=%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96","colorIndex":2,"categoryId":"c:实践笔记","value":2,"publishedAt":1764633600000},{"id":"t:部署","tier":"tag","name":"部署","url":"/archive/?tag=%E9%83%A8%E7%BD%B2","colorIndex":3,"categoryId":"c:部署文档","value":2,"publishedAt":1778112000000},{"id":"t:Agent","tier":"tag","name":"Agent","url":"/archive/?tag=Agent","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1775952000000},{"id":"t:Bot","tier":"tag","name":"Bot","url":"/archive/?tag=Bot","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000},{"id":"t:Cloudflare","tier":"tag","name":"Cloudflare","url":"/archive/?tag=Cloudflare","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000},{"id":"t:firefly","tier":"tag","name":"firefly","url":"/archive/?tag=firefly","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000},{"id":"t:JWT","tier":"tag","name":"JWT","url":"/archive/?tag=JWT","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000},{"id":"t:MinIO","tier":"tag","name":"MinIO","url":"/archive/?tag=MinIO","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000},{"id":"t:OAuth2","tier":"tag","name":"OAuth2","url":"/archive/?tag=OAuth2","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000},{"id":"t:Oracle","tier":"tag","name":"Oracle","url":"/archive/?tag=Oracle","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000},{"id":"t:Prompt","tier":"tag","name":"Prompt","url":"/archive/?tag=Prompt","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781827200000},{"id":"t:RAG","tier":"tag","name":"RAG","url":"/archive/?tag=RAG","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000},{"id":"t:Umami","tier":"tag","name":"Umami","url":"/archive/?tag=Umami","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778112000000},{"id":"t:Vercel","tier":"tag","name":"Vercel","url":"/archive/?tag=Vercel","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778112000000},{"id":"t:WebSocket","tier":"tag","name":"WebSocket","url":"/archive/?tag=WebSocket","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000},{"id":"t:二开","tier":"tag","name":"二开","url":"/archive/?tag=%E4%BA%8C%E5%BC%80","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000},{"id":"t:分布式","tier":"tag","name":"分布式","url":"/archive/?tag=%E5%88%86%E5%B8%83%E5%BC%8F","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000},{"id":"t:前端","tier":"tag","name":"前端","url":"/archive/?tag=%E5%89%8D%E7%AB%AF","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781395200000},{"id":"t:对象存储","tier":"tag","name":"对象存储","url":"/archive/?tag=%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000},{"id":"t:工作流","tier":"tag","name":"工作流","url":"/archive/?tag=%E5%B7%A5%E4%BD%9C%E6%B5%81","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000},{"id":"t:扫码登录","tier":"tag","name":"扫码登录","url":"/archive/?tag=%E6%89%AB%E7%A0%81%E7%99%BB%E5%BD%95","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000},{"id":"t:数据库","tier":"tag","name":"数据库","url":"/archive/?tag=%E6%95%B0%E6%8D%AE%E5%BA%93","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000},{"id":"t:测试","tier":"tag","name":"测试","url":"/archive/?tag=%E6%B5%8B%E8%AF%95","colorIndex":4,"categoryId":"c:测试","value":1,"publishedAt":1785024000000},{"id":"t:线程池","tier":"tag","name":"线程池","url":"/archive/?tag=%E7%BA%BF%E7%A8%8B%E6%B1%A0","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000},{"id":"t:缓存设计","tier":"tag","name":"缓存设计","url":"/archive/?tag=%E7%BC%93%E5%AD%98%E8%AE%BE%E8%AE%A1","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000},{"id":"t:虚拟线程","tier":"tag","name":"虚拟线程","url":"/archive/?tag=%E8%99%9A%E6%8B%9F%E7%BA%BF%E7%A8%8B","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000},{"id":"t:高性能","tier":"tag","name":"高性能","url":"/archive/?tag=%E9%AB%98%E6%80%A7%E8%83%BD","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000},{"id":"p:测试","tier":"post","name":"测试","url":"/posts/测试/","colorIndex":4,"categoryId":"c:测试","value":0,"publishedAt":1785024000000,"postId":"测试"},{"id":"p:others/others-blog-firefly-mod","tier":"post","name":"firefly | 魔改总结","url":"/posts/others/others-blog-firefly-mod/","colorIndex":0,"categoryId":"c:学习文档","value":10,"publishedAt":1784764800000,"postId":"others/others-blog-firefly-mod"},{"id":"h:others/others-blog-firefly-mod#1首页","tier":"heading","name":"1、首页#","url":"/posts/others/others-blog-firefly-mod/#1首页","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000,"depth":2,"postId":"others/others-blog-firefly-mod"},{"id":"h:others/others-blog-firefly-mod#2音乐","tier":"heading","name":"2、音乐#","url":"/posts/others/others-blog-firefly-mod/#2音乐","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000,"depth":2,"postId":"others/others-blog-firefly-mod"},{"id":"h:others/others-blog-firefly-mod#3分类标签","tier":"heading","name":"3、分类标签#","url":"/posts/others/others-blog-firefly-mod/#3分类标签","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000,"depth":2,"postId":"others/others-blog-firefly-mod"},{"id":"h:others/others-blog-firefly-mod#4留言","tier":"heading","name":"4、留言#","url":"/posts/others/others-blog-firefly-mod/#4留言","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000,"depth":2,"postId":"others/others-blog-firefly-mod"},{"id":"h:others/others-blog-firefly-mod#5关于","tier":"heading","name":"5、关于#","url":"/posts/others/others-blog-firefly-mod/#5关于","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000,"depth":2,"postId":"others/others-blog-firefly-mod"},{"id":"h:others/others-blog-firefly-mod#6日历","tier":"heading","name":"6、日历#","url":"/posts/others/others-blog-firefly-mod/#6日历","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000,"depth":2,"postId":"others/others-blog-firefly-mod"},{"id":"h:others/others-blog-firefly-mod#7归档","tier":"heading","name":"7、归档#","url":"/posts/others/others-blog-firefly-mod/#7归档","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000,"depth":2,"postId":"others/others-blog-firefly-mod"},{"id":"h:others/others-blog-firefly-mod#8其他","tier":"heading","name":"8、其他#","url":"/posts/others/others-blog-firefly-mod/#8其他","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000,"depth":2,"postId":"others/others-blog-firefly-mod"},{"id":"h:others/others-blog-firefly-mod#1本地部署","tier":"heading","name":"1、本地部署#","url":"/posts/others/others-blog-firefly-mod/#1本地部署","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000,"depth":2,"postId":"others/others-blog-firefly-mod"},{"id":"h:others/others-blog-firefly-mod#2ai-搜索配置可选","tier":"heading","name":"2、AI 搜索配置（可选）#","url":"/posts/others/others-blog-firefly-mod/#2ai-搜索配置可选","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1784764800000,"depth":2,"postId":"others/others-blog-firefly-mod"},{"id":"p:ai/ai-prompt-collection","tier":"post","name":"Prompt 收录","url":"/posts/ai/ai-prompt-collection/","colorIndex":0,"categoryId":"c:学习文档","value":9,"publishedAt":1781827200000,"postId":"ai/ai-prompt-collection"},{"id":"h:ai/ai-prompt-collection#1前端","tier":"heading","name":"1、前端#","url":"/posts/ai/ai-prompt-collection/#1前端","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781827200000,"depth":2,"postId":"ai/ai-prompt-collection"},{"id":"h:ai/ai-prompt-collection#1逆向","tier":"heading","name":"1、逆向#","url":"/posts/ai/ai-prompt-collection/#1逆向","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781827200000,"depth":2,"postId":"ai/ai-prompt-collection"},{"id":"h:ai/ai-prompt-collection#2角色设定图","tier":"heading","name":"2、角色设定图#","url":"/posts/ai/ai-prompt-collection/#2角色设定图","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781827200000,"depth":2,"postId":"ai/ai-prompt-collection"},{"id":"h:ai/ai-prompt-collection#3画风","tier":"heading","name":"3、画风#","url":"/posts/ai/ai-prompt-collection/#3画风","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781827200000,"depth":2,"postId":"ai/ai-prompt-collection"},{"id":"h:ai/ai-prompt-collection#4质量","tier":"heading","name":"4、质量#","url":"/posts/ai/ai-prompt-collection/#4质量","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781827200000,"depth":2,"postId":"ai/ai-prompt-collection"},{"id":"h:ai/ai-prompt-collection#5滤镜","tier":"heading","name":"5、滤镜#","url":"/posts/ai/ai-prompt-collection/#5滤镜","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781827200000,"depth":2,"postId":"ai/ai-prompt-collection"},{"id":"h:ai/ai-prompt-collection#6降噪","tier":"heading","name":"6、降噪#","url":"/posts/ai/ai-prompt-collection/#6降噪","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781827200000,"depth":2,"postId":"ai/ai-prompt-collection"},{"id":"h:ai/ai-prompt-collection#7反向提示词","tier":"heading","name":"7、反向提示词#","url":"/posts/ai/ai-prompt-collection/#7反向提示词","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781827200000,"depth":2,"postId":"ai/ai-prompt-collection"},{"id":"h:ai/ai-prompt-collection#8图生图替换人物","tier":"heading","name":"8、图生图，替换人物#","url":"/posts/ai/ai-prompt-collection/#8图生图替换人物","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781827200000,"depth":2,"postId":"ai/ai-prompt-collection"},{"id":"p:ai/ai-blog-ai-zero-editing","tier":"post","name":"这个博客《纯AI，零人工》","url":"/posts/ai/ai-blog-ai-zero-editing/","colorIndex":0,"categoryId":"c:学习文档","value":8,"publishedAt":1781395200000,"postId":"ai/ai-blog-ai-zero-editing"},{"id":"h:ai/ai-blog-ai-zero-editing#1正确流程","tier":"heading","name":"1、正确流程#","url":"/posts/ai/ai-blog-ai-zero-editing/#1正确流程","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781395200000,"depth":2,"postId":"ai/ai-blog-ai-zero-editing"},{"id":"h:ai/ai-blog-ai-zero-editing#2原型图","tier":"heading","name":"2、原型图#","url":"/posts/ai/ai-blog-ai-zero-editing/#2原型图","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781395200000,"depth":2,"postId":"ai/ai-blog-ai-zero-editing"},{"id":"h:ai/ai-blog-ai-zero-editing#3设置规范","tier":"heading","name":"3、设置规范#","url":"/posts/ai/ai-blog-ai-zero-editing/#3设置规范","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781395200000,"depth":2,"postId":"ai/ai-blog-ai-zero-editing"},{"id":"h:ai/ai-blog-ai-zero-editing#4开发","tier":"heading","name":"4、开发#","url":"/posts/ai/ai-blog-ai-zero-editing/#4开发","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781395200000,"depth":2,"postId":"ai/ai-blog-ai-zero-editing"},{"id":"h:ai/ai-blog-ai-zero-editing#5优化","tier":"heading","name":"5、优化#","url":"/posts/ai/ai-blog-ai-zero-editing/#5优化","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781395200000,"depth":2,"postId":"ai/ai-blog-ai-zero-editing"},{"id":"h:ai/ai-blog-ai-zero-editing#1skill","tier":"heading","name":"1、Skill#","url":"/posts/ai/ai-blog-ai-zero-editing/#1skill","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781395200000,"depth":2,"postId":"ai/ai-blog-ai-zero-editing"},{"id":"h:ai/ai-blog-ai-zero-editing#2模型选择","tier":"heading","name":"2、模型选择#","url":"/posts/ai/ai-blog-ai-zero-editing/#2模型选择","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781395200000,"depth":2,"postId":"ai/ai-blog-ai-zero-editing"},{"id":"h:ai/ai-blog-ai-zero-editing#1博客设计原则","tier":"heading","name":"1、博客设计原则#","url":"/posts/ai/ai-blog-ai-zero-editing/#1博客设计原则","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1781395200000,"depth":2,"postId":"ai/ai-blog-ai-zero-editing"},{"id":"p:ai/ai-openspec-superpowers-workflow","tier":"post","name":"OpenSpec + Superpowers","url":"/posts/ai/ai-openspec-superpowers-workflow/","colorIndex":0,"categoryId":"c:学习文档","value":24,"publishedAt":1780444800000,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#1superpowers","tier":"heading","name":"1、Superpowers#","url":"/posts/ai/ai-openspec-superpowers-workflow/#1superpowers","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#2openspec","tier":"heading","name":"2、OpenSpec#","url":"/posts/ai/ai-openspec-superpowers-workflow/#2openspec","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#1superpowers-的功能特性与应用场景","tier":"heading","name":"1、Superpowers 的功能特性与应用场景#","url":"/posts/ai/ai-openspec-superpowers-workflow/#1superpowers-的功能特性与应用场景","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#2openspec-的功能特性与应用场景","tier":"heading","name":"2、OpenSpec 的功能特性与应用场景#","url":"/posts/ai/ai-openspec-superpowers-workflow/#2openspec-的功能特性与应用场景","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#1superpowers-使用步骤","tier":"heading","name":"1、Superpowers 使用步骤#","url":"/posts/ai/ai-openspec-superpowers-workflow/#1superpowers-使用步骤","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#2openspec-使用步骤","tier":"heading","name":"2、OpenSpec 使用步骤#","url":"/posts/ai/ai-openspec-superpowers-workflow/#2openspec-使用步骤","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#1superpowers-子技能","tier":"heading","name":"1、Superpowers 子技能#","url":"/posts/ai/ai-openspec-superpowers-workflow/#1superpowers-子技能","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#2openspec-命令与能力","tier":"heading","name":"2、OpenSpec 命令与能力#","url":"/posts/ai/ai-openspec-superpowers-workflow/#2openspec-命令与能力","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#1环境要求","tier":"heading","name":"1、环境要求#","url":"/posts/ai/ai-openspec-superpowers-workflow/#1环境要求","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#2安装-superpowers","tier":"heading","name":"2、安装 Superpowers#","url":"/posts/ai/ai-openspec-superpowers-workflow/#2安装-superpowers","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#3安装-openspec","tier":"heading","name":"3、安装 OpenSpec#","url":"/posts/ai/ai-openspec-superpowers-workflow/#3安装-openspec","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#1卸载-superpowers","tier":"heading","name":"1、卸载 Superpowers#","url":"/posts/ai/ai-openspec-superpowers-workflow/#1卸载-superpowers","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#2卸载-openspec","tier":"heading","name":"2、卸载 OpenSpec#","url":"/posts/ai/ai-openspec-superpowers-workflow/#2卸载-openspec","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#3残留清理","tier":"heading","name":"3、残留清理#","url":"/posts/ai/ai-openspec-superpowers-workflow/#3残留清理","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#1协同场景","tier":"heading","name":"1、协同场景#","url":"/posts/ai/ai-openspec-superpowers-workflow/#1协同场景","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#2协同优势","tier":"heading","name":"2、协同优势#","url":"/posts/ai/ai-openspec-superpowers-workflow/#2协同优势","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#3协同操作步骤","tier":"heading","name":"3、协同操作步骤#","url":"/posts/ai/ai-openspec-superpowers-workflow/#3协同操作步骤","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#4实战示例实现订单导出功能","tier":"heading","name":"4、实战示例：实现订单导出功能#","url":"/posts/ai/ai-openspec-superpowers-workflow/#4实战示例实现订单导出功能","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#5关键协同点","tier":"heading","name":"5、关键协同点#","url":"/posts/ai/ai-openspec-superpowers-workflow/#5关键协同点","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#1q1openspec-与-superpowers-必须一起使用吗","tier":"heading","name":"1、Q1：OpenSpec 与 Superpowers 必须一起使用吗？#","url":"/posts/ai/ai-openspec-superpowers-workflow/#1q1openspec-与-superpowers-必须一起使用吗","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#2q2superpowers-安装后为什么不生效","tier":"heading","name":"2、Q2：Superpowers 安装后为什么不生效？#","url":"/posts/ai/ai-openspec-superpowers-workflow/#2q2superpowers-安装后为什么不生效","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#3q3openspec-的-spec-应该写到什么粒度","tier":"heading","name":"3、Q3：OpenSpec 的 Spec 应该写到什么粒度？#","url":"/posts/ai/ai-openspec-superpowers-workflow/#3q3openspec-的-spec-应该写到什么粒度","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#4q4如何处理开发过程中的需求变更","tier":"heading","name":"4、Q4：如何处理开发过程中的需求变更？#","url":"/posts/ai/ai-openspec-superpowers-workflow/#4q4如何处理开发过程中的需求变更","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"h:ai/ai-openspec-superpowers-workflow#5q5团队如何协作使用-openspec","tier":"heading","name":"5、Q5：团队如何协作使用 OpenSpec？#","url":"/posts/ai/ai-openspec-superpowers-workflow/#5q5团队如何协作使用-openspec","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1780444800000,"depth":2,"postId":"ai/ai-openspec-superpowers-workflow"},{"id":"p:ai/ai-blog-ai-search-vectorize","tier":"post","name":"AI 搜索 | Cloudflare Vectorize 实现问答搜索","url":"/posts/ai/ai-blog-ai-search-vectorize/","colorIndex":1,"categoryId":"c:设计文档","value":13,"publishedAt":1778716800000,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#1实现细节","tier":"heading","name":"1、实现细节#","url":"/posts/ai/ai-blog-ai-search-vectorize/#1实现细节","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#2与-langchain-递归分块的对比","tier":"heading","name":"2、与 LangChain 递归分块的对比#","url":"/posts/ai/ai-blog-ai-search-vectorize/#2与-langchain-递归分块的对比","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#1构建脚本","tier":"heading","name":"1、构建脚本#","url":"/posts/ai/ai-blog-ai-search-vectorize/#1构建脚本","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#2embedding-来源","tier":"heading","name":"2、Embedding 来源#","url":"/posts/ai/ai-blog-ai-search-vectorize/#2embedding-来源","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#3cloudflare-凭证获取","tier":"heading","name":"3、Cloudflare 凭证获取#","url":"/posts/ai/ai-blog-ai-search-vectorize/#3cloudflare-凭证获取","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#4worker-secret-配置","tier":"heading","name":"4、Worker Secret 配置#","url":"/posts/ai/ai-blog-ai-search-vectorize/#4worker-secret-配置","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#5向量索引上传","tier":"heading","name":"5、向量索引上传#","url":"/posts/ai/ai-blog-ai-search-vectorize/#5向量索引上传","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#1统一配置管理","tier":"heading","name":"1、统一配置管理#","url":"/posts/ai/ai-blog-ai-search-vectorize/#1统一配置管理","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#2embedding","tier":"heading","name":"2、Embedding#","url":"/posts/ai/ai-blog-ai-search-vectorize/#2embedding","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#3向量检索","tier":"heading","name":"3、向量检索#","url":"/posts/ai/ai-blog-ai-search-vectorize/#3向量检索","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#4prompt-拼接与-system-注入防护","tier":"heading","name":"4、Prompt 拼接与 system 注入防护#","url":"/posts/ai/ai-blog-ai-search-vectorize/#4prompt-拼接与-system-注入防护","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#5流式返回","tier":"heading","name":"5、流式返回#","url":"/posts/ai/ai-blog-ai-search-vectorize/#5流式返回","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"h:ai/ai-blog-ai-search-vectorize#1会话管理","tier":"heading","name":"1、会话管理#","url":"/posts/ai/ai-blog-ai-search-vectorize/#1会话管理","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1778716800000,"depth":2,"postId":"ai/ai-blog-ai-search-vectorize"},{"id":"p:projects/projects-redis-interaction-cache-design","tier":"post","name":"Redis | 三种交互数据缓存","url":"/posts/projects/projects-redis-interaction-cache-design/","colorIndex":2,"categoryId":"c:实践笔记","value":17,"publishedAt":1778630400000,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#1共享-key-概念","tier":"heading","name":"1、共享 Key 概念#","url":"/posts/projects/projects-redis-interaction-cache-design/#1共享-key-概念","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#2方案一set--mq-异步入库","tier":"heading","name":"2、方案一：Set + MQ 异步入库#","url":"/posts/projects/projects-redis-interaction-cache-design/#2方案一set--mq-异步入库","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#3方案二set--定时扫描入库","tier":"heading","name":"3、方案二：Set + 定时扫描入库#","url":"/posts/projects/projects-redis-interaction-cache-design/#3方案二set--定时扫描入库","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#4方案三bitmap--mq-异步入库","tier":"heading","name":"4、方案三：Bitmap + MQ 异步入库#","url":"/posts/projects/projects-redis-interaction-cache-design/#4方案三bitmap--mq-异步入库","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#5四种交互场景的实现差异","tier":"heading","name":"5、四种交互场景的实现差异#","url":"/posts/projects/projects-redis-interaction-cache-design/#5四种交互场景的实现差异","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#6三种方案对比","tier":"heading","name":"6、三种方案对比#","url":"/posts/projects/projects-redis-interaction-cache-design/#6三种方案对比","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#1数据库表设计","tier":"heading","name":"1、数据库表设计#","url":"/posts/projects/projects-redis-interaction-cache-design/#1数据库表设计","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#2缓存预热","tier":"heading","name":"2、缓存预热#","url":"/posts/projects/projects-redis-interaction-cache-design/#2缓存预热","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#1redis-不可用时的降级策略","tier":"heading","name":"1、Redis 不可用时的降级策略#","url":"/posts/projects/projects-redis-interaction-cache-design/#1redis-不可用时的降级策略","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#2数据不一致的修复机制","tier":"heading","name":"2、数据不一致的修复机制#","url":"/posts/projects/projects-redis-interaction-cache-design/#2数据不一致的修复机制","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#3mq-消息丢失的兜底","tier":"heading","name":"3、MQ 消息丢失的兜底#","url":"/posts/projects/projects-redis-interaction-cache-design/#3mq-消息丢失的兜底","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#4缓存击穿防护","tier":"heading","name":"4、缓存击穿防护#","url":"/posts/projects/projects-redis-interaction-cache-design/#4缓存击穿防护","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#1setbit-首次写入的性能陷阱","tier":"heading","name":"1、SETBIT 首次写入的性能陷阱#","url":"/posts/projects/projects-redis-interaction-cache-design/#1setbit-首次写入的性能陷阱","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#2雪花-id-与-bitmap-的根本矛盾","tier":"heading","name":"2、雪花 ID 与 Bitmap 的根本矛盾#","url":"/posts/projects/projects-redis-interaction-cache-design/#2雪花-id-与-bitmap-的根本矛盾","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#3分布式场景下的阻塞与倾斜","tier":"heading","name":"3、分布式场景下的阻塞与倾斜#","url":"/posts/projects/projects-redis-interaction-cache-design/#3分布式场景下的阻塞与倾斜","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#4同步任务的幂等性","tier":"heading","name":"4、同步任务的幂等性#","url":"/posts/projects/projects-redis-interaction-cache-design/#4同步任务的幂等性","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"h:projects/projects-redis-interaction-cache-design#5数据丢失风险","tier":"heading","name":"5、数据丢失风险#","url":"/posts/projects/projects-redis-interaction-cache-design/#5数据丢失风险","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778630400000,"depth":2,"postId":"projects/projects-redis-interaction-cache-design"},{"id":"p:ai/ai-napcat-astrbot-deployment","tier":"post","name":"QQ 机器人 | NapCat + AstrBot","url":"/posts/ai/ai-napcat-astrbot-deployment/","colorIndex":3,"categoryId":"c:部署文档","value":25,"publishedAt":1778544000000,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#1启动","tier":"heading","name":"1、启动#","url":"/posts/ai/ai-napcat-astrbot-deployment/#1启动","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#1建目录","tier":"heading","name":"1、建目录#","url":"/posts/ai/ai-napcat-astrbot-deployment/#1建目录","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#2新建文件","tier":"heading","name":"2、新建文件#","url":"/posts/ai/ai-napcat-astrbot-deployment/#2新建文件","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#3编排","tier":"heading","name":"3、编排#","url":"/posts/ai/ai-napcat-astrbot-deployment/#3编排","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#4校验","tier":"heading","name":"4、校验#","url":"/posts/ai/ai-napcat-astrbot-deployment/#4校验","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#1访问地址","tier":"heading","name":"1、访问地址#","url":"/posts/ai/ai-napcat-astrbot-deployment/#1访问地址","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#2配置反向-websocket","tier":"heading","name":"2、配置反向 WebSocket#","url":"/posts/ai/ai-napcat-astrbot-deployment/#2配置反向-websocket","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#3napcat-环境变量说明部署忽略这里只是补充说明","tier":"heading","name":"3、NapCat 环境变量说明（部署忽略，这里只是补充说明）#","url":"/posts/ai/ai-napcat-astrbot-deployment/#3napcat-环境变量说明部署忽略这里只是补充说明","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#4napcat-配置文件位置部署忽略这里只是补充说明","tier":"heading","name":"4、NapCat 配置文件位置（部署忽略，这里只是补充说明）#","url":"/posts/ai/ai-napcat-astrbot-deployment/#4napcat-配置文件位置部署忽略这里只是补充说明","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#1访问-webui","tier":"heading","name":"1、访问 WebUI#","url":"/posts/ai/ai-napcat-astrbot-deployment/#1访问-webui","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#2添加消息平台连接-napcat","tier":"heading","name":"2、添加消息平台（连接 NapCat）#","url":"/posts/ai/ai-napcat-astrbot-deployment/#2添加消息平台连接-napcat","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#3配置-llm-大模型需要先准备好自己ai模型key","tier":"heading","name":"3、配置 LLM 大模型（需要先准备好自己AI模型key）#","url":"/posts/ai/ai-napcat-astrbot-deployment/#3配置-llm-大模型需要先准备好自己ai模型key","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#4如何白嫖免费大模型agnes-或-魔搭社区","tier":"heading","name":"4、如何白嫖免费大模型？（Agnes 或 魔搭社区）#","url":"/posts/ai/ai-napcat-astrbot-deployment/#4如何白嫖免费大模型agnes-或-魔搭社区","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#5普通设置","tier":"heading","name":"5、普通设置#","url":"/posts/ai/ai-napcat-astrbot-deployment/#5普通设置","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#6平台设置","tier":"heading","name":"6、平台设置#","url":"/posts/ai/ai-napcat-astrbot-deployment/#6平台设置","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#7扩展功能","tier":"heading","name":"7、扩展功能#","url":"/posts/ai/ai-napcat-astrbot-deployment/#7扩展功能","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#1传统手搓","tier":"heading","name":"1、传统手搓#","url":"/posts/ai/ai-napcat-astrbot-deployment/#1传统手搓","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#2使用女娲-skill-蒸馏人格","tier":"heading","name":"2、使用女娲 Skill 蒸馏人格#","url":"/posts/ai/ai-napcat-astrbot-deployment/#2使用女娲-skill-蒸馏人格","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#3喵墩备份","tier":"heading","name":"3、喵墩备份#","url":"/posts/ai/ai-napcat-astrbot-deployment/#3喵墩备份","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#1如图","tier":"heading","name":"1、如图#","url":"/posts/ai/ai-napcat-astrbot-deployment/#1如图","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#2为什么我不用记忆呢","tier":"heading","name":"2、为什么我不用记忆呢#","url":"/posts/ai/ai-napcat-astrbot-deployment/#2为什么我不用记忆呢","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#1astrbot-连不上-napcat","tier":"heading","name":"1、AstrBot 连不上 NapCat#","url":"/posts/ai/ai-napcat-astrbot-deployment/#1astrbot-连不上-napcat","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#2qq-号被风控--账号掉线","tier":"heading","name":"2、QQ 号被风控 / 账号掉线#","url":"/posts/ai/ai-napcat-astrbot-deployment/#2qq-号被风控--账号掉线","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#3消息延迟高","tier":"heading","name":"3、消息延迟高#","url":"/posts/ai/ai-napcat-astrbot-deployment/#3消息延迟高","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"h:ai/ai-napcat-astrbot-deployment#4如何更新版本","tier":"heading","name":"4、如何更新版本#","url":"/posts/ai/ai-napcat-astrbot-deployment/#4如何更新版本","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778544000000,"depth":2,"postId":"ai/ai-napcat-astrbot-deployment"},{"id":"p:others/others-umami-vercel-neon-deployment","tier":"post","name":"Umami | Vercel + Neon 部署","url":"/posts/others/others-umami-vercel-neon-deployment/","colorIndex":3,"categoryId":"c:部署文档","value":5,"publishedAt":1778112000000,"postId":"others/others-umami-vercel-neon-deployment"},{"id":"h:others/others-umami-vercel-neon-deployment#1通用接入方式","tier":"heading","name":"1、通用接入方式#","url":"/posts/others/others-umami-vercel-neon-deployment/#1通用接入方式","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"others/others-umami-vercel-neon-deployment"},{"id":"h:others/others-umami-vercel-neon-deployment#2本项目接入方式","tier":"heading","name":"2、本项目接入方式#","url":"/posts/others/others-umami-vercel-neon-deployment/#2本项目接入方式","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"others/others-umami-vercel-neon-deployment"},{"id":"h:others/others-umami-vercel-neon-deployment#1开启-share-url","tier":"heading","name":"1、开启 Share URL#","url":"/posts/others/others-umami-vercel-neon-deployment/#1开启-share-url","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"others/others-umami-vercel-neon-deployment"},{"id":"h:others/others-umami-vercel-neon-deployment#2本项目获取-uvpv-的实现","tier":"heading","name":"2、本项目获取 UV/PV 的实现#","url":"/posts/others/others-umami-vercel-neon-deployment/#2本项目获取-uvpv-的实现","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"others/others-umami-vercel-neon-deployment"},{"id":"h:others/others-umami-vercel-neon-deployment#3直接重定向到分享页","tier":"heading","name":"3、直接重定向到分享页#","url":"/posts/others/others-umami-vercel-neon-deployment/#3直接重定向到分享页","colorIndex":3,"categoryId":"c:部署文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"others/others-umami-vercel-neon-deployment"},{"id":"p:projects/projects-java-thread-pool-configuration","tier":"post","name":"线程池 | 配置指南","url":"/posts/projects/projects-java-thread-pool-configuration/","colorIndex":0,"categoryId":"c:学习文档","value":39,"publishedAt":1778112000000,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#1corepoolsize-与-maximumpoolsize","tier":"heading","name":"1、corePoolSize 与 maximumPoolSize#","url":"/posts/projects/projects-java-thread-pool-configuration/#1corepoolsize-与-maximumpoolsize","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#2keepalivetime-与-timeunit","tier":"heading","name":"2、keepAliveTime 与 TimeUnit#","url":"/posts/projects/projects-java-thread-pool-configuration/#2keepalivetime-与-timeunit","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#3工作队列","tier":"heading","name":"3、工作队列#","url":"/posts/projects/projects-java-thread-pool-configuration/#3工作队列","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#4线程工厂","tier":"heading","name":"4、线程工厂#","url":"/posts/projects/projects-java-thread-pool-configuration/#4线程工厂","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#5拒绝策略","tier":"heading","name":"5、拒绝策略#","url":"/posts/projects/projects-java-thread-pool-configuration/#5拒绝策略","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#1cpu-密集型","tier":"heading","name":"1、CPU 密集型#","url":"/posts/projects/projects-java-thread-pool-configuration/#1cpu-密集型","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#2io-密集型","tier":"heading","name":"2、IO 密集型#","url":"/posts/projects/projects-java-thread-pool-configuration/#2io-密集型","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#3混合型任务","tier":"heading","name":"3、混合型任务#","url":"/posts/projects/projects-java-thread-pool-configuration/#3混合型任务","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#1littles-law","tier":"heading","name":"1、Little’s Law#","url":"/posts/projects/projects-java-thread-pool-configuration/#1littles-law","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#2brian-goetz-公式","tier":"heading","name":"2、Brian Goetz 公式#","url":"/posts/projects/projects-java-thread-pool-configuration/#2brian-goetz-公式","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#3公式的局限","tier":"heading","name":"3、公式的局限#","url":"/posts/projects/projects-java-thread-pool-configuration/#3公式的局限","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#4估算流程","tier":"heading","name":"4、估算流程#","url":"/posts/projects/projects-java-thread-pool-configuration/#4估算流程","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#5常见场景参考值","tier":"heading","name":"5、常见场景参考值#","url":"/posts/projects/projects-java-thread-pool-configuration/#5常见场景参考值","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#1全局共用一个线程池","tier":"heading","name":"1、全局共用一个线程池#","url":"/posts/projects/projects-java-thread-pool-configuration/#1全局共用一个线程池","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#2不考虑下游限制盲目设大","tier":"heading","name":"2、不考虑下游限制盲目设大#","url":"/posts/projects/projects-java-thread-pool-configuration/#2不考虑下游限制盲目设大","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#3keepalivetime-设置过短","tier":"heading","name":"3、keepAliveTime 设置过短#","url":"/posts/projects/projects-java-thread-pool-configuration/#3keepalivetime-设置过短","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#4任务中嵌套提交任务","tier":"heading","name":"4、任务中嵌套提交任务#","url":"/posts/projects/projects-java-thread-pool-configuration/#4任务中嵌套提交任务","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#5容器环境不修正-cpu-核数","tier":"heading","name":"5、容器环境不修正 CPU 核数#","url":"/posts/projects/projects-java-thread-pool-configuration/#5容器环境不修正-cpu-核数","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#6线程未命名","tier":"heading","name":"6、线程未命名#","url":"/posts/projects/projects-java-thread-pool-configuration/#6线程未命名","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#1需求分析清单","tier":"heading","name":"1、需求分析清单#","url":"/posts/projects/projects-java-thread-pool-configuration/#1需求分析清单","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#2订单查询服务配置示例","tier":"heading","name":"2、订单查询服务配置示例#","url":"/posts/projects/projects-java-thread-pool-configuration/#2订单查询服务配置示例","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#3压测验证方案","tier":"heading","name":"3、压测验证方案#","url":"/posts/projects/projects-java-thread-pool-configuration/#3压测验证方案","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#1动态调整原理","tier":"heading","name":"1、动态调整原理#","url":"/posts/projects/projects-java-thread-pool-configuration/#1动态调整原理","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#2实现示例","tier":"heading","name":"2、实现示例#","url":"/posts/projects/projects-java-thread-pool-configuration/#2实现示例","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#3队列容量动态修改","tier":"heading","name":"3、队列容量动态修改#","url":"/posts/projects/projects-java-thread-pool-configuration/#3队列容量动态修改","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#1prometheus-指标暴露","tier":"heading","name":"1、Prometheus 指标暴露#","url":"/posts/projects/projects-java-thread-pool-configuration/#1prometheus-指标暴露","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#2alertmanager-告警规则","tier":"heading","name":"2、AlertManager 告警规则#","url":"/posts/projects/projects-java-thread-pool-configuration/#2alertmanager-告警规则","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#3告警阈值参考","tier":"heading","name":"3、告警阈值参考#","url":"/posts/projects/projects-java-thread-pool-configuration/#3告警阈值参考","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#1线程数调优","tier":"heading","name":"1、线程数调优#","url":"/posts/projects/projects-java-thread-pool-configuration/#1线程数调优","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#2队列深度调优","tier":"heading","name":"2、队列深度调优#","url":"/posts/projects/projects-java-thread-pool-configuration/#2队列深度调优","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#3gc-与内存调优","tier":"heading","name":"3、GC 与内存调优#","url":"/posts/projects/projects-java-thread-pool-configuration/#3gc-与内存调优","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#4上下文切换调优","tier":"heading","name":"4、上下文切换调优#","url":"/posts/projects/projects-java-thread-pool-configuration/#4上下文切换调优","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#1q1corepoolsize-和-maximumpoolsize-应该设成一样吗","tier":"heading","name":"1、Q1：corePoolSize 和 maximumPoolSize 应该设成一样吗？#","url":"/posts/projects/projects-java-thread-pool-configuration/#1q1corepoolsize-和-maximumpoolsize-应该设成一样吗","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#2q2为什么线程池达到了-maximumpoolsize-但-cpu-使用率仍然很低","tier":"heading","name":"2、Q2：为什么线程池达到了 maximumPoolSize 但 CPU 使用率仍然很低？#","url":"/posts/projects/projects-java-thread-pool-configuration/#2q2为什么线程池达到了-maximumpoolsize-但-cpu-使用率仍然很低","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#3q3任务被拒绝时应该选择哪种策略","tier":"heading","name":"3、Q3：任务被拒绝时应该选择哪种策略？#","url":"/posts/projects/projects-java-thread-pool-configuration/#3q3任务被拒绝时应该选择哪种策略","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#4q4使用-completablefuture-时如何指定自定义线程池","tier":"heading","name":"4、Q4：使用 CompletableFuture 时如何指定自定义线程池？#","url":"/posts/projects/projects-java-thread-pool-configuration/#4q4使用-completablefuture-时如何指定自定义线程池","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#5q5spring-的-async-默认线程池有什么问题","tier":"heading","name":"5、Q5：Spring 的 @Async 默认线程池有什么问题？#","url":"/posts/projects/projects-java-thread-pool-configuration/#5q5spring-的-async-默认线程池有什么问题","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#6q6如何优雅关闭线程池","tier":"heading","name":"6、Q6：如何优雅关闭线程池？#","url":"/posts/projects/projects-java-thread-pool-configuration/#6q6如何优雅关闭线程池","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"h:projects/projects-java-thread-pool-configuration#7q7allowcorethreadtimeouttrue-是否推荐","tier":"heading","name":"7、Q7：allowCoreThreadTimeOut(true) 是否推荐？#","url":"/posts/projects/projects-java-thread-pool-configuration/#7q7allowcorethreadtimeouttrue-是否推荐","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-thread-pool-configuration"},{"id":"p:projects/projects-java-virtual-thread-async-orchestration","tier":"post","name":"虚拟线程 | 异步编排","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/","colorIndex":0,"categoryId":"c:学习文档","value":53,"publishedAt":1778112000000,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#1一个真实的场景","tier":"heading","name":"1、一个真实的场景#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#1一个真实的场景","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#2问题的本质","tier":"heading","name":"2、问题的本质#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#2问题的本质","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#1阶段-1原始线程时代java-101996年","tier":"heading","name":"1、阶段 1：原始线程时代（Java 1.0，1996年）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#1阶段-1原始线程时代java-101996年","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#2阶段-2线程池时代java-52004年","tier":"heading","name":"2、阶段 2：线程池时代（Java 5，2004年）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#2阶段-2线程池时代java-52004年","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#3阶段-3异步回调时代java-82014年","tier":"heading","name":"3、阶段 3：异步回调时代（Java 8，2014年）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#3阶段-3异步回调时代java-82014年","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#4阶段-4响应式编程时代spring-webflux2017年","tier":"heading","name":"4、阶段 4：响应式编程时代（Spring WebFlux，2017年）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#4阶段-4响应式编程时代spring-webflux2017年","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#5阶段-5虚拟线程时代jdk-212023年","tier":"heading","name":"5、阶段 5：虚拟线程时代（JDK 21，2023年）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#5阶段-5虚拟线程时代jdk-212023年","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#1传统线程的问题图解","tier":"heading","name":"1、传统线程的问题（图解）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#1传统线程的问题图解","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#2虚拟线程的解决思路","tier":"heading","name":"2、虚拟线程的解决思路#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#2虚拟线程的解决思路","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#3关键概念continuation续体","tier":"heading","name":"3、关键概念：Continuation（续体）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#3关键概念continuation续体","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#4通俗类比","tier":"heading","name":"4、通俗类比#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#4通俗类比","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#1最简单的创建方式","tier":"heading","name":"1、最简单的创建方式#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#1最简单的创建方式","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#2生产推荐每任务一虚拟线程","tier":"heading","name":"2、生产推荐：每任务一虚拟线程#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#2生产推荐每任务一虚拟线程","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#3spring-boot-32-集成推荐","tier":"heading","name":"3、Spring Boot 3.2+ 集成（推荐）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#3spring-boot-32-集成推荐","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#4并行聚合多个-io-任务最常用场景","tier":"heading","name":"4、并行聚合多个 IO 任务（最常用场景）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#4并行聚合多个-io-任务最常用场景","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#5结合-scopedvalue-传递上下文推荐替代-threadlocal","tier":"heading","name":"5、结合 ScopedValue 传递上下文（推荐替代 ThreadLocal）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#5结合-scopedvalue-传递上下文推荐替代-threadlocal","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#1坑-1给虚拟线程建线程池最常见错误","tier":"heading","name":"1、坑 1：给虚拟线程建线程池（最常见错误）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#1坑-1给虚拟线程建线程池最常见错误","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#2坑-2synchronized-块导致-pinningjdk-2123","tier":"heading","name":"2、坑 2：synchronized 块导致 Pinning（JDK 21/23）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#2坑-2synchronized-块导致-pinningjdk-2123","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#3坑-3threadlocal-在虚拟线程中导致内存泄漏","tier":"heading","name":"3、坑 3：ThreadLocal 在虚拟线程中导致内存泄漏#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#3坑-3threadlocal-在虚拟线程中导致内存泄漏","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#4坑-4虚拟线程遇到-cpu-密集任务反而变慢","tier":"heading","name":"4、坑 4：虚拟线程遇到 CPU 密集任务反而变慢#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#4坑-4虚拟线程遇到-cpu-密集任务反而变慢","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#5坑-5数据库连接池成为新瓶颈","tier":"heading","name":"5、坑 5：数据库连接池成为新瓶颈#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#5坑-5数据库连接池成为新瓶颈","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#6坑-6在虚拟线程中调用-native-方法导致-pinning","tier":"heading","name":"6、坑 6：在虚拟线程中调用 native 方法导致 Pinning#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#6坑-6在虚拟线程中调用-native-方法导致-pinning","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#7坑-7用-isvirtual-做业务逻辑判断","tier":"heading","name":"7、坑 7：用 isVirtual() 做业务逻辑判断#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#7坑-7用-isvirtual-做业务逻辑判断","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#8坑-8虚拟线程数量无上限导致-oom","tier":"heading","name":"8、坑 8：虚拟线程数量无上限导致 OOM#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#8坑-8虚拟线程数量无上限导致-oom","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#9坑-9忘记处理虚拟线程的中断","tier":"heading","name":"9、坑 9：忘记处理虚拟线程的中断#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#9坑-9忘记处理虚拟线程的中断","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#10坑-10在虚拟线程中使用-blockingqueue-不当","tier":"heading","name":"10、坑 10：在虚拟线程中使用 BlockingQueue 不当#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#10坑-10在虚拟线程中使用-blockingqueue-不当","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#11坑-11错误理解虚拟线程不需要关心并发问题","tier":"heading","name":"11、坑 11：错误理解”虚拟线程不需要关心并发问题”#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#11坑-11错误理解虚拟线程不需要关心并发问题","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#12坑-12在旧版-jdbc-驱动中遇到兼容性问题","tier":"heading","name":"12、坑 12：在旧版 JDBC 驱动中遇到兼容性问题#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#12坑-12在旧版-jdbc-驱动中遇到兼容性问题","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#1基本概念什么是-completablefuture","tier":"heading","name":"1、基本概念：什么是 CompletableFuture？#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#1基本概念什么是-completablefuture","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#2核心方法速查","tier":"heading","name":"2、核心方法速查#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#2核心方法速查","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#3实战并行聚合商品详情","tier":"heading","name":"3、实战：并行聚合商品详情#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#3实战并行聚合商品详情","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#4超时与降级处理","tier":"heading","name":"4、超时与降级处理#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#4超时与降级处理","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#1坑-1不指定-executor使用-forkjoinpool-公共池","tier":"heading","name":"1、坑 1：不指定 Executor，使用 ForkJoinPool 公共池#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#1坑-1不指定-executor使用-forkjoinpool-公共池","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#2坑-2异常被静默吞掉","tier":"heading","name":"2、坑 2：异常被静默吞掉#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#2坑-2异常被静默吞掉","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#3坑-3thenapply-vs-thenapplyasync-混淆","tier":"heading","name":"3、坑 3：thenApply vs thenApplyAsync 混淆#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#3坑-3thenapply-vs-thenapplyasync-混淆","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#4坑-4allof-没有返回值需要额外-get","tier":"heading","name":"4、坑 4：allOf 没有返回值，需要额外 get()#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#4坑-4allof-没有返回值需要额外-get","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#5坑-5链式调用中的线程切换导致-threadlocal-丢失","tier":"heading","name":"5、坑 5：链式调用中的线程切换导致 ThreadLocal 丢失#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#5坑-5链式调用中的线程切换导致-threadlocal-丢失","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#6坑-6join-和-get-的异常包装差异","tier":"heading","name":"6、坑 6：join() 和 get() 的异常包装差异#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#6坑-6join-和-get-的异常包装差异","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#7坑-7completablefuture-没有超时导致线程泄漏","tier":"heading","name":"7、坑 7：CompletableFuture 没有超时导致线程泄漏#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#7坑-7completablefuture-没有超时导致线程泄漏","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#8坑-8在高并发下大量创建-completablefuture-链导致内存压力","tier":"heading","name":"8、坑 8：在高并发下大量创建 CompletableFuture 链导致内存压力#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#8坑-8在高并发下大量创建-completablefuture-链导致内存压力","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#1它解决了什么问题","tier":"heading","name":"1、它解决了什么问题？#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#1它解决了什么问题","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#2基本用法","tier":"heading","name":"2、基本用法#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#2基本用法","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#3带超时的结构化并发","tier":"heading","name":"3、带超时的结构化并发#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#3带超时的结构化并发","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#4结构化并发的优势总结","tier":"heading","name":"4、结构化并发的优势总结#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#4结构化并发的优势总结","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#1核心概念mono-和-flux","tier":"heading","name":"1、核心概念：Mono 和 Flux#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#1核心概念mono-和-flux","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#2背压backpressure响应式的核心优势","tier":"heading","name":"2、背压（Backpressure）：响应式的核心优势#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#2背压backpressure响应式的核心优势","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#3什么时候应该用响应式","tier":"heading","name":"3、什么时候应该用响应式？#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#3什么时候应该用响应式","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#4响应式的三大难点让你望而却步的原因","tier":"heading","name":"4、响应式的三大难点（让你望而却步的原因）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#4响应式的三大难点让你望而却步的原因","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#1决策树","tier":"heading","name":"1、决策树#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#1决策树","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#2推荐的企业级组合jdk-21","tier":"heading","name":"2、推荐的企业级组合（JDK 21+）#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#2推荐的企业级组合jdk-21","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#3完整实战商品详情页聚合接口","tier":"heading","name":"3、完整实战：商品详情页聚合接口#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#3完整实战商品详情页聚合接口","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#1三句话总结","tier":"heading","name":"1、三句话总结#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#1三句话总结","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"h:projects/projects-java-virtual-thread-async-orchestration#2学习路径建议","tier":"heading","name":"2、学习路径建议#","url":"/posts/projects/projects-java-virtual-thread-async-orchestration/#2学习路径建议","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1778112000000,"depth":2,"postId":"projects/projects-java-virtual-thread-async-orchestration"},{"id":"p:projects/projects-redis-bitmap-snowflake-id","tier":"post","name":"Redis | Bitmap、雪花ID、分布式","url":"/posts/projects/projects-redis-bitmap-snowflake-id/","colorIndex":2,"categoryId":"c:实践笔记","value":28,"publishedAt":1778025600000,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#1setbit-的时间复杂度陷阱","tier":"heading","name":"1、SETBIT 的时间复杂度陷阱#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#1setbit-的时间复杂度陷阱","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#2内存分配量化","tier":"heading","name":"2、内存分配量化#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#2内存分配量化","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#3为什么后续操作快","tier":"heading","name":"3、为什么后续操作快？#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#3为什么后续操作快","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#4能否缩小-offset-范围","tier":"heading","name":"4、能否缩小 Offset 范围？#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#4能否缩小-offset-范围","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#1雪花-id-的结构决定了它不适合做-bitmap-offset","tier":"heading","name":"1、雪花 ID 的结构决定了它不适合做 Bitmap offset#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#1雪花-id-的结构决定了它不适合做-bitmap-offset","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#2哈希取模是治标不治本的妥协","tier":"heading","name":"2、哈希取模是”治标不治本”的妥协#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#2哈希取模是治标不治本的妥协","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#3雪花-id-的时间递增特性也无法利用","tier":"heading","name":"3、雪花 ID 的”时间递增”特性也无法利用#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#3雪花-id-的时间递增特性也无法利用","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#4如果不用哈希直接用雪花-id-做-offset-呢","tier":"heading","name":"4、如果不用哈希，直接用雪花 ID 做 offset 呢？#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#4如果不用哈希直接用雪花-id-做-offset-呢","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#5从-id-生成策略角度的替代方案","tier":"heading","name":"5、从 ID 生成策略角度的替代方案#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#5从-id-生成策略角度的替代方案","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#6雪花-id-角度的本质","tier":"heading","name":"6、雪花 ID 角度的本质#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#6雪花-id-角度的本质","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#1redis-单线程阻塞一个慢操作拖垮整个节点","tier":"heading","name":"1、Redis 单线程阻塞：一个慢操作拖垮整个节点#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#1redis-单线程阻塞一个慢操作拖垮整个节点","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#2redis-cluster-数据倾斜","tier":"heading","name":"2、Redis Cluster 数据倾斜#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#2redis-cluster-数据倾斜","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#3keys-命令的集群隐患","tier":"heading","name":"3、KEYS 命令的集群隐患#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#3keys-命令的集群隐患","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#4bitmap-大-key-的运维风险","tier":"heading","name":"4、Bitmap 大 Key 的运维风险#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#4bitmap-大-key-的运维风险","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#5分布式角度的结论","tier":"heading","name":"5、分布式角度的结论#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#5分布式角度的结论","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#1原理","tier":"heading","name":"1、原理#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#1原理","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#2三种使用方式对比","tier":"heading","name":"2、三种使用方式对比#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#2三种使用方式对比","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#3roaringbitmap-结论","tier":"heading","name":"3、RoaringBitmap 结论#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#3roaringbitmap-结论","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#1key-设计","tier":"heading","name":"1、Key 设计#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#1key-设计","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#2为什么用用户维度而不是内容维度的-set","tier":"heading","name":"2、为什么用用户维度而不是内容维度的 Set？#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#2为什么用用户维度而不是内容维度的-set","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#3操作流程","tier":"heading","name":"3、操作流程#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#3操作流程","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#4缓存冷启动redis-无数据时","tier":"heading","name":"4、缓存冷启动（Redis 无数据时）#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#4缓存冷启动redis-无数据时","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#5方案对比","tier":"heading","name":"5、方案对比#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#5方案对比","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#6前端注意事项雪花-id-精度丢失","tier":"heading","name":"6、前端注意事项：雪花 ID 精度丢失#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#6前端注意事项雪花-id-精度丢失","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#1三维问题全景","tier":"heading","name":"1、三维问题全景#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#1三维问题全景","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#2问题-方案对照表","tier":"heading","name":"2、问题-方案对照表#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#2问题-方案对照表","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#3最终选型","tier":"heading","name":"3、最终选型#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#3最终选型","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"h:projects/projects-redis-bitmap-snowflake-id#4什么时候-bitmap-仍然适用","tier":"heading","name":"4、什么时候 Bitmap 仍然适用？#","url":"/posts/projects/projects-redis-bitmap-snowflake-id/#4什么时候-bitmap-仍然适用","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1778025600000,"depth":2,"postId":"projects/projects-redis-bitmap-snowflake-id"},{"id":"p:projects/projects-token-storage-jwt-design","tier":"post","name":"登录 | 前后端 token 存储方案","url":"/posts/projects/projects-token-storage-jwt-design/","colorIndex":1,"categoryId":"c:设计文档","value":34,"publishedAt":1777852800000,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#1当前系统现状","tier":"heading","name":"1、当前系统现状#","url":"/posts/projects/projects-token-storage-jwt-design/#1当前系统现状","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#2目标","tier":"heading","name":"2、目标#","url":"/posts/projects/projects-token-storage-jwt-design/#2目标","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#1双-token-分层存储","tier":"heading","name":"1、双 Token 分层存储#","url":"/posts/projects/projects-token-storage-jwt-design/#1双-token-分层存储","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#2rs256-非对称签名","tier":"heading","name":"2、RS256 非对称签名#","url":"/posts/projects/projects-token-storage-jwt-design/#2rs256-非对称签名","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#3redis-白名单","tier":"heading","name":"3、Redis 白名单#","url":"/posts/projects/projects-token-storage-jwt-design/#3redis-白名单","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#1session-vs-jwt","tier":"heading","name":"1、Session vs JWT#","url":"/posts/projects/projects-token-storage-jwt-design/#1session-vs-jwt","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#2前端存储对比","tier":"heading","name":"2、前端存储对比#","url":"/posts/projects/projects-token-storage-jwt-design/#2前端存储对比","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#3核心取舍","tier":"heading","name":"3、核心取舍#","url":"/posts/projects/projects-token-storage-jwt-design/#3核心取舍","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#1服务端token-签发","tier":"heading","name":"1、服务端：Token 签发#","url":"/posts/projects/projects-token-storage-jwt-design/#1服务端token-签发","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#2服务端token-刷新","tier":"heading","name":"2、服务端：Token 刷新#","url":"/posts/projects/projects-token-storage-jwt-design/#2服务端token-刷新","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#3服务端退出与吊销","tier":"heading","name":"3、服务端：退出与吊销#","url":"/posts/projects/projects-token-storage-jwt-design/#3服务端退出与吊销","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#4网关token-校验","tier":"heading","name":"4、网关：Token 校验#","url":"/posts/projects/projects-token-storage-jwt-design/#4网关token-校验","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#5前端pinia-状态管理","tier":"heading","name":"5、前端：Pinia 状态管理#","url":"/posts/projects/projects-token-storage-jwt-design/#5前端pinia-状态管理","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#6前端axios-拦截器","tier":"heading","name":"6、前端：Axios 拦截器#","url":"/posts/projects/projects-token-storage-jwt-design/#6前端axios-拦截器","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#7redis-存储结构","tier":"heading","name":"7、Redis 存储结构#","url":"/posts/projects/projects-token-storage-jwt-design/#7redis-存储结构","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#1cookie-安全属性","tier":"heading","name":"1、Cookie 安全属性#","url":"/posts/projects/projects-token-storage-jwt-design/#1cookie-安全属性","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#2纵深防御体系","tier":"heading","name":"2、纵深防御体系#","url":"/posts/projects/projects-token-storage-jwt-design/#2纵深防御体系","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#3多设备登录管理","tier":"heading","name":"3、多设备登录管理#","url":"/posts/projects/projects-token-storage-jwt-design/#3多设备登录管理","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#4安全事件响应","tier":"heading","name":"4、安全事件响应#","url":"/posts/projects/projects-token-storage-jwt-design/#4安全事件响应","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#1gateway-cors-配置","tier":"heading","name":"1、Gateway CORS 配置#","url":"/posts/projects/projects-token-storage-jwt-design/#1gateway-cors-配置","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#2nginx-反向代理","tier":"heading","name":"2、Nginx 反向代理#","url":"/posts/projects/projects-token-storage-jwt-design/#2nginx-反向代理","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#3cookie-构建工具","tier":"heading","name":"3、Cookie 构建工具#","url":"/posts/projects/projects-token-storage-jwt-design/#3cookie-构建工具","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#1当前状态与目标状态","tier":"heading","name":"1、当前状态与目标状态#","url":"/posts/projects/projects-token-storage-jwt-design/#1当前状态与目标状态","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#2迁移步骤","tier":"heading","name":"2、迁移步骤#","url":"/posts/projects/projects-token-storage-jwt-design/#2迁移步骤","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#1redis-性能","tier":"heading","name":"1、Redis 性能#","url":"/posts/projects/projects-token-storage-jwt-design/#1redis-性能","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#2网关性能","tier":"heading","name":"2、网关性能#","url":"/posts/projects/projects-token-storage-jwt-design/#2网关性能","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#3前端体验","tier":"heading","name":"3、前端体验#","url":"/posts/projects/projects-token-storage-jwt-design/#3前端体验","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#1q1httponly-cookie-是否完全防御-xss","tier":"heading","name":"1、Q1：HttpOnly Cookie 是否完全防御 XSS？#","url":"/posts/projects/projects-token-storage-jwt-design/#1q1httponly-cookie-是否完全防御-xss","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#2q2cookie-4-kb-限制是否足够","tier":"heading","name":"2、Q2：Cookie 4 KB 限制是否足够？#","url":"/posts/projects/projects-token-storage-jwt-design/#2q2cookie-4-kb-限制是否足够","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#3q3为什么不在-jwt-claims-中存放角色和权限","tier":"heading","name":"3、Q3：为什么不在 JWT Claims 中存放角色和权限？#","url":"/posts/projects/projects-token-storage-jwt-design/#3q3为什么不在-jwt-claims-中存放角色和权限","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#4q4refresh-token-被窃取后如何应对","tier":"heading","name":"4、Q4：Refresh Token 被窃取后如何应对？#","url":"/posts/projects/projects-token-storage-jwt-design/#4q4refresh-token-被窃取后如何应对","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#5q5跨域场景下-cookie-为何不生效","tier":"heading","name":"5、Q5：跨域场景下 Cookie 为何不生效？#","url":"/posts/projects/projects-token-storage-jwt-design/#5q5跨域场景下-cookie-为何不生效","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#6q6多标签页如何同步登录状态","tier":"heading","name":"6、Q6：多标签页如何同步登录状态？#","url":"/posts/projects/projects-token-storage-jwt-design/#6q6多标签页如何同步登录状态","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"h:projects/projects-token-storage-jwt-design#7q7移动端--原生-app-如何接入","tier":"heading","name":"7、Q7：移动端 / 原生 App 如何接入？#","url":"/posts/projects/projects-token-storage-jwt-design/#7q7移动端--原生-app-如何接入","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777852800000,"depth":2,"postId":"projects/projects-token-storage-jwt-design"},{"id":"p:projects/projects-oauth2-third-party-login","tier":"post","name":"登录 | 第三方登录","url":"/posts/projects/projects-oauth2-third-party-login/","colorIndex":1,"categoryId":"c:设计文档","value":34,"publishedAt":1777766400000,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#1流程图","tier":"heading","name":"1、流程图#","url":"/posts/projects/projects-oauth2-third-party-login/#1流程图","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#2核心代码结构","tier":"heading","name":"2、核心代码结构#","url":"/posts/projects/projects-oauth2-third-party-login/#2核心代码结构","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#3关键技术点","tier":"heading","name":"3、关键技术点#","url":"/posts/projects/projects-oauth2-third-party-login/#3关键技术点","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#1平台特性","tier":"heading","name":"1、平台特性#","url":"/posts/projects/projects-oauth2-third-party-login/#1平台特性","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#2回调处理流程","tier":"heading","name":"2、回调处理流程#","url":"/posts/projects/projects-oauth2-third-party-login/#2回调处理流程","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#3github-后台配置","tier":"heading","name":"3、GitHub 后台配置#","url":"/posts/projects/projects-oauth2-third-party-login/#3github-后台配置","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#4nacos-配置","tier":"heading","name":"4、Nacos 配置#","url":"/posts/projects/projects-oauth2-third-party-login/#4nacos-配置","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#5注意事项","tier":"heading","name":"5、注意事项#","url":"/posts/projects/projects-oauth2-third-party-login/#5注意事项","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#1平台特性-1","tier":"heading","name":"1、平台特性#","url":"/posts/projects/projects-oauth2-third-party-login/#1平台特性-1","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#2回调处理流程-1","tier":"heading","name":"2、回调处理流程#","url":"/posts/projects/projects-oauth2-third-party-login/#2回调处理流程-1","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#3微信开放平台配置","tier":"heading","name":"3、微信开放平台配置#","url":"/posts/projects/projects-oauth2-third-party-login/#3微信开放平台配置","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#4nacos-配置-1","tier":"heading","name":"4、Nacos 配置#","url":"/posts/projects/projects-oauth2-third-party-login/#4nacos-配置-1","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#5开发环境绕过方案无域名时","tier":"heading","name":"5、开发环境绕过方案（无域名时）#","url":"/posts/projects/projects-oauth2-third-party-login/#5开发环境绕过方案无域名时","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#6注意事项","tier":"heading","name":"6、注意事项#","url":"/posts/projects/projects-oauth2-third-party-login/#6注意事项","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#1平台特性-2","tier":"heading","name":"1、平台特性#","url":"/posts/projects/projects-oauth2-third-party-login/#1平台特性-2","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#2回调处理流程-2","tier":"heading","name":"2、回调处理流程#","url":"/posts/projects/projects-oauth2-third-party-login/#2回调处理流程-2","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#3qq-互联平台配置","tier":"heading","name":"3、QQ 互联平台配置#","url":"/posts/projects/projects-oauth2-third-party-login/#3qq-互联平台配置","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#4nacos-配置-2","tier":"heading","name":"4、Nacos 配置#","url":"/posts/projects/projects-oauth2-third-party-login/#4nacos-配置-2","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#5注意事项-1","tier":"heading","name":"5、注意事项#","url":"/posts/projects/projects-oauth2-third-party-login/#5注意事项-1","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#1需要配置的地方完整清单","tier":"heading","name":"1、需要配置的地方（完整清单）#","url":"/posts/projects/projects-oauth2-third-party-login/#1需要配置的地方完整清单","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#2各平台配置对比表","tier":"heading","name":"2、各平台配置对比表#","url":"/posts/projects/projects-oauth2-third-party-login/#2各平台配置对比表","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#3完整-nacos-配置模板","tier":"heading","name":"3、完整 Nacos 配置模板#","url":"/posts/projects/projects-oauth2-third-party-login/#3完整-nacos-配置模板","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#4完整-gateway-白名单模板","tier":"heading","name":"4、完整 Gateway 白名单模板#","url":"/posts/projects/projects-oauth2-third-party-login/#4完整-gateway-白名单模板","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#5生产环境部署检查清单","tier":"heading","name":"5、生产环境部署检查清单#","url":"/posts/projects/projects-oauth2-third-party-login/#5生产环境部署检查清单","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#1redirect_uri-is-not-associated-with-this-application","tier":"heading","name":"1、redirect_uri is not associated with this application#","url":"/posts/projects/projects-oauth2-third-party-login/#1redirect_uri-is-not-associated-with-this-application","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#2微信开发环境无法使用-localhost","tier":"heading","name":"2、微信开发环境无法使用 localhost#","url":"/posts/projects/projects-oauth2-third-party-login/#2微信开发环境无法使用-localhost","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#3回调后没有跳转到前端","tier":"heading","name":"3、回调后没有跳转到前端#","url":"/posts/projects/projects-oauth2-third-party-login/#3回调后没有跳转到前端","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#4生产环境是否需要内网穿透","tier":"heading","name":"4、生产环境是否需要内网穿透#","url":"/posts/projects/projects-oauth2-third-party-login/#4生产环境是否需要内网穿透","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#5不同平台用户的用户名会冲突吗","tier":"heading","name":"5、不同平台用户的用户名会冲突吗#","url":"/posts/projects/projects-oauth2-third-party-login/#5不同平台用户的用户名会冲突吗","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#1前端发起登录","tier":"heading","name":"1、前端发起登录#","url":"/posts/projects/projects-oauth2-third-party-login/#1前端发起登录","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#2前端接收回调","tier":"heading","name":"2、前端接收回调#","url":"/posts/projects/projects-oauth2-third-party-login/#2前端接收回调","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#3后续请求携带-token","tier":"heading","name":"3、后续请求携带 Token#","url":"/posts/projects/projects-oauth2-third-party-login/#3后续请求携带-token","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#1用户表第三方登录字段","tier":"heading","name":"1、用户表第三方登录字段#","url":"/posts/projects/projects-oauth2-third-party-login/#1用户表第三方登录字段","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"h:projects/projects-oauth2-third-party-login#2查询逻辑","tier":"heading","name":"2、查询逻辑#","url":"/posts/projects/projects-oauth2-third-party-login/#2查询逻辑","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777766400000,"depth":2,"postId":"projects/projects-oauth2-third-party-login"},{"id":"p:projects/projects-auth-flow-zsk-auth","tier":"post","name":"登录 | 滑块验证码、登录与注册完整流程","url":"/posts/projects/projects-auth-flow-zsk-auth/","colorIndex":1,"categoryId":"c:设计文档","value":12,"publishedAt":1777680000000,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#1流程概述","tier":"heading","name":"1、流程概述#","url":"/posts/projects/projects-auth-flow-zsk-auth/#1流程概述","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#2核心代码","tier":"heading","name":"2、核心代码#","url":"/posts/projects/projects-auth-flow-zsk-auth/#2核心代码","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#1流程概述-1","tier":"heading","name":"1、流程概述#","url":"/posts/projects/projects-auth-flow-zsk-auth/#1流程概述-1","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#2核心代码-1","tier":"heading","name":"2、核心代码#","url":"/posts/projects/projects-auth-flow-zsk-auth/#2核心代码-1","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#1流程概述-2","tier":"heading","name":"1、流程概述#","url":"/posts/projects/projects-auth-flow-zsk-auth/#1流程概述-2","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#2核心代码-2","tier":"heading","name":"2、核心代码#","url":"/posts/projects/projects-auth-flow-zsk-auth/#2核心代码-2","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#1流程概述-3","tier":"heading","name":"1、流程概述#","url":"/posts/projects/projects-auth-flow-zsk-auth/#1流程概述-3","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#2核心代码-3","tier":"heading","name":"2、核心代码#","url":"/posts/projects/projects-auth-flow-zsk-auth/#2核心代码-3","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#1传输层加密-rsa","tier":"heading","name":"1、传输层加密 (RSA)#","url":"/posts/projects/projects-auth-flow-zsk-auth/#1传输层加密-rsa","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#2存储层加密-bcrypt","tier":"heading","name":"2、存储层加密 (BCrypt)#","url":"/posts/projects/projects-auth-flow-zsk-auth/#2存储层加密-bcrypt","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#1策略概述","tier":"heading","name":"1、策略概述#","url":"/posts/projects/projects-auth-flow-zsk-auth/#1策略概述","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"h:projects/projects-auth-flow-zsk-auth#2部分核心代码","tier":"heading","name":"2、部分核心代码#","url":"/posts/projects/projects-auth-flow-zsk-auth/#2部分核心代码","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777680000000,"depth":2,"postId":"projects/projects-auth-flow-zsk-auth"},{"id":"p:projects/projects-magic-link-login-design","tier":"post","name":"登录 | 魔法链接","url":"/posts/projects/projects-magic-link-login-design/","colorIndex":1,"categoryId":"c:设计文档","value":17,"publishedAt":1777593600000,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#1业务背景","tier":"heading","name":"1、业务背景#","url":"/posts/projects/projects-magic-link-login-design/#1业务背景","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#2功能需求","tier":"heading","name":"2、功能需求#","url":"/posts/projects/projects-magic-link-login-design/#2功能需求","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#3登录流程","tier":"heading","name":"3、登录流程#","url":"/posts/projects/projects-magic-link-login-design/#3登录流程","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#1架构设计","tier":"heading","name":"1、架构设计#","url":"/posts/projects/projects-magic-link-login-design/#1架构设计","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#2目录结构","tier":"heading","name":"2、目录结构#","url":"/posts/projects/projects-magic-link-login-design/#2目录结构","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#3关键类与方法设计","tier":"heading","name":"3、关键类与方法设计#","url":"/posts/projects/projects-magic-link-login-design/#3关键类与方法设计","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#4数据库与缓存设计","tier":"heading","name":"4、数据库与缓存设计#","url":"/posts/projects/projects-magic-link-login-design/#4数据库与缓存设计","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#5api接口设计","tier":"heading","name":"5、API接口设计#","url":"/posts/projects/projects-magic-link-login-design/#5api接口设计","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#1两种方案对比","tier":"heading","name":"1、两种方案对比#","url":"/posts/projects/projects-magic-link-login-design/#1两种方案对比","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#2方案对比表","tier":"heading","name":"2、方案对比表#","url":"/posts/projects/projects-magic-link-login-design/#2方案对比表","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#3选型结论","tier":"heading","name":"3、选型结论#","url":"/posts/projects/projects-magic-link-login-design/#3选型结论","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#1依赖与环境","tier":"heading","name":"1、依赖与环境#","url":"/posts/projects/projects-magic-link-login-design/#1依赖与环境","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#2配置与运行","tier":"heading","name":"2、配置与运行#","url":"/posts/projects/projects-magic-link-login-design/#2配置与运行","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#1注意事项","tier":"heading","name":"1、注意事项#","url":"/posts/projects/projects-magic-link-login-design/#1注意事项","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#2解决方案","tier":"heading","name":"2、解决方案#","url":"/posts/projects/projects-magic-link-login-design/#2解决方案","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#3前端操作流程","tier":"heading","name":"3、前端操作流程#","url":"/posts/projects/projects-magic-link-login-design/#3前端操作流程","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"h:projects/projects-magic-link-login-design#4自动注册用户字段说明","tier":"heading","name":"4、自动注册用户字段说明#","url":"/posts/projects/projects-magic-link-login-design/#4自动注册用户字段说明","colorIndex":1,"categoryId":"c:设计文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-magic-link-login-design"},{"id":"p:projects/projects-object-storage-presigned-url","tier":"post","name":"MinIO | 文件存储签名 URL 有效期机制","url":"/posts/projects/projects-object-storage-presigned-url/","colorIndex":0,"categoryId":"c:学习文档","value":19,"publishedAt":1777593600000,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#1签名-url-的格式","tier":"heading","name":"1、签名 URL 的格式#","url":"/posts/projects/projects-object-storage-presigned-url/#1签名-url-的格式","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#2签名-url-的工作原理","tier":"heading","name":"2、签名 URL 的工作原理#","url":"/posts/projects/projects-object-storage-presigned-url/#2签名-url-的工作原理","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#1各厂商的最大有效期","tier":"heading","name":"1、各厂商的最大有效期#","url":"/posts/projects/projects-object-storage-presigned-url/#1各厂商的最大有效期","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#2为什么-s3-协议限制-7-天","tier":"heading","name":"2、为什么 S3 协议限制 7 天#","url":"/posts/projects/projects-object-storage-presigned-url/#2为什么-s3-协议限制-7-天","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#1预签名-url-模式私有桶","tier":"heading","name":"1、预签名 URL 模式（私有桶）#","url":"/posts/projects/projects-object-storage-presigned-url/#1预签名-url-模式私有桶","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#2直接-url-模式公开桶--自定义域名","tier":"heading","name":"2、直接 URL 模式（公开桶 + 自定义域名）#","url":"/posts/projects/projects-object-storage-presigned-url/#2直接-url-模式公开桶--自定义域名","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#3对比总结","tier":"heading","name":"3、对比总结#","url":"/posts/projects/projects-object-storage-presigned-url/#3对比总结","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#1方案一前端自动续签推荐","tier":"heading","name":"1、方案一：前端自动续签（推荐）#","url":"/posts/projects/projects-object-storage-presigned-url/#1方案一前端自动续签推荐","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#2方案二后端代理下载","tier":"heading","name":"2、方案二：后端代理下载#","url":"/posts/projects/projects-object-storage-presigned-url/#2方案二后端代理下载","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#3方案三公开桶--自定义域名","tier":"heading","name":"3、方案三：公开桶 + 自定义域名#","url":"/posts/projects/projects-object-storage-presigned-url/#3方案三公开桶--自定义域名","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#4方案四cdn-回源--鉴权","tier":"heading","name":"4、方案四：CDN 回源 + 鉴权#","url":"/posts/projects/projects-object-storage-presigned-url/#4方案四cdn-回源--鉴权","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#1根据场景选择模式","tier":"heading","name":"1、根据场景选择模式#","url":"/posts/projects/projects-object-storage-presigned-url/#1根据场景选择模式","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#2有效期设置建议","tier":"heading","name":"2、有效期设置建议#","url":"/posts/projects/projects-object-storage-presigned-url/#2有效期设置建议","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#3安全注意事项","tier":"heading","name":"3、安全注意事项#","url":"/posts/projects/projects-object-storage-presigned-url/#3安全注意事项","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#1q1签名-url-过期后文件还在吗","tier":"heading","name":"1、Q1：签名 URL 过期后，文件还在吗？#","url":"/posts/projects/projects-object-storage-presigned-url/#1q1签名-url-过期后文件还在吗","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#2q2能否生成永不过期的签名-url","tier":"heading","name":"2、Q2：能否生成永不过期的签名 URL？#","url":"/posts/projects/projects-object-storage-presigned-url/#2q2能否生成永不过期的签名-url","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#3q3签名-url-泄露了怎么办","tier":"heading","name":"3、Q3：签名 URL 泄露了怎么办？#","url":"/posts/projects/projects-object-storage-presigned-url/#3q3签名-url-泄露了怎么办","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#4q4去掉签名参数后还能访问吗","tier":"heading","name":"4、Q4：去掉签名参数后还能访问吗？#","url":"/posts/projects/projects-object-storage-presigned-url/#4q4去掉签名参数后还能访问吗","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"h:projects/projects-object-storage-presigned-url#5q5前端如何判断签名-url-是否过期","tier":"heading","name":"5、Q5：前端如何判断签名 URL 是否过期？#","url":"/posts/projects/projects-object-storage-presigned-url/#5q5前端如何判断签名-url-是否过期","colorIndex":0,"categoryId":"c:学习文档","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-object-storage-presigned-url"},{"id":"p:projects/projects-qrcode-login-java-comparison","tier":"post","name":"登录 | 扫码登录","url":"/posts/projects/projects-qrcode-login-java-comparison/","colorIndex":2,"categoryId":"c:实践笔记","value":28,"publishedAt":1777593600000,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#1完整时序","tier":"heading","name":"1、完整时序#","url":"/posts/projects/projects-qrcode-login-java-comparison/#1完整时序","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#2二维码状态机","tier":"heading","name":"2、二维码状态机#","url":"/posts/projects/projects-qrcode-login-java-comparison/#2二维码状态机","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#1方案总览","tier":"heading","name":"1、方案总览#","url":"/posts/projects/projects-qrcode-login-java-comparison/#1方案总览","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#2资源消耗对比","tier":"heading","name":"2、资源消耗对比#","url":"/posts/projects/projects-qrcode-login-java-comparison/#2资源消耗对比","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#3方案选型结论","tier":"heading","name":"3、方案选型结论#","url":"/posts/projects/projects-qrcode-login-java-comparison/#3方案选型结论","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#1maven-依赖配置","tier":"heading","name":"1、Maven 依赖配置#","url":"/posts/projects/projects-qrcode-login-java-comparison/#1maven-依赖配置","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#2数据模型","tier":"heading","name":"2、数据模型#","url":"/posts/projects/projects-qrcode-login-java-comparison/#2数据模型","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#3redis-存储设计","tier":"heading","name":"3、Redis 存储设计#","url":"/posts/projects/projects-qrcode-login-java-comparison/#3redis-存储设计","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#4websocket-配置","tier":"heading","name":"4、WebSocket 配置#","url":"/posts/projects/projects-qrcode-login-java-comparison/#4websocket-配置","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#5生成二维码","tier":"heading","name":"5、生成二维码#","url":"/posts/projects/projects-qrcode-login-java-comparison/#5生成二维码","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#6手机扫码","tier":"heading","name":"6、手机扫码#","url":"/posts/projects/projects-qrcode-login-java-comparison/#6手机扫码","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#7手机确认登录","tier":"heading","name":"7、手机确认登录#","url":"/posts/projects/projects-qrcode-login-java-comparison/#7手机确认登录","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#8手机取消登录","tier":"heading","name":"8、手机取消登录#","url":"/posts/projects/projects-qrcode-login-java-comparison/#8手机取消登录","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#9长轮询降级实现","tier":"heading","name":"9、长轮询降级实现#","url":"/posts/projects/projects-qrcode-login-java-comparison/#9长轮询降级实现","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#10controller-层","tier":"heading","name":"10、Controller 层#","url":"/posts/projects/projects-qrcode-login-java-comparison/#10controller-层","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#11gateway-白名单","tier":"heading","name":"11、Gateway 白名单#","url":"/posts/projects/projects-qrcode-login-java-comparison/#11gateway-白名单","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#1pc-端二维码展示--websocket","tier":"heading","name":"1、PC 端：二维码展示 + WebSocket#","url":"/posts/projects/projects-qrcode-login-java-comparison/#1pc-端二维码展示--websocket","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#2pc-端vue-组件","tier":"heading","name":"2、PC 端：Vue 组件#","url":"/posts/projects/projects-qrcode-login-java-comparison/#2pc-端vue-组件","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#3手机端扫码--确认流程","tier":"heading","name":"3、手机端：扫码 + 确认流程#","url":"/posts/projects/projects-qrcode-login-java-comparison/#3手机端扫码--确认流程","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#4手机端确认页面组件","tier":"heading","name":"4、手机端：确认页面组件#","url":"/posts/projects/projects-qrcode-login-java-comparison/#4手机端确认页面组件","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#1威胁模型","tier":"heading","name":"1、威胁模型#","url":"/posts/projects/projects-qrcode-login-java-comparison/#1威胁模型","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#2防御措施","tier":"heading","name":"2、防御措施#","url":"/posts/projects/projects-qrcode-login-java-comparison/#2防御措施","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#3安全措施汇总","tier":"heading","name":"3、安全措施汇总#","url":"/posts/projects/projects-qrcode-login-java-comparison/#3安全措施汇总","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#1websocket-连接断开后状态丢失","tier":"heading","name":"1、WebSocket 连接断开后状态丢失#","url":"/posts/projects/projects-qrcode-login-java-comparison/#1websocket-连接断开后状态丢失","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#2二维码过期但手机端还在确认","tier":"heading","name":"2、二维码过期但手机端还在确认#","url":"/posts/projects/projects-qrcode-login-java-comparison/#2二维码过期但手机端还在确认","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#3用户扫码后不确认也不取消","tier":"heading","name":"3、用户扫码后不确认也不取消#","url":"/posts/projects/projects-qrcode-login-java-comparison/#3用户扫码后不确认也不取消","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#4pc-端刷新页面后丢失二维码","tier":"heading","name":"4、PC 端刷新页面后丢失二维码#","url":"/posts/projects/projects-qrcode-login-java-comparison/#4pc-端刷新页面后丢失二维码","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"h:projects/projects-qrcode-login-java-comparison#5websocket-被防火墙代理拦截","tier":"heading","name":"5、WebSocket 被防火墙/代理拦截#","url":"/posts/projects/projects-qrcode-login-java-comparison/#5websocket-被防火墙代理拦截","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1777593600000,"depth":2,"postId":"projects/projects-qrcode-login-java-comparison"},{"id":"p:ai/ai-agent-skill-collect","tier":"post","name":"Skill学习 | 收集","url":"/posts/ai/ai-agent-skill-collect/","colorIndex":0,"categoryId":"c:学习文档","value":0,"publishedAt":1775952000000,"postId":"ai/ai-agent-skill-collect"},{"id":"p:projects/projects-oracle-erp-performance-optimization","tier":"post","name":"Oracle | ERP性能优化","url":"/posts/projects/projects-oracle-erp-performance-optimization/","colorIndex":2,"categoryId":"c:实践笔记","value":24,"publishedAt":1764633600000,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#1什么是聚簇因子","tier":"heading","name":"1、什么是聚簇因子#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#1什么是聚簇因子","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#2shrink-为什么会恶化-cf","tier":"heading","name":"2、SHRINK 为什么会恶化 CF#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#2shrink-为什么会恶化-cf","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#3恶化后的等待事件","tier":"heading","name":"3、恶化后的等待事件#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#3恶化后的等待事件","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#4聚簇因子检测","tier":"heading","name":"4、聚簇因子检测#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#4聚簇因子检测","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#1工具链","tier":"heading","name":"1、工具链#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#1工具链","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#2关键指标","tier":"heading","name":"2、关键指标#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#2关键指标","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#3定位流程","tier":"heading","name":"3、定位流程#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#3定位流程","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#1在线表重定义降低聚簇因子","tier":"heading","name":"1、在线表重定义（降低聚簇因子）#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#1在线表重定义降低聚簇因子","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#2修改索引","tier":"heading","name":"2、修改索引#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#2修改索引","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#3修改存储参数mrp_sourcing_history","tier":"heading","name":"3、修改存储参数（MRP_SOURCING_HISTORY）#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#3修改存储参数mrp_sourcing_history","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#4核心表缓存至-keep-pool","tier":"heading","name":"4、核心表缓存至 Keep Pool#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#4核心表缓存至-keep-pool","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#1mrp_schedule_dates-频繁增删导致聚簇持续退化","tier":"heading","name":"1、MRP_SCHEDULE_DATES 频繁增删导致聚簇持续退化#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#1mrp_schedule_dates-频繁增删导致聚簇持续退化","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#2sql-高频执行累计消耗大","tier":"heading","name":"2、SQL 高频执行累计消耗大#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#2sql-高频执行累计消耗大","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#3自治事务频繁提交导致-log-file-sync-等待","tier":"heading","name":"3、自治事务频繁提交导致 log file sync 等待#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#3自治事务频繁提交导致-log-file-sync-等待","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#4视图替代基表导致全表扫描","tier":"heading","name":"4、视图替代基表导致全表扫描#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#4视图替代基表导致全表扫描","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#1数据库基础资源层","tier":"heading","name":"1、数据库基础资源层#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#1数据库基础资源层","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#2缓存与共享池层","tier":"heading","name":"2、缓存与共享池层#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#2缓存与共享池层","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#3索引与表设计层","tier":"heading","name":"3、索引与表设计层#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#3索引与表设计层","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#4sql-执行计划层","tier":"heading","name":"4、SQL 执行计划层#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#4sql-执行计划层","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#5并发与事务层","tier":"heading","name":"5、并发与事务层#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#5并发与事务层","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#6应用配置层","tier":"heading","name":"6、应用配置层#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#6应用配置层","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#1项目一句话定位","tier":"heading","name":"1、项目一句话定位#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#1项目一句话定位","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#2逻辑链这是整个项目的叙事骨架","tier":"heading","name":"2、逻辑链（这是整个项目的叙事骨架）#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#2逻辑链这是整个项目的叙事骨架","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"},{"id":"h:projects/projects-oracle-erp-performance-optimization#3几个值得强调的细节","tier":"heading","name":"3、几个值得强调的细节#","url":"/posts/projects/projects-oracle-erp-performance-optimization/#3几个值得强调的细节","colorIndex":2,"categoryId":"c:实践笔记","value":1,"publishedAt":1764633600000,"depth":2,"postId":"projects/projects-oracle-erp-performance-optimization"}],"links":[{"source":"c:学习文档","target":"t:AI","kind":"category-tag","value":4},{"source":"c:设计文档","target":"t:AI","kind":"category-tag","value":1},{"source":"c:部署文档","target":"t:AI","kind":"category-tag","value":1},{"source":"c:设计文档","target":"t:认证","kind":"category-tag","value":4},{"source":"c:实践笔记","target":"t:认证","kind":"category-tag","value":1},{"source":"c:设计文档","target":"t:安全","kind":"category-tag","value":3},{"source":"c:学习文档","target":"t:安全","kind":"category-tag","value":1},{"source":"c:设计文档","target":"t:登录","kind":"category-tag","value":3},{"source":"c:实践笔记","target":"t:Bitmap","kind":"category-tag","value":2},{"source":"c:学习文档","target":"t:Java","kind":"category-tag","value":2},{"source":"c:实践笔记","target":"t:Redis","kind":"category-tag","value":2},{"source":"c:学习文档","target":"t:Skill","kind":"category-tag","value":2},{"source":"c:学习文档","target":"t:博客","kind":"category-tag","value":2},{"source":"c:学习文档","target":"t:并发编程","kind":"category-tag","value":2},{"source":"c:实践笔记","target":"t:性能优化","kind":"category-tag","value":2},{"source":"c:部署文档","target":"t:部署","kind":"category-tag","value":2},{"source":"c:学习文档","target":"t:Agent","kind":"category-tag","value":1},{"source":"c:部署文档","target":"t:Bot","kind":"category-tag","value":1},{"source":"c:设计文档","target":"t:Cloudflare","kind":"category-tag","value":1},{"source":"c:学习文档","target":"t:firefly","kind":"category-tag","value":1},{"source":"c:设计文档","target":"t:JWT","kind":"category-tag","value":1},{"source":"c:学习文档","target":"t:MinIO","kind":"category-tag","value":1},{"source":"c:设计文档","target":"t:OAuth2","kind":"category-tag","value":1},{"source":"c:实践笔记","target":"t:Oracle","kind":"category-tag","value":1},{"source":"c:学习文档","target":"t:Prompt","kind":"category-tag","value":1},{"source":"c:设计文档","target":"t:RAG","kind":"category-tag","value":1},{"source":"c:部署文档","target":"t:Umami","kind":"category-tag","value":1},{"source":"c:部署文档","target":"t:Vercel","kind":"category-tag","value":1},{"source":"c:实践笔记","target":"t:WebSocket","kind":"category-tag","value":1},{"source":"c:学习文档","target":"t:二开","kind":"category-tag","value":1},{"source":"c:实践笔记","target":"t:分布式","kind":"category-tag","value":1},{"source":"c:学习文档","target":"t:前端","kind":"category-tag","value":1},{"source":"c:学习文档","target":"t:对象存储","kind":"category-tag","value":1},{"source":"c:学习文档","target":"t:工作流","kind":"category-tag","value":1},{"source":"c:实践笔记","target":"t:扫码登录","kind":"category-tag","value":1},{"source":"c:实践笔记","target":"t:数据库","kind":"category-tag","value":1},{"source":"c:测试","target":"t:测试","kind":"category-tag","value":1},{"source":"c:学习文档","target":"t:线程池","kind":"category-tag","value":1},{"source":"c:实践笔记","target":"t:缓存设计","kind":"category-tag","value":1},{"source":"c:学习文档","target":"t:虚拟线程","kind":"category-tag","value":1},{"source":"c:实践笔记","target":"t:高性能","kind":"category-tag","value":1},{"source":"t:测试","target":"p:测试","kind":"tag-post","value":1},{"source":"t:firefly","target":"p:others/others-blog-firefly-mod","kind":"tag-post","value":1},{"source":"t:二开","target":"p:others/others-blog-firefly-mod","kind":"tag-post","value":1},{"source":"t:博客","target":"p:others/others-blog-firefly-mod","kind":"tag-post","value":1},{"source":"p:others/others-blog-firefly-mod","target":"h:others/others-blog-firefly-mod#1首页","kind":"post-heading","value":1},{"source":"p:others/others-blog-firefly-mod","target":"h:others/others-blog-firefly-mod#2音乐","kind":"post-heading","value":1},{"source":"p:others/others-blog-firefly-mod","target":"h:others/others-blog-firefly-mod#3分类标签","kind":"post-heading","value":1},{"source":"p:others/others-blog-firefly-mod","target":"h:others/others-blog-firefly-mod#4留言","kind":"post-heading","value":1},{"source":"p:others/others-blog-firefly-mod","target":"h:others/others-blog-firefly-mod#5关于","kind":"post-heading","value":1},{"source":"p:others/others-blog-firefly-mod","target":"h:others/others-blog-firefly-mod#6日历","kind":"post-heading","value":1},{"source":"p:others/others-blog-firefly-mod","target":"h:others/others-blog-firefly-mod#7归档","kind":"post-heading","value":1},{"source":"p:others/others-blog-firefly-mod","target":"h:others/others-blog-firefly-mod#8其他","kind":"post-heading","value":1},{"source":"p:others/others-blog-firefly-mod","target":"h:others/others-blog-firefly-mod#1本地部署","kind":"post-heading","value":1},{"source":"p:others/others-blog-firefly-mod","target":"h:others/others-blog-firefly-mod#2ai-搜索配置可选","kind":"post-heading","value":1},{"source":"t:AI","target":"p:ai/ai-prompt-collection","kind":"tag-post","value":1},{"source":"t:Prompt","target":"p:ai/ai-prompt-collection","kind":"tag-post","value":1},{"source":"p:ai/ai-prompt-collection","target":"h:ai/ai-prompt-collection#1前端","kind":"post-heading","value":1},{"source":"p:ai/ai-prompt-collection","target":"h:ai/ai-prompt-collection#1逆向","kind":"post-heading","value":1},{"source":"p:ai/ai-prompt-collection","target":"h:ai/ai-prompt-collection#2角色设定图","kind":"post-heading","value":1},{"source":"p:ai/ai-prompt-collection","target":"h:ai/ai-prompt-collection#3画风","kind":"post-heading","value":1},{"source":"p:ai/ai-prompt-collection","target":"h:ai/ai-prompt-collection#4质量","kind":"post-heading","value":1},{"source":"p:ai/ai-prompt-collection","target":"h:ai/ai-prompt-collection#5滤镜","kind":"post-heading","value":1},{"source":"p:ai/ai-prompt-collection","target":"h:ai/ai-prompt-collection#6降噪","kind":"post-heading","value":1},{"source":"p:ai/ai-prompt-collection","target":"h:ai/ai-prompt-collection#7反向提示词","kind":"post-heading","value":1},{"source":"p:ai/ai-prompt-collection","target":"h:ai/ai-prompt-collection#8图生图替换人物","kind":"post-heading","value":1},{"source":"t:AI","target":"p:ai/ai-blog-ai-zero-editing","kind":"tag-post","value":1},{"source":"t:前端","target":"p:ai/ai-blog-ai-zero-editing","kind":"tag-post","value":1},{"source":"t:博客","target":"p:ai/ai-blog-ai-zero-editing","kind":"tag-post","value":1},{"source":"p:ai/ai-blog-ai-zero-editing","target":"h:ai/ai-blog-ai-zero-editing#1正确流程","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-zero-editing","target":"h:ai/ai-blog-ai-zero-editing#2原型图","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-zero-editing","target":"h:ai/ai-blog-ai-zero-editing#3设置规范","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-zero-editing","target":"h:ai/ai-blog-ai-zero-editing#4开发","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-zero-editing","target":"h:ai/ai-blog-ai-zero-editing#5优化","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-zero-editing","target":"h:ai/ai-blog-ai-zero-editing#1skill","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-zero-editing","target":"h:ai/ai-blog-ai-zero-editing#2模型选择","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-zero-editing","target":"h:ai/ai-blog-ai-zero-editing#1博客设计原则","kind":"post-heading","value":1},{"source":"t:AI","target":"p:ai/ai-openspec-superpowers-workflow","kind":"tag-post","value":1},{"source":"t:Skill","target":"p:ai/ai-openspec-superpowers-workflow","kind":"tag-post","value":1},{"source":"t:工作流","target":"p:ai/ai-openspec-superpowers-workflow","kind":"tag-post","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#1superpowers","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#2openspec","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#1superpowers-的功能特性与应用场景","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#2openspec-的功能特性与应用场景","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#1superpowers-使用步骤","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#2openspec-使用步骤","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#1superpowers-子技能","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#2openspec-命令与能力","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#1环境要求","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#2安装-superpowers","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#3安装-openspec","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#1卸载-superpowers","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#2卸载-openspec","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#3残留清理","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#1协同场景","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#2协同优势","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#3协同操作步骤","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#4实战示例实现订单导出功能","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#5关键协同点","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#1q1openspec-与-superpowers-必须一起使用吗","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#2q2superpowers-安装后为什么不生效","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#3q3openspec-的-spec-应该写到什么粒度","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#4q4如何处理开发过程中的需求变更","kind":"post-heading","value":1},{"source":"p:ai/ai-openspec-superpowers-workflow","target":"h:ai/ai-openspec-superpowers-workflow#5q5团队如何协作使用-openspec","kind":"post-heading","value":1},{"source":"t:AI","target":"p:ai/ai-blog-ai-search-vectorize","kind":"tag-post","value":1},{"source":"t:Cloudflare","target":"p:ai/ai-blog-ai-search-vectorize","kind":"tag-post","value":1},{"source":"t:RAG","target":"p:ai/ai-blog-ai-search-vectorize","kind":"tag-post","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#1实现细节","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#2与-langchain-递归分块的对比","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#1构建脚本","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#2embedding-来源","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#3cloudflare-凭证获取","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#4worker-secret-配置","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#5向量索引上传","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#1统一配置管理","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#2embedding","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#3向量检索","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#4prompt-拼接与-system-注入防护","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#5流式返回","kind":"post-heading","value":1},{"source":"p:ai/ai-blog-ai-search-vectorize","target":"h:ai/ai-blog-ai-search-vectorize#1会话管理","kind":"post-heading","value":1},{"source":"t:Bitmap","target":"p:projects/projects-redis-interaction-cache-design","kind":"tag-post","value":1},{"source":"t:Redis","target":"p:projects/projects-redis-interaction-cache-design","kind":"tag-post","value":1},{"source":"t:缓存设计","target":"p:projects/projects-redis-interaction-cache-design","kind":"tag-post","value":1},{"source":"t:高性能","target":"p:projects/projects-redis-interaction-cache-design","kind":"tag-post","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#1共享-key-概念","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#2方案一set--mq-异步入库","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#3方案二set--定时扫描入库","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#4方案三bitmap--mq-异步入库","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#5四种交互场景的实现差异","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#6三种方案对比","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#1数据库表设计","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#2缓存预热","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#1redis-不可用时的降级策略","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#2数据不一致的修复机制","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#3mq-消息丢失的兜底","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#4缓存击穿防护","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#1setbit-首次写入的性能陷阱","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#2雪花-id-与-bitmap-的根本矛盾","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#3分布式场景下的阻塞与倾斜","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#4同步任务的幂等性","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-interaction-cache-design","target":"h:projects/projects-redis-interaction-cache-design#5数据丢失风险","kind":"post-heading","value":1},{"source":"t:AI","target":"p:ai/ai-napcat-astrbot-deployment","kind":"tag-post","value":1},{"source":"t:Bot","target":"p:ai/ai-napcat-astrbot-deployment","kind":"tag-post","value":1},{"source":"t:部署","target":"p:ai/ai-napcat-astrbot-deployment","kind":"tag-post","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#1启动","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#1建目录","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#2新建文件","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#3编排","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#4校验","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#1访问地址","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#2配置反向-websocket","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#3napcat-环境变量说明部署忽略这里只是补充说明","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#4napcat-配置文件位置部署忽略这里只是补充说明","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#1访问-webui","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#2添加消息平台连接-napcat","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#3配置-llm-大模型需要先准备好自己ai模型key","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#4如何白嫖免费大模型agnes-或-魔搭社区","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#5普通设置","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#6平台设置","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#7扩展功能","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#1传统手搓","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#2使用女娲-skill-蒸馏人格","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#3喵墩备份","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#1如图","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#2为什么我不用记忆呢","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#1astrbot-连不上-napcat","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#2qq-号被风控--账号掉线","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#3消息延迟高","kind":"post-heading","value":1},{"source":"p:ai/ai-napcat-astrbot-deployment","target":"h:ai/ai-napcat-astrbot-deployment#4如何更新版本","kind":"post-heading","value":1},{"source":"t:Umami","target":"p:others/others-umami-vercel-neon-deployment","kind":"tag-post","value":1},{"source":"t:Vercel","target":"p:others/others-umami-vercel-neon-deployment","kind":"tag-post","value":1},{"source":"t:部署","target":"p:others/others-umami-vercel-neon-deployment","kind":"tag-post","value":1},{"source":"p:others/others-umami-vercel-neon-deployment","target":"h:others/others-umami-vercel-neon-deployment#1通用接入方式","kind":"post-heading","value":1},{"source":"p:others/others-umami-vercel-neon-deployment","target":"h:others/others-umami-vercel-neon-deployment#2本项目接入方式","kind":"post-heading","value":1},{"source":"p:others/others-umami-vercel-neon-deployment","target":"h:others/others-umami-vercel-neon-deployment#1开启-share-url","kind":"post-heading","value":1},{"source":"p:others/others-umami-vercel-neon-deployment","target":"h:others/others-umami-vercel-neon-deployment#2本项目获取-uvpv-的实现","kind":"post-heading","value":1},{"source":"p:others/others-umami-vercel-neon-deployment","target":"h:others/others-umami-vercel-neon-deployment#3直接重定向到分享页","kind":"post-heading","value":1},{"source":"t:Java","target":"p:projects/projects-java-thread-pool-configuration","kind":"tag-post","value":1},{"source":"t:并发编程","target":"p:projects/projects-java-thread-pool-configuration","kind":"tag-post","value":1},{"source":"t:线程池","target":"p:projects/projects-java-thread-pool-configuration","kind":"tag-post","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#1corepoolsize-与-maximumpoolsize","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#2keepalivetime-与-timeunit","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#3工作队列","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#4线程工厂","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#5拒绝策略","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#1cpu-密集型","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#2io-密集型","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#3混合型任务","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#1littles-law","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#2brian-goetz-公式","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#3公式的局限","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#4估算流程","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#5常见场景参考值","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#1全局共用一个线程池","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#2不考虑下游限制盲目设大","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#3keepalivetime-设置过短","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#4任务中嵌套提交任务","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#5容器环境不修正-cpu-核数","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#6线程未命名","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#1需求分析清单","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#2订单查询服务配置示例","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#3压测验证方案","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#1动态调整原理","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#2实现示例","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#3队列容量动态修改","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#1prometheus-指标暴露","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#2alertmanager-告警规则","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#3告警阈值参考","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#1线程数调优","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#2队列深度调优","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#3gc-与内存调优","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#4上下文切换调优","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#1q1corepoolsize-和-maximumpoolsize-应该设成一样吗","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#2q2为什么线程池达到了-maximumpoolsize-但-cpu-使用率仍然很低","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#3q3任务被拒绝时应该选择哪种策略","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#4q4使用-completablefuture-时如何指定自定义线程池","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#5q5spring-的-async-默认线程池有什么问题","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#6q6如何优雅关闭线程池","kind":"post-heading","value":1},{"source":"p:projects/projects-java-thread-pool-configuration","target":"h:projects/projects-java-thread-pool-configuration#7q7allowcorethreadtimeouttrue-是否推荐","kind":"post-heading","value":1},{"source":"t:Java","target":"p:projects/projects-java-virtual-thread-async-orchestration","kind":"tag-post","value":1},{"source":"t:并发编程","target":"p:projects/projects-java-virtual-thread-async-orchestration","kind":"tag-post","value":1},{"source":"t:虚拟线程","target":"p:projects/projects-java-virtual-thread-async-orchestration","kind":"tag-post","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#1一个真实的场景","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#2问题的本质","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#1阶段-1原始线程时代java-101996年","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#2阶段-2线程池时代java-52004年","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#3阶段-3异步回调时代java-82014年","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#4阶段-4响应式编程时代spring-webflux2017年","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#5阶段-5虚拟线程时代jdk-212023年","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#1传统线程的问题图解","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#2虚拟线程的解决思路","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#3关键概念continuation续体","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#4通俗类比","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#1最简单的创建方式","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#2生产推荐每任务一虚拟线程","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#3spring-boot-32-集成推荐","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#4并行聚合多个-io-任务最常用场景","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#5结合-scopedvalue-传递上下文推荐替代-threadlocal","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#1坑-1给虚拟线程建线程池最常见错误","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#2坑-2synchronized-块导致-pinningjdk-2123","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#3坑-3threadlocal-在虚拟线程中导致内存泄漏","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#4坑-4虚拟线程遇到-cpu-密集任务反而变慢","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#5坑-5数据库连接池成为新瓶颈","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#6坑-6在虚拟线程中调用-native-方法导致-pinning","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#7坑-7用-isvirtual-做业务逻辑判断","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#8坑-8虚拟线程数量无上限导致-oom","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#9坑-9忘记处理虚拟线程的中断","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#10坑-10在虚拟线程中使用-blockingqueue-不当","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#11坑-11错误理解虚拟线程不需要关心并发问题","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#12坑-12在旧版-jdbc-驱动中遇到兼容性问题","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#1基本概念什么是-completablefuture","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#2核心方法速查","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#3实战并行聚合商品详情","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#4超时与降级处理","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#1坑-1不指定-executor使用-forkjoinpool-公共池","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#2坑-2异常被静默吞掉","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#3坑-3thenapply-vs-thenapplyasync-混淆","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#4坑-4allof-没有返回值需要额外-get","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#5坑-5链式调用中的线程切换导致-threadlocal-丢失","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#6坑-6join-和-get-的异常包装差异","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#7坑-7completablefuture-没有超时导致线程泄漏","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#8坑-8在高并发下大量创建-completablefuture-链导致内存压力","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#1它解决了什么问题","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#2基本用法","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#3带超时的结构化并发","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#4结构化并发的优势总结","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#1核心概念mono-和-flux","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#2背压backpressure响应式的核心优势","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#3什么时候应该用响应式","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#4响应式的三大难点让你望而却步的原因","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#1决策树","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#2推荐的企业级组合jdk-21","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#3完整实战商品详情页聚合接口","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#1三句话总结","kind":"post-heading","value":1},{"source":"p:projects/projects-java-virtual-thread-async-orchestration","target":"h:projects/projects-java-virtual-thread-async-orchestration#2学习路径建议","kind":"post-heading","value":1},{"source":"t:Bitmap","target":"p:projects/projects-redis-bitmap-snowflake-id","kind":"tag-post","value":1},{"source":"t:Redis","target":"p:projects/projects-redis-bitmap-snowflake-id","kind":"tag-post","value":1},{"source":"t:分布式","target":"p:projects/projects-redis-bitmap-snowflake-id","kind":"tag-post","value":1},{"source":"t:性能优化","target":"p:projects/projects-redis-bitmap-snowflake-id","kind":"tag-post","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#1setbit-的时间复杂度陷阱","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#2内存分配量化","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#3为什么后续操作快","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#4能否缩小-offset-范围","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#1雪花-id-的结构决定了它不适合做-bitmap-offset","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#2哈希取模是治标不治本的妥协","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#3雪花-id-的时间递增特性也无法利用","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#4如果不用哈希直接用雪花-id-做-offset-呢","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#5从-id-生成策略角度的替代方案","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#6雪花-id-角度的本质","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#1redis-单线程阻塞一个慢操作拖垮整个节点","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#2redis-cluster-数据倾斜","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#3keys-命令的集群隐患","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#4bitmap-大-key-的运维风险","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#5分布式角度的结论","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#1原理","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#2三种使用方式对比","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#3roaringbitmap-结论","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#1key-设计","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#2为什么用用户维度而不是内容维度的-set","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#3操作流程","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#4缓存冷启动redis-无数据时","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#5方案对比","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#6前端注意事项雪花-id-精度丢失","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#1三维问题全景","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#2问题-方案对照表","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#3最终选型","kind":"post-heading","value":1},{"source":"p:projects/projects-redis-bitmap-snowflake-id","target":"h:projects/projects-redis-bitmap-snowflake-id#4什么时候-bitmap-仍然适用","kind":"post-heading","value":1},{"source":"t:JWT","target":"p:projects/projects-token-storage-jwt-design","kind":"tag-post","value":1},{"source":"t:安全","target":"p:projects/projects-token-storage-jwt-design","kind":"tag-post","value":1},{"source":"t:认证","target":"p:projects/projects-token-storage-jwt-design","kind":"tag-post","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#1当前系统现状","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#2目标","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#1双-token-分层存储","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#2rs256-非对称签名","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#3redis-白名单","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#1session-vs-jwt","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#2前端存储对比","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#3核心取舍","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#1服务端token-签发","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#2服务端token-刷新","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#3服务端退出与吊销","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#4网关token-校验","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#5前端pinia-状态管理","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#6前端axios-拦截器","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#7redis-存储结构","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#1cookie-安全属性","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#2纵深防御体系","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#3多设备登录管理","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#4安全事件响应","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#1gateway-cors-配置","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#2nginx-反向代理","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#3cookie-构建工具","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#1当前状态与目标状态","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#2迁移步骤","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#1redis-性能","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#2网关性能","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#3前端体验","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#1q1httponly-cookie-是否完全防御-xss","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#2q2cookie-4-kb-限制是否足够","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#3q3为什么不在-jwt-claims-中存放角色和权限","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#4q4refresh-token-被窃取后如何应对","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#5q5跨域场景下-cookie-为何不生效","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#6q6多标签页如何同步登录状态","kind":"post-heading","value":1},{"source":"p:projects/projects-token-storage-jwt-design","target":"h:projects/projects-token-storage-jwt-design#7q7移动端--原生-app-如何接入","kind":"post-heading","value":1},{"source":"t:OAuth2","target":"p:projects/projects-oauth2-third-party-login","kind":"tag-post","value":1},{"source":"t:登录","target":"p:projects/projects-oauth2-third-party-login","kind":"tag-post","value":1},{"source":"t:认证","target":"p:projects/projects-oauth2-third-party-login","kind":"tag-post","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#1流程图","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#2核心代码结构","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#3关键技术点","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#1平台特性","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#2回调处理流程","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#3github-后台配置","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#4nacos-配置","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#5注意事项","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#1平台特性-1","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#2回调处理流程-1","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#3微信开放平台配置","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#4nacos-配置-1","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#5开发环境绕过方案无域名时","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#6注意事项","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#1平台特性-2","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#2回调处理流程-2","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#3qq-互联平台配置","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#4nacos-配置-2","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#5注意事项-1","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#1需要配置的地方完整清单","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#2各平台配置对比表","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#3完整-nacos-配置模板","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#4完整-gateway-白名单模板","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#5生产环境部署检查清单","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#1redirect_uri-is-not-associated-with-this-application","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#2微信开发环境无法使用-localhost","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#3回调后没有跳转到前端","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#4生产环境是否需要内网穿透","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#5不同平台用户的用户名会冲突吗","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#1前端发起登录","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#2前端接收回调","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#3后续请求携带-token","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#1用户表第三方登录字段","kind":"post-heading","value":1},{"source":"p:projects/projects-oauth2-third-party-login","target":"h:projects/projects-oauth2-third-party-login#2查询逻辑","kind":"post-heading","value":1},{"source":"t:安全","target":"p:projects/projects-auth-flow-zsk-auth","kind":"tag-post","value":1},{"source":"t:登录","target":"p:projects/projects-auth-flow-zsk-auth","kind":"tag-post","value":1},{"source":"t:认证","target":"p:projects/projects-auth-flow-zsk-auth","kind":"tag-post","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#1流程概述","kind":"post-heading","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#2核心代码","kind":"post-heading","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#1流程概述-1","kind":"post-heading","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#2核心代码-1","kind":"post-heading","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#1流程概述-2","kind":"post-heading","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#2核心代码-2","kind":"post-heading","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#1流程概述-3","kind":"post-heading","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#2核心代码-3","kind":"post-heading","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#1传输层加密-rsa","kind":"post-heading","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#2存储层加密-bcrypt","kind":"post-heading","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#1策略概述","kind":"post-heading","value":1},{"source":"p:projects/projects-auth-flow-zsk-auth","target":"h:projects/projects-auth-flow-zsk-auth#2部分核心代码","kind":"post-heading","value":1},{"source":"t:安全","target":"p:projects/projects-magic-link-login-design","kind":"tag-post","value":1},{"source":"t:登录","target":"p:projects/projects-magic-link-login-design","kind":"tag-post","value":1},{"source":"t:认证","target":"p:projects/projects-magic-link-login-design","kind":"tag-post","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#1业务背景","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#2功能需求","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#3登录流程","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#1架构设计","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#2目录结构","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#3关键类与方法设计","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#4数据库与缓存设计","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#5api接口设计","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#1两种方案对比","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#2方案对比表","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#3选型结论","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#1依赖与环境","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#2配置与运行","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#1注意事项","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#2解决方案","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#3前端操作流程","kind":"post-heading","value":1},{"source":"p:projects/projects-magic-link-login-design","target":"h:projects/projects-magic-link-login-design#4自动注册用户字段说明","kind":"post-heading","value":1},{"source":"t:MinIO","target":"p:projects/projects-object-storage-presigned-url","kind":"tag-post","value":1},{"source":"t:安全","target":"p:projects/projects-object-storage-presigned-url","kind":"tag-post","value":1},{"source":"t:对象存储","target":"p:projects/projects-object-storage-presigned-url","kind":"tag-post","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#1签名-url-的格式","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#2签名-url-的工作原理","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#1各厂商的最大有效期","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#2为什么-s3-协议限制-7-天","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#1预签名-url-模式私有桶","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#2直接-url-模式公开桶--自定义域名","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#3对比总结","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#1方案一前端自动续签推荐","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#2方案二后端代理下载","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#3方案三公开桶--自定义域名","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#4方案四cdn-回源--鉴权","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#1根据场景选择模式","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#2有效期设置建议","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#3安全注意事项","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#1q1签名-url-过期后文件还在吗","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#2q2能否生成永不过期的签名-url","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#3q3签名-url-泄露了怎么办","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#4q4去掉签名参数后还能访问吗","kind":"post-heading","value":1},{"source":"p:projects/projects-object-storage-presigned-url","target":"h:projects/projects-object-storage-presigned-url#5q5前端如何判断签名-url-是否过期","kind":"post-heading","value":1},{"source":"t:WebSocket","target":"p:projects/projects-qrcode-login-java-comparison","kind":"tag-post","value":1},{"source":"t:扫码登录","target":"p:projects/projects-qrcode-login-java-comparison","kind":"tag-post","value":1},{"source":"t:认证","target":"p:projects/projects-qrcode-login-java-comparison","kind":"tag-post","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#1完整时序","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#2二维码状态机","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#1方案总览","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#2资源消耗对比","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#3方案选型结论","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#1maven-依赖配置","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#2数据模型","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#3redis-存储设计","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#4websocket-配置","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#5生成二维码","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#6手机扫码","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#7手机确认登录","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#8手机取消登录","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#9长轮询降级实现","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#10controller-层","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#11gateway-白名单","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#1pc-端二维码展示--websocket","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#2pc-端vue-组件","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#3手机端扫码--确认流程","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#4手机端确认页面组件","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#1威胁模型","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#2防御措施","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#3安全措施汇总","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#1websocket-连接断开后状态丢失","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#2二维码过期但手机端还在确认","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#3用户扫码后不确认也不取消","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#4pc-端刷新页面后丢失二维码","kind":"post-heading","value":1},{"source":"p:projects/projects-qrcode-login-java-comparison","target":"h:projects/projects-qrcode-login-java-comparison#5websocket-被防火墙代理拦截","kind":"post-heading","value":1},{"source":"t:AI","target":"p:ai/ai-agent-skill-collect","kind":"tag-post","value":1},{"source":"t:Agent","target":"p:ai/ai-agent-skill-collect","kind":"tag-post","value":1},{"source":"t:Skill","target":"p:ai/ai-agent-skill-collect","kind":"tag-post","value":1},{"source":"t:Oracle","target":"p:projects/projects-oracle-erp-performance-optimization","kind":"tag-post","value":1},{"source":"t:性能优化","target":"p:projects/projects-oracle-erp-performance-optimization","kind":"tag-post","value":1},{"source":"t:数据库","target":"p:projects/projects-oracle-erp-performance-optimization","kind":"tag-post","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#1什么是聚簇因子","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#2shrink-为什么会恶化-cf","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#3恶化后的等待事件","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#4聚簇因子检测","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#1工具链","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#2关键指标","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#3定位流程","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#1在线表重定义降低聚簇因子","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#2修改索引","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#3修改存储参数mrp_sourcing_history","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#4核心表缓存至-keep-pool","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#1mrp_schedule_dates-频繁增删导致聚簇持续退化","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#2sql-高频执行累计消耗大","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#3自治事务频繁提交导致-log-file-sync-等待","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#4视图替代基表导致全表扫描","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#1数据库基础资源层","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#2缓存与共享池层","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#3索引与表设计层","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#4sql-执行计划层","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#5并发与事务层","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#6应用配置层","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#1项目一句话定位","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#2逻辑链这是整个项目的叙事骨架","kind":"post-heading","value":1},{"source":"p:projects/projects-oracle-erp-performance-optimization","target":"h:projects/projects-oracle-erp-performance-optimization#3几个值得强调的细节","kind":"post-heading","value":1},{"source":"t:安全","target":"t:认证","kind":"tag-tag","value":3},{"source":"t:登录","target":"t:认证","kind":"tag-tag","value":3},{"source":"t:AI","target":"t:Skill","kind":"tag-tag","value":2},{"source":"t:Bitmap","target":"t:Redis","kind":"tag-tag","value":2},{"source":"t:Java","target":"t:并发编程","kind":"tag-tag","value":2},{"source":"t:安全","target":"t:登录","kind":"tag-tag","value":2},{"source":"t:Agent","target":"t:Skill","kind":"tag-tag","value":1},{"source":"t:AI","target":"t:Agent","kind":"tag-tag","value":1},{"source":"t:AI","target":"t:Bot","kind":"tag-tag","value":1},{"source":"t:AI","target":"t:Cloudflare","kind":"tag-tag","value":1},{"source":"t:AI","target":"t:Prompt","kind":"tag-tag","value":1},{"source":"t:AI","target":"t:RAG","kind":"tag-tag","value":1},{"source":"t:AI","target":"t:前端","kind":"tag-tag","value":1},{"source":"t:AI","target":"t:博客","kind":"tag-tag","value":1},{"source":"t:AI","target":"t:工作流","kind":"tag-tag","value":1},{"source":"t:AI","target":"t:部署","kind":"tag-tag","value":1},{"source":"t:Bitmap","target":"t:分布式","kind":"tag-tag","value":1},{"source":"t:Bitmap","target":"t:性能优化","kind":"tag-tag","value":1},{"source":"t:Bitmap","target":"t:缓存设计","kind":"tag-tag","value":1},{"source":"t:Bitmap","target":"t:高性能","kind":"tag-tag","value":1},{"source":"t:Bot","target":"t:部署","kind":"tag-tag","value":1},{"source":"t:Cloudflare","target":"t:RAG","kind":"tag-tag","value":1},{"source":"t:firefly","target":"t:二开","kind":"tag-tag","value":1},{"source":"t:firefly","target":"t:博客","kind":"tag-tag","value":1},{"source":"t:Java","target":"t:线程池","kind":"tag-tag","value":1},{"source":"t:Java","target":"t:虚拟线程","kind":"tag-tag","value":1},{"source":"t:JWT","target":"t:安全","kind":"tag-tag","value":1},{"source":"t:JWT","target":"t:认证","kind":"tag-tag","value":1},{"source":"t:MinIO","target":"t:安全","kind":"tag-tag","value":1},{"source":"t:MinIO","target":"t:对象存储","kind":"tag-tag","value":1},{"source":"t:OAuth2","target":"t:登录","kind":"tag-tag","value":1},{"source":"t:OAuth2","target":"t:认证","kind":"tag-tag","value":1},{"source":"t:Oracle","target":"t:性能优化","kind":"tag-tag","value":1},{"source":"t:Oracle","target":"t:数据库","kind":"tag-tag","value":1},{"source":"t:Redis","target":"t:分布式","kind":"tag-tag","value":1},{"source":"t:Redis","target":"t:性能优化","kind":"tag-tag","value":1},{"source":"t:Redis","target":"t:缓存设计","kind":"tag-tag","value":1},{"source":"t:Redis","target":"t:高性能","kind":"tag-tag","value":1},{"source":"t:Skill","target":"t:工作流","kind":"tag-tag","value":1},{"source":"t:Umami","target":"t:Vercel","kind":"tag-tag","value":1},{"source":"t:Umami","target":"t:部署","kind":"tag-tag","value":1},{"source":"t:Vercel","target":"t:部署","kind":"tag-tag","value":1},{"source":"t:WebSocket","target":"t:扫码登录","kind":"tag-tag","value":1},{"source":"t:WebSocket","target":"t:认证","kind":"tag-tag","value":1},{"source":"t:二开","target":"t:博客","kind":"tag-tag","value":1},{"source":"t:分布式","target":"t:性能优化","kind":"tag-tag","value":1},{"source":"t:前端","target":"t:博客","kind":"tag-tag","value":1},{"source":"t:安全","target":"t:对象存储","kind":"tag-tag","value":1},{"source":"t:并发编程","target":"t:线程池","kind":"tag-tag","value":1},{"source":"t:并发编程","target":"t:虚拟线程","kind":"tag-tag","value":1},{"source":"t:性能优化","target":"t:数据库","kind":"tag-tag","value":1},{"source":"t:扫码登录","target":"t:认证","kind":"tag-tag","value":1},{"source":"t:缓存设计","target":"t:高性能","kind":"tag-tag","value":1}],"meta":{"version":1,"categories":[{"id":"c:学习文档","name":"学习文档","url":"/archive/?category=%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3","colorIndex":0,"postCount":8,"tagCount":16},{"id":"c:设计文档","name":"设计文档","url":"/archive/?category=%E8%AE%BE%E8%AE%A1%E6%96%87%E6%A1%A3","colorIndex":1,"postCount":5,"tagCount":8},{"id":"c:实践笔记","name":"实践笔记","url":"/archive/?category=%E5%AE%9E%E8%B7%B5%E7%AC%94%E8%AE%B0","colorIndex":2,"postCount":4,"tagCount":11},{"id":"c:部署文档","name":"部署文档","url":"/archive/?category=%E9%83%A8%E7%BD%B2%E6%96%87%E6%A1%A3","colorIndex":3,"postCount":2,"tagCount":5},{"id":"c:测试","name":"测试","url":"/archive/?category=%E6%B5%8B%E8%AF%95","colorIndex":4,"postCount":1,"tagCount":1}],"counts":{"category":5,"tag":37,"post":20,"heading":399},"timeRange":{"from":1764633600000,"to":1785024000000},"headingDepth":2}}