<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Yyago 技术博客</title>
    <link>https://yyago.top/blog</link>
    <description>Yyago 开发者工具箱的技术文章（中英双语）。</description>
    <language>zh-CN</language>
    <atom:link href="https://yyago.top/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Spring Boot 4.2.0-M2 发布：LDAP 接入 SSL Bundle，可观测性对齐 OpenTelemetry</title>
      <link>https://yyago.top/blog/spring-boot-4-2-0-m2-released</link>
      <guid isPermaLink="true">https://yyago.top/blog/spring-boot-4-2-0-m2-released</guid>
      <description>Spring Boot 4.2.0-M2 于 2026 年 9 月 25 日发布，含 141 项改动。本文梳理 LDAP 的 SSL Bundle 支持、OpenTelemetry 语义约定与 OTLP 统一配置，以及从 4.1 升级要处理的 Tomcat 属性迁移、Janino 移除和 Micrometer 约定改名。</description>
      <pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Spring Boot 4.2.0-M2 Released: SSL Bundle Support for LDAP and OpenTelemetry Conventions</title>
      <link>https://yyago.top/en/blog/spring-boot-4-2-0-m2-released</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/spring-boot-4-2-0-m2-released</guid>
      <description>Spring Boot 4.2.0-M2, released on September 25, 2026, ships 141 changes. This article covers SSL bundle support for LDAP, OpenTelemetry semantic conventions and unified OTLP configuration, plus the Tomcat property moves, Janino removal and Micrometer convention renames you need to handle when upgrading from 4.1.</description>
      <pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>Spring Framework 7.0.9 发布：SpEL 编译默认关闭，转发头必须明确表态</title>
      <link>https://yyago.top/blog/spring-framework-7-0-9-released</link>
      <guid isPermaLink="true">https://yyago.top/blog/spring-framework-7-0-9-released</guid>
      <description>Spring Framework 7.0.9 于 2026 年 8 月 20 日发布，是 7.0.x 的收尾版本。本文解读 SpEL 编译默认关闭的原因与应对、Forwarded 与 X-Forwarded-* 二选一的影响，以及内存泄漏与高并发稳定性的修复。</description>
      <pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Spring Framework 7.0.9 Released: SpEL Compilation Off by Default, Forwarded Headers Need an Explicit Choice</title>
      <link>https://yyago.top/en/blog/spring-framework-7-0-9-released</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/spring-framework-7-0-9-released</guid>
      <description>Spring Framework 7.0.9, released on August 20, 2026, closes out the 7.0.x line. This article explains why SpEL compilation is now disabled by default and what to do about it, why you must now choose between Forwarded and X-Forwarded-*, and which memory-leak and concurrency fixes landed.</description>
      <pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>Jev 是什么：不写字的 AI 决策模型</title>
      <link>https://yyago.top/blog/jev-decision-model-explained</link>
      <guid isPermaLink="true">https://yyago.top/blog/jev-decision-model-explained</guid>
      <description>Jev 不生成文字，只把「判断」变成软件能直接用的结构化结果。用大白话讲清它是什么、为什么会出现、能拿来做什么，以及哪些场景不该用它。</description>
      <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>What Is Jev: An AI Decision Model That Does Not Write</title>
      <link>https://yyago.top/en/blog/jev-decision-model-explained</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/jev-decision-model-explained</guid>
      <description>Jev generates no text: it turns decisions into structured values software can use directly. What it is, why it appeared, and when not to use it.</description>
      <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>Java 27 新特性详解：9 个 JEP 与升级影响</title>
      <link>https://yyago.top/blog/java-27-whats-new</link>
      <guid isPermaLink="true">https://yyago.top/blog/java-27-whats-new</guid>
      <description>Java 27（2026-09-15 GA，JSR 402）带来 9 个 JEP：G1 全环境默认、紧凑对象头、后量子 TLS、惰性常量与基本类型模式匹配等。逐项拆解新特性、废弃与移除项，以及升级时的兼容性注意。</description>
      <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Java 27 in Depth: The 9 JEPs and Their Impact</title>
      <link>https://yyago.top/en/blog/java-27-whats-new</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/java-27-whats-new</guid>
      <description>Java 27 (GA 2026-09-15, JSR 402) ships nine JEPs: G1 as the default GC everywhere, compact object headers, post-quantum TLS, lazy constants and primitive pattern matching. A developer-focused breakdown with migration notes.</description>
      <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>本地大模型 vs 云端 API：隐私、成本与能力的取舍</title>
      <link>https://yyago.top/blog/local-llm-vs-cloud-api-tradeoffs</link>
      <guid isPermaLink="true">https://yyago.top/blog/local-llm-vs-cloud-api-tradeoffs</guid>
      <description>没有普遍最优解，只有与场景匹配的解。按隐私、能力、成本、运维四个维度对比，并给出混合方案的落地路径。</description>
      <pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Local LLM vs Cloud API: Privacy, Cost and Capability Trade-offs</title>
      <link>https://yyago.top/en/blog/local-llm-vs-cloud-api-tradeoffs</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/local-llm-vs-cloud-api-tradeoffs</guid>
      <description>There is no universally best option, only a scenario-matched one. Compare privacy, capability, cost and ops, plus a practical hybrid path.</description>
      <pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>RAG 与上下文窗口：让模型只看见需要的知识</title>
      <link>https://yyago.top/blog/rag-and-context-window-basics</link>
      <guid isPermaLink="true">https://yyago.top/blog/rag-and-context-window-basics</guid>
      <description>模型不知道你的内部文档，也不了解最近发生的事。讲清检索增强的最小流程、上下文窗口的取舍与五个常见坑。</description>
      <pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>RAG and Context Windows: Show the Model Only What It Needs</title>
      <link>https://yyago.top/en/blog/rag-and-context-window-basics</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/rag-and-context-window-basics</guid>
      <description>A model does not know your internal docs or recent events. The minimal RAG pipeline, context-window trade-offs, and five common pitfalls.</description>
      <pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>结构化提示与输出约束：让模型输出可直接被程序消费</title>
      <link>https://yyago.top/blog/structured-prompts-and-output-constraints</link>
      <guid isPermaLink="true">https://yyago.top/blog/structured-prompts-and-output-constraints</guid>
      <description>同一句话换个模型结果就变？问题往往出在需求没有被约束。讲清角色、任务、上下文、约束、输出格式五模块与少样本技巧。</description>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Structured Prompts and Output Constraints for Machine-Usable Output</title>
      <link>https://yyago.top/en/blog/structured-prompts-and-output-constraints</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/structured-prompts-and-output-constraints</guid>
      <description>Same prompt, different result? The requirement was never constrained. Five prompt modules, few-shot examples, and hard output rules.</description>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>AI 幻觉与结果校验：六步清单挡住「看似正确的错误」</title>
      <link>https://yyago.top/blog/ai-hallucination-verification-checklist</link>
      <guid isPermaLink="true">https://yyago.top/blog/ai-hallucination-verification-checklist</guid>
      <description>幻觉无法被提示词彻底消除。讲清四类高发场景与六步校验清单，让模型负责候选、让工具与人负责确认。</description>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>AI Hallucination and Verification: A Six-Step Checklist</title>
      <link>https://yyago.top/en/blog/ai-hallucination-verification-checklist</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/ai-hallucination-verification-checklist</guid>
      <description>Hallucination cannot be prompted away. Four high-risk scenarios and a six-step checklist: models propose, tools and humans confirm.</description>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>AI 编程助手的正确用法：把它当结对伙伴，而不是答案机器</title>
      <link>https://yyago.top/blog/ai-pair-programming-workflow</link>
      <guid isPermaLink="true">https://yyago.top/blog/ai-pair-programming-workflow</guid>
      <description>复制粘贴就算用上 AI 了？讲清把大模型变成结对伙伴的四步流程：给足上下文、拆解任务、要求依据、逐条验证。</description>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>AI Coding Assistants: A Pair Programmer, Not an Answer Machine</title>
      <link>https://yyago.top/en/blog/ai-pair-programming-workflow</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/ai-pair-programming-workflow</guid>
      <description>Copy-pasting is not &quot;using AI&quot;. A four-step workflow for turning an LLM into a pair programmer: context, decomposition, evidence, verification.</description>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>API 幂等、重试与超时：让失败变得可控</title>
      <link>https://yyago.top/blog/api-idempotency-retry-and-timeouts</link>
      <guid isPermaLink="true">https://yyago.top/blog/api-idempotency-retry-and-timeouts</guid>
      <description>重试把一次抖动放大成雪崩，多半是因为缺了幂等与预算。讲清三层超时、该重试哪些错误、指数退避抖动与幂等键设计。</description>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>API Idempotency, Retries and Timeouts: Making Failure Predictable</title>
      <link>https://yyago.top/en/blog/api-idempotency-retry-and-timeouts</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/api-idempotency-retry-and-timeouts</guid>
      <description>Retries turn a blip into an avalanche when idempotency and budgets are missing. Three timeout layers, retryable errors, jittered backoff, idempotency keys.</description>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>机房 IP 线路解析：CN2 / 163 / 9929 / CMI 到底指什么</title>
      <link>https://yyago.top/blog/datacenter-ip-route-analysis</link>
      <guid isPermaLink="true">https://yyago.top/blog/datacenter-ip-route-analysis</guid>
      <description>同是海外机房，体验却差很多。看懂 traceroute 里的 ASN，就能判断走的是 CN2、163、9929 还是 CMI 线路。</description>
      <pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>IP Route Analysis: What CN2 / 163 / 9929 / CMI Mean</title>
      <link>https://yyago.top/en/blog/datacenter-ip-route-analysis</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/datacenter-ip-route-analysis</guid>
      <description>Not all datacenter routes perform the same. Reading the ASNs in a traceroute tells you whether traffic uses CN2, 163, 9929 or CMI.</description>
      <pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>Git 日常操作与四类常见事故的恢复方法</title>
      <link>https://yyago.top/blog/git-everyday-and-recovery</link>
      <guid isPermaLink="true">https://yyago.top/blog/git-everyday-and-recovery</guid>
      <description>提交错分支、误删分支、改动被覆盖怎么办？讲清 reflog 的恢复思路、日常高频命令与团队协作的三条底线。</description>
      <pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Everyday Git and Recovering from Four Common Accidents</title>
      <link>https://yyago.top/en/blog/git-everyday-and-recovery</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/git-everyday-and-recovery</guid>
      <description>Wrong branch, deleted branch, overwritten work? Recovery through reflog, everyday commands, and three rules for teams.</description>
      <pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>进制转换其实很直观：二进制、十六进制与颜色代码</title>
      <link>https://yyago.top/blog/number-base-conversion</link>
      <guid isPermaLink="true">https://yyago.top/blog/number-base-conversion</guid>
      <description>“按权展开”一句话讲透进制转换，看懂 #FF5733 这类颜色代码的进制本质，附大数与浮点转换的常见坑。</description>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Number Bases Made Intuitive: Binary, Hex and Color Codes</title>
      <link>https://yyago.top/en/blog/number-base-conversion</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/number-base-conversion</guid>
      <description>Positional notation explains every base conversion in one idea, and why #FF5733 is just hex. Big-number and float pitfalls included.</description>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>HTTP 状态码与缓存头：实用速查与一套可套用的策略</title>
      <link>https://yyago.top/blog/http-status-codes-and-caching</link>
      <guid isPermaLink="true">https://yyago.top/blog/http-status-codes-and-caching</guid>
      <description>401 与 403 有什么区别？301 和 308 呢？讲清状态码易混点、四种缓存头，以及静态资源/HTML/API 各自的缓存策略。</description>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>HTTP Status Codes and Caching Headers: A Practical Guide</title>
      <link>https://yyago.top/en/blog/http-status-codes-and-caching</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/http-status-codes-and-caching</guid>
      <description>401 vs 403? 301 vs 308? Status code confusions, four caching headers, and ready-to-use strategies for assets, HTML and APIs.</description>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>图片发出去之前，先打个水印</title>
      <link>https://yyago.top/blog/image-watermark-protect</link>
      <guid isPermaLink="true">https://yyago.top/blog/image-watermark-protect</guid>
      <description>水印不只是防搬运：署名、溯源、品牌曝光都靠它。讲清水印样式怎么选，以及上传前的隐私清理。</description>
      <pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Add a Watermark Before You Share Images</title>
      <link>https://yyago.top/en/blog/image-watermark-protect</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/image-watermark-protect</guid>
      <description>Watermarks do more than stop reposting: attribution, tracing and branding. Choosing a style and cleaning privacy data before upload.</description>
      <pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>正则表达式实用配方与四个常见陷阱</title>
      <link>https://yyago.top/blog/regex-practical-recipes</link>
      <guid isPermaLink="true">https://yyago.top/blog/regex-practical-recipes</guid>
      <description>从邮箱、手机号到日志去重的可复用配方，讲清贪婪与懒惰、分组、环视与灾难性回溯，以及什么时候不该用正则。</description>
      <pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Practical Regex Recipes and Four Common Traps</title>
      <link>https://yyago.top/en/blog/regex-practical-recipes</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/regex-practical-recipes</guid>
      <description>Reusable recipes for emails, phone numbers and log dedup, plus greedy vs lazy, groups, lookaround, catastrophic backtracking, and when not to use regex.</description>
      <pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>Unix 时间戳入门：秒与毫秒、UTC 与时区的正确打开方式</title>
      <link>https://yyago.top/blog/unix-timestamp-and-timezones</link>
      <guid isPermaLink="true">https://yyago.top/blog/unix-timestamp-and-timezones</guid>
      <description>10 位还是 13 位？时间戳为什么不随时区变？讲清 Unix 时间戳的原理、常见格式差异与时区转换的坑。</description>
      <pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Unix Timestamps 101: Seconds vs Milliseconds, UTC and Timezones</title>
      <link>https://yyago.top/en/blog/unix-timestamp-and-timezones</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/unix-timestamp-and-timezones</guid>
      <description>Ten digits or thirteen? Why timestamps never change with timezones? How Unix time works and where conversions go wrong.</description>
      <pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>字符编码与 UTF-8：乱码的根源与排查方法</title>
      <link>https://yyago.top/blog/utf8-and-mojibake-root-causes</link>
      <guid isPermaLink="true">https://yyago.top/blog/utf8-and-mojibake-root-causes</guid>
      <description>乱码不是数据丢了，而是字节被按错误的规则解读。讲清字符集/编码/字节序的区别、常见乱码形态与四步排查法。</description>
      <pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Character Encoding and UTF-8: Why Text Turns into Gibberish</title>
      <link>https://yyago.top/en/blog/utf8-and-mojibake-root-causes</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/utf8-and-mojibake-root-causes</guid>
      <description>Mojibake is not lost data, it is bytes read with the wrong rule. Character sets vs encodings vs byte order, common symptoms, and a four-step fix.</description>
      <pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>URL 编码什么时候需要？%20、+ 与中文乱码的来龙去脉</title>
      <link>https://yyago.top/blog/url-encoding-when-and-why</link>
      <guid isPermaLink="true">https://yyago.top/blog/url-encoding-when-and-why</guid>
      <description>为什么空格会变成 %20 或加号？encodeURI 与 encodeURIComponent 差在哪？讲清 URL 编码的时机与乱码根源。</description>
      <pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>URL Encoding: When You Need It, and Where %20 and + Come From</title>
      <link>https://yyago.top/en/blog/url-encoding-when-and-why</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/url-encoding-when-and-why</guid>
      <description>Why does a space become %20 or a plus sign? The difference between encodeURI and encodeURIComponent, and the root of mojibake.</description>
      <pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>如何校验下载文件的完整性（SHA-256 实操）</title>
      <link>https://yyago.top/blog/verify-file-integrity-sha256</link>
      <guid isPermaLink="true">https://yyago.top/blog/verify-file-integrity-sha256</guid>
      <description>下载安装包或镜像后，三步校验 SHA-256，确认文件没有损坏、也没有被篡改，以及最常见的比对误区。</description>
      <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>How to Verify File Integrity with SHA-256</title>
      <link>https://yyago.top/en/blog/verify-file-integrity-sha256</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/verify-file-integrity-sha256</guid>
      <description>Three steps to verify the SHA-256 checksum of a downloaded file, plus the most common comparison mistakes.</description>
      <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>JSON 总是报错？90% 的人栽在这 4 个细节</title>
      <link>https://yyago.top/blog/json-format-and-validate</link>
      <guid isPermaLink="true">https://yyago.top/blog/json-format-and-validate</guid>
      <description>尾逗号、单引号、注释、键没加引号，JSON 校验失败的高频原因一次讲清，并附快速排查思路。</description>
      <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>JSON Keeps Failing? Four Details That Trip Everyone</title>
      <link>https://yyago.top/en/blog/json-format-and-validate</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/json-format-and-validate</guid>
      <description>Trailing commas, single quotes, comments, unquoted keys, the usual reasons JSON validation fails, plus a fast debugging routine.</description>
      <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>强密码的真相：长度比复杂度更重要</title>
      <link>https://yyago.top/blog/strong-password-length-over-complexity</link>
      <guid isPermaLink="true">https://yyago.top/blog/strong-password-length-over-complexity</guid>
      <description>加符号不一定更强。决定密码强度的是熵，而熵主要由“长度 × 字符集”决定。附实用的密码原则与常见误区。</description>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Strong Passwords: Why Length Beats Complexity</title>
      <link>https://yyago.top/en/blog/strong-password-length-over-complexity</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/strong-password-length-over-complexity</guid>
      <description>Adding symbols is not always stronger. Password strength is about entropy, and length matters most. Practical rules and myths.</description>
      <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>Cron 表达式完全指南：5 段与 6 段、日与周的坑</title>
      <link>https://yyago.top/blog/cron-expression-guide</link>
      <guid isPermaLink="true">https://yyago.top/blog/cron-expression-guide</guid>
      <description>分 时 日 月 周，还是 秒 分 时 日 月 周？“日”和“周”同时指定会发生什么？讲清 Cron 的格式差异与高频错误。</description>
      <pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Cron Expressions Explained: 5 vs 6 Fields and Pitfalls</title>
      <link>https://yyago.top/en/blog/cron-expression-guide</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/cron-expression-guide</guid>
      <description>Five fields or six? What happens when day-of-month and day-of-week are both set? Cron formats and frequent mistakes.</description>
      <pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>Base64 不是加密：编码与加密到底差在哪</title>
      <link>https://yyago.top/blog/base64-vs-encryption</link>
      <guid isPermaLink="true">https://yyago.top/blog/base64-vs-encryption</guid>
      <description>把密码 Base64 一下就安全了？这是最常见的误解之一。一文讲清编码、加密、哈希的本质区别与适用场景。</description>
      <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Base64 Is Not Encryption: Encoding vs Encryption</title>
      <link>https://yyago.top/en/blog/base64-vs-encryption</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/base64-vs-encryption</guid>
      <description>Encoding your password with Base64 does not make it safe. The real difference between encoding, encryption and hashing.</description>
      <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>一次 IP 查询能暴露多少信息（以及查不到什么）</title>
      <link>https://yyago.top/blog/what-your-ip-reveals</link>
      <guid isPermaLink="true">https://yyago.top/blog/what-your-ip-reveals</guid>
      <description>IP 能定位到你家门口吗？能查到姓名吗？讲清 IP 查询的真实能力边界，以及常见的隐私误解与应对。</description>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>What an IP Lookup Reveals, and What It Cannot</title>
      <link>https://yyago.top/en/blog/what-your-ip-reveals</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/what-your-ip-reveals</guid>
      <description>Can an IP locate your doorstep or reveal your name? The real limits of IP lookups, plus common privacy misconceptions.</description>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>提升 OCR 识别率的 7 个实操技巧</title>
      <link>https://yyago.top/blog/improve-ocr-accuracy</link>
      <guid isPermaLink="true">https://yyago.top/blog/improve-ocr-accuracy</guid>
      <description>识别率低不一定是引擎不行：分辨率、倾斜、对比度、语言包都会显著影响结果。附可立即执行的优化清单。</description>
      <pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Seven Practical Ways to Improve OCR Accuracy</title>
      <link>https://yyago.top/en/blog/improve-ocr-accuracy</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/improve-ocr-accuracy</guid>
      <description>Poor accuracy is rarely the engine alone: resolution, skew, contrast and language packs all matter. A checklist you can apply today.</description>
      <pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>JWT 的三段结构里装了什么（以及三个致命误区）</title>
      <link>https://yyago.top/blog/jwt-structure-and-pitfalls</link>
      <guid isPermaLink="true">https://yyago.top/blog/jwt-structure-and-pitfalls</guid>
      <description>JWT 不是加密的：任何拿到它的人都能读出载荷。讲清三段结构、签名与加密的区别，以及绝对不该放什么。</description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>What Is Really Inside a JWT (and Three Fatal Mistakes)</title>
      <link>https://yyago.top/en/blog/jwt-structure-and-pitfalls</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/jwt-structure-and-pitfalls</guid>
      <description>A JWT is not encrypted: anyone holding it can read the payload. Its three segments, signing vs encryption, and what never to put inside.</description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>HTTPS 握手到底做了什么：对称、非对称与哈希的分工</title>
      <link>https://yyago.top/blog/https-tls-handshake-explained</link>
      <guid isPermaLink="true">https://yyago.top/blog/https-tls-handshake-explained</guid>
      <description>一次 HTTPS 连接背后有三种密码学分工：非对称交换密钥、对称加密数据、哈希校验完整性。逐段拆解握手流程。</description>
      <pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>What the TLS Handshake Actually Does: Symmetric, Asymmetric and Hashing</title>
      <link>https://yyago.top/en/blog/https-tls-handshake-explained</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/https-tls-handshake-explained</guid>
      <description>Three kinds of crypto work together in every HTTPS connection: asymmetric key exchange, symmetric encryption, hashing. Step by step.</description>
      <pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>RSA 还是 ECC？非对称加密的选择与常见误用</title>
      <link>https://yyago.top/blog/rsa-vs-ecc-asymmetric-choices</link>
      <guid isPermaLink="true">https://yyago.top/blog/rsa-vs-ecc-asymmetric-choices</guid>
      <description>非对称加密不用于加密大文件。讲清密钥长度对照、RSA 与 ECC 的取舍，以及加密与签名的分工。</description>
      <pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>RSA or ECC? Choosing Asymmetric Crypto and Avoiding Misuse</title>
      <link>https://yyago.top/en/blog/rsa-vs-ecc-asymmetric-choices</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/rsa-vs-ecc-asymmetric-choices</guid>
      <description>Asymmetric crypto is not for bulk data. Key-size equivalents, RSA vs ECC trade-offs, and the split between encryption and signing.</description>
      <pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>AES 加密实操：模式、IV 与认证加密的区别</title>
      <link>https://yyago.top/blog/aes-modes-iv-authenticated-encryption</link>
      <guid isPermaLink="true">https://yyago.top/blog/aes-modes-iv-authenticated-encryption</guid>
      <description>AES 本身只是分组算法，选错模式或复用 IV 会让加密形同虚设。讲清 GCM、CBC 的差别与正确用法。</description>
      <pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>AES in Practice: Modes, IVs and Authenticated Encryption</title>
      <link>https://yyago.top/en/blog/aes-modes-iv-authenticated-encryption</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/aes-modes-iv-authenticated-encryption</guid>
      <description>AES is just a block cipher: the wrong mode or a reused IV breaks it. How GCM and CBC differ, and how to use them correctly.</description>
      <pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>口令不能直接存：加盐、慢哈希与彩虹表</title>
      <link>https://yyago.top/blog/password-storage-salting-and-slow-hashing</link>
      <guid isPermaLink="true">https://yyago.top/blog/password-storage-salting-and-slow-hashing</guid>
      <description>用 SHA-256 存密码为什么还不够？加盐解决什么、慢哈希解决什么，以及 bcrypt / Argon2 参数怎么选。</description>
      <pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Never Store Passwords Directly: Salting, Slow Hashing and Rainbow Tables</title>
      <link>https://yyago.top/en/blog/password-storage-salting-and-slow-hashing</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/password-storage-salting-and-slow-hashing</guid>
      <description>Why SHA-256 is not enough for password storage: what salting fixes, what slow hashing fixes, and how to size bcrypt/Argon2.</description>
      <pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>UUID 该用哪个版本？v1、v4、v7 与不该用 UUID 的场景</title>
      <link>https://yyago.top/blog/uuid-versions-and-when-not-to-use</link>
      <guid isPermaLink="true">https://yyago.top/blog/uuid-versions-and-when-not-to-use</guid>
      <description>UUID 不等于随机字符串。v1/v4/v7 的时间性与泄漏风险不同，用作主键时的性能差异也很大。</description>
      <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Which UUID Version? v1, v4, v7 and When Not to Use One</title>
      <link>https://yyago.top/en/blog/uuid-versions-and-when-not-to-use</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/uuid-versions-and-when-not-to-use</guid>
      <description>A UUID is not just a random string. v1, v4 and v7 differ in time semantics, information leakage and index performance.</description>
      <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>颜色格式入门：HEX、RGB、HSL 与无障碍对比度</title>
      <link>https://yyago.top/blog/color-formats-accessibility</link>
      <guid isPermaLink="true">https://yyago.top/blog/color-formats-accessibility</guid>
      <description>同一个颜色为什么有三种写法？什么时候该用 HSL，什么时候必须看对比度？附 WCAG 对比度速查与实操建议。</description>
      <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Colour Formats 101: HEX, RGB, HSL and Accessible Contrast</title>
      <link>https://yyago.top/en/blog/color-formats-accessibility</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/color-formats-accessibility</guid>
      <description>Why does one colour have three notations? When HSL helps most, when contrast matters, plus a WCAG cheat sheet.</description>
      <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>本地处理 vs 上传服务器：为什么本地工具更安全</title>
      <link>https://yyago.top/blog/browser-local-processing-privacy</link>
      <guid isPermaLink="true">https://yyago.top/blog/browser-local-processing-privacy</guid>
      <description>把文件传给网站，和让浏览器自己算，安全边界完全不同。讲清两种架构的风险差异与判断方法。</description>
      <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Local vs Server Processing: Why Browser-Only Tools Are Safer</title>
      <link>https://yyago.top/en/blog/browser-local-processing-privacy</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/browser-local-processing-privacy</guid>
      <description>Uploading a file to a server and computing it in your browser have very different security boundaries. Comparing both architectures.</description>
      <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>测试金字塔：单元测试该占大头</title>
      <link>https://yyago.top/blog/testing-pyramid-basics</link>
      <guid isPermaLink="true">https://yyago.top/blog/testing-pyramid-basics</guid>
      <description>为什么大量 UI 端到端测试又慢又脆。讲清单元 / 集成 / 端到端的比例，以及该把力气花在哪。</description>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>The Testing Pyramid: Unit Tests Should Dominate</title>
      <link>https://yyago.top/en/blog/testing-pyramid-basics</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/testing-pyramid-basics</guid>
      <description>Why piles of UI end-to-end tests are slow and flaky. The unit / integration / e2e ratio and where to spend effort.</description>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>镜像与容器：Docker 里这两个不是一回事</title>
      <link>https://yyago.top/blog/docker-image-vs-container</link>
      <guid isPermaLink="true">https://yyago.top/blog/docker-image-vs-container</guid>
      <description>镜像只读、容器是运行实例。讲清分层、体积优化，以及为什么「数据要放卷里」。</description>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Image vs Container: They Are Not the Same in Docker</title>
      <link>https://yyago.top/en/blog/docker-image-vs-container</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/docker-image-vs-container</guid>
      <description>An image is read-only, a container is a running instance. Layers, size optimization, and why data belongs in volumes.</description>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>可观测性的三件套：日志、指标、链路</title>
      <link>https://yyago.top/blog/observability-logs-metrics-traces</link>
      <guid isPermaLink="true">https://yyago.top/blog/observability-logs-metrics-traces</guid>
      <description>出问题先看得见。讲清日志 / 指标 / 链路追踪各自的职责，以及如何用它们快速定位故障。</description>
      <pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Observability Three Signals: Logs, Metrics, Traces</title>
      <link>https://yyago.top/en/blog/observability-logs-metrics-traces</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/observability-logs-metrics-traces</guid>
      <description>You cannot fix what you cannot see. The distinct roles of logs, metrics and traces, and how to pinpoint failures fast.</description>
      <pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>CORS 到底在拦什么：同源与预检</title>
      <link>https://yyago.top/blog/cors-explained</link>
      <guid isPermaLink="true">https://yyago.top/blog/cors-explained</guid>
      <description>浏览器为什么会拦跨域请求？讲清同源策略、简单请求与预检，以及常见错误配置。</description>
      <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>What CORS Actually Blocks: Same-Origin and Preflight</title>
      <link>https://yyago.top/en/blog/cors-explained</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/cors-explained</guid>
      <description>Why the browser blocks cross-origin requests. Same-origin policy, simple requests vs preflight, and common misconfigurations.</description>
      <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>开发者该懂的数据隐私底线</title>
      <link>https://yyago.top/blog/data-privacy-basics</link>
      <guid isPermaLink="true">https://yyago.top/blog/data-privacy-basics</guid>
      <description>最小收集、该加密的不明文、可被遗忘。讲清合规不是法务的事，而是从数据建模就开始的设计。</description>
      <pubDate>Wed, 11 Feb 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Data Privacy Basics Every Developer Should Know</title>
      <link>https://yyago.top/en/blog/data-privacy-basics</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/data-privacy-basics</guid>
      <description>Collect minimally, don't store secrets in plaintext, support erasure. Compliance is not just legal's job; it starts at data modeling.</description>
      <pubDate>Wed, 11 Feb 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>API 版本怎么管理：URL、请求头还是不版本</title>
      <link>https://yyago.top/blog/api-versioning-strategies</link>
      <guid isPermaLink="true">https://yyago.top/blog/api-versioning-strategies</guid>
      <description>改了接口怎么不坑老用户？对比 URL / 请求头 / 媒体类型三种版本策略，以及弃用与迁移的节奏。</description>
      <pubDate>Wed, 21 Jan 2026 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>How to Version an API: URL, Header, or None</title>
      <link>https://yyago.top/en/blog/api-versioning-strategies</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/api-versioning-strategies</guid>
      <description>How to change an API without breaking old clients. URL vs header vs media-type versioning, plus deprecation and migration cadence.</description>
      <pubDate>Wed, 21 Jan 2026 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>正则的灾难性回溯：一个能拖垮服务的写法</title>
      <link>https://yyago.top/blog/regex-catastrophic-backtracking</link>
      <guid isPermaLink="true">https://yyago.top/blog/regex-catastrophic-backtracking</guid>
      <description>某些正则遇到特定输入会指数级变慢。讲清嵌套量词为何危险、如何识别与规避，以及超时兜底。</description>
      <pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Catastrophic Regex Backtracking: One Pattern That Can Down Your Service</title>
      <link>https://yyago.top/en/blog/regex-catastrophic-backtracking</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/regex-catastrophic-backtracking</guid>
      <description>Some patterns explode exponentially on certain input. Why nested quantifiers are dangerous, how to spot and avoid them, plus a timeout fallback.</description>
      <pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>UUID 与随机标识符：能当主键吗</title>
      <link>https://yyago.top/blog/uuid-and-random-identifiers</link>
      <guid isPermaLink="true">https://yyago.top/blog/uuid-and-random-identifiers</guid>
      <description>UUID v4 随机、v1 带时间。讲清它适合作主键的优缺点，以及为什么它「不唯一」不等于「可预测」。</description>
      <pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>UUIDs and Random IDs: Can They Be Primary Keys</title>
      <link>https://yyago.top/en/blog/uuid-and-random-identifiers</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/uuid-and-random-identifiers</guid>
      <description>UUID v4 is random, v1 carries time. Pros and cons as a primary key, and why &quot;not unique&quot; is not the same as &quot;guessable&quot;.</description>
      <pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>RGB / HEX / HSL 怎么互相转换</title>
      <link>https://yyago.top/blog/color-models-rgb-hex-hsl</link>
      <guid isPermaLink="true">https://yyago.top/blog/color-models-rgb-hex-hsl</guid>
      <description>三种颜色表示各管什么用。讲清 HEX 只是 RGB 的十六进制写法，HSL 为什么更适合调色，以及透明度怎么表示。</description>
      <pubDate>Wed, 19 Nov 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>How RGB / HEX / HSL Convert</title>
      <link>https://yyago.top/en/blog/color-models-rgb-hex-hsl</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/color-models-rgb-hex-hsl</guid>
      <description>What each color model is for. HEX is just RGB in hex, why HSL is better for tweaking, and how alpha is represented.</description>
      <pubDate>Wed, 19 Nov 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>CIDR 与子网：看懂 192.168.1.0/24</title>
      <link>https://yyago.top/blog/understanding-cidr-and-subnets</link>
      <guid isPermaLink="true">https://yyago.top/blog/understanding-cidr-and-subnets</guid>
      <description>斜杠后面的数字是什么意思？讲清子网掩码、私有地址段，以及怎么判断两个 IP 是否同网段。</description>
      <pubDate>Wed, 29 Oct 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>CIDR and Subnets: Reading 192.168.1.0/24</title>
      <link>https://yyago.top/en/blog/understanding-cidr-and-subnets</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/understanding-cidr-and-subnets</guid>
      <description>What the number after the slash means: subnet masks, private ranges, and how to tell if two IPs are on the same network.</description>
      <pubDate>Wed, 29 Oct 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>缓存失效为什么难：键、TTL 与击穿</title>
      <link>https://yyago.top/blog/cache-invalidation-basics</link>
      <guid isPermaLink="true">https://yyago.top/blog/cache-invalidation-basics</guid>
      <description>缓存能扛流量，也能制造脏数据。讲清缓存键设计、TTL 策略、穿透/击穿/雪崩三种坑。</description>
      <pubDate>Wed, 08 Oct 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Why Cache Invalidation Is Hard: Keys, TTL and Stampede</title>
      <link>https://yyago.top/en/blog/cache-invalidation-basics</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/cache-invalidation-basics</guid>
      <description>Caches absorb load but also serve stale data. Cache-key design, TTL strategy, and the three failure modes: penetration, stampede, avalanche.</description>
      <pubDate>Wed, 08 Oct 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>SQL 注入依然排名第一：参数化查询才是根因解</title>
      <link>https://yyago.top/blog/sql-injection-still-matters</link>
      <guid isPermaLink="true">https://yyago.top/blog/sql-injection-still-matters</guid>
      <description>拼接 SQL 是最高频的入侵入口。讲清注入原理、参数化查询为什么有效，以及 ORM 和转义的边界。</description>
      <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>SQL Injection Still Ranks #1: Parameterized Queries Are the Fix</title>
      <link>https://yyago.top/en/blog/sql-injection-still-matters</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/sql-injection-still-matters</guid>
      <description>String-built SQL is the most common breach entry. How injection works, why parameterized queries win, and the limits of ORMs and escaping.</description>
      <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>Base64 是编码不是加密：何时该用</title>
      <link>https://yyago.top/blog/base64-when-and-when-not</link>
      <guid isPermaLink="true">https://yyago.top/blog/base64-when-and-when-not</guid>
      <description>把二进制塞进文本通道时才用 Base64。讲清它不保密、体积会变大，以及常见的误用场景。</description>
      <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Base64 Is Encoding, Not Encryption: When to Use It</title>
      <link>https://yyago.top/en/blog/base64-when-and-when-not</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/base64-when-and-when-not</guid>
      <description>Use Base64 only to put binary into a text channel. It is not secret, it grows the size, and here is where it is misused.</description>
      <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>密码为什么不能直接哈希：加盐与慢哈希</title>
      <link>https://yyago.top/blog/password-hashing-and-salting</link>
      <guid isPermaLink="true">https://yyago.top/blog/password-hashing-and-salting</guid>
      <description>MD5 / SHA 不适合存密码。讲清加盐、bcrypt / Argon2 的慢哈希思路，以及「忘记密码」和「泄露后」该做什么。</description>
      <pubDate>Wed, 06 Aug 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Why You Never Hash Passwords Plain: Salting and Slow Hashes</title>
      <link>https://yyago.top/en/blog/password-hashing-and-salting</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/password-hashing-and-salting</guid>
      <description>MD5 / SHA are wrong for password storage. Salting and slow hashes like bcrypt / Argon2, plus what to do on a leak.</description>
      <pubDate>Wed, 06 Aug 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>用 JSON Schema 给接口入参把关</title>
      <link>https://yyago.top/blog/json-schema-validation-basics</link>
      <guid isPermaLink="true">https://yyago.top/blog/json-schema-validation-basics</guid>
      <description>入参不校验，bug 和注入都从这儿进。讲清 JSON Schema 能做什么、required/类型/格式的边界，以及它在哪一层最合适。</description>
      <pubDate>Wed, 16 Jul 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Guarding API Input with JSON Schema</title>
      <link>https://yyago.top/en/blog/json-schema-validation-basics</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/json-schema-validation-basics</guid>
      <description>Unvalidated input is where bugs and injection enter. What JSON Schema can and cannot do, plus where in the stack to apply it.</description>
      <pubDate>Wed, 16 Jul 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>HTTPS 与 TLS 到底在保护什么</title>
      <link>https://yyago.top/blog/understanding-https-and-tls-basics</link>
      <guid isPermaLink="true">https://yyago.top/blog/understanding-https-and-tls-basics</guid>
      <description>HTTPS 不是新协议，而是 HTTP 加 TLS。讲清证书验证的三件事、常见误解，以及为什么内网也该上 HTTPS。</description>
      <pubDate>Wed, 25 Jun 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>What HTTPS and TLS Actually Protect</title>
      <link>https://yyago.top/en/blog/understanding-https-and-tls-basics</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/understanding-https-and-tls-basics</guid>
      <description>HTTPS is HTTP plus TLS, not a new protocol. What certificate validation checks, common myths, and why internal traffic needs it too.</description>
      <pubDate>Wed, 25 Jun 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>用大模型做代码评审的清单</title>
      <link>https://yyago.top/blog/ai-code-review-checklist</link>
      <guid isPermaLink="true">https://yyago.top/blog/ai-code-review-checklist</guid>
      <description>让评审有用而不是凑数：给足上下文、限定输出格式、区分确定的问题与猜测，以及私有代码的隐私边界。</description>
      <pubDate>Wed, 11 Jun 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>A Checklist for AI-Assisted Code Review</title>
      <link>https://yyago.top/en/blog/ai-code-review-checklist</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/ai-code-review-checklist</guid>
      <description>Make review useful, not noise: give context, constrain output, separate facts from guesses, and respect the privacy line for private code.</description>
      <pubDate>Wed, 11 Jun 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>提示注入：把模型输出当不可信输入来防</title>
      <link>https://yyago.top/blog/prompt-injection-and-untrusted-input</link>
      <guid isPermaLink="true">https://yyago.top/blog/prompt-injection-and-untrusted-input</guid>
      <description>当模型会读取网页、邮件、文档，攻击者就能在内容里下指令。直接注入与间接注入的区别，以及工程上的防御清单。</description>
      <pubDate>Wed, 21 May 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Prompt Injection: Treat Model Output as Untrusted Input</title>
      <link>https://yyago.top/en/blog/prompt-injection-and-untrusted-input</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/prompt-injection-and-untrusted-input</guid>
      <description>When a model reads web pages, email and documents, attackers can plant instructions inside them. Direct vs indirect injection, plus a defence checklist.</description>
      <pubDate>Wed, 21 May 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>备份的 3-2-1 规则与恢复演练</title>
      <link>https://yyago.top/blog/backup-321-and-restore-drill</link>
      <guid isPermaLink="true">https://yyago.top/blog/backup-321-and-restore-drill</guid>
      <description>备份不是终点，能恢复才是。讲清 3-2-1、RPO/RTO、校验与恢复演练，以及最常见的备份失败。</description>
      <pubDate>Wed, 30 Apr 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>The 3-2-1 Backup Rule and Restore Drills</title>
      <link>https://yyago.top/en/blog/backup-321-and-restore-drill</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/backup-321-and-restore-drill</guid>
      <description>Backup is not the goal; recovery is. The 3-2-1 rule, RPO/RTO, verification and restore drills, plus the most common failures.</description>
      <pubDate>Wed, 30 Apr 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>限流算法怎么选：固定窗口 / 滑动窗口 / 令牌桶 / 漏桶</title>
      <link>https://yyago.top/blog/rate-limiting-algorithms-compared</link>
      <guid isPermaLink="true">https://yyago.top/blog/rate-limiting-algorithms-compared</guid>
      <description>四种限流算法的边界问题与适用场景，以及分布式计数、429 与重试退避的配合要点。</description>
      <pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Choosing a Rate Limiter: Fixed Window / Sliding / Token Bucket / Leaky Bucket</title>
      <link>https://yyago.top/en/blog/rate-limiting-algorithms-compared</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/rate-limiting-algorithms-compared</guid>
      <description>Edge cases and trade-offs of four rate-limit algorithms, plus distributed counting, 429s and retry backoff.</description>
      <pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>上线前该检查的 HTTP 安全响应头</title>
      <link>https://yyago.top/blog/http-security-headers-checklist</link>
      <guid isPermaLink="true">https://yyago.top/blog/http-security-headers-checklist</guid>
      <description>HSTS、CSP、X-Content-Type-Options 这些响应头到底管什么？一份可直接照着配的上线清单。</description>
      <pubDate>Wed, 19 Mar 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>HTTP Security Headers to Check Before Launch</title>
      <link>https://yyago.top/en/blog/http-security-headers-checklist</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/http-security-headers-checklist</guid>
      <description>What HSTS, CSP and X-Content-Type-Options actually protect, plus a launch-day checklist you can copy.</description>
      <pubDate>Wed, 19 Mar 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>图片格式怎么选：JPEG / PNG / WebP / AVIF 与压缩质量</title>
      <link>https://yyago.top/blog/image-formats-and-compression-choice</link>
      <guid isPermaLink="true">https://yyago.top/blog/image-formats-and-compression-choice</guid>
      <description>照片、截图、图标、动图分别该用什么格式？讲清有损/无损、透明、动画的差异，以及压缩质量怎么设。</description>
      <pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Choosing Image Formats: JPEG / PNG / WebP / AVIF and Compression</title>
      <link>https://yyago.top/en/blog/image-formats-and-compression-choice</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/image-formats-and-compression-choice</guid>
      <description>Photos, screenshots, icons and animations each want a different format. Lossy vs lossless, transparency, animation, and where to set quality.</description>
      <pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>两步验证到底防什么：TOTP 原理与安全边界</title>
      <link>https://yyago.top/blog/totp-two-factor-basics</link>
      <guid isPermaLink="true">https://yyago.top/blog/totp-two-factor-basics</guid>
      <description>6 位动态码为什么有用？它防的是密码泄露，而不是钓鱼。讲清 TOTP 原理、三种 2FA 强度与正确使用姿势。</description>
      <pubDate>Wed, 05 Feb 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>What 2FA Actually Defends Against: TOTP Explained</title>
      <link>https://yyago.top/en/blog/totp-two-factor-basics</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/totp-two-factor-basics</guid>
      <description>Why a 6-digit code helps, and what it does not. TOTP internals, three tiers of 2FA strength, and how to use them well.</description>
      <pubDate>Wed, 05 Feb 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>两个「看起来一样」的字符串为什么不相等：Unicode 归一化</title>
      <link>https://yyago.top/blog/unicode-normalization-and-string-compare</link>
      <guid isPermaLink="true">https://yyago.top/blog/unicode-normalization-and-string-compare</guid>
      <description>同一字符有多种写法，直接比较必然出错。讲清 NFC/NFD/NFKC 的区别，以及存储、比较与哈希时的正确做法。</description>
      <pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Why Two Identical-Looking Strings Differ: Unicode Normalization</title>
      <link>https://yyago.top/en/blog/unicode-normalization-and-string-compare</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/unicode-normalization-and-string-compare</guid>
      <description>The same character has several representations, so naive comparison fails. NFC, NFD and NFKC explained, plus correct storage, comparison and hashing.</description>
      <pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>语义化版本实践：MAJOR.MINOR.PATCH 与依赖范围怎么定</title>
      <link>https://yyago.top/blog/semantic-versioning-in-practice</link>
      <guid isPermaLink="true">https://yyago.top/blog/semantic-versioning-in-practice</guid>
      <description>什么时候该升 MAJOR？^ 与 ~ 差在哪？讲清版本号语义、0.x 阶段规则与依赖声明中的四个常见坑。</description>
      <pubDate>Wed, 25 Dec 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Semantic Versioning in Practice: MAJOR.MINOR.PATCH and Dependency Ranges</title>
      <link>https://yyago.top/en/blog/semantic-versioning-in-practice</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/semantic-versioning-in-practice</guid>
      <description>When does a change deserve a MAJOR bump? What is the difference between ^ and ~? Version semantics, the 0.x rules, and four dependency traps.</description>
      <pubDate>Wed, 25 Dec 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>Shell 脚本要点：安全开头、引用规则与四个常见错误</title>
      <link>https://yyago.top/blog/shell-scripting-essentials</link>
      <guid isPermaLink="true">https://yyago.top/blog/shell-scripting-essentials</guid>
      <description>set -euo pipefail 为什么是标配？$var 与 &quot;$var&quot; 差在哪？讲清可维护脚本的写法与最容易出事的四个地方。</description>
      <pubDate>Wed, 18 Dec 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Shell Scripting Essentials: Safe Preamble, Quoting Rules, Four Common Errors</title>
      <link>https://yyago.top/en/blog/shell-scripting-essentials</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/shell-scripting-essentials</guid>
      <description>Why set -euo pipefail is standard, how $var differs from &quot;$var&quot;, and the four places scripts most often break.</description>
      <pubDate>Wed, 18 Dec 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>SSH 密钥与 config 实践：从生成到多主机管理</title>
      <link>https://yyago.top/blog/ssh-keys-and-config-practices</link>
      <guid isPermaLink="true">https://yyago.top/blog/ssh-keys-and-config-practices</guid>
      <description>为什么推荐 ed25519？~/.ssh/config 怎么写最省事？讲清密钥部署、多主机别名与四个常见坑。</description>
      <pubDate>Wed, 11 Dec 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>SSH Keys and config: From Generation to Managing Many Hosts</title>
      <link>https://yyago.top/en/blog/ssh-keys-and-config-practices</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/ssh-keys-and-config-practices</guid>
      <description>Why ed25519? How to write a useful ~/.ssh/config? Key deployment, host aliases, and four common pitfalls.</description>
      <pubDate>Wed, 11 Dec 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>Linux 文件权限：三位数字背后的含义与常见坑</title>
      <link>https://yyago.top/blog/linux-file-permissions-basics</link>
      <guid isPermaLink="true">https://yyago.top/blog/linux-file-permissions-basics</guid>
      <description>755、644、600 分别代表什么？目录的执行位为什么特殊？讲清三组身份、数字表示法与五个高频错误。</description>
      <pubDate>Wed, 04 Dec 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Linux File Permissions: What the Three Digits Really Mean</title>
      <link>https://yyago.top/en/blog/linux-file-permissions-basics</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/linux-file-permissions-basics</guid>
      <description>What do 755, 644 and 600 mean? Why is the execute bit special on directories? Three identity groups, octal notation, and five frequent mistakes.</description>
      <pubDate>Wed, 04 Dec 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>并发模型对比：进程、线程、事件循环与协程怎么选</title>
      <link>https://yyago.top/blog/concurrency-models-compared</link>
      <guid isPermaLink="true">https://yyago.top/blog/concurrency-models-compared</guid>
      <description>CPU 密集还是 IO 密集？要不要强隔离？用四个维度对比四种并发模型，并给出选择顺序与常见坑。</description>
      <pubDate>Wed, 27 Nov 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Concurrency Models Compared: Processes, Threads, Event Loops, Coroutines</title>
      <link>https://yyago.top/en/blog/concurrency-models-compared</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/concurrency-models-compared</guid>
      <description>CPU-bound or IO-bound? Need isolation? Compare four concurrency models across key dimensions, with a selection order and common traps.</description>
      <pubDate>Wed, 27 Nov 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>TCP 与 UDP 怎么选：可靠性、顺序与延迟的取舍</title>
      <link>https://yyago.top/blog/tcp-vs-udp-choose</link>
      <guid isPermaLink="true">https://yyago.top/blog/tcp-vs-udp-choose</guid>
      <description>要不要重传、要不要保序、能不能容忍抖动？用五个维度对比 TCP 与 UDP，并讲清在 UDP 上自建可靠性需要补什么。</description>
      <pubDate>Wed, 20 Nov 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>TCP vs UDP: Reliability, Ordering and Latency Trade-offs</title>
      <link>https://yyago.top/en/blog/tcp-vs-udp-choose</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/tcp-vs-udp-choose</guid>
      <description>Retransmit or not? Ordering? Jitter tolerance? Compare TCP and UDP across five dimensions, and what you must rebuild on top of UDP.</description>
      <pubDate>Wed, 20 Nov 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>DNS 解析与常见记录类型：从缓存链路到排障命令</title>
      <link>https://yyago.top/blog/dns-resolution-basics</link>
      <guid isPermaLink="true">https://yyago.top/blog/dns-resolution-basics</guid>
      <description>A、AAAA、CNAME、MX、TXT 各自解决什么问题？解析经过哪几级缓存？TTL 该怎么设？附常用排查命令与三个高频坑。</description>
      <pubDate>Wed, 13 Nov 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>DNS Resolution and Record Types: Cache Chain, Records, Debug Commands</title>
      <link>https://yyago.top/en/blog/dns-resolution-basics</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/dns-resolution-basics</guid>
      <description>What A, AAAA, CNAME, MX and TXT each do, the cache chain a lookup walks, how to pick TTLs, plus debug commands and three common traps.</description>
      <pubDate>Wed, 13 Nov 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>一次 HTTP 请求的全过程：七个阶段与排障抓手</title>
      <link>https://yyago.top/blog/http-request-lifecycle</link>
      <guid isPermaLink="true">https://yyago.top/blog/http-request-lifecycle</guid>
      <description>从输入网址到页面呈现，请求经历了 URL 解析、DNS、连接、发送、处理、响应与子资源加载。逐段拆解耗时来源与排障顺序。</description>
      <pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>The Life of an HTTP Request: Seven Stages and How to Debug Them</title>
      <link>https://yyago.top/en/blog/http-request-lifecycle</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/http-request-lifecycle</guid>
      <description>From typing a URL to a rendered page: parsing, DNS, connecting, sending, processing, responding, sub-resources, plus where time goes and how to debug.</description>
      <pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>证书链与信任锚：浏览器凭什么信你</title>
      <link>https://yyago.top/blog/cert-chain-and-trust-anchor</link>
      <guid isPermaLink="true">https://yyago.top/blog/cert-chain-and-trust-anchor</guid>
      <description>单张服务器证书不够，还要让浏览器顺着链找到它信任的根。讲清证书链、中间证书、信任锚与常见部署错误。</description>
      <pubDate>Wed, 09 Oct 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Certificate Chains and Trust Anchors: Why the Browser Trusts You</title>
      <link>https://yyago.top/en/blog/cert-chain-and-trust-anchor</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/cert-chain-and-trust-anchor</guid>
      <description>One server certificate is not enough: the browser must follow the chain to a root it trusts. Chains, intermediate certs, trust anchors and common mistakes.</description>
      <pubDate>Wed, 09 Oct 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>灰度发布与蓝绿部署：上线不背锅</title>
      <link>https://yyago.top/blog/gray-release-blue-green</link>
      <guid isPermaLink="true">https://yyago.top/blog/gray-release-blue-green</guid>
      <description>别一次性把新版本推给所有人。讲清灰度按比例放量、蓝绿秒级切换，以及出问题如何快速回滚。</description>
      <pubDate>Wed, 18 Sep 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Canary and Blue-Green: Ship Without Blame</title>
      <link>https://yyago.top/en/blog/gray-release-blue-green</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/gray-release-blue-green</guid>
      <description>Do not push the new version to everyone at once. Canary by percentage, blue-green instant switch, and how to roll back fast.</description>
      <pubDate>Wed, 18 Sep 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>WebSocket 与轮询：实时通信怎么选</title>
      <link>https://yyago.top/blog/websocket-vs-polling</link>
      <guid isPermaLink="true">https://yyago.top/blog/websocket-vs-polling</guid>
      <description>轮询浪费请求，长轮询半实时，WebSocket 双向长连。讲清各自适用，以及心跳保活与断线重连。</description>
      <pubDate>Wed, 28 Aug 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>WebSocket vs Polling: Choosing Real-Time Communication</title>
      <link>https://yyago.top/en/blog/websocket-vs-polling</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/websocket-vs-polling</guid>
      <description>Polling wastes requests, long-polling is semi-real-time, WebSocket is a bidirectional long connection. When each fits, plus heartbeat and reconnect.</description>
      <pubDate>Wed, 28 Aug 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>CDN 是怎么把内容送到你身边的</title>
      <link>https://yyago.top/blog/cdn-how-it-works</link>
      <guid isPermaLink="true">https://yyago.top/blog/cdn-how-it-works</guid>
      <description>用户请求被调度到最近的边缘节点。讲清 DNS 调度、缓存命中与回源、刷新与预热，以及什么内容适合上 CDN。</description>
      <pubDate>Wed, 07 Aug 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>How a CDN Brings Content Close to You</title>
      <link>https://yyago.top/en/blog/cdn-how-it-works</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/cdn-how-it-works</guid>
      <description>Requests are routed to the nearest edge node. DNS-based routing, cache hits versus origin fetch, purge and prefetch, and what belongs on a CDN.</description>
      <pubDate>Wed, 07 Aug 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>正向代理与反向代理：别再分不清</title>
      <link>https://yyago.top/blog/forward-reverse-proxy</link>
      <guid isPermaLink="true">https://yyago.top/blog/forward-reverse-proxy</guid>
      <description>正向代理代表客户端出门，反向代理代表服务端接客。讲清两者位置、用途，以及反向代理在网关里的角色。</description>
      <pubDate>Wed, 17 Jul 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Forward vs Reverse Proxy: Telling Them Apart</title>
      <link>https://yyago.top/en/blog/forward-reverse-proxy</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/forward-reverse-proxy</guid>
      <description>A forward proxy represents the client going out; a reverse proxy represents the server facing users. Position, use, and the gateway role.</description>
      <pubDate>Wed, 17 Jul 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>HTTP/2 与 HTTP/3 比 HTTP/1.1 强在哪</title>
      <link>https://yyago.top/blog/http2-http3-improvements</link>
      <guid isPermaLink="true">https://yyago.top/blog/http2-http3-improvements</guid>
      <description>队头阻塞、多路复用、头部压缩。讲清 HTTP/2 的改进，以及 HTTP/3 为何改用 QUIC 跑在 UDP 上。</description>
      <pubDate>Wed, 26 Jun 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>What HTTP/2 and HTTP/3 Improve Over HTTP/1.1</title>
      <link>https://yyago.top/en/blog/http2-http3-improvements</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/http2-http3-improvements</guid>
      <description>Head-of-line blocking, multiplexing, header compression. HTTP/2 gains, and why HTTP/3 moves to QUIC over UDP.</description>
      <pubDate>Wed, 26 Jun 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>服务熔断与降级：别让一个故障拖垮全场</title>
      <link>https://yyago.top/blog/circuit-breaker-and-degrade</link>
      <guid isPermaLink="true">https://yyago.top/blog/circuit-breaker-and-degrade</guid>
      <description>下游超时时一直重试只会雪崩。讲清熔断三状态、半开探测，以及降级返回兜底而非硬等。</description>
      <pubDate>Wed, 05 Jun 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Circuit Breaking and Degradation: Stop One Failure Taking Down All</title>
      <link>https://yyago.top/en/blog/circuit-breaker-and-degrade</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/circuit-breaker-and-degrade</guid>
      <description>Endless retries on a slow downstream only cause an avalanche. The three breaker states, half-open probing, and serving a fallback instead of blocking.</description>
      <pubDate>Wed, 05 Jun 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>消息队列解决什么问题：异步、削峰、解耦</title>
      <link>https://yyago.top/blog/message-queue-basics</link>
      <guid isPermaLink="true">https://yyago.top/blog/message-queue-basics</guid>
      <description>生产者把任务丢进队列就返回，消费者慢慢处理。讲清异步、削峰填谷、解耦，以及重复消费与顺序的注意点。</description>
      <pubDate>Wed, 15 May 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>What Message Queues Solve: Async, Buffering, Decoupling</title>
      <link>https://yyago.top/en/blog/message-queue-basics</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/message-queue-basics</guid>
      <description>The producer drops a task in the queue and returns; the consumer handles it later. Async, peak buffering, decoupling, plus duplicate and ordering caveats.</description>
      <pubDate>Wed, 15 May 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>数据库索引为什么让查询变快</title>
      <link>https://yyago.top/blog/database-index-why-fast</link>
      <guid isPermaLink="true">https://yyago.top/blog/database-index-why-fast</guid>
      <description>没有索引只能全表扫。讲清 B+ 树索引、回表、最左前缀，以及索引不是越多越好的权衡。</description>
      <pubDate>Wed, 24 Apr 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Why a Database Index Makes Queries Fast</title>
      <link>https://yyago.top/en/blog/database-index-why-fast</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/database-index-why-fast</guid>
      <description>Without an index the database scans the whole table. B+tree indexes, the return-to-table step, leftmost prefix, and why more indexes are not always better.</description>
      <pubDate>Wed, 24 Apr 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>进程、线程与协程：并发的三种执行单位</title>
      <link>https://yyago.top/blog/process-thread-coroutine</link>
      <guid isPermaLink="true">https://yyago.top/blog/process-thread-coroutine</guid>
      <description>进程隔离、线程共享内存、协程用户态调度。讲清各自的成本、切换开销，以及为什么高并发服务偏爱协程或异步。</description>
      <pubDate>Wed, 03 Apr 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Process, Thread and Coroutine: Three Units of Concurrency</title>
      <link>https://yyago.top/en/blog/process-thread-coroutine</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/process-thread-coroutine</guid>
      <description>Processes isolate, threads share memory, coroutines schedule in user space. Their costs, switching overhead, and when to favour coroutines or async.</description>
      <pubDate>Wed, 03 Apr 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>OAuth2 授权码模式：第三方登录在干什么</title>
      <link>https://yyago.top/blog/oauth2-authorization-code</link>
      <guid isPermaLink="true">https://yyago.top/blog/oauth2-authorization-code</guid>
      <description>为什么「用微信登录」不会把密码交给第三方。讲清授权码流程、access token 与 refresh token，以及 PKCE 的作用。</description>
      <pubDate>Wed, 13 Mar 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>OAuth2 Authorization Code: What Third-Party Login Does</title>
      <link>https://yyago.top/en/blog/oauth2-authorization-code</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/oauth2-authorization-code</guid>
      <description>Why &quot;log in with WeChat&quot; never gives your password to the app. The authorization-code flow, access vs refresh tokens, and what PKCE adds.</description>
      <pubDate>Wed, 13 Mar 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>Cookie 与 Session 的区别与配合</title>
      <link>https://yyago.top/blog/cookie-vs-session</link>
      <guid isPermaLink="true">https://yyago.top/blog/cookie-vs-session</guid>
      <description>Cookie 存在浏览器、Session 存在服务端。讲清登录态怎么靠两者配合、JWT 为何常被误当 Session，以及安全标记。</description>
      <pubDate>Wed, 21 Feb 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>Cookies vs Sessions: Difference and How They Work Together</title>
      <link>https://yyago.top/en/blog/cookie-vs-session</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/cookie-vs-session</guid>
      <description>Cookies live in the browser, sessions on the server. How login state relies on both, why JWT is mistaken for a session, and the security flags.</description>
      <pubDate>Wed, 21 Feb 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>GET 与 POST 到底差在哪：何时用哪个</title>
      <link>https://yyago.top/blog/get-vs-post-when</link>
      <guid isPermaLink="true">https://yyago.top/blog/get-vs-post-when</guid>
      <description>GET 可被缓存、留在历史、有长度限制；POST 放 body、不被缓存。讲清语义、幂等与安全的边界，以及幂等为何重要。</description>
      <pubDate>Wed, 31 Jan 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>GET vs POST: What Differs and When to Use Each</title>
      <link>https://yyago.top/en/blog/get-vs-post-when</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/get-vs-post-when</guid>
      <description>GET can be cached, sits in history, has length limits; POST carries a body and is not cached. Semantics, safety, idempotency, and when it matters.</description>
      <pubDate>Wed, 31 Jan 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
    <item>
      <title>REST 设计与资源建模入门</title>
      <link>https://yyago.top/blog/rest-api-design-basics</link>
      <guid isPermaLink="true">https://yyago.top/blog/rest-api-design-basics</guid>
      <description>把事物当资源、用 HTTP 方法表示动作。讲清资源化、状态码、分页与版本，以及把动词塞进路径的反模式。</description>
      <pubDate>Wed, 10 Jan 2024 00:00:00 GMT</pubDate>
      <language>zh-CN</language>
    </item>
    <item>
      <title>REST API Design and Resource Modeling</title>
      <link>https://yyago.top/en/blog/rest-api-design-basics</link>
      <guid isPermaLink="true">https://yyago.top/en/blog/rest-api-design-basics</guid>
      <description>Treat things as resources and HTTP methods as actions. Resources, status codes, pagination, versioning, and the verb-in-path anti-pattern.</description>
      <pubDate>Wed, 10 Jan 2024 00:00:00 GMT</pubDate>
      <language>en</language>
    </item>
  </channel>
</rss>