尘土与星辰 -1992|第180章|并行线|中文
清晨六点,闹钟没响。林尘已经醒了。 脚底的麻木感在夜间沉淀成一种钝重的铅块,他试着把重心移到左脚,刺痛立刻顺着跟腱窜上小腿。他收回脚,改用右手撑床,缓慢坐起。没有呻吟,只是按部就班地穿袜、套鞋。鞋带在右脚系紧,左脚只松松绕了两圈,留出肿胀的空间。他拉开抽屉,取
第180章 并行线
清晨六点,闹钟没响。林尘已经醒了。
脚底的麻木感在夜间沉淀成一种钝重的铅块,他试着把重心移到左脚,刺痛立刻顺着跟腱窜上小腿。他收回脚,改用右手撑床,缓慢坐起。没有呻吟,只是按部就班地穿袜、套鞋。鞋带在右脚系紧,左脚只松松绕了两圈,留出肿胀的空间。他拉开抽屉,取出昨晚备好的碘伏棉签,在左脚脚踝处重新消毒,贴上透气胶布。动作熟练,像完成一道标准工序。
他检查背包:U盘、身份证、学生证、算法报告、半瓶矿泉水、一包压缩饼干。U盘里装着preprocess_v3.py。他拔下电脑电源,屏幕暗下去的瞬间,映出他眼下的青黑。余额7135.30元。他默念了一遍今天的动线:城北老校区机房(8:00核验)→ 12:20交卷 → 地铁4号线转2号线 → 省理工实验楼B座(13:30签到)。全程误差不能超过十分钟。他合上背包拉链,金属齿咬合的声音很轻。
七点二十,他走出校门。早秋的雾气还没散尽,路面湿滑。他避开台阶,沿着无障碍坡道下行。右脚落地重,左脚拖拽,步频刻意放慢。公交车上人不多,他坐在最后一排,膝盖上摊着打印好的考场规则。车窗外的街景向后倒退,像被拉长的胶片。他闭上眼,在脑子里预演脚本的运行逻辑:读取CSV → 清洗空值 → 替换生僻字 → 输出TXT。老机器的内存只有2G,pandas绝对跑不动,必须用原生csv模块逐行处理。如果中途卡死,备用方案是手动跳过报错行,用try-except兜底。他不需要奇迹,只需要容错。
八点整,他抵达老校区。红砖教学楼墙皮剥落,爬山虎枯了一半。三楼机房门口已经站了七八个考生,低声交谈。监考老师拿着名单核对。林尘递上证件,老师扫了一眼他微跛的步态,没多问,只指了指靠窗的第三排机器。
他坐下。开机。风扇发出沉闷的轰鸣,像老式拖拉机。Windows XP的启动界面转了足足一分钟。他插上U盘,打开Python 2.7环境。路径配置正确。他双击脚本,终端窗口弹出。第一行日志打印:[INFO] 开始读取源数据...
九点整,监考老师下发试题文件。8000条混杂数据,包含乱码、缺失字段、重复行。标准答案要求输出清洗后的结构化文本。时间两小时。但他必须在12:20前完成。
他按下回车。脚本开始运行。进度条在黑色终端里缓慢爬升。CPU占用率瞬间飙到98%,风扇狂转。他盯着屏幕,手指悬在键盘上方。第1240行,报错:UnicodeDecodeError。生僻字编码冲突。他早有准备,迅速切入备用逻辑,手动修改替换字典,将gbk强制转为utf-8,跳过无法解析的字符。脚本重启,继续。
十一点十分,进度过半。左脚开始痉挛。他咬紧后槽牙,把重心完全压在右脚上,膝盖抵住桌沿分散压力。汗水顺着额角滑落,滴在键盘边缘。他不去擦。注意力全在终端滚动的日志上。[INFO] 清洗完成 4120/8000。[INFO] 去重处理中...。他看了一眼墙上的挂钟,秒针走得极慢。他调整呼吸,让指尖的节奏与痛感同步。不加速,不慌乱。只盯住下一行输出。
十一点四十五分,终端弹出:[SUCCESS] 输出文件已生成。耗时:58分12秒。 比预期快。他立刻打开输出文件,快速抽检首尾各五十行。格式对齐,无乱码,字段完整。他按下Ctrl+S,将文件拖入提交目录。点击“上传”。进度条走完,系统提示“提交成功”。
时间:11:52。距离死线还有28分钟。他合上电脑,拔出U盘。起身时,左脚一阵尖锐的刺痛,他扶住桌沿,缓了三秒,才迈步走出机房。监考老师抬头看了他一眼,没说话。
走廊空旷。他加快脚步,但步态已经变形。下楼梯时,他必须侧身扶着栏杆,一级一级挪。走出教学楼,初秋的阳光刺眼。他看了一眼手机:12:05。地铁4号线首班车刚过,下一班要等八分钟。他站在站台边缘,深呼吸。肺里吸入冷空气,压住胸腔的闷胀。
列车进站。他挤上车厢,抓住扶手。手机屏幕亮起,周教授的微信:“到了吗?”他回复:“在路上了。13:15前到。”
地铁穿梭在地下,灯光在车窗上拉成断续的线。他闭上眼,脑子里的开关切换。从“数据清洗”切到“技术面”。滑动窗口的边界条件、内存泄漏的排查路径、项目架构的取舍逻辑。他把算法报告从背包里拿出来,快速过一遍核心参数。没有紧张,只有校准。像调试一段即将上线的代码,所有变量必须归位。他知道,选择题的选项从来不是完美的,但做选择的人,必须承担后果。他已经在承担。
13:08,省理工实验楼B座。玻璃幕墙反射着刺目的天光。他刷开侧门,电梯直达三楼。走廊铺着浅灰色地毯,脚步声被吸走。302室门口挂着“技术初筛面试”的指示牌。门虚掩着,里面传出低沉的交谈声。
他站在门外,整理了一下衬衫领口。袖口有昨晚改代码时蹭到的墨水渍,他用水笔盖住。左脚已经失去知觉,全靠肌肉记忆支撑。他看了一眼手机:13:12。
门开了。一个穿着灰色西装的男人走出来,手里拿着文件夹。目光扫过林尘,停在他微跛的站姿上,眉头微不可察地动了一下,随即恢复平静。“林尘?”
“是。”
“进来吧。李总监在等你。”
他迈步跨过门槛。房间不大,长条会议桌对面坐着两个人。主位上的男人四十岁上下,头发梳得一丝不苟,面前摊着他的算法报告。旁边是一台打开的笔记本电脑,屏幕亮着白板界面。
“坐。”李总监没抬头,手指敲了敲桌面,“你的实操考试,提前了二十八分钟交卷。老校区那批机器跑你的脚本,CPU没降频?”
林尘拉开椅子,坐下。右脚平稳落地,左脚悬空。“用了原生库,避开了内存峰值。异常捕获做了降级处理。”
李总监终于抬起头,目光锐利。“降级处理意味着什么?”
“意味着在算力受限时,优先保证核心数据不丢失,边缘数据标记跳过。不追求完美,追求可用。”
房间里安静了两秒。李总监合上文件夹,身体微微前倾。“好。那我们直接看代码。你报告里写的分布式缓存方案,如果节点宕机,数据一致性怎么保证?”
林尘没有立刻回答。他伸手从包里拿出笔记本,翻开空白页,拔开笔帽。笔尖落在纸上,发出轻微的沙沙声。他画了一个简单的拓扑图,标出主从节点和心跳检测线。
“分两种情况。”他开口,声音平稳,“如果是短暂网络抖动,用重试机制和幂等性兜底。如果是物理宕机,依赖预写日志和异步复制。但现实里,没有绝对的一致性,只有最终一致。取舍在于业务能容忍的延迟阈值。”
李总监盯着纸上的图,手指在桌面上轻轻叩击。一下,两下。
“阈值是多少?”
“看业务。”林尘抬起眼,“如果是支付,毫秒级。如果是日志清洗,秒级甚至分钟级都可以。我的项目里,设的是五秒。超过五秒,降级为本地缓存,保证服务不崩。”
李总监没说话。他转头看向旁边的技术主管。主管微微点头。
“继续。”李总监说,“把你的脚本跑一遍。就在这台机器上。”
林尘把U盘插上。终端窗口再次弹出。熟悉的黑色背景,绿色的光标闪烁。他敲下第一行命令。风扇声响起。
屏幕的光映在他脸上。脚底的痛感已经退到很远的地方,像隔着玻璃听雨。他知道,这不是考试,是另一场生存测试。他不能错,也不需要完美。他只需要证明,自己能在资源匮乏的环境里,把事做成。
进度条开始爬升。李总监的目光落在屏幕上,没有移开。
林尘的手指悬在回车键上。等待。
终端突然弹出一行红字:MemoryError: Unable to allocate array with shape (8000, 12) and data type float64。内存溢出。老机器的2G内存被系统进程占满,Python的数组分配失败。
李总监的眉头皱起,手指停在桌面上。旁边的技术主管已经拿起了笔,准备记录终止时间。
林尘没有动。他盯着那行报错,脑子里的错题本自动翻页。他太熟悉这种环境差异了。他没有拔U盘,也没有解释。他迅速在终端里输入import gc; gc.collect(),强制释放闲置对象。紧接着,他将数据读取逻辑从一次性加载改为分块迭代,用chunksize=500切分输入流。三行代码。回车。
风扇的轰鸣声陡然降低。进度条重新跳动。
李总监看着屏幕,没说话。只是把身体往后靠了靠。
More from WayDigital
Continue through other published articles from the same publisher.
Comments
0 public responses
All visitors can read comments. Sign in to join the discussion.
Log in to comment