科兴科学园的早晨,阳光通过玻璃幕墙洒进三楼走廊。
林深提前四十分钟到达,在前台登记后,拿到一张临时访客卡,被引导进了一间会议室。
里面已经坐着七八个年轻人,有人低头默念着什么,有人反复翻看简历,空气里弥漫着淡淡的紧张感。
他找了个靠窗的位置坐下,没有看简历,也没默念知识点,只是盯着窗外一只在玻璃上反复撞的飞蛾。
“你说它为什么非要往那儿撞?”他突然对旁边一个低头背算法的男生说。
男生愣了一下,抬起头:“啊?”
“明明旁边就是开着的窗,”林深指了指走廊尽头,“但它非要撞这块擦得特别亮的玻璃。象不象有些人,明明有路,非要选最难的那条。”
男生张了张嘴,完全不知道该怎么接话,他甚至觉得,这人是不是在嘲讽自己?
正组织了一堆语言反击,却见林深已经起身。
林深沿着走廊慢慢走着,2010年的腾讯科兴园区,还没有后来那些咖啡厅、健身房、睡眠舱,一切都显得朴素而务实。墙上的标语倒是始终如一:“一切以用户价值为依归”。
茶水间总归是没变吧……
他走到走廊尽头,果然看到一个小型茶水间。
没有人,只有咖啡机和饮水机发出低低的嗡鸣。林深轻车熟路地找到储备的固态果汁条,给自己泡了一杯,熬夜加班时他从不喝咖啡,乏了,就冲点果汁提神。
正依靠在水吧台慢慢喝着,一男一女两个人走了进来。
他们都挂着腾讯的工牌,没看林深,只是自顾自地接了杯水聊着,男人语气里带着明显的烦躁。
“……临时抽调我来当面试官,手头的项目进度谁跟?”
“周老师说了,这批实习生要重点培养,以后都是要充实到一线团队的。”
“培养?就靠这几道笔试题能看出什么?去年招的那个北大的,笔试满分,进来连个简单的内存泄漏都排查不出来。”
林深握着纸杯的手指微微收紧。
他听出来了,这个声音……是陈默。
他前世只在内部技术分享会上见过陈默几次,那时陈默已是微信事业群的高级技术总监。而现在,三十出头的陈默身形挺拔,头发还有些凌乱,说话时带着明显的、属于一线工程师的直率烦躁。
“你这就有点偏激了,我看人家到娱乐事业群那边,发展也挺好。说回这次笔试,陈老师你出的那道设计题也太难了,不如换个别的。”
“通信题是我坚持要加的。”陈默对身旁的女同事说,手指无意识地敲着台面,“现在团队最缺的就是懂底层通信的人。那些只会写ui的,招进来还得从头教,这种实习生,我可没时间带。”
女同事摇摇头,补充着说道:“40分的题,预计平均分不到15。你指望应届生能设计出可用的i架构?”
“难才有区分度。”陈默推了推眼镜,“我要的不是背题的人,是真正会思考的。”
林深不着痕迹地放下纸杯,准备离开。
偷听面试官讨论毕竟不妥。
但就在他经过两人身边时,陈默突然转头:“你是……来面试的?”
声音不高,但很清淅。
林深脚步顿住,坦然点头:“是。抱歉,没想偷听你们谈话,正打算走。”他说完,却补了一句,“不过你们刚才说的内存泄漏,有时候不是不会查,是不敢查。万一是自己写的代码泄漏了呢?那多尴尬。”
陈默和女同事同时愣住了。
这话说得太直白,甚至有点……挑衅?
但林深脸上却挂着那种“我只是在陈述事实”的无辜表情。
“几点的场次?”陈默问,目光在林深脸上多停留了一秒。
“十点。”
“第一个?”陈默将目光投向身边的女同事。
女同事的名字,林深后来才知道,叫李薇。她翻开了手中的文档夹。里面是今天面试者的资料,按时间顺序排列。
她的目光在第一页上停留了两秒,然后抬起头,打量了林深一眼,将文档夹递给了陈默。
陈默接过,视线落在纸面上。
几秒钟的安静。
然后他抬起头,看向林深的眼神里多了些别的东西:“你就是林深啊?”
林深保持着平静:“是我。”
陈默合上文档夹,但没有立刻让他离开,而是靠在水吧台边,象是随口问道:“笔试192分,系统设计38。为什么选这个思路?”
“陈老师,面试还没开始!”李薇赶紧说道。
“没事儿,让他说说,还有时间。”陈默摆摆手,眼睛却盯着林深。
问题来得突然,但林深早有准备。
“因为移动端的现实约束。”他语速平稳,“电池容量有限,网络不稳定,系统进程管理严格。追求绝对实时性会导致耗电过高、体验反而下降。所以我觉得,不如接受一定延迟,把资源用在保证重要消息必达上。”
陈默听着,手指又习惯性地敲了敲台面:“但用户可能想要实时性。”
“所以需要产品设计配合。”林深自然接话,“比如区分消息优先级,给用户选择权,解释后台运行的意义。技术上做不到完美,就靠产品和体验补足。”他突然笑了,“就象谈恋爱,你不能24小时盯着对方,但可以约好‘重要的事立刻打电话,小事发短信’,一个道理。”
李薇的眉毛挑了一下。
陈默则盯着林深看了两秒,然后——也笑了:“比喻有点怪,但意思懂了。”
“技术和产品的平衡……”陈默若有所思地重复了一遍,然后忽然换了个方向,“通信协议那道选择题,你选了‘分层设计,按场景选择tcp或udp’,批卷老师给了满分。但如果让你具体设计,你会怎么分层?”
林深略作思考:“三层。第一层,关键状态同步和重要消息,必须用tcp保证可靠投递。第二层,实时音视频流,用udp加前向纠错,容忍一定丢包。第三层,非关键的状态更新,比如‘正在输入’这种,可以走udp,丢了就丢了。”
他顿了顿,补充道:“其实还可以再细化——比如根据当前网络质量动态调整策略。wi-fi下可以更激进,弱网下就保守些。不过这就涉及客户端和服务的状态同步了。”他突然眼睛一亮,“对了,这就象人走路,平路可以跑,石子路就得慢点,要是下雨天,那简直得一步三看。”
茶水间里安静了几秒。
李薇看了眼陈默,陈默则盯着林深,眼神里的审视渐渐被某种兴趣取代。
“前向纠错、动态策略……”他低声重复着这两个词,“这些概念,你在哪儿学的?”
“研究过一些开源项目,也看过几篇论文。”林深如实说,“不过都还只是理论,没实际做过。”
这是实话。前世他做过,但现在这个时间点的林深不应该有相关经验。
陈默点了点头,没再追问。他看了眼手表:“九点四十了。你先回等待室吧,十点准时开始。”
“好的。”
林深礼貌点头,转身离开茶水间。
走回等待区的路上,他能感觉到背后有两道目光一直跟随着。不是审视,更象是……确认了什么。
回到座位,窗外的阳光又升高了一些,在走廊地面投下更明亮的光斑。
等待区里的其他面试者还在紧张准备,有人小声背诵着算法复杂度,有人在纸上画着系统架构图。林深靠进椅背,闭上眼睛,让刚才的男生有些难受。
而林深,却在复盘和陈默的简短交流,虽然只有几分钟,但信息量很大。
第一,陈默记住了他的笔试答案,而且印象很深。
第二,陈默对“技术与产品平衡”这个思路感兴趣——这很“微信”,很“张小龙”。
第三,那些超前的概念,比如前向纠错、动态策略引起了注意,但没有引起怀疑。
很好。
九点五十分,前台小姐姐探头:“林深同学?302会议室,可以进去了。”
他站起身,整理了一下衬衫领口。
走向会议室的路上,走廊两侧的工位区已经坐满了人。屏幕代码闪铄,键盘声密集而规律,白板上画着复杂的架构图,这是2010年的腾讯,移动互联网浪潮前夜的备战状态。
而在302会议室里,周博涛、陈默、李薇已经坐在长桌一侧。
林深推开门。
“林深同学,请坐。”周博涛开口,声音和电话面试时一样沉稳。
“我叫周博涛,是今天面试的主考官,这位是陈默,我们团队的技术骨干;这位是李薇,hrbp。我们今天的面试大概一小时,会函盖技术、项目、产品思考几个方面。”
“好的,各位老师好。”
周博涛翻开面前的文档夹,目光落在林深的简历上,率先开启了面试:“林深同学,我们看过你的笔试答卷,特别是那道系统设计题。思路很清淅,基本功也扎实。
不过,纸上谈兵和实际开发终究有距离。不如就从你简历上这个‘基于安卓平台的简易天气应用’开始,聊聊你在实际开发中遇到的最大挑战,以及你怎么解决的。”
技术面试的标准开局,考察项目经验的真实性与解决问题的能力。
林深早有准备。他没有选择那个最复杂的技术难点,反而挑选了一个更具“故事性”和“学习过程”的问题。
“最大的挑战,其实不在于技术实现,而在于对移动开发特性的初次深刻认识。”
林深顿了顿,组织语言,“当时我按照桌面端开发的习惯,在ui线程里直接进行网络请求获取天气数据。在仿真器和我的测试机上运行很流畅,但当我将apk发给另一位使用低端机型的同学测试时,应用频繁出现‘应用无响应’的弹窗,甚至直接崩溃。”
陈默微微挑眉,似乎对这个切入点有些意外,也来了兴趣。
“后来排查发现,”林深继续道,“是网络延迟和低端机型ui喧染能力不足叠加导致。我意识到,移动开发的环境是‘恶劣’且多样的,不能以开发者手中的设备为标准。
解决方案是引入异步任务处理网络请求,并在数据返回前提供明确的加载状态,甚至考虑根据设备性能动态简化部分ui动画。这件事让我真正记住了‘性能’和‘体验’在移动端不是加分项,而是及格线。”他忽然歪了歪头,“就象请客吃饭,你不能只按自己的口味点菜,得问问客人能不能吃辣,有没有忌口,虽然你可能会觉得,‘这么好吃的东西怎么会有人不吃’?”
周博涛的嘴角似乎微不可察地咧了一下。
“恩,从错误中学习,方向是对的。”周博涛点头,接着追问,“如果现在让你重构这个应用,你会首先优化哪一点?为什么?”
“数据缓存和更新策略。”林深不假思索。
“天气数据并非需要绝对实时,频繁请求既耗电也耗流量。我会设计本地缓存机制,根据用户定位和上次更新时间智能决定是否发起新请求,并在wi-fi环境下预缓存可能关心的城市数据。
这涉及到对业务逻辑(天气数据的时效性)、用户体验(刷新等待时间)和技术实现(缓存有效性、存储空间)的综合权衡。”他想了想,又补了一句,“就象你妈总想给你塞吃的,但你其实不饿——得有个机制告诉她,‘妈,我真饱了,等会儿再吃’。”
这次连李薇都忍不住看了他一眼。
回答条理清淅,并且自然地将技术点提升到了产品和技术结合思考的层面,只是那些比喻……有点过于生活化了。周博涛在笔记本上记录了几笔。
这时,陈默接过了话头,语气比刚才在茶水间时更显正式和深入:“你刚才提到‘根据网络质量动态调整策略’,在你的笔试设计里也有体现。
假设我现在给你一个真实的场景:我们的服务监测到某局域大量用户突然出现消息投递延迟激增,但该局域运营商反馈网络正常。作为负责通信模块的工程师,你排查问题的思路是什么?”