晋江文学城
下一章 上一章  目录  设置

39、落款 十一点零四 ...

  •   十一点零四分。

      林知遥把那只马克杯端到桌边,茶水凉了一半。她没有续,机械地把笔记本推开一指宽,腾出放杯垫的位置。

      工作间在二楼最里。窗朝东,外婆生前用来堆杂物,被她清出来摆了一张木头长桌、两只台灯、一把旧办公椅。墙上还有一张外婆贴的年画,红得已经发暗。

      她按下电源键。

      风扇转了半秒,屏幕亮起。

      IDE 自动加载上次的工程。光标停在她三周前最后一次提交后那一行:

      ```
      // TODO: 调度优先级,待重构
      ```

      她盯了几秒,伸手去抓鼠标,又改用键盘。

      ```
      git pull
      ```

      回车。

      终端往下滚了一长串。

      她看了一眼,手指停住。

      不是几条。是几十条。

      提交时间从二十六天前一直拖到三天前。每一条都很小,commit message 短得近乎吝啬。

      ```
      fix: 时区
      fix: nil 判断
      fix: index out of range
      refactor: 状态回流
      refactor: 拆 channel
      hotfix: 重试上限
      ```

      作者栏不是她。

      她把字号调大了一档,俯身看清那一行邮箱前缀。

      不是她的项目协作账号。

      是另一个她见过、但没想到会出现在这里的名字。

      林知遥的指腹在键盘边缘按了一下,松开。

      她退回到工程根目录,展开 git log,从最近一次往回翻。

      一页。

      两页。

      三页。

      提交时间集中在凌晨两点到四点之间。最早的一次是二十六天前的 03:42,最近一次是三天前的 02:17。

      中间没有一次是白天。

      她把椅子往前挪了半寸,屏幕亮度调低一档。

      第一次 diff 展开。

      不是大段改写。是注释。

      ```go
      // 这里 ctx 可能为 nil,上游 cancel 后没传下来。先判一下。
      ```

      她看了两秒,鼠标滚轮往下。

      ```go
      // 数组下标用 len()-1,空切片会 panic。补一行 if。
      ```

      ```go
      // 时区 Asia/Shanghai 在容器里有时拉不到,fallback 用 +08:00。
      ```

      都是基础。

      都是她自己写的时候,觉得"测过了应该没事"的地方。

      她翻到第十一条提交。

      ```go
      // 这段 retry 没设上限,网络抖动会无限堆。建议封一个 backoff,最多三次。
      ```

      下面紧跟着一段她没见过的小函数,十二行,签名规整,变量名和她整个工程的命名风格对上了。

      她回滚到自己上一版。

      十二行的位置,原本是她写的:

      ```go
      for {
      if err := send(); err == nil {
      break
      }
      }
      ```

      她盯了几秒。

      把光标移开,继续往下翻。

      第十九条提交,注释从基础落到了业务层。

      ```go
      // 这一步如果失败,任务状态会卡在 processing,定时清理拉不回来。
      // 加一条失败回流到 pending,记一次重试计数。
      ```

      ```go
      // 异常分流:DB 写失败和外部 API 失败要分开,后者可恢复,前者不能。
      ```

      ```go
      // 状态机少一条边:cancelled -> archived。现在直接丢了,审计对不上。
      ```

      她从抽屉里摸出一支笔,在便利贴上记了"状态机闭环"四个字,撕下来,贴在显示器右下角。

      笔迹比平时重。

      她没察觉。

      第二十六条提交,也就是十二天前 02:51 的那一次,她停了下来。

      注释只有一行,被单独提到一个文件顶部:

      ```go
      // 该调度逻辑在高并发设备侧会出现延迟堆积,需预留人工接管接口。
      ```

      林知遥的眼睫垂了一下。

      这条不像一个外包接单的人会写的话。

      外包的人写注释,通常停在"这里有 bug"。再往上一点的,会写"这样写更稳"。

      写到"高并发设备侧""人工接管接口"——这是真在工厂里被坑过的人才会随手留下来的提醒。

      她没有点开那个人的资料页。

      她只是把这条注释复制到便利贴下面那一格,贴上去。

      凌晨零点四十一分。

      她起身去倒水,拎着杯子走到楼梯口,又折回来。水杯放在桌角,没喝。

      她重新坐下。

      继续往后翻。

      第三十一条,文件路径是 dispatcher/sensor.go。她对这个文件不熟,这是她接手项目时,甲方塞过来让她"先放着,后面再说"的部分。

      注释更短:

      ```go
      // 不要假设传感回传永远准时。
      // 真实场景里,最先崩的从来不是算法。
      ```

      她把手从键盘上收回来,按在膝盖上。

      老宅木地板在这种深夜会不规则地响一下。她听见楼下不知道哪里发出一声轻微的"咯",像是哪根梁在落湿气。

      她没动。

      过了很久,她把鼠标拖回那行注释,选中,复制,粘贴到工作笔记最上方。

      然后回到 git log。

      她做了一件原本没打算做的事——把自己上一版整个 checkout 出来,放在另一个分支上。

      两个版本并排开。

      左边是她。

      右边是他。

      她从第一个文件开始,一行一行对。

      不是修。是看。

      她原以为会看到很多"被改掉"的地方。结果不是。

      他几乎没动她的架构。

      她写了一个三层的任务分发,他保留了三层。她用 channel 拆 worker,他保留了 channel。她在状态机里偷懒省了两条边,他没把她的省略改回去——他在那两条边上各加了一行注释,标"这里现在不补,上线后第一周一定会爆"。

      他没有推翻她。

      他在她最容易塌的地方加了锁,在异常没有出口的地方补了出口,在边界情况没考虑到的地方扩了边界。

      像是有人沿着她已经搭好的脚手架,从下往上,把每一根没拧紧的螺丝拧了一遍。

      林知遥坐了一会儿。

      她把右手离开鼠标,抬起来,在自己左手无名指内侧那颗小痣上轻轻碰了一下。

      碰了一下,松开。

      凌晨一点五十三分。

      她新开了一个分支。

      ```
      git checkout -b dispatch-refactor
      ```

      她重新打开 dispatcher 模块。

      按照那条"高并发设备侧会出现延迟堆积"的注释,她开始拆。

      原本是一条主队列吃所有任务。她把它拆成三块——

      主队列,跑常规调度。

      人工接管队列,留给那种系统判断不了、必须等人工确认的异常任务。

      延迟堆积监控,单独起一个 goroutine,每三十秒采一次队列长度,超过阈值就打告警。

      她敲到一半,删了一行。

      她原来写的是固定阈值。

      她想起他在另一个文件里写过的一句注释:"不要把魔法数字写死,留给配置中心"。

      她把固定阈值换成可配置项,补了默认值,再补了一行注释,说明默认值的依据。

      注释她用中文。

      他的注释也都是中文。

      凌晨两点四十六分。

      她在人工接管队列里加了一段。

      这段不在他的提示里。

      任务进入人工接管队列时,要按业务影响排序——金额大的、时效紧的、客户等级高的先排在前面。她写了一个简单的优先级评分函数,三个维度,各占权重。

      写完以后,她退回去,把整段读了一遍。

      她在评分函数顶部留了一行注释:

      ```go
      // 接管队列里的任务不能 FIFO,人工处理速度赶不上业务窗口。
      // 优先级按金额、时效、客户等级三项加权,权重先固定,后续接配置。
      ```

      她看了一会儿,没有再动那行。

      她不是被修补的那一方。

      她在他拆的结构上,把他没顾上的那一层补了进去。

      凌晨三点二十分。

      她去了一趟洗手间,回来路上经过楼梯口,顺手把过道灯关了。一楼是黑的。

      她坐回去。

      四点零八分,她改完了最后一个文件。

      git status 提示有十七个文件待提交。

      她先没提交。

      她把光标拉回到 dispatcher/sensor.go,移到那条注释下方:

      ```go
      // 不要假设传感回传永远准时。
      // 真实场景里,最先崩的从来不是算法。
      ```

      光标在下面那行闪。

      她敲了两个字。

      ```
      // 原来
      ```

      停了半秒。

      退格,删掉。

      她把手从键盘上抬起来,看了一眼窗外。

      天还没亮,但已经不是纯黑。东边那一小块从墨色变成了灰蓝。

      她把手放回键盘。

      再敲一次。

      ```
      // 原来
      ```

      光标又闪了几下。

      退格,删掉。

      她想了想,改成了另一行。

      ```
      // 谢谢。——林知遥
      ```

      打完,她没有立刻保存。

      她把"林知遥"三个字看了两秒。

      不是工程里随便一行调试注释的口气。也不是日常代码里那种"to whom it may concern"。

      是落款。

      她按下 Ctrl+S。

      ```
      git add .
      git commit -m "refactor: 调度模块拆分 + 接管优先级"
      git push
      ```

      终端跑完最后一行。

      ```
      remote: Synced.
      ```

      绿色那行字停在最下面。

      林知遥没有关电脑。

      她也没有起身。

      椅子往后挪了一指,她把双手交叠放在膝上,目光留在屏幕上那行注释下面。

      ```
      // 谢谢。——林知遥
      ```

      提交记录里,她的名字第一次和他并排。

      四点五十二分。

      天又亮了一层。窗外能看见院里那棵老枣树的轮廓,叶子还黑,枝条已经能数清。

      楼下传来一点极轻的动静。

      不像脚步,更像是有人把什么东西从工作台上拿起来又放回去——金属碰到木头,一下,很短。

      接着是一声更轻的,像是水龙头被拧开半圈又拧紧。

      她坐着没有动。

      屏幕右下角弹出一条小提示。

      ```
      1 new commit on origin/main.
      ```

      她没有点开。

      光标还停在她那行落款下面。

      闪一下。

      再闪一下。

  • 昵称:
  • 评分: 2分|鲜花一捧 1分|一朵小花 0分|交流灌水 0分|别字捉虫 -1分|一块小砖 -2分|砖头一堆
  • 内容:
  •             注:1.评论时输入br/即可换行分段。
  •                 2.发布负分评论消耗的月石并不会给作者。
  •             查看评论规则>>