整体感受:效率比较一般,三轮面试每天一轮,然后三面当天下午offer面。
笔试:
有一定难度,涉及到很多算法,智力题,并且笔试刷人的标准应该是高于BAT的。
一面:
首先自我介绍,讲实习,然后面试官让我详细讲了做的某个东西。
然后给了个题,实现带min接口的栈,一开始我只给了一个带缓存的实现,然后在面试官的提示下才写了一个记录每次插入删除min状态的栈,如果再压缩下就是再开一个栈来实现状态的维护。
接着又给了个题,最大子数组和,向面试官确认了下空数组是否算子数组之一,也就是全负数组的最大和是最大负数还是0这个特殊的case。然后就写了下状态转移式,得到肯定后开始code。
然后提问阶段,问了几个关于人人那边的情况。
二面:
上来先给了个题,两个不严格递增单链表归并为一个严格递增单链表。
当时状态不佳,不知怎么的脑抽了直接用了二级指针,写着写着发现自己把自己坑了,要从头开始改代码,直接自暴自弃了,硬着头皮写完让面试官看了下,给找出了N多错误。
面试官这时说了几句,面试中问到的coding题都是非常简单的,准备下完全没问题,coding题的答题质量直接决定了最终的offer钱数,当时心里咯噔一下。
让我讲一个有意思的项目,因为我一面刚讲实习的时候做的某东西,所以这次打算讲讲学校里的,这时被他鄙视了番。我最终还是讲了GIS工程的作品,重点讲了缓冲层,包括不写穿策略,在该层基础上做撤销回复,以及抽出缓冲层的目的是建立公共服务,服务多个client节点等等。这时面试官提出了一个比较深入的问题,那就是缓冲层假设为一个节点的话,容灾如何做,因为以前从来没考虑过这个问题,只能给出打log这种低级策略,挂的时候按log还原,他对此表示很不屑,说硬盘挂了怎么办,我说那可以主备,但是具体的没用过所以详细的也不知道了。
然后又开始问Redis的问题,问我用了多少,我说基本没用多少。问怎么做序列化,我说没了解过,自己写的demo属于非常简单的那种。
但是最后说还是会有三面,我惊讶代码写这么烂还有三面,他说这是他综合考虑的结果。
最后提问阶段问了人人那边的存储主要用什么,回答比较令我惊讶,居然是淘宝的tair,也是基于GFS那篇经典paper实现的。
三面:
有种压力面的感觉。
上来先气势汹汹的让我讲dijskra,讲完嫌我说的比较啰嗦,还说描述的有问题,让我回去好好看看书。然后让我讲基数排序,我直说忘了,又让我说堆排序,我blabla。然后开始问TCP的一些机制,CLOSE_WAIT状态,一开始没什么印象,问了下面试官是不是问的TIME_WAIT,显然被鄙视了,所以又想了下,关闭连接的四次握手就两个状态是被动的,TIME_WAIT是主动关闭,那CLOSE_WAIT就是被动关闭方的状态了,尝试说了出来,这个问题算是过了。后面问滑动窗口协议和keepalive机制都比较基础,直接答出。
接着开始问C++的问题,让我直接解释什么是隐藏,一点提示都不给,我想了半天只好说不知道,后来查了下是非虚函数的标识符污染相关的,确实之前没关注过。然后问了一些比较经典的问题,构造函数调虚函数,构造函数可不可以是虚函数等。
然后让我解释多态,这点我就直接说自己也算是玩过了很多种范式的语言,总结一下,多态就是运行时向同一实例发送同一消息产生不同响应,他对这个回答比较满意。
又问我关于boost::ASIO的问题,我直接说没用过。
面试官这时看到我简历上提到了分布式系统设计,就开始问分布式相关的问题,让我画一个游戏的架构,然后以数据流向为线索问每个节点的作用,节点怎么做容灾,当时对容灾完全没什么概念,所以答的较烂,有些基本概念还搞错了。
又问了一些我对社交网络和游戏的看法blabla。
最后提问环节,我重点问了下分布式相关的问题,包括人人那边状态节点如何在,他也回答得很直接,全做成无状态。其他还有一些问题blabla。
满意的地方:
三面完了之后当天给offer,不用天天念想着还是很好。
不满意的地方:
压力面试太可怕了。