{
  "type": "BlogWikiIndex",
  "version": 1,
  "site": "https://catvo.net/",
  "generatedAt": "2026-10-17T03:53:24.690Z",
  "articles": [
    {
      "id": "among-us-mod-anti-crack-hardening",
      "title": "从运行机制谈 Among Us 模组的反破解加固：五层防御体系",
      "description": "以 FinalSuspect 的三重检测被一个 dnSpy + ret 指令组合一次性解除为例，说明托管层检测为何必然失效，并给出由弱到强的五层加固方案：混淆加密、IL 完整性自校验、原生 DLL 检测、分散时机加蜜罐、服务端验证。",
      "published": "2026-07-21T00:00:00.000Z",
      "url": "https://catvo.net/posts/among-us-mod-anti-crack-hardening/",
      "jsonUrl": "https://catvo.net/wiki/articles/among-us-mod-anti-crack-hardening.json",
      "markdownUrl": "https://catvo.net/wiki/articles/among-us-mod-anti-crack-hardening.md",
      "category": "实践笔记",
      "tags": [
        "逆向工程",
        "反破解",
        "Among Us",
        "加固"
      ],
      "headings": [
        "一、为什么现有检测容易被绕过",
        "二、层级 1：混淆 + 字符串加密",
        "三、层级 2：完整性自校验（Anti-Tamper）",
        "四、层级 3：把检测逻辑移到原生层",
        "五、层级 4：分散检测时机 + 蜜罐",
        "六、层级 5：服务端验证（最终形态）",
        "七、各层级对比与选型建议",
        "八、核心原则"
      ],
      "excerpt": "以 FinalSuspect 的三重检测被一个 dnSpy + ret 指令组合一次性解除为例，说明托管层检测为何必然失效，并给出由弱到强的五层加固方案：混淆加密、IL 完整性自校验、原生 DLL 检测、分散时机加蜜罐、服务端验证。",
      "characterCount": 1579
    },
    {
      "id": "finalsuspect-mod-coexist-principle",
      "title": "逆向解析 FinalSuspect 的\"独占运行\"机制：如何让它与其他模组共存",
      "description": "通过 dnSpy 反编译剖析 FinalSuspect 阻止其他模组共存的三重检测机制（Harmony 拦截插件加载、目录扫描强制闪退、伪装类加密暗桩），给出逐层解除方法，以及共存后缺失 YamlDotNet 依赖与更新检查卡死的修复方案。",
      "published": "2026-07-21T00:00:00.000Z",
      "url": "https://catvo.net/posts/finalsuspect-mod-coexist-principle/",
      "jsonUrl": "https://catvo.net/wiki/articles/finalsuspect-mod-coexist-principle.json",
      "markdownUrl": "https://catvo.net/wiki/articles/finalsuspect-mod-coexist-principle.md",
      "category": "实践笔记",
      "tags": [
        "逆向工程",
        "Among Us",
        "BepInEx",
        "Harmony"
      ],
      "headings": [
        "一、检测机制总览",
        "二、第一重：DisableOtherPlugins —— 拦截加载",
        "三、第二重：DllChecker —— 扫描目录并闪退",
        "四、第三重：伪装的 Git 类 —— 加密暗桩",
        "五、修改后的连锁问题",
        "1. 缺少 YamlDotNet 依赖导致无限卡加载",
        "2. 更新检查卡死 / 未响应",
        "六、操作步骤总结",
        "七、注意事项"
      ],
      "excerpt": "通过 dnSpy 反编译剖析 FinalSuspect 阻止其他模组共存的三重检测机制（Harmony 拦截插件加载、目录扫描强制闪退、伪装类加密暗桩），给出逐层解除方法，以及共存后缺失 YamlDotNet 依赖与更新检查卡死的修复方案。",
      "characterCount": 2169
    },
    {
      "id": "hello-world",
      "title": "我的第一篇文章",
      "description": "用后台写的第一篇文章，验证发布链路是否可用。",
      "published": "2026-10-05T14:00:00.000Z",
      "url": "https://catvo.net/posts/hello-world/",
      "jsonUrl": "https://catvo.net/wiki/articles/hello-world.json",
      "markdownUrl": "https://catvo.net/wiki/articles/hello-world.md",
      "category": "实践笔记",
      "tags": [
        "随笔"
      ],
      "headings": [
        "你好，世界"
      ],
      "excerpt": "用后台写的第一篇文章，验证发布链路是否可用。",
      "characterCount": 55
    },
    {
      "id": "ai-rag-ten-strategies",
      "title": "RAG 检索增强生成 10 种策略：分块、混合检索与重排序选型",
      "description": "按 RAG 两阶段流程整理 10 种检索增强生成策略：语义分块、领域 Embedding、元数据索引、Graph RAG、混合检索与重排序，并给出默认选型与升级触发条件。",
      "published": "2026-08-27T00:00:00.000Z",
      "url": "https://catvo.net/posts/ai-rag-ten-strategies/",
      "jsonUrl": "https://catvo.net/wiki/articles/ai-rag-ten-strategies.json",
      "markdownUrl": "https://catvo.net/wiki/articles/ai-rag-ten-strategies.md",
      "category": "学习文档",
      "tags": [
        "AI",
        "RAG",
        "LLM"
      ],
      "headings": [
        "一、引子：RAG 死了吗",
        "二、RAG 总体流程",
        "策略 1：语义分块（Semantic Chunking）",
        "分块增强：上下文增强（Contextual Retrieval）",
        "策略 2：命题分块（Proposition Chunking）",
        "策略 3：领域特化 Embedding",
        "策略 4：结构化索引与元数据过滤",
        "策略 5：Graph RAG（图结构检索）",
        "策略 6：查询改写（Query Transformation）",
        "策略 7：假设文档检索（HyDE）",
        "策略 8：混合检索（Hybrid Search）",
        "策略 9：重排序（Re-ranking）",
        "五、范式升级：策略 10 与组合策略",
        "策略 10：Agentic RAG",
        "组合策略：自适应路由（Adaptive Routing）",
        "六、十种策略速览与选型",
        "七、质量与工程考量",
        "八、结语",
        "九、参考资料"
      ],
      "excerpt": "按 RAG 两阶段流程整理 10 种检索增强生成策略：语义分块、领域 Embedding、元数据索引、Graph RAG、混合检索与重排序，并给出默认选型与升级触发条件。",
      "characterCount": 12618
    },
    {
      "id": "details-web-performance-optimization",
      "title": "前端性能优化十项主流：问题、方法与收益",
      "description": "整理前端与站点性能优化十项主流方法：性能分析、HTTP 缓存、CDN、Nginx 配置、加载策略、图片、字体与 JS 长任务治理，每项说明原因、做法与收益。",
      "published": "2026-08-09T00:00:00.000Z",
      "url": "https://catvo.net/posts/details-web-performance-optimization/",
      "jsonUrl": "https://catvo.net/wiki/articles/details-web-performance-optimization.json",
      "markdownUrl": "https://catvo.net/wiki/articles/details-web-performance-optimization.md",
      "category": "学习文档",
      "tags": [
        "性能优化",
        "Nginx",
        "CDN",
        "HTTP"
      ],
      "headings": [
        "引子",
        "背景知识：度量框架与优化变量",
        "一、性能分析：先测量，再优化",
        "二、HTTP 协议升级：HTTP/2、TLS 1.3 与 HTTP/3",
        "三、传输压缩：gzip、Brotli 与 Zstandard",
        "四、HTTP 缓存：让重复访问零请求",
        "五、CDN：把字节搬到用户旁边",
        "六、Nginx 与服务器配置",
        "七、加载策略：资源提示与关键渲染路径",
        "八、图片优化",
        "九、字体优化",
        "十、JavaScript 执行：长任务治理",
        "实战演示：静态站点的端到端配置",
        "坑 1：HTTP/1.1 时代的优化在 HTTP/2 下反向",
        "坑 2：只看 Lighthouse 分数",
        "坑 3：一次改五项，无法归因",
        "坑 4：HTML 被长缓存",
        "坑 5：Nginx add_header 不继承",
        "优化方法总览",
        "总结",
        "参考资料"
      ],
      "excerpt": "整理前端与站点性能优化十项主流方法：性能分析、HTTP 缓存、CDN、Nginx 配置、加载策略、图片、字体与 JS 长任务治理，每项说明原因、做法与收益。",
      "characterCount": 8467
    },
    {
      "id": "projects-java-thread-pool-configuration",
      "title": "Java 线程池配置指南：核心参数、线程数估算与拒绝策略",
      "description": "Java ThreadPoolExecutor 配置指南，讲解核心参数、CPU/IO 线程数估算、有界队列、拒绝策略、监控告警和动态调优方法。",
      "published": "2026-05-07T00:00:00.000Z",
      "url": "https://catvo.net/posts/projects-java-thread-pool-configuration/",
      "jsonUrl": "https://catvo.net/wiki/articles/projects-java-thread-pool-configuration.json",
      "markdownUrl": "https://catvo.net/wiki/articles/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 配置指南，讲解核心参数、CPU/IO 线程数估算、有界队列、拒绝策略、监控告警和动态调优方法。",
      "characterCount": 3372
    }
  ]
}
