清华园的秋意,如同一位技法娴熟的国画大师,笔触愈发浓重起来。
银杏叶的边缘染上了灿金,法国梧桐的巴掌叶也开始泛黄,风一吹过,便簌簌地飘落几片,在干净的柏油路面上打着旋儿。
昼夜温差拉大,清晨的草坪上会结起薄薄的白霜,在初升的阳光下闪烁着细碎的光芒。
随着课程全面展开,新生们最初的那点新鲜感和悠闲迅速被沉重的课业压力所取代。
《微积分》的语言如同天书,《程序设计基础》的指针概念让无数人抓狂,《线性代数》的矩阵变幻莫测,《计算机原理》的二进制和门电路更是抽象得让人怀疑人生。
晚自习的教室和图书馆,成了最热门的“战场”,往往开门不到半小时,座位就被抢占一空,空气中弥漫着一种无声的、紧张的竞争气息。
林辰的“天才”之名,经过课堂上的两次“交锋”,已然在新生中小范围传开。
这给他带来了一些便利,比如在软件创新实践基地,学长们对他更加重视,甚至开始征询他对项目架构的意见。
但也带来了一些微妙的困扰——走在路上,偶尔会感受到来自陌生同学的打量目光,其中混杂着好奇、探究,甚至是一丝不易察觉的嫉妒。
他对此泰然处之,依旧保持着低调而规律的作息。
白天认真上课,虽然他大脑里的知识储备远超课程要求,但他依旧会耐心听讲,从中寻找那些可能被前世忽略的、属于这个时代特有的思维火花和基础细节。
他深知,大厦越高,地基越要牢靠,重温这些基础,对他而言并非浪费时间,而是一种必要的“沉淀”。
而真正属于他个人、能够让他全身心投入的“秘密时间”,是在深夜。
清华的老图书馆,那座有着悠久历史、爬满常春藤的宏伟建筑,成了他夜间的庇护所。
这里不像新开放的逸夫馆那样灯火通明、座无虚席,它更显古老、幽深,带着一种书卷沉淀下来的静谧与庄严。
尤其是晚上十点以后,大部分学生已经拖着疲惫的身躯返回宿舍,只有极少数真正的“夜猫子”或是像林辰这样,有着特殊需求的人,还会留连于此。
图书馆的管理员是一位姓秦的老先生,据说在馆里工作了几十年,对这里的每一个书架、每一本藏书的位置都了如指掌。
他戴着老花镜,总是坐在入口处的桌子后面,就着一盏绿罩子台灯看书或者整理卡片目录,表情严肃,很少与学生交谈。
久而久之,学生们私下里都叫他“秦守”,取“严守规矩”之意。
林辰很快就发现了老图书馆夜间的妙处。这里的藏书远比新馆丰富,尤其是那些年代久远、纸页泛黄的外文原版计算机书籍和过期的学术期刊,很多在新馆是找不到的。而且,深夜的阅览室空无一人,只有头顶日光灯管发出的轻微嗡鸣,以及书页翻动的沙沙声,极其适合进行深度思考和不受打扰的编码工作。
他通常会选择自然科学阅览室一个靠墙的、最不引人注意的角落。那里有一张厚重的、带着岁月包浆的木桌,旁边就是一个高高的、摆满了《Acm通讯》、《IEEE计算机汇刊》等外文期刊的书架,像是一道天然的屏障。他将这里戏称为自己的“战略指挥位”。
起初,他只是在这里阅读那些前沿的期刊论文,试图更全面地了解这个时代全球计算机科学的最新进展,弥补自己前世可能忽略的、一些非主攻领域的技术细节。
他翻阅着那些带着静电复印机特殊气味的论文,看着上面描述的各种“新颖”算法和架构,心中常常泛起一种奇妙的时空交错感——这些在二十多年后看来可能已经过时或者成为常识的技术,在1997年,却是无数顶尖学者正在探索的疆域。
但很快,他的“野心”就不止于阅读了。
一个周五的深夜,十一点已过。阅览室里只剩下林辰一个人,还有远处角落里秦老先生模糊的身影。窗外月色清冷,树影婆娑。
林辰摊开了几张画满了流程图的稿纸——那是他和苏晚晴、陈浩利用课余时间,在基地机房或者找个空教室讨论后,由苏晚晴整理绘制的“开放qq”下一阶段开发计划。
同时,他小心翼翼地启动了那台从宿舍搬来的、略显笨重的笔记本电脑(这是他近期用“开放qq”项目预支的一部分基地经费,加上自己之前攒的钱购置的,性能比宿舍那台386强了不止一个档次)。
屏幕上,不再是课本上的示例代码,而是“开放qq”服务器端的核心模块。他计划利用老图书馆相对稳定(虽然网速依然感人)的网络环境,以及这深夜的绝对安静,对服务器进行一轮重要的重构和压力测试。
他的手指在键盘上飞舞,敲击声在空旷的阅览室里显得格外清晰。
他正在重写网络通信层的核心部分,引入更高效的I\/o多路复用机制,以替代之前相对简陋的多线程模型。
这对于应对未来可能出现的用户并发量至关重要。
时间在代码的行间悄然流逝。不知过了多久,林辰感到脖颈有些僵硬,他抬起头,活动了一下,目光无意中扫过对面那个一直空着的位置。
不知何时,那里竟然坐了一个人。
一个女生。
她背对着林辰的方向,只能看到一个纤细的背影,乌黑的长发简单地束在脑后,露出白皙的脖颈。她穿着一件米白色的薄毛衣,肩膀微微耸动着,似乎也在奋笔疾书,或者……在敲击键盘?林辰注意到,她手边也放着一台笔记本电脑,在这个年代,拥有笔记本电脑的学生可不多见。
林辰没有多想,只当是另一个同样刻苦的夜读同学。他低下头,继续沉浸在自己的代码世界里。
然而,接下来的几个深夜,林辰几乎每次在十一点后来到这个角落,都能看到那个女生的背影。她总是坐在同一个位置,仿佛那是她的专属座位。两人之间隔着宽阔的走道和好几排书架,互不打扰,像两颗运行在各自轨道上的行星。
直到一个周三的晚上。
林辰正在调试一个棘手的bug——服务器在模拟高并发请求时,偶尔会出现极其罕见的死锁情况,日志信息模糊不清,难以定位。他反复检查着代码逻辑,添加调试信息,运行测试,眉头紧锁,已经在这个问题上耗费了近两个小时,却依然毫无头绪。 Frustration(挫败感)开始像藤蔓一样悄悄缠绕上来。
就在这时,对面似乎传来一声极轻的、带着点无奈的叹息。
林辰下意识地抬头望去。恰好,那个女生也似乎被某个难题困住,正抬手揉着眉心,无意中转过头,目光与林辰撞了个正着。
那是一张清秀而带着书卷气的脸庞,眼睛很大,眼神清澈而聪慧,但此刻也带着一丝疲惫和困惑。她看到林辰在看她,似乎有些意外,随即微微颔首,算是打过招呼,便又迅速转了回去,耳根似乎有些泛红。
林辰也收回目光,但就在那一瞬间,他眼角的余光似乎瞥见了对方屏幕上的一些内容——那似乎不是论文,也不是普通的文档,而是一些……代码?而且结构看起来有些眼熟?
这个发现让他心中微微一动。但他没有贸然上前打扰,毕竟在图书馆,随意搭讪是极其不礼貌的行为。
转折发生在那天晚上林辰准备离开的时候。他已经收拾好东西,正准备关闭电脑,最后检查了一眼服务器日志,那个诡异的死锁依然没有重现,但也意味着问题没有被解决。他有些郁闷地合上电脑,站起身。
就在这时,一张折叠起来的小纸条,从对面推了过来,滑过光滑的桌面,停在了他的面前。
林辰愣了一下,抬头看向对面。那个女生已经背起书包,正准备离开,接触到他的目光,她快速地、几乎微不可见地指了指那张纸条,然后便像受惊的小鹿一样,快步走出了阅览室。
带着疑惑,林辰打开了纸条。上面是一行清秀而有力的字迹:
“同学,冒昧打扰。无意中看到你在调试服务器程序,注意到你似乎遇到了并发问题。如果日志中出现 ‘thread x waiting for lock A held by thread Y, while thread Y waiting for lock b held by thread x’ 类似的循环依赖,或许可以检查一下 handle_message 函数和 update_user_status 函数中,锁的获取顺序是否可能在某些极端情况下出现反转。—— 一个同样被bug困扰的夜猫子。”
林辰的瞳孔猛地收缩!
这纸条上的内容,一针见血!直接点出了他那个死锁问题最可能的根源!而且,对方竟然能通过观察(天知道她是怎么“无意中”看到并理解他屏幕上的代码和日志的?)就精准地推断出问题所在,这份洞察力和技术功底,绝非普通学生可比!
更重要的是,她提到了 handle_message 和 update_user_status 这两个函数名!这分明是“开放qq”服务器代码里的内部函数命名!她怎么会知道?!
一个念头如同闪电般划过林辰的脑海:难道她也是……?不,不可能。重生这种事太过匪夷所思。那唯一的解释就是,她也是一个技术水平极高的同行,并且很可能也在从事类似的项目,甚至……她可能通过某种途径,接触过“开放qq”的代码?是基地的人?还是……
林辰的心跳不由自主地加快了。他拿着那张轻飘飘的纸条,却感觉重若千钧。他立刻重新打开电脑,按照纸条上的提示,仔细检查那两个函数的锁获取顺序。
果然!在一个非常隐蔽的、由特定消息序列触发的条件分支下,两个线程获取锁的顺序确实存在反转的可能!由于触发条件极其苛刻,在之前的测试中从未出现过,所以一直被忽略了。
他迅速修改了代码,确保了所获取的顺序一致性。然后,他再次运行了高并发压力测试。
这一次,服务器稳定运行了整整半个小时,没有再出现任何死锁迹象!
问题解决了!
林辰长长地舒了一口气,心中充满了难以言喻的兴奋和……对那个神秘女生的强烈好奇。她是谁?她怎么如此了解他的代码?她纸条里提到的“同样被bug困扰”,又是在做什么项目?
他看向对面那个已经空荡荡的位置,第一次对这个每晚如期出现的“幽灵”,产生了浓厚的兴趣。
第二天深夜,林辰特意提早了一些来到老图书馆。那个女生果然还在老位置。
这一次,林辰没有犹豫。他拿着那张纸条,走到对面,在她旁边的空位坐下。
女生似乎被他的举动吓了一跳,抬起头,有些警惕地看着他,手指无意识地握紧了正在写写画画的笔。
“同学,你好。”林辰将纸条放在桌上,推到她面前,脸上带着真诚的感谢和微笑,“非常感谢你的指点。按照你的提示,那个死锁问题已经解决了。你帮了我一个大忙。”
看到林辰的态度,女生的警惕稍微放松了一些,她看了看纸条,又看了看林辰,轻声说道:“不用客气,能帮上忙就好。”她的声音清脆,带着点吴侬软语的柔和。
“我叫林辰,计算机系大一新生。”林辰自我介绍道,然后试探着问,“不知道同学你怎么称呼?也是计算机系的吗?我看你好像……对网络编程也很熟悉?”
女生犹豫了一下,似乎在权衡什么,最终还是低声回答道:“我叫沈雨馨,软件学院的,研一。”她顿了顿,补充道,“我……我的研究方向正好也包括分布式系统和网络通信。所以……对这方面稍微有点了解。”
软件学院!研一!难怪技术如此扎实!林辰心中恍然。清华的软件学院此时刚刚成立不久,能考进来的都是尖子中的尖子。
“原来沈学姐。”林辰的态度更加恭敬了些,“学姐昨天提到的锁顺序问题,真是一语中的,让我茅塞顿开。不知道学姐方不方便透露,你是在做什么项目吗?或许……我们以后可以交流一下?”
沈雨馨的脸上掠过一丝不易察觉的复杂神色,她低下头,看着自己面前摊开的、写满了各种公式和架构图的笔记本,沉默了几秒钟,才轻声说:“我……我在做一个……类似的东西。也是一个即时消息系统,不过……是基于web的尝试。”
web版的即时消息系统?林辰心中再次一动。这在1997年,可是一个相当前沿和大胆的想法!需要处理的技术难题丝毫不比c\/S架构的少,甚至在某些方面更具挑战性。
“web版的?那太酷了!”林辰由衷地赞叹,“这涉及到Ajax……呃,我是说,需要浏览器端和服务器端持续通信的技术,实现起来很有挑战性啊。”
沈雨馨惊讶地看了林辰一眼,显然没想到一个新生竟然也知道这些尚未普及的概念。“你也知道这个?”她脱口而出,随即意识到自己失言,有些不好意思地抿了抿嘴。
林辰笑了笑,没有解释自己知识的来源,而是顺势说道:“我平时也喜欢瞎琢磨。我和几个朋友也在做一个c\/S架构的即时通讯软件,叫‘开放qq’。学姐你昨天提到的函数名,就是我们项目里的。看来咱们算是……同行?”
听到“开放qq”这个名字,沈雨馨的眼睛微微亮了一下,但很快又恢复了平静,她轻轻“嗯”了一声,没有再多说什么,似乎有什么难言之隐。
林辰看出她似乎不太愿意深入交流,便也不再追问,只是诚恳地说:“沈学姐,以后如果我在技术上遇到什么问题,能不能向你请教?当然,如果学姐有什么需要帮忙的,也尽管开口。”
沈雨馨看了看林辰真诚而清澈沈雨馨看了看林辰真诚而清澈的眼神,最终轻轻点了点头:“可以。互相学习吧。”
从那天起,老图书馆深夜的角落,不再只有两个孤独的行星。他们依然各自忙碌,专注于自己的代码和项目,但偶尔,当遇到棘手的难题时,会有一张纸条悄然滑过桌面;或者,会有一声轻轻的咳嗽,引来对方关注的目光,然后是一个简短的技术问题的低声交流。
他们从不谈论彼此项目的具体细节和背景,也从不涉足学习之外的私人话题。他们的交流,纯粹而高效,局限于技术本身。但在这无声的代码和偶尔的纸条往来中,一种基于技术认同的、奇妙的默契和信任,正在悄然建立。
林辰不知道沈雨馨背后有着怎样的故事,她的那个web版即时消息项目又进展如何。但他能感觉到,这个看似文静柔弱的学姐,体内蕴藏着不输于任何人的技术热情和实力。她就像一座沉默的冰山,露出水面的只是一角。
而这座冰山,在未来,是否会成为他航行路上的阻碍,还是可以并肩同行的伙伴?林辰不得而知。
他只知道,在这座藏龙卧虎的清华园里,他又发现了一个有趣的、值得关注的存在。
夜深了,月光透过高大的窗户,洒在两张年轻而专注的脸庞上,也洒在那些承载着未来梦想的代码行间。