第1章 1-1 面试

天气热的不像三月。暖风托着他的米色休闲裤,上身的乳白色半袖T恤以及黑色的帆布包,没有明显品牌,也没有多余装饰。如果不是因为没有工卡进不去这座楼,保安似乎不会注意到他。林致还是主动出示入职短信给门口的保安看,然后不紧不慢的走进这座大楼,隐入人群,就像是在这工作了许久的员工一样。

HR前一晚发的入职短信,内容是统一模板,格式规整得像是后台批量生成的。他看短信都知道自己会被安排上楼、签文件、领工卡、领电脑,然后到工位。这流程他太熟悉了。

早上出门前他重新翻了一遍他的新领导许雯的微信。没有新消息,头像也还是那剪影,什么都不说,却莫名压得人喘不过气。

林致本不打算换工作,他在这个岗位上已经连续工作了3年,没出过什么问题,他负责的这块早就已经稳定了,新需求不多,每天只是简单的维护工作,同事领导之间关系处的也非常好,他只是像大多数人一样把自己的简历随时挂在招聘平台上,并且状态改为在职-考虑机会。

但是电话还是来了,对面说自己的来自钜云这家公司,有一个目前刚组建的一年的部门要不要考虑,他听完电话那边对业务的描述,还是很感兴趣的,于是就加了联系方式并发了一份详细的简历过去。

没过多久就接到了一面面试的邀请。他按照以往的面试经历来看,这一面大概就是探一探技术深度没什么难度。

林致提前5分钟点进了面试链接,面试官按时进入。他通过视频见到对面面试官是一个女生,面色淡淡的,留着一头长发,面试官没做什么开场寒暄,直接开始了面试,林致做完了基本的自我介绍后,面试官首先出了一道中等难度的笔试题。这难不到林致,得益于每天简单的维护工作,他有时还能点开刷题网站随机刷一道题玩玩。

于是他花了15分钟便写完了,并且解释了每个部分的含义。在此之后面试官又问了一些技术问题,让林致感觉的是视频对面的这位面试官大概也就工作了不到两年让她来对付他还是太轻敌了。

面试持续了一个小时结束了。她说了句:“等通知吧。”语气平稳,没有什么敷衍,他当时并不知道她叫什么名字。他从来不会在面试的时候记住一个面试官,这对他来说没什么意义。

第二轮面试在第二周进行,林致通过视频观察对面的面试官大概有30出头的样子,

简单的自我介绍结束后。

面试官便说“就讲一下你在这家公司重构的这个项目吧”

林致点了点头,开始讲自己在上一家公司做的一个分布式流式系统项目。

“当时的系统虽然用的是多台服务器一起跑,但每台机器之间几乎没有交流,基本是各干各的。”

“这个设计一开始看起来没问题,但一旦数据量上来,系统就很难扩展,也没法在不同机器之间共享数据或协同处理。比如我们想做那种能跨时间段追踪数据变化的计算方式,基本就做不成。”对方没有打断他,只是偶尔点头。

林致接着说:“我们后来处理了一个比较复杂的问题,是关于怎么汇总数据窗口的。最早我们是按固定时间段来切分的,虽然效率上去了,但数据堆得太多。后来我们用了滑动时间窗的方式,再加了优先级队列来优化,结果是处理速度快了,内存也省了不少。”

他顿了顿,看对方没什么反应,就补了一句:

“我们的系统部署是多活模式。简单说,就是一共差不多一百台机器在一起跑,有十台是备用的。如果哪一台出了问题,那些备用的就会自动接管,不需要人手动切换。我们做了三轮压测,每次切换都控制在两秒以内,基本不影响服务。”

这时面试官终于开口:“你们怎么做的?用 ZooKeeper(一个已有的可以直接使用的类似的模块)吗?”

林致摇了摇头:“没有。我们自己设计了一套更轻量的机制。”

他稍稍往前坐了点,说话依然平稳:“我们用的是一种叫‘token(令牌)’的控制方式。你可以把它理解成是任务通行证。每个任务开始前,机器要先抢到一个 token(令牌)’,只有拿到 token(令牌)’的任务才能运行,防止重复执行。等任务真的做完了,这个 token(令牌)’才会被系统清除。”

“这就像你去拿号排队,只有拿到号的人能上去办事,办完才放下这个号。这样既能避免多个机器抢着做同一件事,也不需要一个中心调度大家。”

面试官点点头,接着问:“那你们为什么不直接用 ZooKeeper(一个已有的可以直接使用的类似的模块)呢?”

林致心里想着,这果然是绕不开的问题。他语气没变,只是把话理清楚后说了出来:

“我们当时确实讨论过这个问题。我说几点。”

“第一,公司里的 ZooKeeper是别的团队在维护,我们不想为了一件小事总是跨组去协调权限、调试和上线。这会拖慢效率,也限制我们做架构的自由。”

“第二,我们希望系统是独立闭环的,最好能自我维护、自我进化,不依赖太多外部模块。我们不想拼装一个杂牌军,而是要一个真正能跑远的体系。”

“第三,其实我们的需求也不复杂。就是让任务一个个排好队,不重复、不冲突。我们自己的 token机制就能很好地实现这些,而且性能还更轻,更适合我们那种处理频率高的场景。

他说完这段,面试官略微点头,写了点什么,没有再追问。

林致的嘴角轻轻上扬了一下,幅度小得几乎无法察觉。

他没有觉得轻松,只是有种熟悉的感觉——当你说出的每一句话都来自你亲手写过、调过、跑过的系统时,那不是回答,是复述现实。

就这样第二轮面试也结束了,面试的结尾对方说:“你的东西我大致明白了。我这边回去会评估。”

等第三轮面试林致等了很久,两周后他甚至都快忘了这件事的时候,电话来了。是HR打过来了的,对面说“我们总监一会儿会添加你的微信,然后她会给你约时间的,注意通知。”

就这样过了5分钟,微信跳出一个好友申请。

没有备注,头像是一张剪影图,背景像是从莫兰迪的画中提取的一种低饱和的暗绿色,昵称是许雯。

通过申请后,对方立即发来一句话:

“我这边直接微信语音。我今天下午三点有空,你有时间吗?”

林致盯着那句话,过了三秒才回:“好的。我可以。”

他查了一下许雯的身份。技术总监,负责钜云内容中台与数据调度核心结构。整个系统能不能跑起来,很大一部分取决于她画的那张总图。

他没想到,第三轮居然是她本人面试。

更没想到,是直接打微信语音——这意味着她可能实在是太忙了,甚至没有时间坐在一个会议室里去面试。

林致提前5分钟来到公司楼下等待电话,三点整,电话响起。

他深吸一口气,接通。

“你是林致吧。”她开口。

“是。”

“我这边只问一点。为什么不考虑用 ZooKeeper?”

林致当时愣住了半分钟,这个问题他当然知道,这是二面面试官的问题,而且他当时回答的非常好,为什么许雯要再问一遍?要么就是巧合,要么就是她认为这不是一个好的解法!!!

林致还是把跟二面面试官的回答大致的重述了一遍,因为他真的不知道第二个答案。

许雯听完林致那一套熟练却没有任何修正的回答,沉默几秒,然后说:

“嗯,我知道你那套结构能跑起来。”她语气没变化,语速也没有波动。又顿了一下,补了一句:“只是系统设计,可不是跑起来就算完。”

林致沉默了许久。许雯继续问:那如果我不同意你这个方案,你还有其他办法吗?

林致继续沉默,他知道这轮面试大概率是败了。他没有什么办法,这就好比人类的极限是背负是自己的三倍体重,那么一个70kg的成年人,现在他的背上压上300kg的重物,那不是痛苦,就是纯粹的无力感。

但是他没想到的是许雯再次打破了沉默!她说:“那就到这吧”

林致轻声回复了一下“好的”

许雯轻声哼了一下接着说:“我还以为你哑了呢”,停顿了一下接着说“后面会有HR联系你的”

话音刚落,电话那头的人切换了联系。

事实证明HR最后还是联系了,不然他也不会这么早就坐在这栋大楼的一楼大厅里。不一会接待的女孩就找到了他,入职流程也很迅速,他来到了他的工位,3层 F区,最外面一列,工位和工位之间没有隔断,桌子横向排列,有点像网吧但又没有网吧里的喧嚣,这似乎是新兴互联网公司的标配。

林致把东西放好,正打算启动电脑,余光瞥见右侧走过一个身影。

那人步伐稳、鞋声轻,每一步都踩在地砖边缘上,节奏像是对时间有极强掌控感的人。

她没穿工装,也没有识别证,只是一件极简黑衬衫,深色长裤,高跟鞋鞋跟细长,声音被地毯吸去一半,只留下节拍感。

她从他工位前方三米处走过,朝最里侧那间独立办公室走去。

林致下意识抬头。

她没有看他。

她也没有必要看他。

她推开门,文件夹收在左手手肘,指尖抬起,动作干脆,关门无声。

他愣了两秒,才慢慢坐直身子。

他没见过她,但他知道,这是许雯。既陌生又不陌生!