首页 全球FDE实战
GitHub

C29:预约与候补,三个版本的交付练习

这是一套合成材料,没有真实活动、客户、模型结果或真人反馈。用它练习把变化落实到数据、程序和交接;不是企业级成品。

下载与起步

把参考程序、初始数据、检查样本、配置放在同一文件夹。另有自由文字提取题、教学评语和真人试用空表。可先不看参考程序,按下面的约定自行实现,再对照结果。

两场活动S1、S2各1席;P1分别有报名R11、R21。同一个人不是同一笔报名。P2同时候补两场并不冲突;本题两场时间不同。

第一版:正常取消后只产生草稿

组织者确认取消R11/S1,空位按候补顺序给P2产生邀请草稿。草稿预留这一席,但未通知也未确认报名。只有组织者确认邀请后才开始计时;P2在期限内接受才形成报名。S2的R21不变。

刻意的坏办法是“按P1查出全部报名然后取消”。它会找到R11和R21。参考程序的额外检查把这两个错误候选列出,再验证只取消S1时R21仍在;不是用测试名称遮掉这个数据设计问题。

第二版:让异常也有结果

样本按顺序给10条消息:明确取消、原消息重复、含糊取消、确认邀请、接受邀请、另一场取消、确认、到期、迟到接受、同消息编号换内容。duplicate表示同号同内容,不重复产生邀请;id_conflict表示同号内容变了,拒绝执行。只写“周末那一场”停在needs_clarification,不猜选场次。

过期从now >= expires_at开始。CLOCK事件将到期邀请标为expired,给下一个候补者产生新草稿;旧邀请迟到接受不能挤占新草稿。每次状态变化都检查“已报名+草稿或有效邀请占用的席位不超过容量”。时间是教学起点后的分钟,没有真实日历。

第三版:把说明交给另一个人

电脑有Python 3时,在文件夹中运行:

python3 reference.py
python3 reference.py --ttl 10

程序只读取同目录文件、在内存计算并输出JSON;不安装依赖、不联网、不写数据库、不发通知、不收款。正常完成会显示10条结果,以及15分钟、10分钟有效期的对照。4分钟确认邀请,15分钟检查时:原配置到期点19,尚未到期;新配置到期点14,已经到期。

接手者也可把config.json的invite_ttl_minutes由15改10,再不带参数重跑。先记录原配置,改完让另一个人按输出复述变化;若真请人试用,在空表记录实际卡点。teaching-feedback.csv是预写的示例意见,不得转记为真人已测试。

这次运行能证明什么

程序检查串行合成样本中的场次、编号、状态与容量关系。它不实现真实身份鉴别;ORG、P2、CLOCK仅是题目角色。事件编号账本和业务状态都在内存里,程序重启即丢失,不能证明分布式并发、持久化或生产中的恰好一次执行。生产项目还需要持久保存、事务或等价约束,参见第16章。

运行后,可以用下面的对照说明自己掌握了哪一段能力,而不只报告“程序通过”。这些都是本包已有的样本与输出,无须另做一个项目。

对应章节与能力 在现有材料中检查什么 能说明到哪里
第16章:分清同一次意图与新动作 检查样本中的S1_duplicate返回duplicate,id_conflict返回同名冲突;参考程序核对两者均不改变业务状态 同一运行中的编号与内容能对上;内存账本不能证明重启后的持久恢复
第17章:修正一边,也检查另一边 S1_accept在期限内返回booked;extra_checks.accept_at_expiry在到期点拒绝,S2_late_accept到期后返回rejected_expired 这组正常、边界与迟到样本符合约定;不等于所有输入或真实并发都已覆盖
第18章:让接手者看见规则变化的后果 输出handover_comparison:有效期15分钟时not_due,10分钟时expired_next_draft;真实移交时在空表记录对方实际操作与卡点 程序对照只能说明配置变化的结果;有人实际接手后,才能写移交观察与日期,预写教学评语不算真人反馈

本包故意使用普通规则。若加入AI,只让它先做extraction-exercises.json的两条待确认提取,保存实际输出与错误,再讨论要不要进入取消动作。参考答案不是模型表现。物流方向可接着练第28章;目标岗位不同,需要补的深度也不同。

发现错漏或不同意见,欢迎反馈。可先选中一段原文,再点击“反馈本页”,前往 GitHub 填写 Issue;提交需登录 GitHub。

《全球FDE实战》· 2026年9月版 · 资料截止 2026-09-25。书中区分来源陈述、研究判断与教学示例。
原创内容采用 CC BY-SA 4.0,署名、注明修改,并以相同许可分享;第三方材料权利归原权利人。