凌晨3:17的上海漕河泾,像一座运转到一半突然停机的巨型服务器。办公楼里零星亮着的窗口,是还在处理故障的运维工程师,或是赶进度的程序员。
沈蔓的手指在机械键盘上敲出最后一行修复代码。屏幕右下角的时间跳到了03:17,这是她在易达科技连续加班的第五个通宵。
手机在堆满咖啡杯的桌面上震动起来,屏幕显示“江苏省人民医院重症监护室”。
她接起电话,右手已经习惯性地点开手机银行。
“沈小姐,你父亲出现了术后感染,需要立即转入ICU。”王医生的声音平静专业,“前期费用八万左右,另外之前欠的三十万手术费,财务催过很多次了。”
沈蔓看向手机银行余额:6231.47元。花呗额度已用尽,京东白条还剩三千。
“我明天上午十点前打八万过去。”她的声音比自己想象中平静,“麻烦您先用药。”
挂断电话,手指在微微颤抖。
她打开一个加密的Excel文档,标题是《家庭债务清算计划》。最新一行的数字让她闭上眼睛:
· 父亲第一次手术欠款:¥300,000
· 本次ICU预估费用:¥80,000
· 弟弟沈浩彩礼(母亲要求):¥200,000
· 老家房子翻修(舅舅转达):¥80,000
· 母亲高血压药费(每月):¥800
总计:¥660,800
她的税后月薪是两万八。扣除浦东金杨新村的一室户租金5500元、每月给家里3000元、通勤伙食等生活开支3500元,每月能存一万六。不吃不喝还清债务需要——41.3个月,三年零五个月。
而父亲等不了三年零五个月。
手机又震了。这次是微信,母亲发来59秒的语音。
点开,先是压抑的啜泣:“蔓蔓,你爸今天又说胡话了,说不想治了……妈知道你难,但医院说再不做第二次支架,随时可能……”
语音在这里断了。
沈蔓把手机倒扣在桌上,从抽屉里拿出半包苏打饼。机械地咀嚼,吞咽,像在完成某种维持生命的仪式。
她重新打开电脑,开始更新简历——这是她第四次更新,每次压力大到临界点时就会做这件事,像某种自我确认:至少还有离开的能力。
简历上,工作经历那一栏写着:
易达科技·高级前端工程师(2021.03-至今)
· 主导星图科技推荐系统前端架构,性能提升40%
· 设计并实现动态负载均衡算法,降低服务器成本30%
· 三次获得季度技术贡献奖(均被直属总监林薇薇申报为团队成果)
她看着最后一行括号里的备注,手指收紧。
凌晨3:50,她关掉办公室的灯。背着沉重的ThinkPad双肩包走向电梯时,手机备忘录弹出提醒:“明待办:1. 医院转账 2. 周会PPT 3. 弟弟生礼物(预算200元)”
电梯镜面里映出她的脸:苍白,黑眼圈明显,扎着简单的低马尾,灰色卫衣的领口已经洗得有些发白。
走出写字楼,四月的夜风还带着寒意。马路对面罗森便利店的灯光是这片区域唯一的热源。
她需要一杯热咖啡,但看了眼手机余额,选择了冰柜里最便宜的矿泉水。拧开瓶盖时,手机第三次震动。
陌生号码,上海本地。
“请问是沈蔓工程师吗?我是星图科技CEO助理陈悦。公司有紧急技术故障需要您协助处理,可以按三倍时薪计费,从您接电话开始计时。”
沈蔓没有立刻回答。她走到便利店窗边,借着灯光快速搜索“星图科技 程屿”。
维基百科词条跳出来:程屿,30岁,MIT人工智能博士,星图科技创始人兼CEO。福布斯30岁以下精英榜,胡润U30创业领袖。技术专长:强化学习、推荐系统。
她往下翻,找到他两年前在KDD大会上的演讲视频。点开,快进到技术细节部分。
视频里的男人站在讲台上,白衬衫挽到小臂,用清晰的逻辑阐述多目标推荐中的帕累托前沿优化问题。台下提问环节,有个学生问了个基础问题,他皱了皱眉,但还是耐心解答了。
沈蔓关掉视频,看了眼时间:凌晨4:05。
她回复陈悦:“地址发我,我自己过去。”
---
同一时刻,张江科技园星图科技大楼。
程屿站在监控大屏前,看着疯狂跳动的错误志。会议室里六位技术负责人没人敢抬头。
“解释。”他只说了两个字。
AI产品线负责人擦了擦汗:“‘星图3.0’推荐算法,在用户量突破百万级时出现了数据污染。算法把母婴用品推给了单身男性,把竞品广告推给了VIP客户。目前收到三百多起投诉,微博开始有话题了……”
“损失预估?”
首席技术官硬着头皮:“如果三小时内不能修复,要赔给‘乐购商城’两千万违约金,股价预估下跌5%-8%。”
程屿的指尖在会议桌上敲了敲。每一声都像倒计时。
“解决方案?”
“核心算法团队正在排查,但问题是……”CTO小心翼翼地看了他一眼,“林总监上周优化了代码结构,现在回溯需要时间。而且负责这个模块的沈工是外包人员,今晚请假了。”
“请假理由?”
“说是家里有事。”
程屿走到落地窗前。凌晨的张江,依然有无数窗口亮着灯,像一座永不停歇的数字蜂巢。
三年前他放弃MIT的教职回国创业时,没想过会面临这种局面——一个估值百亿的AI独角兽,因为一个人的缺席就可能崩塌。
更讽刺的是,这个人还是个外包员工。
“找到她。”程屿转身,“一小时内我要见到人和解决方案。”
---
凌晨4:20,张江麦当劳。
沈蔓选择在这里见面,理由很实际:公共场所,有座和Wi-Fi,24小时营业,而且她需要一份汉堡——账可以记在对方公司头上。
程屿推门进来时,她正在啃第二口巨无霸。
她抬眼打量。黑色高领毛衣,深灰色西装外套,没有logo但剪裁极佳。身高目测185以上,最引人注目的是他的眼睛——极其锐利,像能直接看穿代码逻辑。
“沈工。”程屿在她对面坐下,没有任何寒暄,“我是程屿。”
“程总。”沈蔓咽下汉堡,抽出纸巾擦手,“故障描述?”
她甚至没问对方要不要喝点什么。
程屿眼中闪过一丝极淡的欣赏。他喜欢这种直接。“星图3.0推荐算法,用户量突破百万级时出现数据污染。用户画像与推荐内容完全不匹配。”
“志。”
程屿将iPad推过去。沈蔓接过来,手指迅速滑动。屏幕上的代码和错误志飞快滚动,她的眼神专注得像在拆解炸弹。
“问题在这里。”一分钟后,她指向一行代码,“林薇薇总监优化的‘用户特征提取模块’,她把三层嵌套循环改成了并行计算,但没处理好数据同步锁。”
程屿接过iPad:“你能确定?”
“给我十分钟。”沈蔓打开自己的笔记本电脑,连接手机热点。
程屿没有打扰她。他观察着这个女人——头发简单扎成低马尾,有几缕碎发散在脸颊边;脸色苍白,有明显黑眼圈;穿着普通的灰色卫衣和牛仔裤,脚上是磨损的New Balance运动鞋。
但她的手指在键盘上的速度,快得令人眼花缭乱。
“找到了。”沈蔓将屏幕转向他,“这是原始算法结构。这是林总监优化后的版本。她在这里把同步锁的范围缩小了,理论上能提升15%的性能。但她忽略了一点:我们的用户画像数据是实时更新的,当两个线程同时读写同一个用户特征向量时,没有锁保护,就会发生数据竞争。”
屏幕上出现了她模拟的数据流图。两个线程像两条贪吃蛇,互相吞噬对方的数据块。
“解决方案?”程屿问。
“两种。”沈蔓伸出两手指,“第一,恢复原来的同步锁范围,性能下降但稳定。第二,我重写这个模块,采用无锁数据结构,性能还能再提升10%。”
“你要多久?”
“方案一,现在就可以热修复,五分钟上线。方案二……”她看了眼时间,“需要两小时。”
“选方案二。”程屿毫不犹豫,“你需要什么?”
“安静,咖啡,还有你们Git仓库的写权限。”
程屿站起身,去柜台点了两杯美式。回来时,沈蔓已经完全沉浸在了代码世界里。
他开始注意到细节:她左手腕上有一道很淡的疤痕,像是旧伤。她敲击键盘时,右手小指习惯性微微抬起——这是长期使用机械键盘形成的肌肉记忆。她写代码前会先画架构图,用思维导图梳理逻辑。
凌晨5:50,第一缕晨光透过麦当劳的落地窗时,沈蔓敲下了最后一行代码。
```python
# 使用无锁队列实现用户特征更新
class LockFreeUserFeatureQueue:
def __init__(self):
self.feature_dict = defaultdict(lambda: UserFeature())
self.update_queue = Queue(maxsize=10000)
def update_feature(self, user_id, feature_vector):
# 将更新任务放入队列,由后台线程批量处理
self.update_queue.put((user_id, feature_vector))
def _batch_update_worker(self):
# 批量更新,减少竞争
batch_updates = []
while True:
try:
user_id, feature = self.update_queue.get(timeout=1)
batch_updates.append((user_id, feature))
if len(batch_updates) >= 100 or self.update_queue.empty():
self._apply_batch_updates(batch_updates)
batch_updates = []
except Empty:
if batch_updates:
self._apply_batch_updates(batch_updates)
```
“完成了。”她的声音有些沙哑,“新的算法模块,性能比原始版本提升25%,比林薇薇的‘优化版’提升40%。已经提交到hotfix分支。”
程屿立刻联系技术团队。五分钟后,CTO回电,声音激动:“程总,问题解决了!新算法通过压力测试,百万并发下零错误!响应时间缩短了28%!”
沈蔓已经开始收拾东西。她把笔记本电脑装进双肩包,喝完最后一口冷掉的咖啡。
“账单。”程屿说,“你开价。”
她想了想:“按三倍时薪,从凌晨三点四十五到五点五十,两小时零五分钟。我时薪是四百,三倍是一千二,两小时两千四,加上五分钟按半小时算,一共三千六。”
“奖金呢?”
“那是您的事。”
程屿看着她:“你救了一个可能损失两千万的,就要三千六?”
“我只做了我该做的部分。”沈蔓背起包,“如果程总觉得过意不去,可以把林薇薇优化失败的真相告诉易达科技的经理。我不想下次再为别人的错误加班到凌晨。”
她走到门口,又回头:“对了,咖啡和汉堡一共四十八块五,记得报销。”
玻璃门关上。
程屿独自坐在清晨的麦当劳里,看着那个背着双肩包走向地铁站的瘦削背影。
他打开手机,给助理发消息:“查沈蔓的所有资料。包括家庭背景、财务状况、职业履历。另外,预约德恒律所的李律师,明天上午十点。”
助理很快回复:“程总,沈蔓工程师的情况……有点复杂。她父亲重病欠债,弟弟要结婚彩礼,老家房子要翻修。保守估计,债务超过六十万。她在易达科技的前景也不乐观,直属上司林薇薇多次抢她功劳。”
程屿放下手机,看向窗外。
他想起三年前,母亲临终前握着他的手说:“小屿,不要学你爸爸。不要把婚姻当成生意。”
那时他发誓,绝不让自己的婚姻成为商业筹码。
但现在,一个计划在他脑中成型。
---
沈蔓在地铁2号线的车厢里,打开手机银行。余额还是6231.47元,但医院缴费通知已经发过来了。
她需要凑够八万。通讯录里一个个名字滑过——舅舅、大学同学、前同事。手指在每个名字上停顿,然后又滑走。
最后停在了“苏晴”。手指悬空三秒,还是移开了。
闺蜜在做自媒体博主,看起来光鲜,实则刚被MCN机构坑了违约金。
地铁到站,龙阳路。早高峰还没开始,但换乘通道里已经有人流涌动。她随着人群走向9号线,脑子里快速计算:
· 信用卡套现:额度三万,手续费2%
· 网贷平台:能借五万,年化利率24%
· 向公司预支工资:最多两万,需要林薇薇签字
每一条路都很难走。
她走到洗手间,用冷水一遍遍拍脸。镜子里的人脸色苍白,黑眼圈像晕开的墨迹。
手机又震了,医院发来的费用清单。她盯着数字看了很久,然后突然弯下腰,呕了几下——什么都没吐出来,只是胃在痉挛。
门外传来脚步声。她立刻直起身,抽纸巾擦脸,从包里拿出粉饼扑了扑。镜子里的女人重新变得冷静专业,只有微微发红的眼眶泄露了一丝痕迹。
走出洗手间时,她看了眼时间:早晨6:35。
手机收到程屿助理的转账通知:五千元技术咨询费,备注“预付款”。
紧接着是一条消息:“沈工,程总希望今天下午两点与您面谈,地点在陆家嘴国金中心德恒律师事务所。关于一份长期技术咨询,以及一份私人协议。他说,您不会后悔赴约。”
沈蔓站在地铁站喧嚣的人流中,看着这条消息。
私人协议?
她想起程屿在麦当劳看她的眼神——不是审视,更像是评估。评估价值,评估可用性,评估风险。
手机银行又弹出通知:程屿的个人账户转来三千六百元,备注“故障修复报酬”。
七分钟前她提出的金额,现在一分不少到账了。
这个男人,至少守信。
沈蔓回复陈悦:“地址发我。”
然后她打开加密的Excel文档,在《家庭债务清算计划》下面新建了一行:
“潜在解决方案:星图科技技术咨询合约(待评估)”
她保存文档,关掉手机,走进9号线早高峰的车厢。
新的一天开始了。而她的战争,才刚刚打响。