槽痞

抽奖问题的复盘

一次“看起来没问题,实际抽奖错人”的排障复盘:Excel 导入、Unicode 与精确匹配
今天我们定位并修复了一个抽奖页的实际生产问题:在 excluded_teachers 已配置 张三 的情况下,张三 仍然被抽中。

一、现象

二、先排除错误方向
最开始容易怀疑是配置文件写错位置(例如 log.php),但实际抽奖读取的是 lottery 配置:

三、根因定位
根因不是“业务逻辑没写”,而是“字符串没有被正确拆分 + 精确匹配脆弱”。

  1. 成员列拆分正则存在编码风险
  1. 后续过滤是精确匹配
  1. 同类风险也存在于 fixedTeachers / fixedGroups

四、修复方案
本次修复分三层,目标是“抗编码污染 + 抗空白差异 + 保持原业务行为”。

  1. 分隔符改为 Unicode 码位写法
  1. 姓名与组名统一标准化后匹配
  1. 组判重 usedGroups 也改为标准化键

五、为什么“编辑器看着正常”仍会出错

六、经验总结

  1. 不要把“看起来一样”当作“机器认为一样”
  2. 对中文标点分隔,优先使用 Unicode 码位表达
  3. 对关键匹配字段(人名、组名)先做标准化再比较
  4. 前端导入链路要有可观测性(建议保留 debug 日志或导入后样本检查)

七、这次问题的本质一句话
不是配置没写生效,而是“导入文本没有按预期拆分 + 精确匹配过于脆弱”,导致排除名单没有命中到真实候选人。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »