<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>后端杂记</title><link>https://itnotes.de5.net/</link><description>记一些工作里踩过的坑</description><item><title>Quartz.NET 的 Misfire 策略，我踩过的三个坑</title><link>https://itnotes.de5.net/posts/quartz-misfire-notes.html</link><pubDate>2026-05-14 09:00:00 +0800</pubDate><description>任务错过了触发点到底补不补跑？WithMisfireHandlingInstructionDoNothing 不是万能挡箭牌。</description></item><item><title>PostgreSQL 和 MySQL 索引行为的三点差异</title><link>https://itnotes.de5.net/posts/pg-vs-mysql-index.html</link><pubDate>2026-05-28 09:00:00 +0800</pubDate><description>都是 B+ 树，但聚簇、回表和页面分裂的表现完全不一样。从 MySQL 迁 PG 前最好先看这篇。</description></item><item><title>MongoDB 聚合管道实录：一次日志统计需求</title><link>https://itnotes.de5.net/posts/mongo-pipeline-notes.html</link><pubDate>2026-06-09 09:00:00 +0800</pubDate><description>产品要按天、按渠道、按版本三个维度统计崩溃率，单字段索引不够，$facet 来救场。</description></item><item><title>HTTP 状态码，我真正用到的也就这几个</title><link>https://itnotes.de5.net/posts/http-codes-i-use.html</link><pubDate>2026-06-21 09:00:00 +0800</pubDate><description>背熟 60 个状态码不如吃透 8 个。200/204/304/400/401/403/404/429 之外，大多数都是礼貌性出现。</description></item><item><title>REST 是个名词，不是规范书</title><link>https://itnotes.de5.net/posts/rest-is-a-noun.html</link><pubDate>2026-07-03 09:00:00 +0800</pubDate><description>HATEOAS 没人做，PUT/DELETE 全项目用不上几个，但这不妨碍我们做一套好用的接口。</description></item><item><title>TCP 心跳、WebSocket Ping、MQTT Keep-Alive 有什么区别</title><link>https://itnotes.de5.net/posts/keepalive-compare.html</link><pubDate>2026-07-18 09:00:00 +0800</pubDate><description>都在保活，但一层管连接、一层管穿透、一层管会话。混着配的时候坑就来了。</description></item><item><title>2C4G 小机器上跑 Redis，内存是怎么省出来的</title><link>https://itnotes.de5.net/posts/redis-small-box.html</link><pubDate>2026-08-05 09:00:00 +0800</pubDate><description>ziplist、intset、ziplist 阈值、内存碎片率——小机器上的 Redis 每一分内存都值得计较。</description></item><item><title>我写过的十二行不安全代码</title><link>https://itnotes.de5.net/posts/unsafe-twelve-lines.html</link><pubDate>2026-08-19 09:00:00 +0800</pubDate><description>为了把图片灰度化从 400ms 压到 90ms，我用了 unsafe。这是那十二行和它教会我的事。</description></item><item><title>rebase 还是 merge，我把团队的分歧整理成了三条规则</title><link>https://itnotes.de5.net/posts/git-rebase-or-merge.html</link><pubDate>2025-10-14 09:00:00 +0800</pubDate><description>两人小队也能吵起来：feature 分支到底该 rebase 还是 merge。吵不出结果，就定规则。</description></item><item><title>被预检请求卡了一下午，才真正读懂 CORS</title><link>https://itnotes.de5.net/posts/cors-preflight.html</link><pubDate>2025-10-30 09:00:00 +0800</pubDate><description>明明设置了 Access-Control-Allow-Origin，为什么还是报跨域？因为浏览器的动作比你想的多一步。</description></item><item><title>一行正则把接口拖到超时：回溯灾难实录</title><link>https://itnotes.de5.net/posts/regex-backtrack.html</link><pubDate>2025-11-12 09:00:00 +0800</pubDate><description>正则写得再顺手，嵌套量词一上场就是指数爆炸。这次事故让我记住了两个写法红线。</description></item><item><title>强缓存和协商缓存，配错一次全班白屏</title><link>https://itnotes.de5.net/posts/http-cache-notes.html</link><pubDate>2025-11-26 09:00:00 +0800</pubDate><description>缓存策略本身不难，难的是「谁该强缓存、谁该协商」这组搭配。用一张表说清楚。</description></item><item><title>EF Core 慢下来的三种方式，我们全踩过了</title><link>https://itnotes.de5.net/posts/efcore-performance.html</link><pubDate>2025-12-10 09:00:00 +0800</pubDate><description>N+1、全表跟踪、客户端求值。三个坑都不深，叠在一起就是接口超时。</description></item><item><title>分代假设：读懂 .NET GC 回收策略的主线</title><link>https://itnotes.de5.net/posts/dotnet-gc-generations.html</link><pubDate>2026-01-07 09:00:00 +0800</pubDate><description>绝大多数对象朝生夕死——这一条经验假设撑起了整个分代回收。理解了它，调优思路就顺了。</description></item><item><title>服务器 CPU 100% 的十分钟排查法</title><link>https://itnotes.de5.net/posts/linux-cpu-triage.html</link><pubDate>2026-01-22 09:00:00 +0800</pubDate><description>告警响了别慌，按固定节奏走一遍：定位进程、定位线程、定位代码。十分钟内基本能说出个所以然。</description></item><item><title>接口幂等：从一次重复扣款说起</title><link>https://itnotes.de5.net/posts/idempotency-design.html</link><pubDate>2026-02-05 09:00:00 +0800</pubDate><description>网络重试是常态不是异常。把「每条请求都是新的」这个假设扔掉，幂等设计就入门了。</description></item><item><title>Nginx 我真正用到的配置，就这几段</title><link>https://itnotes.de5.net/posts/nginx-notes.html</link><pubDate>2026-02-20 09:00:00 +0800</pubDate><description>Nginx 能做的事很多，一个内部系统的反代需求其实就三段配置。抄下来改改就能用。</description></item><item><title>不用 unsafe，字符串处理也快四倍</title><link>https://itnotes.de5.net/posts/span-string-perf.html</link><pubDate>2026-03-08 09:00:00 +0800</pubDate><description>Substring 每次都在堆上造新串。Span 让你「切片」而不「复制」，托管代码照样能跑进微秒级。</description></item><item><title>TCP 没有「消息」这个概念</title><link>https://itnotes.de5.net/posts/tcp-stream-frames.html</link><pubDate>2026-03-24 09:00:00 +0800</pubDate><description>粘包不是 bug，是 TCP 的本性。字节流之上，消息边界要自己画。</description></item><item><title>限流的四种姿势，以及我们最终选的那个</title><link>https://itnotes.de5.net/posts/rate-limit-notes.html</link><pubDate>2026-04-09 09:00:00 +0800</pubDate><description>计数器、滑动窗口、漏桶、令牌桶——先分清你保护的是自己还是下游，选型就清楚了。</description></item><item><title>别小看 SQLite：很多项目根本不需要装数据库</title><link>https://itnotes.de5.net/posts/sqlite-when-to-use.html</link><pubDate>2026-05-11 09:00:00 +0800</pubDate><description>无服务、零配置、单文件、公共领域。当「数据只有一个写入方」时，SQLite 往往是最对的那个答案。</description></item><item><title>超时和重试的三条纪律，救过我不止三次</title><link>https://itnotes.de5.net/posts/retry-timeout-rules.html</link><pubDate>2026-06-28 09:00:00 +0800</pubDate><description>没有超时的调用等于永远在等，没有退避的重试等于二次攻击。三条纪律把外部依赖管起来。</description></item><item><title>一条慢查询的三天求生记</title><link>https://itnotes.de5.net/posts/slow-query-diary.html</link><pubDate>2026-07-14 09:00:00 +0800</pubDate><description>EXPLAIN 三次，结论三次都不一样。最后救它的不是索引，是一个写法习惯。</description></item><item><title>1.2 GB 到 110 MB：镜像瘦身的一次完整记录</title><link>https://itnotes.de5.net/posts/docker-image-diet.html</link><pubDate>2026-07-30 09:00:00 +0800</pubDate><description>多阶段构建、换基础镜像、合并 RUN、清缓存。四招下来，构建和部署都快了一大截。</description></item><item><title>日志是写给三个月后的自己的</title><link>https://itnotes.de5.net/posts/logging-discipline.html</link><pubDate>2026-08-15 09:00:00 +0800</pubDate><description>排查问题时最痛的不是没有日志，是日志里没有线索。三条纪律，让日志能救你而不是烦你。</description></item><item><title>接口改不动了才开始想版本管理，已经晚了半步</title><link>https://itnotes.de5.net/posts/api-versioning.html</link><pubDate>2026-09-02 09:00:00 +0800</pubDate><description>版本管理的本质是给演进留退路。三个决策点：版本放哪、什么时候升、旧版本留多久。</description></item><item><title>还在维护老项目？jQuery 的几条性能习惯值得捡起来</title><link>https://itnotes.de5.net/posts/jquery-selector-notes.html</link><pubDate>2026-09-20 09:00:00 +0800</pubDate><description>老项目里的 jQuery 不是原罪，写得糙才是。几条老规矩，今天依然适用。</description></item><item><title>消息队列怎么选：先想清楚你要它干什么</title><link>https://itnotes.de5.net/posts/mq-picking.html</link><pubDate>2026-09-28 09:00:00 +0800</pubDate><description>Kafka、RabbitMQ、RocketMQ 的对比文章满天飞，但选型的第一步是回答「你的消息是什么形状的」。</description></item><item><title>Windows 计划任务避坑记：程序跑得好好的，任务一启动就坏</title><link>https://itnotes.de5.net/posts/windows-task-pitfalls.html</link><pubDate>2026-09-08 09:00:00 +0800</pubDate><description>手动运行一切正常，挂到计划任务上就各种失败。起因网点、工作目录、账户权限，三处经典坑。</description></item><item><title>配置写在代码里的第 100 天，我终于建了配置表</title><link>https://itnotes.de5.net/posts/config-management.html</link><pubDate>2026-09-30 09:00:00 +0800</pubDate><description>阈值、开关、白名单……这些东西写进代码的那一刻，就注定了以后每次改动都要发版。</description></item></channel></rss>