快手C++算法工程化实习面经(一面+二面)

快手C++算法工程化实习面经(一面+二面)

更新:算是过了吧,准备拒了。
这次面试全是手撕题目,每一面三题,不过一开始都有一段自我介绍。顺便说一下,很多天以前面了字节,听说字节面试是这样的,结果全程问基础知识,两面完直接没了,可能是投的岗位不同?

一面

很迷惑,一开始面试官居然开始自我介绍了,然后说了一堆,大概介绍了一下部门。然后让我自我介绍。介绍完了就直接开始做题。

  1. 第一个题目给n个概率P,和为1,然后实现一个类,其中有一个接口是采样,按概率返回数(0-n)。
    我把他先转换成了整数,然后随机一个数字,再用一个二分来求数字,复杂度是lgn的。然后面试官说为什么不直接随机一个0-1的数呢,好像很有道理,我也不知道为啥一开始我就想转换成整数。然后又问能不能更快一点,说了一个用map存一下可以做到O(1)。然后问有没有空间O(n),时间O(1)的,然后想不出来了。后面面试官说下去可以看一下alias sample。
  2. 好像是剑指Offer的,给一个字符串求最长连续不含重复字符的子串长度。
    用双指针搞一搞就好了。比较简单,很快写完了。
  3. 百度面试的时候问过的一个类似的,让设计一个类,有一个接口是插入一个任务以及开始的时间,然后让我来设计安排处理任务。说是用一个优先队列,其实我一直不太清楚这种的要怎么设计,面试官好像觉得也还行,然后就没了,一面大概40多分钟就结束了。
  4. 让提问。

二面

还是先自我介绍,让我说一下ACM比赛中印象最深刻的题,然后我随便说了一个(我还以为面试官也是ACM出身的),结果面试官好像听不懂的样子,尴尬,然后面试官说算了,还是直接做题吧。

  1. 求n个节点二叉树的形状种数。
    写了个记忆化搜索,10分钟写完吧,面试官好像有点不可思议的样子问我有没有做过这个题,表示没有。感觉对ACMer来说还是比较easy的吧。
  2. 给一个形如2,2,1,1,3,4,4,5,5的数组,里面只有一个数是出现一次的,出现两次的数都是连续的。
    一开始没听清题目,没听到连续的,直接说异或。面试官说能不能再快点,给我搞懵逼了,然后我想了一会和面试官交流了一下,发现自己听错了。然后想了一会发现可以二分做,我的思路是比较mid和mid-1如果相等就往左找,mid和mid+1如果相等就往右找,然后都不相等就找到了。和面试官交流了一下,面试官好像有点疑问然后让我先写出来。写的过程中发现答案有问题,然后发现最后3个数的时候mid和左右不相等,不一定mid就是答案,然后3个的时候加了个特判就对了。给面试官说了一下想法。面试官好像有点疑问,貌似标解不是这样的。然后面试官觉得我的不对,给我出了几个例子都是对的,然后又和面试官交流了一下,面试官貌似接受了我的思路,然后就下一题了。
  3. 又是LRU,只让大概写一下,不用详细实现。然后大概写了一下,问了点多线程的问题,然后就结束了。总共大概一小时,第二题给面试官解释的有点久,然后一开始读错题目多花了点时间,所以还是要听清楚题目再开始思考,多和面试官交流。

猜你喜欢

转载自blog.csdn.net/Radium_1209/article/details/105716809