做完这些,他靠在椅背上,长长地舒了口气。
第一步走完了。接下来,是真正的考验。
6月25日,下午一点五十。
林浩坐在计算机前,QQ已经登录。群是空的,只有他一个人。窗外下着小雨,六月的雨很细很密,打在窗户上沙沙响。
一点五十五,第一个人加群。ID:半夏。头象是一片空白。
通过。
半夏进群后没说话,静静地待着。
一点五十七,第二个人:楚飞。头象是《传奇》里的武士,手里拿把屠龙刀。
通过。
一点五十九,第三个人:陆明。头象是自己画的水墨画,一只鹤。
通过。
陆明:“大家下午好。”
两点整,另外两个候补也进来了。五个人到齐。
林浩在群里发言:“大家好,我是Horizon。感谢各位参加第二轮测试。本轮测试是实时编程,我会出三道题,大家在两小时内完成。工具自备,语言不限,但需要能运行出结果。完成后将代码发到群文档。现在开始第一题。”
他复制粘贴了第一题:
“题一:在文本中查找所有邮箱地址。输入:一段包含文本、数字、符号、邮箱的文本。输出:所有邮箱地址的列表。要求:自己写正则表达式,不能用库函数。时间:20分钟。”
这题考基本功。正则表达式是文本处理的必备技能,能看出一个人的代码严谨性和边界情况处理能力。
群里安静下来。林浩看着屏幕右下角的时间,一分一秒地走。
十五分钟后,第一个提交:半夏。代码很简洁,正则写得完美,考虑了各种边界情况。测试用例全过。
十八分钟,楚飞提交。正则有点遐疵,但整体能用。附了一句话:“这题没意思,考记忆力的。”
二十分钟,陆明提交。正则正确,但代码里加了个小功能:把找到的邮箱按域名分类统计。超出了题目要求,但很实用。
另外两个候补,一个超时,一个正则写错了。
“题二。”林浩发了第二题,“实现一个简单的HTTP服务器,能响应GET请求,返回请求的文档。要求:支持多线程,有基本的错误处理。时间:40分钟。”
这题难度上来了。2002年,很多人还没接触过网络编程。而且“多线程”在Flash里不好实现,需要用到一些技巧。
群里沉默了很久。二十五分钟后,半夏提交。代码用的是Java,实现了一个完整的、可运行的HTTP服务器,支持多线程,错误处理完善。还附了一个测试脚本。
三十二分钟,楚飞提交。,也实现了,但用了些奇技淫巧,绕过了多线程,用异步IO仿真。附言:“Flash做不了多线程,我换语言了,不算违规吧?”
林浩回复:“不算。看结果。”
三十八分钟,陆明提交。代码是Python——2002年Python还不流行,但他用了。。附言:“轻量级方案,适合资源有限的环境。”
另外两个候选人,一个没提交,一个提交的代码跑不起来。
“题三。”林浩发了最后一题,也是最难的一题,“设计一个游戏存盘系统。要求:1.存盘可加密,防修改。2.支持增量存盘,节省空间。3.存盘损坏可部分恢复。4.有版本兼容性设计(新版游戏能读旧版存盘)。不需要实现,写设计文档,包括架构图、内核算法、关键数据结构。时间:60分钟。”
这题考系统设计能力。不只是写代码,而是思考一个完整系统的方方面面。
群里彻底安静了。只有雨声,从窗外传来。
林浩起身倒了杯水,站在窗边看雨。雨中的县城灰蒙蒙的,远处的山隐在雨雾里。他想起2028年,华为的架构设计评审会,会议室里坐满了顶尖的工程师,为了一个设计方案争得面红耳赤。
而现在,他一个人在2002年,用QQ群面试几个可能成为伙伴的年轻人。
命运真是奇妙。
五十分钟,半夏提交。文档极其专业,用LaTeX写的,有完整的架构图、流程图、状态机。。每个设计都有理论依据和实现考量。
五十五分钟,楚飞提交。文档是纯文本,但思路清淅。。”增量存盘用简单的二进位差异,版本兼容方案很粗暴:每个版本留一个转换器。附言:“工程方案,追求简单有效。”
五十八分钟,陆明提交。文档图文并茂,手绘了架构图,虽然不专业但生动。他提出了一个有趣的想法:存盘不上载服务器,而是在本地用算法生成“种子”,服务器只存种子。这样节