腾讯一面挂经

校招还没有投腾讯呢,但是因为之前实习的时候投过腾讯,不知道怎么搞的把我捞起来了。 一面是视频面,面试官先让写了一个算法题,求二叉树中两个节点的最近祖先节点。这个是比较经典的题目, 当时想了一会没想出来,还是偷偷用手机查的。。。写出来之后面试官让解释思路,我就磕磕巴巴地说了一通。 然后让我解释TCP三次握手和四次挥手,以及TIME_WAIT的状态出现在什么阶段,TIME_WAIT这个状态有什么作用,答错了,我说成是服务器等到最后一个ack时的状态, 其实应该是客户端发送完最后一个ack后进入的状态。就是是主动断开连接的一方进入TIME_WAIT状态,等待两个MSL时间,进入CLOSED状态。 TIME_WAIT状态存在的意义有两点:

  1. 如果直接进入CLOSED状态,那么如果server没有收到ACK,就无法重传了,协议就不可靠了。
  2. 如果直接CLOSED,然后client又向server发起一个新连接,可靠老数据会和新数据混淆。

接着又是一个比较经典的智力题,1000瓶药,只有一瓶是毒药,10只小白鼠,找出这批毒药,这个回答出来了,不过确实想了一会,之前也看到过。

然后又是几个很简单的Java基础选择题,回答完了之后是一个算法题,一个排好序的依次递增的数组,有一个数字出现两次,求这个数字,应该是二分查找出来,但是当时 可能有的细节没注意。然后是top N的问题,用堆做,还问了时间复杂度。 最后是一道策略题,感觉好难啊,就是一个学者去一堆城市旅行,城市数量未知,路线未知,每个城市有自己的纪念品,学者在一个城市只能持有一个纪念品,让你设计一个策略, 使得最后学者手上每个城市纪念品的概率都是一样的。他还提示了我一下,最后也没想出来。。。后来才知道是用蓄水池算法做,第一个城市肯定拿纪念品,第二个城市以1/2的概率换,。。。 第i个城市就以1/i的概率换掉纪念品,还是题刷的不够多。

Written on August 22, 2018