{
  "type": "BlogWikiIndex",
  "version": 1,
  "site": "https://hakugyokurou.fun/",
  "generatedAt": "2026-09-10T16:46:32.815Z",
  "articles": [
    {
      "id": "others/others-blog-firefly-mod",
      "title": "firefly | 魔改总结",
      "description": "基于 Astro、Svelte 和 Cloudflare Workers 的 Firefly 二次开发记录。",
      "published": "2026-07-23T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/others/others-blog-firefly-mod/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/others/others-blog-firefly-mod.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/others/others-blog-firefly-mod.md",
      "category": "学习文档",
      "tags": [
        "博客",
        "二开",
        "firefly"
      ],
      "headings": [
        "1、首页",
        "2、音乐",
        "3、分类标签",
        "4、留言",
        "4.1 接口列表",
        "4.2 登录流程",
        "5、关于",
        "6、日历",
        "6.1 接口列表",
        "7、归档",
        "8、其他",
        "1、本地部署",
        "2、AI 搜索配置（可选）",
        "2.1 AI\\_API\\_KEY（可选）",
        "2.2 CLOUDFLARE\\_API\\_TOKEN",
        "2.3 CLOUDFLARE\\_ACCOUNT\\_ID",
        "三、用到的AI模型",
        "四、优点与UI复制",
        "五、后续计划"
      ],
      "excerpt": "基于 Astro、Svelte 和 Cloudflare Workers 的 Firefly 二次开发记录。",
      "characterCount": 6009
    },
    {
      "id": "ai/ai-blog-ai-zero-editing",
      "title": "这个博客《纯AI，零人工》",
      "description": "这个博客如何用 AI 从零搭建：定风格、写原型图、生成代码规范、持续优化的完整流程。",
      "published": "2026-06-14T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/ai/ai-blog-ai-zero-editing/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-blog-ai-zero-editing.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-blog-ai-zero-editing.md",
      "category": "学习文档",
      "tags": [
        "AI",
        "前端",
        "博客"
      ],
      "headings": [
        "一、流程",
        "1、正确流程",
        "2、原型图",
        "2.1 原型图步骤",
        "2.2 重点速查表",
        "2.3 推荐资源",
        "2.4 提示词速查表",
        "3、设置规范",
        "3.1 正确流程",
        "3.2 TDD是神",
        "4、开发",
        "5、优化",
        "5.1 动效",
        "5.2 资源优化",
        "5.3 定期扫描",
        "二、AI 工具",
        "1、Skill",
        "2、模型选择",
        "1、博客设计原则"
      ],
      "excerpt": "这个博客如何用 AI 从零搭建：定风格、写原型图、生成代码规范、持续优化的完整流程。",
      "characterCount": 2124
    },
    {
      "id": "测试",
      "title": "测试",
      "description": "这是测试",
      "published": "2026-07-26T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/%E6%B5%8B%E8%AF%95/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/%E6%B5%8B%E8%AF%95.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/%E6%B5%8B%E8%AF%95.md",
      "category": "测试",
      "tags": [
        "测试"
      ],
      "headings": [],
      "excerpt": "这是测试",
      "characterCount": 25
    },
    {
      "id": "ai/ai-prompt-collection",
      "title": "Prompt 收录",
      "description": "日常使用 AI 的提示词整合，涵盖前端开发规范、代码约束、组件约束等实用 Prompt 模板。",
      "published": "2026-06-19T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/ai/ai-prompt-collection/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-prompt-collection.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-prompt-collection.md",
      "category": "学习文档",
      "tags": [
        "AI",
        "Prompt"
      ],
      "headings": [
        "1、前端",
        "1、逆向",
        "2、角色设定图",
        "3、画风",
        "4、质量",
        "5、滤镜",
        "6、降噪",
        "7、反向提示词",
        "8、图生图，替换人物"
      ],
      "excerpt": "日常使用 AI 的提示词整合，涵盖前端开发规范、代码约束、组件约束等实用 Prompt 模板。",
      "characterCount": 71
    },
    {
      "id": "ai/ai-openspec-superpowers-workflow",
      "title": "OpenSpec + Superpowers",
      "description": "OpenSpec 规范驱动开发与 Superpowers 工程化工作流的协同实践，建立\"规范驱动规划 + 流程驱动执行\"的 AI 编程闭环。",
      "published": "2026-06-03T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/ai/ai-openspec-superpowers-workflow/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-openspec-superpowers-workflow.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-openspec-superpowers-workflow.md",
      "category": "学习文档",
      "tags": [
        "AI",
        "Skill",
        "工作流"
      ],
      "headings": [
        "一、介绍",
        "1、Superpowers",
        "2、OpenSpec",
        "1、Superpowers 的功能特性与应用场景",
        "2、OpenSpec 的功能特性与应用场景",
        "1、Superpowers 使用步骤",
        "2、OpenSpec 使用步骤",
        "1、Superpowers 子技能",
        "2、OpenSpec 命令与能力",
        "1、环境要求",
        "2、安装 Superpowers",
        "3、安装 OpenSpec",
        "1、卸载 Superpowers",
        "2、卸载 OpenSpec",
        "3、残留清理",
        "1、协同场景",
        "2、协同优势",
        "3、协同操作步骤",
        "4、实战示例：实现订单导出功能",
        "5、关键协同点",
        "1、Q1：OpenSpec 与 Superpowers 必须一起使用吗？",
        "2、Q2：Superpowers 安装后为什么不生效？",
        "3、Q3：OpenSpec 的 Spec 应该写到什么粒度？",
        "4、Q4：如何处理开发过程中的需求变更？",
        "5、Q5：团队如何协作使用 OpenSpec？",
        "九、总结",
        "十、参考资料"
      ],
      "excerpt": "OpenSpec 规范驱动开发与 Superpowers 工程化工作流的协同实践，建立\"规范驱动规划 + 流程驱动执行\"的 AI 编程闭环。",
      "characterCount": 4967
    },
    {
      "id": "ai/ai-blog-ai-search-vectorize",
      "title": "AI 搜索 | Cloudflare Vectorize 实现问答搜索",
      "description": "基于 Cloudflare Vectorize 实现博客 AI 语义搜索，涵盖 Markdown 分块、向量化、RAG 检索及 Worker 流式问答。",
      "published": "2026-05-14T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/ai/ai-blog-ai-search-vectorize/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-blog-ai-search-vectorize.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-blog-ai-search-vectorize.md",
      "category": "设计文档",
      "tags": [
        "AI",
        "RAG",
        "Cloudflare"
      ],
      "headings": [
        "一、背景",
        "二、架构",
        "三、文档分块策略",
        "1、实现细节",
        "2、与 LangChain 递归分块的对比",
        "1、构建脚本",
        "2、Embedding 来源",
        "3、Cloudflare 凭证获取",
        "4、Worker Secret 配置",
        "5、向量索引上传",
        "五、Worker 端问答流程",
        "1、统一配置管理",
        "2、Embedding",
        "3、向量检索",
        "4、Prompt 拼接与 system 注入防护",
        "5、流式返回",
        "六、前端组件",
        "1.1 数据结构设计",
        "1.2 新建会话",
        "1.3 历史会话列表",
        "1.4 会话切换",
        "1.5 会话删除",
        "1.6 会话上限与自动清理",
        "1.7 自动保存时机",
        "1.8 初始化恢复",
        "七、敏感配置处理",
        "八、资源消耗",
        "九、文件清单",
        "十、踩坑记录"
      ],
      "excerpt": "基于 Cloudflare Vectorize 实现博客 AI 语义搜索，涵盖 Markdown 分块、向量化、RAG 检索及 Worker 流式问答。",
      "characterCount": 6034
    },
    {
      "id": "projects/projects-redis-interaction-cache-design",
      "title": "Redis | 三种交互数据缓存",
      "description": "基于 Redis 的交互数据缓存设计，对比 Set+MQ、Set+定时扫描、Bitmap+MQ 三种方案的适用边界与兜底降级策略。",
      "published": "2026-05-13T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/projects/projects-redis-interaction-cache-design/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-redis-interaction-cache-design.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-redis-interaction-cache-design.md",
      "category": "实践笔记",
      "tags": [
        "Redis",
        "缓存设计",
        "Bitmap",
        "高性能"
      ],
      "headings": [
        "一、问题陈述",
        "二、数据结构选型",
        "三、方案设计与交互流程",
        "1、共享 Key 概念",
        "2.1 Key 设计",
        "2.2 交互流程",
        "2.3 入库方式：MQ 异步消费",
        "3.1 Key 设计",
        "3.2 交互流程",
        "3.3 入库方式：定时扫描",
        "4、方案三：Bitmap + MQ 异步入库",
        "4.1 Key 设计",
        "4.2 交互流程",
        "4.3 入库方式：MQ 异步消费",
        "5、四种交互场景的实现差异",
        "6、三种方案对比",
        "1、数据库表设计",
        "2、缓存预热",
        "1、Redis 不可用时的降级策略",
        "2、数据不一致的修复机制",
        "3、MQ 消息丢失的兜底",
        "4、缓存击穿防护",
        "1、SETBIT 首次写入的性能陷阱",
        "2、雪花 ID 与 Bitmap 的根本矛盾",
        "3、分布式场景下的阻塞与倾斜",
        "4、同步任务的幂等性",
        "5、数据丢失风险",
        "七、总结",
        "八、参考资料"
      ],
      "excerpt": "基于 Redis 的交互数据缓存设计，对比 Set+MQ、Set+定时扫描、Bitmap+MQ 三种方案的适用边界与兜底降级策略。",
      "characterCount": 7767
    },
    {
      "id": "ai/ai-napcat-astrbot-deployment",
      "title": "QQ 机器人 | NapCat + AstrBot",
      "description": "使用 Docker Compose 一站式部署 NapCat + AstrBot，从零搭建 AI QQ 机器人，含 OneBot 11 协议对接与风控替代方案。",
      "published": "2026-05-12T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/ai/ai-napcat-astrbot-deployment/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-napcat-astrbot-deployment.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-napcat-astrbot-deployment.md",
      "category": "部署文档",
      "tags": [
        "AI",
        "Bot",
        "部署"
      ],
      "headings": [
        "一、部署环境要求",
        "二、目录结构",
        "三、docker-compose.yml",
        "1、启动",
        "四、本地 Docker Desktop 部署",
        "五、服务器部署",
        "1、建目录",
        "2、新建文件",
        "3、编排",
        "4、校验",
        "1、访问地址",
        "2.1 自动配置",
        "2.2 手动配置（登录发现没看到配置上，那么可以选择这里）",
        "3、NapCat 环境变量说明（部署忽略，这里只是补充说明）",
        "4、NapCat 配置文件位置（部署忽略，这里只是补充说明）",
        "1、访问 WebUI",
        "2、添加消息平台（连接 NapCat）",
        "3、配置 LLM 大模型（需要先准备好自己AI模型key）",
        "4、如何白嫖免费大模型？（Agnes 或 魔搭社区）",
        "4.1 Agnes",
        "4.2 魔搭社区（推荐）",
        "5、普通设置",
        "6、平台设置",
        "7、扩展功能",
        "1、传统手搓",
        "2、使用女娲 Skill 蒸馏人格",
        "2.1 安装",
        "2.2 蒸馏一个人",
        "2.3 已蒸馏人物（可直接安装）",
        "2.4 用于 AstrBot 人格设定",
        "3、喵墩备份",
        "1、如图",
        "2、为什么我不用记忆呢",
        "1、AstrBot 连不上 NapCat",
        "2、QQ 号被风控 / 账号掉线",
        "3、消息延迟高",
        "4、如何更新版本",
        "十一、参考资料"
      ],
      "excerpt": "使用 Docker Compose 一站式部署 NapCat + AstrBot，从零搭建 AI QQ 机器人，含 OneBot 11 协议对接与风控替代方案。",
      "characterCount": 6404
    },
    {
      "id": "others/others-umami-vercel-neon-deployment",
      "title": "Umami | Vercel + Neon 部署",
      "description": "使用 Vercel + Neon 免费部署 Umami 网站统计，记录 Prisma 7 适配、自定义域名绑定及通过 Share API 拉取站点 UV/PV 的接入方式。",
      "published": "2026-05-07T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/others/others-umami-vercel-neon-deployment/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/others/others-umami-vercel-neon-deployment.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/others/others-umami-vercel-neon-deployment.md",
      "category": "部署文档",
      "tags": [
        "Umami",
        "部署",
        "Vercel"
      ],
      "headings": [
        "一、架构",
        "二、第一步：创建 Neon 数据库",
        "三、第二步：Fork Umami 仓库",
        "四、第三步：确认 Prisma 7 适配",
        "五、第四步：部署到 Vercel",
        "六、第五步：首次登录和安全设置",
        "七、第六步：绑定自定义域名",
        "1、通用接入方式",
        "2、本项目接入方式",
        "九、第八步：开启 Share URL（用于公开访问 UV/PV）",
        "1、开启 Share URL",
        "2、本项目获取 UV/PV 的实现",
        "3、直接重定向到分享页",
        "十、第九步：设置数据自动清理",
        "十一、更新 Umami 版本",
        "十二、常见问题",
        "十三、保存清单"
      ],
      "excerpt": "使用 Vercel + Neon 免费部署 Umami 网站统计，记录 Prisma 7 适配、自定义域名绑定及通过 Share API 拉取站点 UV/PV 的接入方式。",
      "characterCount": 2795
    },
    {
      "id": "projects/projects-java-thread-pool-configuration",
      "title": "线程池 | 配置指南",
      "description": "Java ThreadPoolExecutor 核心参数、线程数估算、队列选型与拒绝策略，附带企业级监控与动态调优方案。",
      "published": "2026-05-07T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/projects/projects-java-thread-pool-configuration/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-java-thread-pool-configuration.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-java-thread-pool-configuration.md",
      "category": "学习文档",
      "tags": [
        "Java",
        "线程池",
        "并发编程"
      ],
      "headings": [
        "一、核心摘要",
        "二、为什么需要线程池",
        "三、ThreadPoolExecutor 核心参数",
        "1、corePoolSize 与 maximumPoolSize",
        "2、keepAliveTime 与 TimeUnit",
        "3、工作队列",
        "4、线程工厂",
        "5、拒绝策略",
        "四、任务提交与执行流程",
        "五、CPU 密集型与 IO 密集型任务",
        "1、CPU 密集型",
        "2、IO 密集型",
        "3、混合型任务",
        "1、Little's Law",
        "2、Brian Goetz 公式",
        "3、公式的局限",
        "4、估算流程",
        "5、常见场景参考值",
        "七、工作队列选型",
        "1、全局共用一个线程池",
        "2、不考虑下游限制盲目设大",
        "3、keepAliveTime 设置过短",
        "4、任务中嵌套提交任务",
        "5、容器环境不修正 CPU 核数",
        "6、线程未命名",
        "1、需求分析清单",
        "2、订单查询服务配置示例",
        "3、压测验证方案",
        "1、动态调整原理",
        "2、实现示例",
        "3、队列容量动态修改",
        "1、Prometheus 指标暴露",
        "2、AlertManager 告警规则",
        "3、告警阈值参考",
        "1、线程数调优",
        "2、队列深度调优",
        "3、GC 与内存调优",
        "4、上下文切换调优",
        "1、Q1：`corePoolSize` 和 `maximumPoolSize` 应该设成一样吗？",
        "2、Q2：为什么线程池达到了 `maximumPoolSize` 但 CPU 使用率仍然很低？",
        "3、Q3：任务被拒绝时应该选择哪种策略？",
        "4、Q4：使用 `CompletableFuture` 时如何指定自定义线程池？",
        "5、Q5：Spring 的 `@Async` 默认线程池有什么问题？",
        "6、Q6：如何优雅关闭线程池？",
        "7、Q7：`allowCoreThreadTimeOut(true)` 是否推荐？",
        "十四、决策速查表",
        "十五、总结",
        "十六、参考资料"
      ],
      "excerpt": "Java ThreadPoolExecutor 核心参数、线程数估算、队列选型与拒绝策略，附带企业级监控与动态调优方案。",
      "characterCount": 3282
    },
    {
      "id": "projects/projects-java-virtual-thread-async-orchestration",
      "title": "虚拟线程 | 异步编排",
      "description": "Java 虚拟线程从原理到工程实践，涵盖创建、异步编排、监控调优及企业级并发场景应用。",
      "published": "2026-05-07T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/projects/projects-java-virtual-thread-async-orchestration/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-java-virtual-thread-async-orchestration.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-java-virtual-thread-async-orchestration.md",
      "category": "学习文档",
      "tags": [
        "Java",
        "虚拟线程",
        "并发编程"
      ],
      "headings": [
        "1、一个真实的场景",
        "2、问题的本质",
        "二、Java 并发模型的演进史",
        "1、阶段 1：原始线程时代（Java 1.0，1996年）",
        "2、阶段 2：线程池时代（Java 5，2004年）",
        "3、阶段 3：异步回调时代（Java 8，2014年）",
        "4、阶段 4：响应式编程时代（Spring WebFlux，2017年）",
        "5、阶段 5：虚拟线程时代（JDK 21，2023年）",
        "1、传统线程的问题（图解）",
        "2、虚拟线程的解决思路",
        "3、关键概念：Continuation（续体）",
        "4、通俗类比",
        "四、虚拟线程 vs 平台线程：全面对比",
        "1、最简单的创建方式",
        "2、生产推荐：每任务一虚拟线程",
        "3、Spring Boot 3.2+ 集成（推荐）",
        "4、并行聚合多个 IO 任务（最常用场景）",
        "5、结合 ScopedValue 传递上下文（推荐替代 ThreadLocal）",
        "六、⚠️ 虚拟线程踩坑大全（12个坑）",
        "1、坑 1：给虚拟线程建线程池（最常见错误）",
        "2、坑 2：synchronized 块导致 Pinning（JDK 21/23）",
        "3、坑 3：ThreadLocal 在虚拟线程中导致内存泄漏",
        "4、坑 4：虚拟线程遇到 CPU 密集任务反而变慢",
        "5、坑 5：数据库连接池成为新瓶颈",
        "6、坑 6：在虚拟线程中调用 native 方法导致 Pinning",
        "7、坑 7：用 isVirtual() 做业务逻辑判断",
        "8、坑 8：虚拟线程数量无上限导致 OOM",
        "9、坑 9：忘记处理虚拟线程的中断",
        "10、坑 10：在虚拟线程中使用 BlockingQueue 不当",
        "11、坑 11：错误理解\"虚拟线程不需要关心并发问题\"",
        "12、坑 12：在旧版 JDBC 驱动中遇到兼容性问题",
        "七、CompletableFuture 异步编排从零讲起",
        "1、基本概念：什么是 CompletableFuture？",
        "2、核心方法速查",
        "3、实战：并行聚合商品详情",
        "4、超时与降级处理",
        "八、⚠️ CompletableFuture 踩坑大全（8个坑）",
        "1、坑 1：不指定 Executor，使用 ForkJoinPool 公共池",
        "2、坑 2：异常被静默吞掉",
        "3、坑 3：thenApply vs thenApplyAsync 混淆",
        "4、坑 4：allOf 没有返回值，需要额外 get()",
        "5、坑 5：链式调用中的线程切换导致 ThreadLocal 丢失",
        "6、坑 6：join() 和 get() 的异常包装差异",
        "7、坑 7：CompletableFuture 没有超时导致线程泄漏",
        "8、坑 8：在高并发下大量创建 CompletableFuture 链导致内存压力",
        "1、它解决了什么问题？",
        "2、基本用法",
        "3、带超时的结构化并发",
        "4、结构化并发的优势总结",
        "十、响应式编程（Reactor/WebFlux）概览",
        "1、核心概念：Mono 和 Flux",
        "2、背压（Backpressure）：响应式的核心优势",
        "3、什么时候应该用响应式？",
        "4、响应式的三大难点（让你望而却步的原因）",
        "十一、四种模型横向大对比",
        "1、决策树",
        "2、推荐的企业级组合（JDK 21+）",
        "3、完整实战：商品详情页聚合接口",
        "1、三句话总结",
        "2、学习路径建议"
      ],
      "excerpt": "Java 虚拟线程从原理到工程实践，涵盖创建、异步编排、监控调优及企业级并发场景应用。",
      "characterCount": 6799
    },
    {
      "id": "projects/projects-redis-bitmap-snowflake-id",
      "title": "Redis | Bitmap、雪花ID、分布式",
      "description": "Redis Bitmap 结合雪花 ID 在分布式场景下的三大陷阱：首次写入 O(offset) 卡顿、哈希碰撞风险、单线程阻塞，最终给出 String+Set 替代方案。",
      "published": "2026-05-06T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/projects/projects-redis-bitmap-snowflake-id/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-redis-bitmap-snowflake-id.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-redis-bitmap-snowflake-id.md",
      "category": "实践笔记",
      "tags": [
        "Redis",
        "Bitmap",
        "分布式",
        "性能优化"
      ],
      "headings": [
        "一、案发现场",
        "二、问题现象",
        "1、SETBIT 的时间复杂度陷阱",
        "2、内存分配量化",
        "3、为什么后续操作快？",
        "4、能否缩小 Offset 范围？",
        "1、雪花 ID 的结构决定了它不适合做 Bitmap offset",
        "2、哈希取模是\"治标不治本\"的妥协",
        "3、雪花 ID 的\"时间递增\"特性也无法利用",
        "4、如果不用哈希，直接用雪花 ID 做 offset 呢？",
        "5、从 ID 生成策略角度的替代方案",
        "6、雪花 ID 角度的本质",
        "1、Redis 单线程阻塞：一个慢操作拖垮整个节点",
        "2、Redis Cluster 数据倾斜",
        "3、KEYS 命令的集群隐患",
        "4、Bitmap 大 Key 的运维风险",
        "5、分布式角度的结论",
        "1、原理",
        "2.1 方式 A：RedisBloom 模块（RB.* 命令）",
        "2.2 方式 B：客户端序列化（Read-Modify-Write）",
        "2.3 方式 C：Lua 脚本",
        "3、RoaringBitmap 结论",
        "1、Key 设计",
        "2、为什么用用户维度而不是内容维度的 Set？",
        "3、操作流程",
        "4、缓存冷启动（Redis 无数据时）",
        "5、方案对比",
        "6、前端注意事项：雪花 ID 精度丢失",
        "1、三维问题全景",
        "2、问题-方案对照表",
        "3、最终选型",
        "4、什么时候 Bitmap 仍然适用？"
      ],
      "excerpt": "Redis Bitmap 结合雪花 ID 在分布式场景下的三大陷阱：首次写入 O(offset) 卡顿、哈希碰撞风险、单线程阻塞，最终给出 String+Set 替代方案。",
      "characterCount": 6868
    },
    {
      "id": "projects/projects-token-storage-jwt-design",
      "title": "登录 | 前后端 token 存储方案",
      "description": "ZSK-Cloud 从单 Token 演进为 Access+Refresh 双令牌的认证体系设计，采用 HttpOnly Cookie 存储 + Redis 白名单吊销机制。",
      "published": "2026-05-04T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/projects/projects-token-storage-jwt-design/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-token-storage-jwt-design.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-token-storage-jwt-design.md",
      "category": "设计文档",
      "tags": [
        "JWT",
        "认证",
        "安全"
      ],
      "headings": [
        "1、当前系统现状",
        "2、目标",
        "1、双 Token 分层存储",
        "2、RS256 非对称签名",
        "3、Redis 白名单",
        "1、Session vs JWT",
        "2、前端存储对比",
        "3、核心取舍",
        "1、服务端：Token 签发",
        "2、服务端：Token 刷新",
        "3.1 单设备退出",
        "3.2 密码修改 / 重置后全局吊销",
        "4、网关：Token 校验",
        "5、前端：Pinia 状态管理",
        "6、前端：Axios 拦截器",
        "7、Redis 存储结构",
        "1、Cookie 安全属性",
        "2、纵深防御体系",
        "3、多设备登录管理",
        "4、安全事件响应",
        "1、Gateway CORS 配置",
        "2、Nginx 反向代理",
        "3、Cookie 构建工具",
        "1、当前状态与目标状态",
        "2、迁移步骤",
        "1、Redis 性能",
        "2、网关性能",
        "3、前端体验",
        "1、Q1：HttpOnly Cookie 是否完全防御 XSS？",
        "2、Q2：Cookie 4 KB 限制是否足够？",
        "3、Q3：为什么不在 JWT Claims 中存放角色和权限？",
        "4、Q4：Refresh Token 被窃取后如何应对？",
        "5、Q5：跨域场景下 Cookie 为何不生效？",
        "6、Q6：多标签页如何同步登录状态？",
        "7、Q7：移动端 / 原生 App 如何接入？",
        "十、总结",
        "十一、参考资料"
      ],
      "excerpt": "ZSK-Cloud 从单 Token 演进为 Access+Refresh 双令牌的认证体系设计，采用 HttpOnly Cookie 存储 + Redis 白名单吊销机制。",
      "characterCount": 8585
    },
    {
      "id": "projects/projects-oauth2-third-party-login",
      "title": "登录 | 第三方登录",
      "description": "GitHub、微信、QQ 三种第三方登录的 OAuth2 授权码流程设计，涵盖回调处理、策略模式代码结构及多环境配置。",
      "published": "2026-05-03T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/projects/projects-oauth2-third-party-login/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-oauth2-third-party-login.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-oauth2-third-party-login.md",
      "category": "设计文档",
      "tags": [
        "OAuth2",
        "认证",
        "登录"
      ],
      "headings": [
        "1、流程图",
        "2、核心代码结构",
        "3、关键技术点",
        "1、平台特性",
        "2、回调处理流程",
        "3、GitHub 后台配置",
        "4、Nacos 配置",
        "5、注意事项",
        "1、平台特性",
        "2、回调处理流程",
        "3、微信开放平台配置",
        "4、Nacos 配置",
        "5、开发环境绕过方案（无域名时）",
        "6、注意事项",
        "1、平台特性",
        "2、回调处理流程",
        "3、QQ 互联平台配置",
        "4、Nacos 配置",
        "5、注意事项",
        "1、需要配置的地方（完整清单）",
        "2.1 GitHub",
        "2.2 微信（网站应用）",
        "2.3 QQ",
        "3、完整 Nacos 配置模板",
        "4、完整 Gateway 白名单模板",
        "5、生产环境部署检查清单",
        "1、redirect_uri is not associated with this application",
        "2、微信开发环境无法使用 localhost",
        "3、回调后没有跳转到前端",
        "4、生产环境是否需要内网穿透",
        "5、不同平台用户的用户名会冲突吗",
        "1、前端发起登录",
        "2、前端接收回调",
        "3、后续请求携带 Token",
        "1、用户表第三方登录字段",
        "2、查询逻辑",
        "九、代码文件清单"
      ],
      "excerpt": "GitHub、微信、QQ 三种第三方登录的 OAuth2 授权码流程设计，涵盖回调处理、策略模式代码结构及多环境配置。",
      "characterCount": 6354
    },
    {
      "id": "projects/projects-auth-flow-zsk-auth",
      "title": "登录 | 滑块验证码、登录与注册完整流程",
      "description": "zsk-auth 认证模块的登录与注册完整流程，涵盖滑块验证码防刷、RSA 加密传输、BCrypt 哈希存储、邮箱验证码身份核验等安全机制。",
      "published": "2026-05-02T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/projects/projects-auth-flow-zsk-auth/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-auth-flow-zsk-auth.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-auth-flow-zsk-auth.md",
      "category": "设计文档",
      "tags": [
        "认证",
        "登录",
        "安全"
      ],
      "headings": [
        "一、流程图（不包含异常处理）",
        "二、流程图 (包含异常处理版)",
        "三、技术栈 (Tech Stack)",
        "四、核心类说明",
        "1、流程概述",
        "2、核心代码",
        "1、流程概述",
        "2、核心代码",
        "1、流程概述",
        "2、核心代码",
        "1、流程概述",
        "2、核心代码",
        "九、安全加密机制 (Security & Encryption)",
        "1、传输层加密 (RSA)",
        "2、存储层加密 (BCrypt)",
        "十、限流机制 (Rate Limiting)",
        "1、策略概述",
        "2、部分核心代码"
      ],
      "excerpt": "zsk-auth 认证模块的登录与注册完整流程，涵盖滑块验证码防刷、RSA 加密传输、BCrypt 哈希存储、邮箱验证码身份核验等安全机制。",
      "characterCount": 3821
    },
    {
      "id": "projects/projects-magic-link-login-design",
      "title": "登录 | 魔法链接",
      "description": "魔法链接登录的完整技术方案，基于 Cloudflare Turnstile 人机校验 + Redis Token 缓存 + 邮件回调验证，实现无密码自动登录。",
      "published": "2026-05-01T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/projects/projects-magic-link-login-design/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-magic-link-login-design.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-magic-link-login-design.md",
      "category": "设计文档",
      "tags": [
        "认证",
        "登录",
        "安全"
      ],
      "headings": [
        "1、业务背景",
        "2、功能需求",
        "3、登录流程",
        "1.1 模块划分",
        "1.2 核心流程图",
        "2、目录结构",
        "3.1 Controller层",
        "3.2 Service层",
        "3.3 配置类",
        "4.1 Redis缓存键设计",
        "4.2 缓存数据结构",
        "5.1 发送魔法链接",
        "5.2 魔法链接回调",
        "1.1 方案 A：预校验（已废弃）",
        "1.2 方案 B：登录时校验（当前实现）",
        "2、方案对比表",
        "3、选型结论",
        "1、依赖与环境",
        "2.1 application.yml 新增配置",
        "1、注意事项",
        "2、解决方案",
        "3.1 发送魔法链接",
        "3.2 魔法链接回调处理",
        "3.3 通过Cookie获取UserInfo",
        "3.4 Cookie操作工具函数",
        "4、自动注册用户字段说明"
      ],
      "excerpt": "魔法链接登录的完整技术方案，基于 Cloudflare Turnstile 人机校验 + Redis Token 缓存 + 邮件回调验证，实现无密码自动登录。",
      "characterCount": 7213
    },
    {
      "id": "projects/projects-object-storage-presigned-url",
      "title": "MinIO | 文件存储签名 URL 有效期机制",
      "description": "MinIO 签名 URL 的工作原理、7 天有效期限制及安全考量，对比预签名上传与下载的两种访问模式。",
      "published": "2026-05-01T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/projects/projects-object-storage-presigned-url/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-object-storage-presigned-url.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-object-storage-presigned-url.md",
      "category": "学习文档",
      "tags": [
        "MinIO",
        "对象存储",
        "安全"
      ],
      "headings": [
        "一、背景",
        "二、什么是签名 URL",
        "1、签名 URL 的格式",
        "2、签名 URL 的工作原理",
        "1、各厂商的最大有效期",
        "2、为什么 S3 协议限制 7 天",
        "1、预签名 URL 模式（私有桶）",
        "2、直接 URL 模式（公开桶 + 自定义域名）",
        "3、对比总结",
        "1、方案一：前端自动续签（推荐）",
        "2、方案二：后端代理下载",
        "3、方案三：公开桶 + 自定义域名",
        "4、方案四：CDN 回源 + 鉴权",
        "1、根据场景选择模式",
        "2、有效期设置建议",
        "3、安全注意事项",
        "1、Q1：签名 URL 过期后，文件还在吗？",
        "2、Q2：能否生成永不过期的签名 URL？",
        "3、Q3：签名 URL 泄露了怎么办？",
        "4、Q4：去掉签名参数后还能访问吗？",
        "5、Q5：前端如何判断签名 URL 是否过期？"
      ],
      "excerpt": "MinIO 签名 URL 的工作原理、7 天有效期限制及安全考量，对比预签名上传与下载的两种访问模式。",
      "characterCount": 2847
    },
    {
      "id": "projects/projects-qrcode-login-java-comparison",
      "title": "登录 | 扫码登录",
      "description": "对比短轮询、长轮询、WebSocket、SSE 四种扫码登录方案，给出基于 WebSocket + Redis 的企业级实现及安全防御。",
      "published": "2026-05-01T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/projects/projects-qrcode-login-java-comparison/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-qrcode-login-java-comparison.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-qrcode-login-java-comparison.md",
      "category": "实践笔记",
      "tags": [
        "扫码登录",
        "认证",
        "WebSocket"
      ],
      "headings": [
        "一、背景",
        "1、完整时序",
        "2、二维码状态机",
        "三、方案对比：PC 端如何感知状态变更",
        "1、方案总览",
        "2、资源消耗对比",
        "3、方案选型结论",
        "1、Maven 依赖配置",
        "2、数据模型",
        "3、Redis 存储设计",
        "4、WebSocket 配置",
        "5、生成二维码",
        "6、手机扫码",
        "7、手机确认登录",
        "8、手机取消登录",
        "9、长轮询降级实现",
        "10、Controller 层",
        "11、Gateway 白名单",
        "1、PC 端：二维码展示 + WebSocket",
        "2、PC 端：Vue 组件",
        "3、手机端：扫码 + 确认流程",
        "4、手机端：确认页面组件",
        "1、威胁模型",
        "2、防御措施",
        "3、安全措施汇总",
        "1、WebSocket 连接断开后状态丢失",
        "2、二维码过期但手机端还在确认",
        "3、用户扫码后不确认也不取消",
        "4、PC 端刷新页面后丢失二维码",
        "5、WebSocket 被防火墙/代理拦截",
        "八、生产环境部署清单",
        "九、方案对比总结",
        "十、参考资料"
      ],
      "excerpt": "对比短轮询、长轮询、WebSocket、SSE 四种扫码登录方案，给出基于 WebSocket + Redis 的企业级实现及安全防御。",
      "characterCount": 4736
    },
    {
      "id": "ai/ai-agent-skill-collect",
      "title": "Skill学习 | 收集",
      "description": "收集实用的 AI Agent Skill，涵盖工程化工作流、技能创建器、技术图表生成等开发辅助工具。",
      "published": "2026-04-12T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/ai/ai-agent-skill-collect/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-agent-skill-collect.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/ai/ai-agent-skill-collect.md",
      "category": "学习文档",
      "tags": [
        "AI",
        "Skill",
        "Agent"
      ],
      "headings": [
        "一、superpowers — 工程化开发工作流",
        "二、skill-creator — 技能创建器",
        "三、fireworks-tech-graph — 技术图表生成",
        "四、addyosmani/agent-skills — 生产级工程技能集",
        "五、mattpocock/skills — 工程师实战技能集"
      ],
      "excerpt": "收集实用的 AI Agent Skill，涵盖工程化工作流、技能创建器、技术图表生成等开发辅助工具。",
      "characterCount": 2099
    },
    {
      "id": "projects/projects-oracle-erp-performance-optimization",
      "title": "Oracle | ERP性能优化",
      "description": "Oracle ERP 因 SHRINK 操作导致聚簇因子恶化的性能排查与优化，涵盖 AWR 分析、索引重建及查询调优。",
      "published": "2025-12-02T00:00:00.000Z",
      "url": "https://hakugyokurou.fun/posts/projects/projects-oracle-erp-performance-optimization/",
      "jsonUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-oracle-erp-performance-optimization.json",
      "markdownUrl": "https://hakugyokurou.fun/wiki/articles/projects/projects-oracle-erp-performance-optimization.md",
      "category": "实践笔记",
      "tags": [
        "Oracle",
        "数据库",
        "性能优化"
      ],
      "headings": [
        "一、背景",
        "1、什么是聚簇因子",
        "2、SHRINK 为什么会恶化 CF",
        "3、恶化后的等待事件",
        "4、聚簇因子检测",
        "1、工具链",
        "2、关键指标",
        "3、定位流程",
        "1、在线表重定义（降低聚簇因子）",
        "1.1 BOM_COMPONENTS_B — 优化等级：🔴 高",
        "1.2 BOM_STRUCTURES_B — 优化等级：🔴 高",
        "1.3 MRP_SCHEDULE_DATES — 优化等级：🟡 低",
        "1.4 MRP_SOURCING_HISTORY — 优化等级：🟡 低",
        "1.5 MRP_SYSTEM_ITEMS — 优化等级：🔴 高",
        "1.6 MTL_ITEM_REVISIONS_B — 优化等级：⚫ 非常低",
        "1.7 MTL_ITEM_REVISIONS_TL — 优化等级：🔴 高",
        "1.8 MTL_SYSTEM_ITEMS_B — 优化等级：🟡 低",
        "1.9 RCV_SHIPMENT_LINES — 优化等级：⚫ 非常低",
        "2.1 RCV_TRANSACTIONS 添加新索引",
        "3、修改存储参数（MRP_SOURCING_HISTORY）",
        "4、核心表缓存至 Keep Pool",
        "1、MRP_SCHEDULE_DATES 频繁增删导致聚簇持续退化",
        "2、SQL 高频执行累计消耗大",
        "3、自治事务频繁提交导致 log file sync 等待",
        "4、视图替代基表导致全表扫描",
        "六、优化效果汇总",
        "七、MRP 性能优化扩展框架",
        "1、数据库基础资源层",
        "2、缓存与共享池层",
        "3、索引与表设计层",
        "4、SQL 执行计划层",
        "5、并发与事务层",
        "6、应用配置层",
        "1、项目一句话定位",
        "2、逻辑链（这是整个项目的叙事骨架）",
        "3、几个值得强调的细节",
        "九、参考资料"
      ],
      "excerpt": "Oracle ERP 因 SHRINK 操作导致聚簇因子恶化的性能排查与优化，涵盖 AWR 分析、索引重建及查询调优。",
      "characterCount": 8931
    }
  ]
}
