第二天早上七点半,陆鸣比平时早到了四十分钟。
办公室里空旷安静,只有清洁阿姨在走廊尽头拖地,水渍在地板上反射出细碎的光。他把背包放在工位上,打开电脑,屏幕上跳出一条系统通知——昨晚提交的那份代码审查已经通过了,老刘批注了一句:逻辑清晰,建议作为新人培训案例。
“案例?”陆鸣盯着屏幕,忍不住笑了一下。他心里清楚,那些代码之所以能写得那么规整,全靠“星辉系统”在后台帮他推演了三套架构方案,他从中选了一个最稳妥的版本,再加上几轮微调才交上去。
他正准备再研究一下今天要处理的任务清单,身后突然传来脚步声,接着是一个带着咖啡味的低沉嗓音——
“来得挺早。”
陆鸣回过头,王磊站在他身后,手里端着一杯冒着热气的黑咖啡,脸上的表情看不出是赞赏还是别的什么。他穿着一件深灰色的衬衫,袖口挽到小臂,戴着块看起来不便宜的机械表。
“习惯了早起。”陆鸣站起来,礼貌地笑了笑,“王哥早。”
“别叫哥,叫王工就行。”王磊走到自己的工位,把咖啡杯放下,拉开椅子的声音有些大,“昨天老刘让我给你安排了几个基础任务,你先熟悉一下系统架构。”
他说着,在电脑上操作了几下,陆鸣的邮箱立刻弹出一封新邮件。打开一看,附件里躺着三个任务文档,每一个标注的完成时限都是今天下班前。
陆鸣扫了一眼任务内容,眉头微不可察地皱了一下。第一个任务是修复一个三年前遗留的缓存bug,问题描述只有一句话,没有任何日志和复现步骤。第二个任务是给一套复杂的数据清洗模块写接口文档,涉及的类文件超过四十个。第三个任务——他盯着那行字看了两秒才确认自己没有眼花——重构支付模块的用户鉴权逻辑。
他抬起头看向王磊。
王磊正靠在椅背上喝咖啡,目光越过杯沿落在他身上,嘴角挂着一丝若有若无的弧度。
“有问题?”王磊问。
“没什么。”陆鸣收回视线,重新把注意力放在屏幕上,“我尽快完成。”
“尽快可不够,”王磊慢悠悠地补了一句,“明天早上的技术评审会上要用,你手上的东西要是没跑通,到时候别怪我汇报上去的时候不好说。”
这句话的意思很明确——今天必须做完,而且不能出任何差错。
陆鸣没有立刻作答。他深吸一口气,手指放上键盘,同时在脑海里轻轻触发了系统界面。淡蓝色的半透明面板在视野右上角展开,技能点余额依旧是4点,下面的可解锁路径清晰排列着。
“现在不是犹豫的时候。”他想,目光锁定在【高阶代码架构】那条路径上,后面标注的激活点数是8点。还差4点。
他退出系统界面,将三个任务的文档关掉,只留下第一个任务的bug描述。他没有急着动手,而是先把公司过去半年所有的系统变更记录调了出来,用系统辅助分析功能快速过了一遍。
二十分钟后,他找到了问题所在。
三年前的缓存bug,实际上是由一次不完整的数据库迁移引起的。当时的开发人员只迁移了核心业务表,却漏掉了一个关键配置表的索引结构,导致每次缓存刷新时都会触发一次全表扫描。在数据量较小时影响不大,但随着业务增长,这个漏洞慢慢积累成了一个定时炸弹——每到月底结算日,系统就会因为缓存刷新的高延迟导致页面加载缓慢,严重影响用户体验。
“把索引补上,再加一层分布式锁控制刷新频率,问题就能解决。”陆鸣在心里推演了几遍方案,确定没有遗漏,才开始动手敲代码。
办公室里的同事陆续到岗,周围逐渐热闹起来。键盘声、电话铃声、低声的讨论交织在一起。陆鸣完全沉浸在手头的工作里,几乎感觉不到时间的流逝。
等他写下最后一个分号,确认编译通过、自动化测试全部跑通的时候,屏幕上显示的时间是十点二十三分。第一个任务,用时不到两小时。
他把补丁提交到测试分支,附上详细的变更说明和测试覆盖情况,然后打开第二个任务——那个四十多个类文件的接口文档。
这个任务看起来更繁琐,因为有太多“王磊故意设置了阅读障碍”的痕迹。代码里的变量命名混乱不堪,中文拼音和英文单词混杂在一起,同一个功能在不同的类里被重复实现,注释几乎没有,还有几个方法体超过了两百行,逻辑嵌套深得让人头皮发麻。
“故意的。”陆鸣低声嘟囔了一句。
他调出系统的代码分析模块,把整个模块的源代码全部过了一遍。系统后台自动生成了一个结构化的调用关系图,把所有方法、接口、数据流全部可视化。陆鸣对着那张图,花了四十分钟理清了整个模块的业务逻辑,又花了两个小时把文档写完,每一个接口的参数、返回值、异常场景都标注得清清楚楚。
他提交文档,看了一眼时间——下午一点十五分。中间他只喝了两口水,没有吃午饭。
剩下的第三个任务,重构支付模块的鉴权逻辑。
陆鸣知道这个任务的分量。支付模块是整个系统的核心,一旦出了问题,损失的就不是时间,而是真金白银和客户信任。王磊把这个任务丢给他,无非是两个结果——要么他做不出来,在老刘面前丢脸;要么他做出来但出了差错,后果更严重。
“不管我怎么选,他都不亏。”陆鸣哼了一声,嘴角带着一丝凉意。
他打开支付模块的代码,先花了一个小时把现有逻辑完整过了一遍。王磊没有告诉他的是,这个模块前段时间刚经历过一次紧急改版,新旧两套逻辑还混在一起没有完全剥离,接口之间存在着大量隐形的依赖关系。如果直接动手重构,百分之百会触发连锁故障。
陆鸣靠在椅背上,揉了揉太阳穴。系统界面在他脑海里闪烁了一下,他忽然看到了一条之前没注意到的提示——【支线任务:识别并梳理未标记的接口依赖关系,完成后可获得2点技能点奖励。】
“原来还有这种奖励机制。”他精神一振,快速切入分析模式。
接下来的三个小时,他没有动一行代码,而是在系统辅助下绘制了一副完整的接口依赖拓扑图。图上标注了三十七处未被文档记录的隐性调用,其中七处属于高危关联,一旦处理不当就会导致整个支付链路崩塌。
他把这幅图加上详细的标注文档,整理成一个独立文件,然后才开始着手重构。每重构一个接口,他都会在自己的依赖图上做一次交叉验证,确保没有遗留的隐患。
下午五点半,他提交了第三份方案,附上了接口依赖拓扑图和风险预警说明,然后给老刘单独发了一条消息:支付模块重构已完成,建议上线前安排一次集成测试。
发完消息,他整个人往椅背上一靠,感觉肩膀酸得快抬不起来了。
“辛苦了,还没走?”林姐的声音从旁边传过来。
陆鸣侧过头,看到林姐端着一杯奶茶站在那儿,用一种复杂得难以解读的眼神看着他。
“王工布置的任务,刚弄完。”陆鸣回答得很轻松。
“三个都做完了?”
“嗯。”
林姐沉默了片刻,忽然把奶茶放到他桌上,说:“给你的,喝了吧。一个新人做这些东西,连午饭都没吃,我看着都不忍心。”
陆鸣愣了一下,随即笑了,端起奶茶喝了一口,温热的甜味顺着喉咙滑下去,确实很舒服。
“谢谢林姐。”
“别谢我,谢你自己。”林姐压低声音,目光往王磊那个方向瞥了一眼,“那边那位,今天盯着你看了大半天。我刚才路过的时候,看到他脸色不太好。”
陆鸣顺着她的视线看过去,王磊果然正低头盯着什么,但紧抿的嘴唇和略微绷紧的下颌线都出卖了他此刻的心情。
“让他看。”陆鸣收回目光,语气平淡,“我做我该做的事。”
话音刚落,老刘从办公室里大步走了出来。他穿着一件深蓝色的POLO衫,手里拿着一个平板电脑,表情介于严肃和兴奋之间,目光直接锁定在陆鸣身上。
“小陆,你过来一下。”
陆鸣站起来,跟着老刘走进办公室。门关上的那一刻,他看到王磊也抬起了头,目光像钉子一样扎在他身上。
办公室里,老刘把平板放到桌上,屏幕上是陆鸣提交的那份接口依赖拓扑图。他指着图上标注的高危关联点,语气里带着明显的意外和欣赏:“这东西是你画的?一个新人,花了半天时间,就把支付模块的依赖关系摸得一清二楚?”
“之前没接触过这个模块,但代码的逻辑链路是有规律可循的。”陆鸣不卑不亢地回答,“我不过是花时间做了梳理。”
“花时间?”老刘笑了一声,“这个模块在公司跑了大半年,我让高级组的人来梳理,他们也做不到半天拿出这种质量的东西来。”
他顿了顿,目光变得更深:“王磊给你安排的任务,我都看到了。三个任务,一个比一个棘手,普通新人三天的量,他让你一天做完。”
陆鸣没接话。
“你全都做完了,而且质量超出预期。”老刘的目光里多了一丝深意,“你手上这份拓扑图,至少可以帮我们在未来避免三个潜在的重大故障。我让人评估过,每个故障一旦爆发,损失至少在百万级别。”
陆鸣心里一动,系统界面上忽然弹出提示——【技能点+2,当前余额:6点】。
他压下心头的波澜,保持着一个新人该有的谦逊姿态:“这是我应该做的。”
“不,这是你超出期待做到的。”老刘站起来,拍了拍他的肩膀,“小陆,好好干,我这边有你发挥的空间。”
陆鸣走出办公室的时候,天色已经完全暗下来了。他回到工位收拾东西,余光扫到王磊的座位已经空了,但桌上那杯黑咖啡还剩下半杯,已经凉透了。
他背上包,经过林姐的工位时,林姐喊住他,用一种半开玩笑的语气说:“小陆,你现在可是刘总面前的红人了。我建议你下次小心点,王磊那种人,你打了他一巴掌,他不会只记一个月的仇。”
“谢谢林姐提醒。”陆鸣冲她笑了笑,“我心里有数。”
走出公司大门,夜风吹过来,带着初夏混杂着汽车尾气和路边摊香气的味道。陆鸣站在路灯下掏出手机,看到老刘刚才发了一条群消息,把他今天提交的那个集成测试文档直接挂到了全部门的工作日报里,并附了一句评语:“新人陆鸣完成支付模块重构及依赖分析,表现优秀。”
群里沉默了几秒,然后跟了好几条拇指的表情。
陆鸣把手机收起来,看向夜空。城市的光污染让星星几乎看不到几颗,但他还是仰着头看了很久。
系统界面浮动在视野边缘,技能点数显示着那个让他心跳微微加速的数字——6点。
还差2点,他就能解锁那条【高阶代码架构】的路径了。
他低头看了一眼自己的手,握了握拳,感觉到一种从未有过的笃定。
还有一件事让他隐隐在意——在他提交那份接口依赖拓扑图后,系统界面最下方突然出现了一行小字,像是某种隐藏信息被激活了一样。
那句话很短,只有六个字:
“注意被锁定对象。”
他没有声张,只是拉紧背包带子,转身融入了夜色中的地铁人流。