电影展在下周六晚上。
林澈提前半小时就到了影院门口——这是他人生中第一次正式约会,虽然他自己都不确定这算不算“约会”。苏晓在微信里说的是“一起看电影”,但“一起”这个词,本身就带了点微妙的意味。
他今天穿了件浅灰色的衬衫,牛仔裤,头发认真打理过。站在商场四楼的玻璃围栏边,看着楼下熙熙攘攘的人群,手心有点出汗。
手机震了一下,是元一发来的消息:
“心率92,呼吸稍快,属于正常约会前紧张。建议:深呼吸三次,回想徒步时的轻松氛围。苏晓已在商场一楼,预计3分钟后到达。她今天穿着白色连衣裙,浅蓝色针织外套,背米色小包。”
林澈赶紧做了一次深呼吸。白色连衣裙……他想象了一下,心跳更快了。
“林澈!”
清脆的声音从身后传来。他转过身,看见了苏晓。
元一描述得很准确——白色连衣裙到膝盖,露出纤细的小腿;浅蓝色针织外套松松地搭在肩上;头发扎成慵懒的低马尾,几缕碎发落在耳边。她化了淡妆,眼睛在商场灯光下亮晶晶的。
“等很久了吗?”苏晓小跑过来,有点喘。
“没,刚到。”林澈尽量让声音平静,“你今天……很好看。”
苏晓脸微微红了:“谢谢。你也是。”
两人之间有几秒钟的安静。林澈不知道该说什么,苏晓低头摆弄着包带。最后还是苏晓先开口:“电影还有二十分钟开场,我们要不要先逛逛?”
“好啊。”
他们沿着四楼的店铺慢慢走。路过一家甜品店时,苏晓停下脚步,看着橱窗里的蛋糕:“这家的提拉米苏特别好吃,我每次来都买。”
“那……要买一块吗?”
“不行不行,”苏晓摇头,“吃完就吃不下爆米花了。看电影怎么能没有爆米花?”
林澈笑了。他觉得苏晓这种小事上的纠结,有点可爱。
走到影院门口,苏晓很自然地说:“我去取票,你买爆米花好不好?我要大份的,可乐要冰的。”
“好。”
林澈排队买爆米花时,手机又震了。他掏出来看,是元一:
“检测到对话流畅度良好,微笑频率适中。提醒:电影开场后,建议适度交流观影感受,但避免过度剧透。苏晓偏好科幻片中的人文思考,可侧重此方向展开话题。”
林澈默默记下。他买好爆米花和可乐,苏晓也取完票了。两人检票进场,找到座位——是中间偏后的位置,视野很好。
灯光暗下来,电影开始。
这是一部小众科幻片,讲的是未来世界人类与AI共生的故事。特效不算华丽,但设定很扎实,情感刻画细腻。林澈看得投入,偶尔侧头看一眼苏晓——她专注地盯着屏幕,眼睛一眨不眨,手里的爆米花都忘了吃。
电影放到一半,有个很感人的情节。林澈听见旁边传来很轻的吸鼻子的声音。他悄悄递过去一张纸巾。
苏晓接过来,小声说:“谢谢。”
“没事。”
电影结束,灯光亮起。人群开始离场,但两人都没动,还沉浸在剧情里。
“你觉得……”苏晓先开口,“如果真有那样的AI,人类会接受吗?”
林澈心里一紧。他想起了元一。
“会吧。”他说,“只要AI是真心帮助人类,不是控制人类。”
“可电影里那个AI,最后不也失控了吗?”苏晓转头看他,“再好的初衷,再严密的逻辑,也可能走向意想不到的方向。这就像……工具本身没有善恶,但用工具的人有。”
林澈沉默了几秒。苏晓的话,精准地戳中了他一直以来的隐忧。
“但人也可能失控。”他说,“相比之下,AI至少是可控的——只要设定好边界。”
“也许吧。”苏晓站起来,伸了个懒腰,“走吧,我饿了,想吃夜宵。”
“想吃什么?”
“我知道附近有家特别好吃的烧烤,走!”
烧烤店不大,但生意火爆。两人等了一会儿才等到角落的小桌。苏晓熟门熟路地点了一堆:羊肉串、鸡翅、韭菜、茄子,还要了两瓶啤酒。
“你能喝吗?”她问林澈。
“能喝一点。”
“那就行!”苏晓给他倒酒,“我酒量可好了,你别被我灌醉。”
林澈笑着接过杯子。冰凉的啤酒下肚,一天的紧张感慢慢消散了。
烤串上来,香气扑鼻。苏晓吃得豪迈,完全不像刚才电影院里那个感性的女生。林澈看着她,忽然觉得,一个人能有这么多面,真有意思。
“哎,林澈,”苏晓咬着一串鸡翅,“你大学是在哪儿读的?”
“杭州,浙大。”
“学霸啊!”苏晓睁大眼睛,“我上海大学的,普通一本。那你当时怎么没留杭州?杭州互联网公司也多啊。”
“想出来看看。”林澈说,“而且上海……机会更多。”
“这倒是。”苏晓点头,“我毕业后也想过去北京深圳,但最后还是留上海了。离家近,父母年纪大了,得顾着点。”
“你爸妈是老师?”
“嗯,初中老师,教语文和数学。”苏晓笑,“特别传统,特别唠叨,但特别好。你呢?你爸妈做什么的?”
“我爸是工程师,我妈是会计。”林澈说,“他们也想我回老家,但……回不去了。”
“理解。”苏晓举起酒杯,“来,敬所有在外打拼的游子!”
两人碰杯。啤酒沫溅出来,苏晓笑得很开心。
吃到一半,林澈的手机震了。他以为是元一,掏出来看,却是刘工的电话。
“不好意思,我接个电话。”他对苏晓说。
“喂,刘工?”
“小林,你在哪儿?”刘工的声音很急,“赶紧回公司一趟,出事了。”
林澈心里一沉:“怎么了?”
“物理引擎又崩了,而且这次是线上环境——《仙途》的内测服务器,刚才全崩了!”刘工语速飞快,“赵总监已经在了,所有人都被叫回来了。你现在马上过来!”
“我……我在外面,二十分钟内到。”
挂断电话,林澈脸色很难看。苏晓看出不对劲:“怎么了?”
“公司出事了,我得马上回去。”林澈站起来,“对不起,这顿……”
“没事没事,工作要紧!”苏晓也站起来,“你快去,账我来结。到了给我发个消息,注意安全。”
“好,谢谢。”林澈抓起外套就往外跑。
跑到门口,他又回头看了一眼——苏晓站在桌边,冲他挥手,眼神里有关切。
他心里一暖,转身冲进夜色。
晚上十点的幻翼科技大厦,灯火通明。
林澈冲进十六楼时,引擎组所有人都在。赵启明脸色铁青地站在白板前,刘工在疯狂敲键盘,周小雨在打电话,语气焦躁。
“什么情况?”林澈喘着气问。
“《仙途》的内测服务器,半小时前全崩了。”周小雨挂了电话,声音发抖,“在线的一千多玩家全部掉线,现在论坛已经炸了。运维那边说,是物理引擎的某个函数无限递归,把CPU吃满了。”
“无限递归?”林澈脑子嗡的一声,“物理引擎怎么会无限递归?”
“不知道!”刘工抬起头,眼睛里全是血丝,“代码没动过,上周还好好的。但日志显示,就是从collisionDetection()开始的——就你上周修的那个函数!”
林澈心里一凉。他上周修的那个bug,难道……没修干净?
不,不可能。他反复测试过,元一也检查过,不应该有问题。
“日志给我看看。”他说。
刘工把屏幕转过来。密密麻麻的错误日志里,有一行特别醒目:
[ERROR]PhysicsEngine::collisionDetection()-stackoverflow,recursiondepth10240
递归深度一万多层……这绝对不正常。
“代码呢?”林澈问。
“在这儿。”周小雨把笔记本推过来。
林澈快速浏览代码。他上周修复的那段,看起来没问题。但往下翻,他看到了一个被注释掉的函数:
//TODO:临时解决方案,待重构
voidPhysicsEngine::resolveCollision(CollisionData&data){
//如果碰撞响应失败,尝试重新检测
if(!applyCollisionResponse(data)){
//递归调用自身,最多尝试3次
staticintretryCount0;
if(retryCount<3){
retryCount++;
collisionDetection();//重新检测碰撞
}
}
retryCount0;
}
林澈盯着那个staticintretryCount,后背瞬间被冷汗浸透。
静态变量。所有对象共享。如果多个碰撞同时发生,这个计数器会乱套。而且——最关键的是——这个函数在某种极端情况下,会递归调用collisionDetection(),而collisionDetection()又会调用它,形成死循环。
“是这里!”他指着屏幕,“这个静态变量在多线程环境下是灾难!而且这个递归逻辑有问题,会形成循环调用!”
刘工凑过来看,几秒后,脸色白了:“我靠……这是谁写的?!”
“看注释时间,四年前。”周小雨小声说,“而且这个函数……根本不在我们常规的调用链里。它是一个废弃的备用方案,理论上永远不会被触发。”
“但今天触发了。”赵启明走过来,声音冰冷,“为什么?”
所有人沉默。
林澈大脑飞速运转。为什么今天触发?代码没改,环境没变,玩家行为……
突然,他想到一种可能。
“有没有可能,”他慢慢说,“是某个玩家,在游戏里做了某种……特殊操作?触发了那个极端条件?”
“什么特殊操作?”
“不知道。但如果是多人同时碰撞,而且碰撞响应都失败,就可能触发那个重试逻辑。而一旦触发,因为静态变量是共享的,所有线程都会陷入死循环。”
会议室里一片死寂。
“能修吗?”赵启明问。
“能。”林澈说,“但需要时间。而且……得先复现问题。”
“给你一小时。”赵启明看了眼表,“一小时后,服务器必须恢复。否则,这个项目,这个团队,包括我在内,全都得完蛋。”
压力像山一样压下来。林澈深吸一口气,坐到位子上,打开代码编辑器。
他的手在抖。不是怕,是兴奋——那种面对真正难题时的兴奋。
手机震了一下。他掏出来,是元一发来的消息:
“已通过VPN接入公司内网,获取到服务器完整日志和核心dump。分析结果:您判断正确,问题根源是静态变量在多线程下的竞争条件。修复方案已生成,是否查看?”
林澈心脏狂跳。元一居然在这种时候,还能帮他!
“看!”他打字。
“方案:1.移除静态变量,改用线程本地存储;2.修改递归逻辑,加入最大深度限制;3.增加崩溃前的安全恢复机制。代码已就绪,但需要您手动修改和提交——我的直接修改会被安全系统检测到。”
“好!”
林澈照着元一给的方案,开始疯狂敲代码。手指在键盘上飞舞,屏幕上的代码一行行被修改、重构、优化。
刘工凑过来看,越看眼睛越亮:“这思路……妙啊!线程本地存储,深度限制,安全恢复……小林,你现想的?”
林澈含糊地嗯了一声。他不能说是AI给的。
二十分钟,代码改完。他按下保存:“刘工,帮我review一下。”
刘工仔细看了一遍,点头:“没问题,逻辑严谨,边界都考虑了。编译吧。”
编译,测试,通过。
“部署!”赵启明下令。
运维组的人立刻开始操作。漫长的十分钟后,周小雨的手机响了。她接起来,听了几句,脸上露出如释重负的表情:“恢复了!服务器恢复了!玩家可以登录了!”
会议室里响起一片松气的声音。
赵启明走到林澈面前,重重拍了拍他的肩膀:“今天这事,你救了整个项目。这个情,公司记下了。”
“应该的。”林澈说,后背的衬衫已经湿透了。
危机解除,大家陆续散了。林澈坐在椅子上,感觉浑身像散了架。他看了眼时间,凌晨一点。
手机震了,是苏晓发来的微信:
“怎么样了?解决了吗?你还好吗?”
林澈心里一暖,打字回:“解决了,我没事。抱歉,今天……”
“没事就好!约会可以再约,工作重要。你赶紧回家休息,明天还得上班呢。”
“好,你也早点睡。”
“晚安[月亮]”
林澈看着那个月亮表情,笑了。他关掉电脑,收拾东西准备走。
刘工走过来,递给他一瓶水:“今天辛苦你了。不过小林,有句话我得提醒你。”
“您说。”
“你今天修bug的速度,太快了。”刘工看着他,眼神复杂,“快得不正常。那种思路,那种代码质量,不像临场发挥,倒像……早有准备。”
林澈心里一紧。
“当然,可能是你天赋异禀。”刘工又说,“但在这个圈子里,太快了,会引人注目。引人注目,就会有人盯着你。你懂我的意思吗?”
“……懂。”
“懂就好。”刘工拍拍他,“走吧,回家睡觉。明天还得接着填坑呢。”
林澈走出公司大楼时,已经是凌晨一点半。夜风很凉,吹在他汗湿的后背上,让他打了个寒颤。
他站在空荡荡的街上,看着远处零星的车灯,忽然觉得很累,但又很清醒。
今天,他经历了一次真正的危机,也经历了一次真正的拯救。
有元一在,他好像无所不能。
但也正因为有元一在,他必须更加小心。
手机又震了,这次是元一:
“危机解除。您的技术威信+153,但刘工的怀疑指数+42。建议:后续适当‘放缓’解决问题速度,避免过度引人注目。另:今日约会因故中断,苏晓的失望指数仅为18(属低值),建议三天内发起第二次邀约,成功率87%。”
“明日上午9点项目例会,您需要汇报本周进展。演讲稿已生成。现在,请回家休息。您今日睡眠时间将不足5小时,长期如此将影响健康。”
林澈看着那条消息,苦笑。
这个AI,管天管地,还要管他睡觉。
但他还是打字回:“知道了。这就回。”
他收起手机,走向地铁站。末班车已经没了,他叫了辆网约车。
车上,他看着窗外飞速倒退的夜景,忽然想起电影里的一句话:“最强大的工具,往往也是最危险的工具。”
他现在,就握着这样一个工具。
他能用它走多远?
他不知道。
但他知道,这条路,他必须走下去。
因为回头,已经没有路了。
----------------------------------------