周二的早晨,刘星是被手机铃声吵醒的。
凌晨三点四十七分,屏幕在黑暗中刺眼地亮着,显示着王总的名字。刘星盯着那个名字看了三秒,才按下接听键。这个时间点打电话,只有一种可能——出事了。
“刘工,不好意思这么晚打扰你。”王总的声音沙哑,透着疲惫,“上海这边出问题了。我们部署在银行测试环境的系统,昨晚十一点开始出现大规模数据错误。”
刘星的睡意瞬间消失了。他坐起身,打开床头灯:“具体什么错误?”
“用户交易数据对不上,差了将近两千万。”王总顿了顿,“银行那边已经炸锅了,李处长凌晨一点给我打电话,发了很大的火。现在测试环境已经紧急关停了,但问题必须今天解决。”
“两千万……”刘星感觉后背发凉,“是系统计算错误,还是数据丢失?”
“还在查。技术团队通宵没睡,但没找到根本原因。”王总的声音里有一丝掩饰不住的焦虑,“刘工,你现在能不能马上来上海?我们需要你。”
刘星看了一眼身边熟睡的张颖,压低声音:“现在?最早的航班也要早上六点。”
“订六点的,到上海直接来银行。我已经让刘莹帮你订票了,她会联系你。”
“好。”
挂断电话,刘星坐在黑暗中,心脏跳得很快。两千万的数据误差,在金融系统里是灾难性的事故。如果这个问题在生产环境出现,后果不堪设想——不仅仅是项目失败,可能还要承担法律责任。
他轻手轻脚地起床,开始收拾行李。衣柜里还放着那条刘莹送的蓝色领带,他犹豫了一下,还是没拿。这种时候,不能再有任何分心。
手机震了一下,是刘莹发来的微信:“刘工,机票已订好,CA1851,6:15起飞。我到机场接您。”
他回复:“好,谢谢。”
然后是李总的微信:“刘星,上海的事我听说了。你马上去处理,公司这边我给你协调。记住,无论如何要保住项目,这是今年最重要的单子。”
刘星盯着那句话,感到了沉甸甸的压力。保住项目——这四个字意味着,他要解决一个可能解决不了的问题,要在不可能的时间里创造奇迹。
收拾完行李,才四点。刘星坐在客厅沙发上,打开笔记本电脑,尝试远程登录上海那边的服务器。但测试环境已经关停,他只能看日志文件。
凌晨的日志像瀑布一样在屏幕上滚动。他看到了异常:从昨晚十一点零三分开始,数据同步进程出现了大量错误,但系统没有报警,而是继续运行。直到对账系统在凌晨一点发现数据不符,才触发紧急关停。
问题出在哪里?他皱眉思考。数据同步是他亲自写的模块,经过无数次测试,不应该出这种低级错误。除非……有人动了代码。
这个念头让他心里一紧。他打开代码仓库,查看最近一周的提交记录。果然,昨天下午三点,有人提交了一个“性能优化”的修改,改的正是数据同步模块。
提交人是上海团队的一个中级工程师,叫陈涛。刘星点开那个提交,一行行看下去。修改逻辑看起来很合理:为了提升同步速度,把原来的单线程改成了多线程并发处理。
但问题就出在这里。金融数据的同步必须保证顺序,否则就会乱序。陈涛的修改忽略了这一点,导致不同账户的交易数据错位,最终汇总对不上。
刘星看着那几行代码,突然很想骂人。这么明显的错误,为什么能通过代码审查?为什么能部署到测试环境?上海团队的技术管理混乱到了什么程度?
但他现在没时间追究责任。当务之急是修复问题,恢复测试环境。
他给陈涛发了条微信:“陈工,醒了吗?看到你昨天提交的代码,数据同步模块有问题,需要紧急回滚。”
五分钟后,陈涛回复了:“刘工,那个改动我测试过,没问题啊。”
“问题很大。数据顺序乱了,导致汇总错误。你现在马上去银行,我们一起修复。”
“可是……”
“没有可是。”刘星打断他,“两千万的数据误差,银行那边已经关停了系统。如果今天解决不了,项目就完了。”
陈涛终于意识到了问题的严重性:“好,我马上去。”
放下手机,刘星揉了揉太阳穴。窗外还是黑的,只有远处高架桥上的车灯像一条流动的河。他想起一年前刚接手这个项目时的雄心壮志——要做一个业界领先的金融系统,要证明自己的技术实力。
现在呢?他像一个救火队员,到处扑灭因为管理混乱而起的火。
“你要走?”张颖的声音从卧室门口传来。
刘星抬起头,看见她穿着睡衣站在那里,脸上没什么表情。
“上海那边出问题了,我得马上去处理。”
“什么时候回来?”
“不知道,可能几天,也可能一周。”
张颖沉默了一会儿:“清清昨晚又咳嗽了,今天可能要去看医生。”
“严重吗?”
“还好,就是有点低烧。”张颖顿了顿,“你能早点回来吗?”
刘星看着她。结婚三年,这是她第一次用这种语气问他“能早点回来吗”。不是命令,不是通知,是询问,带着一点若有若无的依赖。
他心里一软,但马上又被现实拉回:“我尽量。但如果问题严重,可能要在上海待一段时间。”
“知道了。”张颖转身回卧室,“路上小心。”
门关上了。刘星坐在客厅里,突然觉得很累。这种累不是身体上的,是心里的一种无力感——他总是在关键时刻缺席,缺席儿子的成长,缺席妻子的需要,缺席家庭的责任。
但他没有选择。房贷要还,工作要做,项目要救。他像一台永不停歇的机器,被各种责任驱动着运转,直到零件磨损,直到彻底报废。
五点,他拖着箱子出门。母亲已经起来了,在厨房做早饭。
“星星,这么早?”母亲看见箱子,愣了一下。
“上海那边有事,得马上去。”
“吃了早饭再走吧,我煮了粥。”
“来不及了,妈。清清要是还发烧,你就带他去医院。”
“知道了,你放心吧。”母亲把一袋包子和鸡蛋塞进他手里,“路上吃。”
刘星接过袋子,心里一暖。无论什么时候,母亲总是最关心他吃没吃饭,穿没穿暖。
去机场的路上,他一边吃包子一边看手机。刘莹又发了几条消息,说已经到机场了,在出发层等他。王总发了银行那边的紧急会议安排,上午九点,所有相关人员都要到场。
他还看到了陈涛发来的道歉:“刘工,对不起,是我疏忽了。我已经在去银行的路上,会全力配合修复。”
刘星回复:“现在不是道歉的时候,先解决问题。”
机场出发层,刘莹已经等在那里了。她穿着一件米色的风衣,头发扎成马尾,看起来很精神,但眼睛里有血丝。
“刘工。”她迎上来,接过他的箱子,“您脸色不太好,昨晚没睡?”
“睡了几个小时。”刘星看着她,“你也是一晚上没睡吧?”
“嗯,跟着技术团队查问题。”刘莹小声说,“王总发了好大的火,把所有人都骂了一顿。”
“问题找到了,是陈涛昨天提交的代码有问题。”
“陈工?”刘莹愣了一下,“他平时很谨慎的,怎么会犯这种错误?”
“可能是赶进度,没仔细测试。”刘星顿了顿,“但这也暴露了管理的问题——代码审查不严,测试不充分。这不是一个人的责任,是整个团队的责任。”
刘莹点点头,没说话。她看起来有些紧张,手指不自觉地绞在一起。
“怎么了?”刘星问。
“刘工,我……我有件事想跟您说。”刘莹抬起头,“昨晚查问题的时候,我看到了一些不该看的东西。”
“什么?”
“银行的内部邮件。”刘莹压低声音,“李处长在邮件里说,如果这次问题不能及时解决,他考虑更换供应商。还说……还说已经接触了我们的竞争对手。”
刘星心里一沉。最担心的事还是发生了。项目危机不仅仅是技术问题,还引发了信任危机。
“邮件你还留着吗?”
“截图了,但不敢发。银行的内网监控很严。”
“好,我知道了。”刘星深吸一口气,“先解决问题,其他的事之后再说。”
登机,起飞。飞机爬升时,刘星看着窗外逐渐变亮的天空。云层之上,阳光灿烂,但云层之下,是灰蒙蒙的现实。
他打开笔记本电脑,开始写修复方案。手指在键盘上飞快地敲击,脑海里却在想刘莹说的那些话——竞争对手,更换供应商,信任危机。
如果这个项目丢了,会怎么样?他会失去晋升机会,可能还会被问责。公司的年终奖会泡汤,房贷的压力会更大。张颖会怎么看他?岳母会怎么说他?
不敢想。
他只能拼命写,把所有的焦虑和压力都转化成代码,转化成解决方案。
两个小时的飞行很快过去。落地上海时,才八点半。刘莹安排了车,直接去银行。
路上,王总打来电话:“刘工,到哪了?”
“刚出机场,半小时到银行。”
“好。李处长九点要开会,你直接来会议室。”王总顿了顿,“刘工,这次全靠你了。项目能不能保住,就看今天了。”
“我尽力。”
挂断电话,刘星看着窗外飞驰而过的风景。上海还是那个上海,高楼林立,车水马龙。但此刻在他眼里,这座城市像一座巨大的考场,而他即将面对一场决定命运的考试。
银行大楼里,气氛凝重。技术团队的人都到了,陈涛也在,看见刘星,他低下头,不敢对视。
“刘工。”陈涛小声说,“我……”
“现在不说这些。”刘星打断他,“把测试环境打开,我要看实时日志。”
“已经开了,在第三会议室。”
刘星走进会议室,打开电脑。屏幕上,系统日志实时滚动着。他看到了数据同步进程的错误信息,和他凌晨分析的一样。
“回滚到昨天的版本。”他对陈涛说,“然后重新部署。”
“已经回滚了,但数据已经乱了,需要修复。”
“我知道。”刘星开始写修复脚本,“你给我权限,我要直接操作数据库。”
“这……银行有规定,不能直接操作生产数据。”
“现在不是讲规定的时候。”刘星看着他,“两千万的误差,如果今天不修复,明天银行就会发律师函。你是要守规定,还是要保项目?”
陈涛犹豫了一下,还是给了权限。
刘星接过键盘,开始工作。他的手指在键盘上飞舞,一行行命令输入进去。会议室里很安静,只有敲击键盘的声音和空调的嗡嗡声。
刘莹站在他身后,看着屏幕上一行行滚动的代码。她看不懂那些复杂的逻辑,但她看得懂刘星专注的样子——眉头微皱,嘴唇紧抿,眼睛盯着屏幕,像在凝视一场即将到来的风暴。
那一刻,她觉得这个男人很帅。不是外貌上的帅,是那种专注于解决问题时的魅力。那种魅力,比任何外在的东西都吸引人。
九点,李处长准时走进会议室。他五十多岁,头发花白,穿着笔挺的西装,脸上没什么表情,但眼神很锐利。
“王总,刘工,问题解决了吗?”他直接问。
“正在修复。”王总连忙说,“刘工已经找到了问题原因,正在写修复脚本。”
李处长看向刘星:“需要多久?”
刘星抬起头:“给我两个小时。两小时内,修复数据,恢复测试环境。”
“你能保证修复后不再出问题吗?”
“我能保证修复这个已知问题。”刘星实话实说,“但不能保证系统没有其他潜在问题。我建议修复后进行全面测试,确保万无一失再重新上线。”
李处长盯着他看了几秒,点点头:“好,我给你两个小时。两小时后,我要看到结果。”
说完,他转身走了。会议室里的人都松了口气。
王总拍拍刘星的肩:“刘工,全靠你了。”
刘星没说话,继续埋头写代码。他知道,这两个小时,将决定这个项目的生死,也将决定他在公司的未来。
时间一分一秒地过去。修复脚本写好了,开始运行。屏幕上,数据一条条被修正,进度条缓慢地前进。
百分之十,百分之二十,百分之五十……
会议室里的人都屏住呼吸,盯着那个进度条。陈涛的额头在冒汗,刘莹的手心也在冒汗。
刘星看起来很平静,但只有他自己知道,心跳有多快。每一行代码,每一个判断,都不能出错。错了,就全完了。
百分之八十,百分之九十,百分之百。
“修复完成。”刘星说。
所有人都松了一口气。
“启动测试环境。”刘星对陈涛说。
测试环境重新启动。刘星写了一个自动对账脚本,开始核对数据。十分钟后,脚本输出结果:数据完全一致,误差为零。
“成功了。”刘莹小声说,声音里有抑制不住的激动。
刘星靠在椅背上,长长地出了一口气。后背的衬衫已经湿透了,贴在身上,很难受。但他顾不上这些,立刻开始写测试方案。
“陈工,你按照这个方案,组织团队进行全面测试。每个模块都要测,每个边界条件都要覆盖。”他把文档发过去,“今天下班前,我要看到测试报告。”
“好,我马上去安排。”陈涛如释重负,赶紧去干活了。
会议室里只剩下刘星、刘莹和王总。
“刘工,辛苦了。”王总递给他一瓶水,“这次多亏了你。”
“问题还没彻底解决。”刘星喝了口水,“这次是代码审查不严导致的事故。我建议成立专门的质量保证小组,所有代码必须经过严格审查才能上线。”
“我同意。”王总点头,“这个事你来负责。”
“还有,”刘星顿了顿,“我听说银行在考虑更换供应商?”
王总脸色一变:“你怎么知道?”
刘莹低下头,不敢说话。
“这不重要。”刘星说,“重要的是,我们要用行动重新赢得信任。我建议主动邀请银行的技术团队参与我们的代码审查和测试,让他们看到我们的专业和透明。”
王总想了想:“好,我会跟李处长谈。”
会议结束,王总去跟李处长汇报了。会议室里只剩下刘星和刘莹。
“刘工,您真厉害。”刘莹轻声说。
“只是解决了该解决的问题。”刘星揉了揉太阳穴,“刘莹,银行邮件的事,不要再跟任何人说。这种事情很敏感,处理不好会惹麻烦。”
“我知道了。”刘莹点头,“我就是……就是担心您。”
刘星看着她。女孩的眼睛很清澈,里面有关心,有崇拜,还有一些他不敢深究的东西。
“谢谢你。”他说,“去休息吧,一晚上没睡了。”
“您也休息一下吧。”
“我还有测试方案要完善。”
刘莹没再劝,她知道劝不动。这个男人就是这样,一旦工作起来,就完全投入,忘记时间,忘记疲惫。
她走出会议室,在门口回头看了一眼。刘星又坐在电脑前,手指在键盘上敲击,眉头微皱,完全沉浸在自己的世界里。
那一瞬间,她突然很心疼。心疼他总是把所有的责任都扛在自己肩上,心疼他总是忽略自己的疲惫,心疼他活得像一台永不停止的机器。
但她什么也不能做。只能看着,只能关心,只能在心里默默地说:刘工,您要好好的。
会议室里,刘星写完了测试方案,发给陈涛。然后他靠在椅子上,闭上了眼睛。
累,真的很累。但这种累,比面对岳母的审判,比面对张颖的冷漠,比面对生活的无力感,要好得多。
至少在这里,他是刘工,是能解决问题的技术专家。他的价值,体现在代码里,体现在系统里,体现在每一次成功解决问题的时刻。
而在BJ呢?他是谁的丈夫?是谁的父亲?是谁的女婿?那些角色,每一个都让他窒息。
手机震了一下,是张颖发来的微信:“清清去医院了,医生说没事,就是普通感冒。你那边怎么样了?”
他回复:“问题解决了,但还要在上海待几天。”
“知道了。”
对话到此结束。像两个陌生人,互相通知一下近况,然后各自回到自己的世界。
刘星放下手机,走到窗边。银行大楼很高,从这里能看到小半个上海。阳光很好,天空很蓝。
但他心里,还是灰蒙蒙的。
他知道,这次危机只是暂时解决了。更大的危机还在后面——银行的信任危机,公司的管理危机,还有他自己人生的中年危机。
这些危机,不是写几行代码就能解决的。它们像一张巨大的网,把他牢牢困住,越挣扎,缠得越紧。
但他还是要挣扎。
因为不挣扎,就真的完了。
他深吸一口气,转身回到电脑前。
还有工作要做。
还有很多很多工作要做。

