注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
六轮,写给和我一样搞不清状况的人
先说一个我面完才明白的事:果家是组招,每个组自己定标准、自己出题,所以你在地里看到的果家面经参考价值可能比别家低。我这次六轮下来,六个面试官的风格差别大到像六家公司。有的全程抠指针细节,有的只想聊我简历上三年前的一个项目。
还有就是保密。我到现在也不完全清楚这个组具体在做什么。问面试官,他们的回答大多是「等你进来就知道了」。所以下面的记录里,凡是涉及组和产品的部分我都略过了,只写题。题目按惯例用谐音。
第一轮
第一个面试官上来就写题,没有自我介绍,也没让我介绍自己。
题目是幺伞八,复制一个带随机指针的链表。
哈希表映射老节点到新节点,两遍扫描,第一遍建节点第二遍接指针。写完他说「空间能不能降到 O(1)」。
这个 follow up 是这一轮的重点。做法是原地穿插:先在每个原节点后面插一个复制节点,让 A 变成 A-A'-B-B'-C-C';然后利用这个结构设置随机指针,A' 的 random 就是 A 的 random 的下一个;最后把两条链拆开。
他让我把第三步的拆分单独讲了一遍,因为这一步最容易写错——拆的时候要保证原链表也被完整还原,不能留下悬空指针。我写完之后他指着最后一个节点问「这里 next 是什么」,我说要显式置空,不然最后一个原节点还指着复制节点。这个如果不主动处理,跑起来是能过的,但结构已经被改坏了。
体感这一轮考的完全是指针的严谨度,不是算法。
第二轮
题目是斯儿溜,把一棵二叉搜索树原地转成一个排序的双向循环链表。用左指针当 prev,右指针当 next。
中序遍历,遍历过程中维护一个 prev 指针,每访问一个节点就把 prev 和当前节点双向接上。遍历结束之后再把头尾接成环。
我写的时候把「first 和 last 两个成员变量」的作用先讲清楚了,然后才动手。面试官在这里说了一句「很好,很多人是写到一半才发现需要记住而不是听我讲软技能。
最后一个问题我答得比较笨,说了些泛泛的产品情怀。事后想想应该讲得更具体一点,比如为什么是这个方向、我过去的哪段经历和它对得上。
一些体会
一、果家是组招,别人的面经只能当参考。 我这次六轮里指针题占了一半,但地里也有人面下来全是分布式。所以看到面经先看清楚是哪个方向的组。
二、指针和内存的细节要扎实。 复制链表、树转链表这类题,能做出来是基础,能保证不改坏原结构、不留悬空指针才是他们要看的。
三、有些题考的是需求澄清,不是算法。 那道日期题我如果不先把「一个月」的定义问清楚,写出来的东西会很难自圆其说。
四、客户端方向的设计题要单独准备。 后台任务调度、断点续传、缓存淘汰策略、线程模型,这几块和常见的分布式八股完全是两套东西。
五、准备一个能讲得很细的 debug 故事。 我这轮明显感觉到他们更愿意从这里看一个人的真实水平。
六、保密文化是真的。 整个流程里我对这个组的了解非常有限,如果你很在意进去做什么,建议在能问的环节多争取一些信息。
写得比较碎,希望对同样在准备的人有点用。求大米。 |