面试复盘|快手 C++开发 123面总结(无HC凉)
一面:
面试时长:50分钟
- 开局自我介绍,被面试官吐槽有点快。
- 面试官对我的两篇论文非常感兴趣,让我详细讲解
- 介绍第一篇论文,方法,背景
- 介绍第二篇论文,方法。oral是不是只能线上汇报了,nonono,北京本地
- 开始问项目,升序链表怎么做的,怎么实现的,怎么处理不活跃用户的
- 说一下协程,协程的作用是什么,我们什么时候用协程
- 说一下无锁编程,用了cas还需要用atomic吗?不冲突吗
- 都是linux下写的吧,对,你最喜欢linux哪个命令?我:ls 因为这是ssh上去之后的第一件事情
- 如何把一个shared_ptr赋值给unique_ptr,说一下让你实现的设计思路
算法题:
二面:
常规八股文想不起来了
算法题写了很久,要求是多线程安全的 带有 热点缓存的 LRU。
- 第一步先和面试官讨论设计思路
- 讨论如何为热点数据吗,通过命中次数
- 讨论热点缓存如何换入换出 是否用于LRU同样的方法
- 先编码实现普通LRU
- 继续完善实现带有热点数据缓存功能的LRU
- 讨论如何保证多线程安全
- 使用互斥锁,锁的粒度太大,如何减少锁的粒度
- 使用hash分桶,在每个桶里面用锁,减少了锁的粒度。。。这块是面试官提示的
三面:
面试时长:40分钟左右
- 开局本来想自我介绍,面试官让我说一下特长和优点就行
- 尴尬经:我说这次来公司A面试。面试官:我们不是A公司,我们是快手。。。直接凉了
- 面试官问我科研项目是啥,开题准备是什么题目
- 面试官表示对我的题目很感兴趣,让我详细讲讲(5分钟以上)
- 问我神经网络的前向传播和BP
- BP过程中有什么问题?梯度爆炸和梯度消失。
- 分别有什么解决方法?正则化,直连还有relu。我说我并没有准备算法方面的面试,面试官说:这也不是我的本行
- 进入正式面试:全部是场景题目
- 我们先来熟悉一下递归吧,你先写一个数组求和的递归实现,先来进入一下这个氛围
- 好,你知道汉诺塔问题的递推式吗,f(n)和f(n-1),让我现场推导递推式,并问我为什么
- 能根据这个递推式求出f(n)的具体解析式吗?一个和n有关的式子,我没有求出来
- 好,接下来是一个设计题,现在有一个服务器HTTP的,发送的是简单的GET报文,参数是手机号的最少前四位,如何能够在最短的时间内返回前缀匹配的前100个手机号,不能借助外界的数据库
- (1)说一下你的设计思路,采用什么数据结构,如何实现快速返回
- (2)你对你这个内存结构做一个内存估算,加入给你10^10个手机号,请准确的计算出你设计的数据结构的内存消耗,误差在2倍以内
- (3)如何实现你设计的这个系统的高可用性?
- 漫长的场景设计题之后,问我不同线程之间不共享的到底是什么?我说栈,线程id,信号掩码,寄存器。面试官反问,不同线程之间共享信号处理函数吗?这个有点忘了
反问:部门技术栈。