实用科技屋
霓虹主题四 · 更硬核的阅读氛围

码农的日常:键盘上的生活

发布时间:2025-12-13 03:50:29 阅读:503 次

早上八点半,地铁刚到站,老张已经掏出手机刷起了公司内部系统。昨晚提交的代码还没过测试,CI/CD 流水线卡在了集成测试那一步。他一边走一边翻日志,嘴里念叨着‘不可能是我的问题’,其实心里清楚得很——八成又是环境变量没配对。

咖啡还没喝上一口,Bug 先来了

工位坐下不到五分钟,企业微信弹出消息:‘生产环境报错,用户登录不了。’ 值班同事@了他,附带一张堆栈截图。老张放下咖啡杯,点开监控平台,CPU 使用率飙到了95%。他迅速打开终端,连上服务器:

tail -f /var/log/app.log | grep -i error

几秒后,一行红色的日志跳了出来:NullPointerException。又是空指针,熟悉的配方。他翻出昨天改的那段逻辑,发现有个缓存未命中时返回了 null,调用方没做判空处理。改起来不难,但得先写个单元测试补漏。

会议室里的拉锯战

下午两点,项目评审会。产品经理拿着原型图讲新功能:‘这个按钮点击后要实时同步到所有端。’ 老李在角落皱眉,小声嘀咕:‘实时?那得上 WebSocket,还得加心跳保活,延迟控制不好用户体验更差。’ 但他没多说,只是在本子上记下‘评估长连接资源消耗’。

会后,他打开 IDE,新建一个 Spring Boot 模块,试着搭了个简单的消息广播 demo:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/topic");
}
}

跑通之后发给前端同事看效果。对方回了个‘可以,但安卓老版本可能不兼容’。老李叹了口气,把方案备注改成‘降级轮询’。

下班前的最后一行提交

晚上七点四十分,办公室灯还亮着。老张终于把修复补丁合并进主干,顺手写了个自动化脚本清理临时数据:

#!/bin/bash
for db in $(mysql -e "SHOW DATABASES;" | grep test_); do
    mysql -e "DROP DATABASE $db;"
done

脚本跑完,顺手在团队频道里打字:‘修好了,删了200多个废弃测试库,省了15G空间。’ 对方回了个鼓掌表情。他关掉屏幕,拎包走出大楼,外面已经开始下雨。路过便利店买了瓶啤酒,在公交站边喝边等车。

手机又震了一下,是 GitHub 的通知:新的 Pull Request 被合并了。他笑了笑,把空瓶扔进垃圾桶。