请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。
这个周,林泠在办公室加班到晚上八点。
不是单位要求的,没人要他加班。是季度末的数据迁移出了个让他放不下的问题——上游系统改了时间戳格式,从UTC+8改成了ISO8601带时区偏移的格式,下游的分析模型在合并时间序列时把相邻两个时间窗的数据叠在了一起。偏差不大,不到两个百分点,但足够让他在验证集上盯了整整一个下午。两个百分点的偏差在业务报表上几乎看不出来,但他是做模型的,他知道这种系统性误差如果不从根上掐掉,会在后续所有叠加分析中被逐级放大,到最后偏差会大到让整个预测模型失去意义。
同事小赵走的时候背着包站在他工位旁边,说林哥你不走啊。他说再查一会儿,有个字段格式不对。小赵说了句那你别太晚,转身走了,脚步轻快,年轻人周五晚上总有安排。林泠没抬头,盯着屏幕上那两列时间戳数据,左边是迁移前的,右边是迁移后的,同一个事件的记录在迁移后偏移了整整一个时区。不是数据丢了,不是字段错了,而是时区参数被隐式吞掉了——这种bug最恶心,表面看一切正常,每一行数据单独拎出来都没毛病,只有放在时间序列里叠起来才会露出马脚。
他沿着数据链路一层一层往回追溯。第一层是应用层的日志清洗脚本,没毛病。第二层是数据仓库的ETL存储过程,参数传递也没问题。追到第三层,在嵌套查询的JOIN条件里找到了那个被隐式转换吞掉的时区参数——FROM_UNIXTIME函数在缺少显式时区参数时默认使用了系统时区,而迁移前和迁移后两台服务器的系统时区设置差了八个小时。他在WHERE子句里补了一个时区参数,重新跑了验证集,偏差归零。
他靠在椅背上揉了揉眼睛。办公室里只剩他一个人,空调外机在窗外嗡嗡转着,日光灯管发出细微的电流声,窗玻璃上倒映着天花板上一排惨白的灯影。他把排查过程从头到尾整理成一份文档,每一步的排查逻辑、每一个排除掉的假设、最终定位的代码行号和修复方案,清清楚楚写在里面,然后发给相关同事。关上电脑的瞬间屏幕黑下去,倒影里他的脸看起来有点累,但眼神是踏实的——数据对了,周末可以安心钓鱼了。
关了灯锁了门走出办公楼,夜风裹着一股湿润的泥土味扑面而来。
周六凌晨四点半闹钟响了。他按掉闹钟坐起来,比平时多花了几秒钟才彻底清醒——昨晚加班到家洗完澡躺下已经快十二点了,睡眠时间不到五个小时。但他不觉得困。钓鱼日的精神状态跟工作日不一样,不管前一天多累,只要想到要去水边,脑子就会自动切换到另一个模式。
他摸黑套上衣服,轻手轻脚地下楼。车载温度计显示十一度。
路上经过那家二十四小时营业的早点铺,灯已经亮了,包子屉冒着白汽,一团一团地往上升,在路灯下白得发亮。老板娘正往油锅里下油条,面团落进滚油里滋啦一声响,油面上炸开一层金黄色的泡。他停了车摇下车窗,老板:两个肉包子和一杯豆浆,你从车里取了八块钱。
到西郊湿地的时候天刚刚亮透。
但停车场上已经停了三辆车。严世和的三轮车照例停在最里面那个位置,张磊的白色SUV停在三轮车旁边,第三辆车林泠没见过,是一辆银色的面包车,车身上印着一行字,离得远看不太清,大概是哪个渔具店的广告。
面包车旁边站着一个四十来岁的男人,穿一件深蓝色的防晒服,版型挺括不像是随便买的,胸口有个不大的刺绣LOGO。他正跟张磊说着什么,张磊不停点头,表情比平时正经了不少。
林泠刚把后备箱打开,张磊走过来了。
“林泠,给你介绍个人。”张磊往旁边让了一步,让那个男人站到前面来,“孙正,省钓协的副秘书长。上次固城湖比赛他也去了,看了你全程的比赛录像。”
孙正伸出手双手。握手的力度不轻不重,手掌干燥有力。
“林老师,久仰。”说道,“你在固城湖比赛那天用的草洞钓法和饵料切换策略,我看了三遍。第一遍是直播,第二遍是回放,第三遍是一帧一帧拖进度条看的——我想搞清楚你在第三个小时那个饵料切换的决策节点是怎么选的。”
林泠没说话,等着他往下说。
“你当时在草洞里连杆鲫鱼,用的是偏腥的谷香饵,频率打得很快。方岩在草区边缘守大鱼,用的是纯谷香,频率慢但单尾重大。两个人用的钓法截然相反,但总重只差了不到一斤。”孙正接着说,“到第三个小时的时候你发现草洞里的鱼口频率开始下降,你没有继续在草洞里硬守,而是换了个位置往草区边缘靠了大概七八米,同时把饵料从腥味往谷香回调了两个百分点。那个换位的决策加上饵料的同步调整,让你在后半程稳住了上鱼频率,最终总重反超了方岩。”
他说到这里停了一下,看着林泠。
“我做了十年竞技钓推广,看过的大小比赛不下几百场。能在那种压力下现场做出这种级别的策略调整的选手,我见过的很少。你他从口袋里掏出一张名片递过来,双手递的,“孙正,省钓协副秘书长。”
林泠接过名片看了一眼。名片设计简洁,白底黑字,左上角是省钓协的LOGO,一条跃出水面的鱼,中间是“孙正副秘书长”的字样,
孙正然后切入正题。省钓协下个月要在千岛湖办一场全国钓鱼嘉年华,规格比固城湖那次更高。参赛选手来自全国各省钓协推荐,每个省三到四个名额,除此之外还有几位职业钓手作为种子选手直接入围。比赛场地设在千岛湖主湖区的一片开放水域,目标鱼种包括鲫鱼、鳊鱼、翘嘴鲌和鳜鱼,赛程两天,总重排名。他代表省钓协想邀请林泠作为特邀选手参加。
“特邀选手跟普通推荐选手不一样,”孙正解释道,“推荐选手每个省都有名额,特邀选手是组委会直接发邀请的,不占省里名额。你在固城湖的表现在省钓协内部讨论过好几次了,几个老教练看了你的比赛录像之后都点了头。这次千岛湖水域面积大,水情复杂,对选手的综合能力要求比固城湖高得多。我们需要你这样的人。”
林泠想了一下,答应道“好,我参加”。