<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>梦想恒远的博客</title><link>https://notes.qianyecube.cn</link><description>技术沉淀、交付手记与项目案例。写清判断，也写清代价。</description><language>zh-CN</language><item><title>文件和异步链路上，上线后才暴露的几处漏洞</title><link>https://notes.qianyecube.cn/posts/file-async-production-surprises</link><guid>https://notes.qianyecube.cn/posts/file-async-production-surprises</guid><pubDate>Sat, 31 Oct 2026 02:04:01 GMT</pubDate><description>功能测试都过了，为什么上线后还是出事？因为测试覆盖的是有人操作的路径，而文件和异步的漏洞全藏在没人操作的地方：中断、重复、积压、静默。六处逐一给防线。</description></item><item><title>AI 功能接进业务系统的三种边界</title><link>https://notes.qianyecube.cn/posts/ai-integration-three-boundaries</link><guid>https://notes.qianyecube.cn/posts/ai-integration-three-boundaries</guid><pubDate>Fri, 30 Oct 2026 06:02:13 GMT</pubDate><description>客户说「加个 AI」，先别急着做自动化。AI 接进业务系统只有三种形态——旁路只读、助手确认后执行、自动化直接执行，三者在权限、审计、回滚上的成本完全不同，从旁路起步。</description></item><item><title>定时任务：分布式锁、补跑、漏跑</title><link>https://notes.qianyecube.cn/posts/scheduled-task-lock-rerun-miss</link><guid>https://notes.qianyecube.cn/posts/scheduled-task-lock-rerun-miss</guid><pubDate>Fri, 30 Oct 2026 02:02:30 GMT</pubDate><description>定时任务上多实例部署要过三关：分布式锁防同时跑、水位表防漏跑、补跑要幂等。锁写错比不加锁更险，漏跑比慢跑更贵——对账任务漏一晚，差异就永远对不上。</description></item><item><title>死信队列要不要人工介入</title><link>https://notes.qianyecube.cn/posts/dead-letter-queue-human-intervention</link><guid>https://notes.qianyecube.cn/posts/dead-letter-queue-human-intervention</guid><pubDate>Thu, 29 Oct 2026 06:01:25 GMT</pubDate><description>死信队列堆了三天没人看，和值班同学半夜起来重投消息，是同一个设计错误的两个方向。死信是人审的工作清单：告警自动、处置有人、重投幂等。</description></item><item><title>延迟任务：超时关单、定时提醒的三种实现</title><link>https://notes.qianyecube.cn/posts/delayed-task-three-implementations</link><guid>https://notes.qianyecube.cn/posts/delayed-task-three-implementations</guid><pubDate>Thu, 29 Oct 2026 02:03:20 GMT</pubDate><description>超时关单、预约提醒这类「到点才做」的任务，实现不外乎三种：数据库扫表、MQ 延迟消息、Redis ZSet。先分清业务要准时还是要不丢，选型就不会摇摆。</description></item><item><title>重复消费和顺序，哪个更难</title><link>https://notes.qianyecube.cn/posts/duplicate-consume-vs-ordering</link><guid>https://notes.qianyecube.cn/posts/duplicate-consume-vs-ordering</guid><pubDate>Wed, 28 Oct 2026 06:02:58 GMT</pubDate><description>重复消费有标准答案，顺序没有——前者加唯一键就完事，后者要么牺牲吞吐要么靠状态机拒收。最疼的是两个一起来：重试期间乱序。</description></item><item><title>什么时候真的需要消息队列</title><link>https://notes.qianyecube.cn/posts/do-you-really-need-message-queue</link><guid>https://notes.qianyecube.cn/posts/do-you-really-need-message-queue</guid><pubDate>Wed, 28 Oct 2026 02:10:13 GMT</pubDate><description>判断标准只有三个问题：这条数据丢不起吗、能晚多久、要通知几方。三个答案都不紧迫，一张数据库任务表就够；私有化客户拒绝装 MQ 的项目，每天三万单照样跑。</description></item><item><title>孤儿文件怎么清</title><link>https://notes.qianyecube.cn/posts/orphan-file-cleanup</link><guid>https://notes.qianyecube.cn/posts/orphan-file-cleanup</guid><pubDate>Tue, 27 Oct 2026 06:22:20 GMT</pubDate><description>一份设定好的对账样例：附件表里 8 万行、桶里 9.3 万个对象，多出来的 1.3 万从哪来、能不能直接删？答案在两边对账加宽限期：单边清单都不可信，删之前先分类成因。</description></item><item><title>对象存储：目录、权限、生命周期</title><link>https://notes.qianyecube.cn/posts/object-store-prefix-acl-lifecycle</link><guid>https://notes.qianyecube.cn/posts/object-store-prefix-acl-lifecycle</guid><pubDate>Tue, 27 Oct 2026 06:19:46 GMT</pubDate><description>对象存储里没有文件夹，「目录」只是 key 的前缀；前缀定了，权限和生命周期才挂得上去。这篇给一套前缀规划、按前缀授权的写法，和一笔生命周期规则的经济账——配错规则的罚金比省下的钱多。</description></item><item><title>私有桶的签名 URL 怎么发</title><link>https://notes.qianyecube.cn/posts/presigned-url-private-bucket</link><guid>https://notes.qianyecube.cn/posts/presigned-url-private-bucket</guid><pubDate>Mon, 26 Oct 2026 06:14:43 GMT</pubDate><description>桶设成私有之后，前端怎么上传、怎么预览？答案是服务端签一条带时效的 URL 发给前端。签什么、有效期怎么定、拿什么凭证签，三件事里有两件和直觉相反。</description></item><item><title>文件上传：直传、断点续传、秒传各解决什么</title><link>https://notes.qianyecube.cn/posts/file-upload-direct-resume-dedup</link><guid>https://notes.qianyecube.cn/posts/file-upload-direct-resume-dedup</guid><pubDate>Mon, 26 Oct 2026 06:14:21 GMT</pubDate><description>直传、断点续传、秒传听起来是一个功能的三个阶段，其实是三个独立问题的三种解法：带宽绕行、大文件失败重来、重复文件不传。分清楚这三个问题，才知道自己的系统该先做哪个、哪个根本不用做。附各云厂商分片参数硬数字和一张 upload_task 表。</description></item><item><title>国内项目验收为什么总卡住</title><link>https://notes.qianyecube.cn/posts/acceptance-checklist</link><guid>https://notes.qianyecube.cn/posts/acceptance-checklist</guid><pubDate>Fri, 23 Oct 2026 17:42:04 GMT</pubDate><description>验收卡住，多数时候卡在“做完”没有被定义。把功能、数据、权限、性能、安全、部署、文档、培训八类标准写进合同，尾款才有保障。</description></item><item><title>两周交付一个行业系统：范围冻结、里程碑与验收</title><link>https://notes.qianyecube.cn/posts/two-week-delivery-scope</link><guid>https://notes.qianyecube.cn/posts/two-week-delivery-scope</guid><pubDate>Fri, 23 Oct 2026 17:42:04 GMT</pubDate><description>两周交付，切得准比写得快重要。前提是有一套可复用的底座；从零写一套行业系统，两周只够做一个能演示的原型。</description></item><item><title>一个人做行业软件，先接单再做产品</title><link>https://notes.qianyecube.cn/posts/custom-delivery-to-white-label</link><guid>https://notes.qianyecube.cn/posts/custom-delivery-to-white-label</guid><pubDate>Fri, 23 Oct 2026 17:42:03 GMT</pubDate><description>先接单再产品化，是一个人能走通的最短路径。关键是把每一单都当成一次受控实验，3–5 单后只抽跨单重复的那六七成。</description></item><item><title>为什么国内 B 端买家要源码买断，而不是 SaaS 订阅</title><link>https://notes.qianyecube.cn/posts/source-code-buyout-vs-saas</link><guid>https://notes.qianyecube.cn/posts/source-code-buyout-vs-saas</guid><pubDate>Fri, 23 Oct 2026 17:42:03 GMT</pubDate><description>国内买家要源码，不是保守，也不是想盗版。他们买的是资产归属、部署权、二开权和断供后的退路。把这几件事讲清楚，报价才有依据。</description></item><item><title>行业系统做成白牌，先看领域模型能不能复用</title><link>https://notes.qianyecube.cn/posts/white-label-industry-system-domain-model</link><guid>https://notes.qianyecube.cn/posts/white-label-industry-system-domain-model</guid><pubDate>Fri, 23 Oct 2026 17:42:03 GMT</pubDate><description>很多团队以为白牌就是换 logo、换配色、换菜单，把定制项目包装成产品再卖一遍。真正决定第二单能不能赚钱的，是领域模型、流程、接口、合规这四层能不能复用。这篇讲怎么在接单之前判断，以及为什么先做交付包比先做官网更重要。</description></item><item><title>蓝领招工难在实名和日结</title><link>https://notes.qianyecube.cn/posts/blue-collar-recruiting-realname-daily-settlement</link><guid>https://notes.qianyecube.cn/posts/blue-collar-recruiting-realname-daily-settlement</guid><pubDate>Fri, 23 Oct 2026 17:42:02 GMT</pubDate><description>蓝领招工系统的功能列表和白领招聘长得差不多，真正难的是另外两件事：来的人是不是他本人，干完这一天钱怎么发出去。实名、考勤、日结、四流一致，每一件都同时是技术问题和合规问题。这篇讲这四个环节在代码里长什么样，以及平台该站在哪个位置。</description></item><item><title>多商户商城的库存，为什么不能挂在订单上</title><link>https://notes.qianyecube.cn/posts/multi-merchant-mall-domain-boundaries</link><guid>https://notes.qianyecube.cn/posts/multi-merchant-mall-domain-boundaries</guid><pubDate>Fri, 23 Oct 2026 17:42:02 GMT</pubDate><description>商城的第一版，库存通常长在商品表上，结算状态挂在订单上。二十个商户、几百个 SKU 能跑过验收，第一次大促就会同时出现超卖和对不上账——锁救不了它，根子在五个域被压进了同一两张表。这篇按商品、库存、订单、履约、结算的顺序，讲每个域该拥有什么，边界又该落在哪几张表上。</description></item><item><title>主流程演示得再顺，客户还是要先导一个 Excel</title><link>https://notes.qianyecube.cn/posts/import-export-print-delivery</link><guid>https://notes.qianyecube.cn/posts/import-export-print-delivery</guid><pubDate>Fri, 23 Oct 2026 17:42:01 GMT</pubDate><description>验收现场的顺序和开发时相反：客户不先点你讲了半小时的下单流程，而是拿出自己的 Excel 导一遍，再导出一张报表，最后打一张单。主流程决定系统能不能用，这三件事决定客户明天能不能上班；它们没有技术难度，只有工作量，报价里不写，后面就是免费加班。</description></item><item><title>线上出问题，先分清是所有人都慢还是一个人慢</title><link>https://notes.qianyecube.cn/posts/observability-for-small-teams</link><guid>https://notes.qianyecube.cn/posts/observability-for-small-teams</guid><pubDate>Fri, 23 Oct 2026 17:42:01 GMT</pubDate><description>凌晨一点半，客服在群里说“系统很卡”，这句话没法直接动手。要先把它拆成谁慢、哪个接口慢、从几点开始，才谈得上排查。200 QPS 的系统用不上重型 APM，但 traceId、四组指标和每条告警对应的 Runbook 缺一不可；这三样没有，监控大盘只是挂在墙上的屏保。</description></item><item><title>RAG 接进业务系统，权限和评测绕不过去</title><link>https://notes.qianyecube.cn/posts/rag-agent-in-business-systems</link><guid>https://notes.qianyecube.cn/posts/rag-agent-in-business-systems</guid><pubDate>Fri, 23 Oct 2026 17:42:01 GMT</pubDate><description>演示阶段准备二十个问题，答对十九个不难；接进业务系统之后，真正会出事的是它把另一个租户的制度答了出来，语气还很确定。RAG 的工程难点不在模型，在检索前的权限过滤、文档版本和删除的同步、一套从真实工单里长出来的评测集；Agent 再往前走一步，写操作必须停下来等人确认。</description></item><item><title>数据迁移完了，没人敢关旧系统</title><link>https://notes.qianyecube.cn/posts/legacy-data-migration-reconciliation</link><guid>https://notes.qianyecube.cn/posts/legacy-data-migration-reconciliation</guid><pubDate>Fri, 23 Oct 2026 15:38:16 GMT</pubDate><description>迁移项目开工第一天，客户发来一个压缩包，说数据都在里面。导进去只用了一个下午，财务发现上个月的应收少了一万二千七百八十八，用了三个星期才问明白差在哪。迁移的验收，说了算的是客户财务签字确认的金额、总量和权限范围；Excel 的合并单元格、期初余额、旧单号、离职员工，每一件都能让这个签字拖到下周。</description></item><item><title>私有化部署的最小交付包，拔掉网线还能装起来才算</title><link>https://notes.qianyecube.cn/posts/privatization-deployment-minimal-package</link><guid>https://notes.qianyecube.cn/posts/privatization-deployment-minimal-package</guid><pubDate>Fri, 23 Oct 2026 15:38:16 GMT</pubDate><description>内网机器不给出网，最小化镜像里没有 CA 证书和中文字体，jar 里的 native 库只带 x86_64，镜像 tag 写成 latest 到了离线环境就是一个陌生的镜像名。“在我机器上跑通了”这句话在客户机房里不值钱，介质、环境检查、库结构、密钥、升级和回滚，每缺一样都能让安装卡在当场。</description></item><item><title>账不平时要能说出错在哪一层</title><link>https://notes.qianyecube.cn/posts/reconciliation-three-way-check-minimal-implementation</link><guid>https://notes.qianyecube.cn/posts/reconciliation-three-way-check-minimal-implementation</guid><pubDate>Fri, 23 Oct 2026 15:38:15 GMT</pubDate><description>只比渠道账单和我方订单，抓不到手续费漏记和分账记错。对账要能回答“错在哪一层”：渠道流水、业务订单、账户分录各对一次。下载地址 30 秒就失效、微信账单只给三个月、账单里的退款行出账后状态不再更新，而对账系统自己的失效方式是任务返回成功。</description></item><item><title>分账的账要能倒推回去</title><link>https://notes.qianyecube.cn/posts/multi-merchant-split-settlement-account-entry-voucher</link><guid>https://notes.qianyecube.cn/posts/multi-merchant-split-settlement-account-entry-voucher</guid><pubDate>Fri, 23 Oct 2026 15:37:58 GMT</pubDate><description>余额字段一旦能被 update，账就只能靠人工对平。账户管谁是主体、流水管动了多少、凭证管为什么动，三张表各管一件事。分账规则要带生效区间，退款要按原分录反向冲销，可用和冻结别做成一行两列。代收再结算算不算二次清算，这条线绕不开。</description></item><item><title>支付回调出错时系统一声不吭</title><link>https://notes.qianyecube.cn/posts/payment-callback-idempotency-retry-reconciliation</link><guid>https://notes.qianyecube.cn/posts/payment-callback-idempotency-retry-reconciliation</guid><pubDate>Fri, 23 Oct 2026 14:56:21 GMT</pubDate><description>支付回调出错时不会报错。验签过了不等于认对了这一单，接口回了成功不等于账落了，退款受理不等于退成功，对账脚本解析出零行也照样返回成功。这些错全靠表结构和幂等键挡住。</description></item><item><title>多租户系统最容易出事的 8 个位置</title><link>https://notes.qianyecube.cn/posts/multi-tenant-failure-points</link><guid>https://notes.qianyecube.cn/posts/multi-tenant-failure-points</guid><pubDate>Fri, 23 Oct 2026 06:55:21 GMT</pubDate><description>隔离模型选对了，租户条件仍然会从别的地方漏掉。缓存 key 少一段前缀，线程池里的上下文随着工作线程复用飘走，定时任务不带租户跑全表，搜索索引查询忘了 filter。八处的共同点不是层级深浅，是它们都绕开了你写好的那一层租户拦截器。按爆炸时间从上线第一天排到第一次月结。</description></item><item><title>订单状态机：别用 status=1,2,3 糊弄</title><link>https://notes.qianyecube.cn/posts/order-status-column-is-not-a-state-machine</link><guid>https://notes.qianyecube.cn/posts/order-status-column-is-not-a-state-machine</guid><pubDate>Fri, 23 Oct 2026 06:55:21 GMT</pubDate><description>订单状态那一列管得住“现在是什么”，管不住“谁把它改成的”“当时能不能改”“同一件事收到两次会怎样”。把 updateStatus(id, 3) 换成事件加守卫，改动量就是那十几处调用各自想清楚自己发的是哪个事件。</description></item><item><title>部门、门店、代理商，一张 sys_dept 表撑不住这三层</title><link>https://notes.qianyecube.cn/posts/org-store-channel-three-layers</link><guid>https://notes.qianyecube.cn/posts/org-store-channel-three-layers</guid><pubDate>Fri, 23 Oct 2026 06:55:08 GMT</pubDate><description>需求说“要加门店”，开发在 sys_dept 上加了一列 type，两行代码当天上线。三个月后加代理商，type 多个值；半年后要求门店同时归区域运营、归总部核算，parent_id 只有一个。行政组织、经营单元、外部主体这三层的差别不在层级深浅，在于谁需要历史、谁会算钱、谁是外部人。</description></item><item><title>权限系统：RBAC 不够用的地方，数据权限怎么补</title><link>https://notes.qianyecube.cn/posts/rbac-data-permission</link><guid>https://notes.qianyecube.cn/posts/rbac-data-permission</guid><pubDate>Fri, 23 Oct 2026 06:55:08 GMT</pubDate><description>一句“销售只能看自己的客户”，里面藏着行、列、入口、失效四个判定，RBAC 一个都答不了。这篇讲数据范围怎么落成一条 SQL、@DataScope 这类拼法会在哪一层漏、成本价为什么会整整齐齐出现在导出的 Excel 里，以及为什么详情接口是行级权限最大的口子。</description></item><item><title>多租户不是加一个 tenant_id：三种隔离模型与选型</title><link>https://notes.qianyecube.cn/posts/multi-tenant-isolation-models</link><guid>https://notes.qianyecube.cn/posts/multi-tenant-isolation-models</guid><pubDate>Thu, 22 Oct 2026 01:00:00 GMT</pubDate><description>多租户不是加个 tenant_id 就完了。共享表、独立 schema、独立库，三种模型的成本和失效方式不一样。这篇按 Spring Boot + MySQL 讲我怎么选、怎么落地，以及异步、定时任务、MQ、导出这些地方怎么漏。</description></item><item><title>我的 AI 工作台：日常真正在用的几个小工具</title><link>https://notes.qianyecube.cn/posts/my-ai-workbench-tools</link><guid>https://notes.qianyecube.cn/posts/my-ai-workbench-tools</guid><pubDate>Tue, 20 Oct 2026 07:39:47 GMT</pubDate><description>这个分类用来放我日常真正在用的东西。不追新，不堆数量，只写那些我连续用了一个月以上、并且能说得出「它替我省掉了什么」的。</description></item></channel></rss>