腾讯云智 - 后台开发 - 二面 4.10
1. 面试官自我介绍
2. 自我介绍(实习,开源,项目)
3. 现在我有100亿个数,怎么求这100亿个数字的最大的一万个数?(分治)
4. 有没有别的办法?(开个小根堆,大小超出10000的时候比较当前数字和堆顶的关系,大于则替换,最后堆里的就是答案)
5. 还能想到别的办法吗(位图标记数字,最后从高位统计结果)
6. ok,那我现在要求100亿个数里出现次数最多的一万个数怎么做(分块计数,然后把计数结果cnt作为上个问题的数值)
7. 常见的排序算法有哪些?讲讲快排,冒泡,归并,基数
8. TCP三次握手?第一次发包的时候服务端没在监听怎么办,客户端服务端分别怎么处理?
9. 项目里RESP协议怎么实现的?解析一个请求编码的过程?(举了解析get命令解码的过程的例子说明)
10. 请求的编码是在你网络层的TCP连接的字节流里去传对吧,你怎么判断这个请求的结束位置?(从resp编码结构考虑,\r\n\r\n的位置)
11. 那如果我发一个请求这个时候发一半客户端断开不发了,这种情况你服务端怎么处理?(服务端实现上 在拿到结束标志位之前会处于WAIT状态)
12. 那如果这里我发了一个set命令的请求携带了非常长的数据,比如说有1G吧,你怎么处理,不能一直等待吧(一般会设置携带参数值的最大长度限制,超出直接返回错误状态)
13. 讲讲Bitcask(日志结构,类别,读写,内存索引,merge),Bitcask和LSM的区别,性能对比
14. 讲讲你参与的seata-go这个开源项目,它是怎么实现/解决分布式事务呢?(讲了AT,Saga流程和适用情景)
15. 打断一下,讲的很详细,那我举一个场景的例子你讲讲解决办法好吧。比如我有一个目标服务,这个目标服务去调A服务,A服务成功会写库,之后会调B服务,同样成功会写库,然后呢AB都成功的时候目标服务会写库,怎么用seata go解决这个场景?(讲了在saga模式下的实现,然后讲了这个场景在saga下每一步成功的状态机变化和失败的反向补偿整个流程)
16. 好的,seata虽然我没用过,但是你说的这个东西对我比较有帮助,我后面去学习一下。(阿哲)
17. 我们也面了挺久了,那我问最后一个问题好吧,怎么去设计一个简单的类似redis的缓存,只需要支持get set方法就ok,用LRU作为淘汰机制?怎么保证并发访问?优化锁粒度(分桶),有看过redis源码这里怎么实现的吗?(没有)
18. 闲聊 + 反问:
- 闲聊开源相关
- 反问 您觉得我目前需要提升的点
- 参照整个面试过程,我有希望通过您这一轮吗?(没问题(太好力云智,点名表扬))
- 您有什么推荐阅读的博客或者资料吗
---
全程1h20min左右,问的不多但每个问题聊的时间比较久