上午八点五十分,陆鸣提前十分钟到了百川团队的办公区。
实习生工位区在靠窗那一排,阳光正好,能看见楼下街道上匆忙赶路的上班族。工位上已经坐了几个人,有人在啃包子,有人在看代码输出日志,键盘声噼里啪啦地响,空气里弥漫着一股咖啡和打印纸混合的味道。
陆鸣刚坐下,旁边一个戴黑框眼镜的男生就探过头来:“新来的?我叫郑远,比你早来三天。”
“陆鸣。”
“知道知道。”郑远压低声音,“初赛第一嘛,群里的公告都挂出来了,说你是赵总钦点的天才选手。”
陆鸣还没来得及接话,身后传来一道不冷不热的嗓音:“天才选手?那得看是真金还是镀金。”
陆鸣转头,看见一个穿着深灰色衬衫的男人站在过道里,手里端着一杯美式,嘴角挂着似笑非笑的弧度。工牌上写着他的名字——王磊,高级技术工程师。
“王哥说话别这么冲嘛。”郑远打圆场。
王磊没搭理郑远,目光落在陆鸣脸上:“百川的数据库,用的是我们团队自主研发的分布式架构,你熟悉过吗?”
“了解过文档。”陆鸣说,“具体的代码逻辑,我还在读。”
“读?”王磊笑了一下,“等你读完,黄花菜都凉了。手底下见真章,别光靠一张嘴和一份PPT吃饭。”
他说完转身走了,咖啡杯在桌沿磕了一下,发出清脆的声响。
郑远等王磊走远,才小声嘀咕:“你别往心里去,他就那样,谁来了都怼两句。上回新来的实习生被他怼哭了三个。”
陆鸣没说话,低头打开电脑,点开了百川项目的代码库。
九点整,赵峰准时到了会议室门口,朝陆鸣他们几个实习生招了招手:“进来,开晨会。”
会议室不大,一张长桌坐了十个人左右,赵峰站在白板前面,三言两语把今天的工作任务交代清楚。陆鸣分到的模块是一组数据分析接口,负责把前端采集的用户行为数据清洗、归类,然后喂给模型训练。
“这批数据很重要。”赵峰说这句话的时候,目光扫过所有人,“百川的整体框架已经搭好了,数据质量直接决定模型表现。谁要是给我整出幺蛾子,别怪我不给面子。”
会议结束后,陆鸣回到工位,打开数据接口的源代码开始读。
代码写得不算差,逻辑是清晰的,但细节上有不少冗余和低效的地方。陆鸣一边看一边在脑子里跑逻辑流,手指不时在笔记本上记几个要点。这个模块如果能重写一部分,处理速度至少能提升百分之二十。
他没有急着动手,先把整段代码通读了三遍,确认自己理解了每一行的作用,才开始敲第一行代码。
这一敲,就是四个小时。
午休的时候,郑远喊他去吃饭,陆鸣摇头说你先去,我手里这一段写完再走。等郑远回来的时候,他看见陆鸣面前的屏幕上一片密密麻麻的代码,测试窗口里的日志正在疯狂滚动。
“你这是在干嘛?”郑远凑过来看了一眼,倒吸一口凉气,“你把整个数据接口重写了?”
“没全重写,”陆鸣抿了一口凉透的咖啡,“改了大概一半的核心逻辑。”
郑远张了张嘴,半天没憋出一个字来。他站在旁边看了两分钟测试日志,表情从惊讶变成认真,再从认真变成茫然。
“你这个归并策略……我怎么没见过?”
陆鸣没解释,因为解释起来太麻烦。这是星辉系统前两天解锁的“增量数据处理技术”,不是市面上任何公开算法能套用的东西。他只是把它装进了脑子里,然后用手敲了出来。
下午三点,第一轮测试跑完。数据接口的处理速度提升了百分之三十四,误差率控制在千分之一以内。
陆鸣把结果打包成邮件,发给了赵峰。
五分钟不到,赵峰的回复来了:到我办公室来一趟。
陆鸣站起来,穿过工位区的时候,感觉到有目光从四面八方落在他身上。王磊坐在角落里,抬眼看了他一眼,表情淡淡的,看不出情绪。
赵峰的办公室不大,落地窗采光极好。赵峰坐在电脑后面,屏幕上正是陆鸣发过去的那封邮件。
“你写的?”他抬头问。
“是。”
“全部?”
“全部。”
赵峰盯着他看了几秒,然后把屏幕转过来让陆鸣看:“你这个归并策略,我怎么从来没见过?你从哪学的?”
陆鸣心脏轻轻一紧。他早就料到会有这个问题,也提前准备好了答案——大学期间自己研究过一些开源项目,做了一点改进。这不算撒谎,只是没有把全部的真相说出口。
“我自己琢磨的,”他说,“之前在做个人项目的时候试过类似的思路,没想到能用在百川的数据接口上。”
赵峰没有追问,只是点了点头,语气里难得带了一点赞赏:“不错。你继续保持这个节奏,两天之内把整个接口优化完,有问题随时找我。”
陆鸣应了一声,转身往外走。手刚碰到门把手,赵峰忽然叫住他:“对了。”
“明天下午百川有一个阶段性汇报,梁总会亲自到场听。你把你这个优化成果整理一下,到时候上台讲。”
陆鸣一愣:“我?”
“你做的,当然你来讲。”赵峰说,“怎么,不敢?”
“没有。”陆鸣说,“我准备。”
回到工位,郑远已经用一种崇拜的目光看着他了。陆鸣没顾得上跟他唠,打开PPT开始整理优化的思路和测试数据。他写得很快,因为脑子里那些东西本来就是清晰的,只需要把它变成可视化的形式。
傍晚六点,陆鸣保存好PPT,去茶水间接水。回来的时候,他注意到自己的电脑锁屏了——他明明记得走之前没有按锁屏快捷键。
他皱了皱眉,输入密码解锁,检查了一圈,没什么异常。
也许是错觉。
第二天下午两点,百川阶段性汇报准时开始。
会议室里坐了十几个人,梁景辉坐在长桌正中央的位置,赵峰坐在他左手边,王磊和几个核心成员坐在对面。陆鸣坐在靠门的位子上,面前的笔记本上摊着一份打印出来的汇报提纲。
前面汇报的人依次讲了模型优化、框架搭建和算法升级,数据和逻辑都很充实的,但梁景辉脸上始终没什么表情,偶尔提一两个问题,问得很刁,把人逼得额头冒汗。
轮到陆鸣了。
他站起来,走到长桌前面的展示屏旁,插上U盘,打开PPT。
第一页是他的处理结果对比表,左边是优化前的数据,右边是优化后的数据,两条曲线一对比,差距一目了然。
“这是我对数据接口的优化方案。”陆鸣的声音很稳,不疾不徐,“重点改了三个模块——数据归并策略、缓存淘汰机制和异常回滚逻辑。优化之后,接口处理速度提升了百分之三十四,内存占用下降了百分之二十二,并发场景下的卡顿发生率降低了接近一半。”
他说到第三个模块的时候,梁景辉忽然抬手打断了。
“你刚才说的异常回滚逻辑,具体用了什么策略?”
陆鸣没有停顿,直接答道:“一个基于事件队列的增量回滚机制。当单个数据包处理失败时,系统不整体回滚,而是把失败的数据包标记出来,放入隔离队列,同时把依赖该数据包的后续任务挂起等待。等到异常产生的原因被修复,隔离队列里的数据包重新入队,挂起的任务同步恢复执行。”
会议室安静了两秒。
梁景辉点了点头,没有继续追问。但他的眼神里,分明多了一点什么。
汇报继续进行,陆鸣把最后几页讲完,确认没有遗漏,拔掉U盘回到座位上。他注意到王磊的目光一直没离开过他,那种目光不是好奇或者佩服,而是一种混合着审视和警惕的东西。
汇报结束后,梁景辉没有多说什么,只让所有人整理好版本记录,明天把代码全部提交到统一仓库。赵峰在会后拍了拍陆鸣的肩膀,说了一句“讲得不错”。
但陆鸣心里没有太大的波动。因为他发现了一件事。
汇报开始前,他插入U盘的时候,U盘里多了一行陌生的文件路径。
那不是他创建的。
回到工位,陆鸣没有声张。他重新检查了一遍U盘,发现那个路径是一串哈希值,点进去之后是一个隐藏的日志文件,记录了最近二十四小时内U盘在本机上的所有读写操作。
他看不懂这个日志的完整含义,但能看懂最后一行的意思——
有人在他汇报之前,通过这台电脑往U盘里写入了一份数据。
陆鸣的手指停在键盘上,脑袋飞速运转。他努力回想昨天到今天的所有细节,确认了一件事:他没有在任何人的电脑上插过这个U盘,除了一台——他自己的工位电脑。
那么问题来了:如果U盘是在他的工位上被动了手脚,那么动手脚的人,也一定经过了这台电脑。
他想起了昨天锁屏消失的那一幕。
陆鸣关掉了日志文件,面无表情地打开了一份新的文档,开始一条一条地梳理整件事情的脉络。整个办公区安静得像一潭死水,只有空调的风声和键盘的声音此起彼伏。
他没有声张。他需要证据。
当天晚上九点,其他人都走得差不多了,陆鸣还坐在工位上。他打开星辉系统,调出了最新的模块——数据行为回溯。
系统面板上浮现出一行字:目标数据源。
陆鸣输入了那串哈希值的索引,系统开始运行。屏幕上的日志像潮水一样滚动,一条一条地抓取、比对、关联。几秒钟之后,系统锁定了一组特征——那段写入操作的来源IP,是公司内部网络的一个子网地址。
陆鸣把这个地址记下来,在内部通讯系统里查了一下归属。
归属人是王磊。
陆鸣靠在椅背上,望着天花板上惨白的灯管,心里翻涌着一股说不清的滋味。他想起王磊在会上沉默的目光,想起王磊那句“别光靠一张嘴和一份PPT吃饭”,想起昨天那个被锁屏的空档。
他不是没有怀疑,而是不愿意去怀疑。同一个团队,同一个项目,才刚开始,就要动刀子?
但他没有犹豫太久。
他把所有的证据截屏、备份、加密存储,然后关闭了系统界面。电脑屏幕暗下去,倒映出他年轻的脸。他站起来,走到窗边,看着楼下街道上零零星星的车灯划过夜色。
王磊为什么这么做?
百川项目的成功对所有人都有利,数据泄露对王磊有什么好处?除非他想要的不是一个成功的百川,而是一个混乱的百川。
陆鸣握紧了手机。
他没有告诉赵峰,没有告诉梁景辉,也没有在群里发任何消息。他现在手里只有一份行为回溯的记录,这能说明问题,但不一定能钉死一个人。他需要更硬的证据。
而拿到这种证据的唯一办法,就是等王磊再动一次手。
陆鸣拿起外套,关了工位的灯,走进了电梯。电梯门缓缓合拢的时候,他看了一眼王磊工位的方向,那个座位已经空了,桌面收拾得很干净,什么都看不出来。
有些人,白天是同事,夜里是鬼。
第二天上午,一段处理过的数据出现在测试环境中,导致模型训练跑出了严重偏差的结果。梁景辉在办公群里直接发了一条语音,语气冷得像刀削冰:“谁动过测试数据?”
办公室里安静得能听见自己的心跳。
陆鸣深吸一口气,打开面前的文件夹,把整理好的证据一份一份地调了出来。他看见王磊坐在斜对角的位置上,没有抬头,手指在键盘上不紧不慢地敲着,像是什么都没有发生过。
陆鸣想,是时候了。