快手 中间件开发 一面
9.12 二面挂后补档,8.26 一面,面试官人很好,水平很高也很和善,聊的很开心
实习
1. 项目流量峰值 qps 多少,要用多少机器及资源?
2. 选型,为什么用 clickhouse,主要有哪些方面考量?
3. 你这里用了分布式事务对吧,如果不用事务,发生数据丢失,数据错量会有什么影响?
4. 有尝试使用其他的方案,可能一些其他的数据库,或者说尝试一些真正的时序数据库吗?
5. 消息推送去重,业务方是哪,可以交给业务方面去做去重吗?
八股 & 技能
6. 中间件优化,熟练使用及调优是指哪些方面,使用中会有哪些取舍。
7. 讲一下 mysql 调优方案。索引,反范式方案。
8. 索引原理,索引行有序吗,原始数据有序吗,磁盘存储角度主键有序吗?
9. B+树这个数据结构在用做索引的时候相比其他的如哈希或者说红黑树优势在哪?
10. 回顾一下前面调优方案,对哪些列进行索引操作会比较快?
项目
11. 为什么项目要用 golang 写而不是 c++,对比一下两种语言吧。
12. 项目规模,有测试过吗,这种分布式的项目有尝试过集群部署吗?
13. redis 原始版本中事务是怎么实现的,分布式事务以及说单机事务,执行中会产生错误吗?
14. 举一个 redis 事务错误的例子吧。
15. 例子中提到了指令错误,于是继续问发生错误的话会不会要考虑一些其他因素,比如说是 Redis 的客户端有问题,或者网络有问题导致数据篡改了,是不是直接关闭连接会比较好?
16. tcp 怎么保持可靠的,tcp 一定可靠吗?
17. crc 校验怎么实现的,校验码是怎么算出来的,crc 校验中可不可能出现问题导致包的 crc 是对的但包是错的?
18. 如果两个 bit 同时反转会不会有影响。
19. 然后面试官给讲解了快手实际出现过的问题,大致应该是因为路由软件问题导致的 tcp 传输中的稳定误码导致上层应用一直无法正常工作,然后可以用一些高层协议 ssl 或者说换 md5 保证可靠,但会涉及到性能的取舍。
20. 项目 redis 中 sortset 的实现,zincurby 指令是怎么实现的?
21. 在数据规模非常大的时候只使用 skiplist 会有问题吗,应该怎么去实现?
22. 看你写的代码规模很大了,应该多去考虑考虑一些细节的东西,考虑一些选型以及说实现背后的原理,应用场景,能不能支撑用户需要的功能这些,而不是说想当然的去写完就完事了。
23. raft 模块,怎么去测试的,怎么保证它是可靠的。
24. 提到 threadlocal 无锁队列,既然都 threadlocal 为何还要考虑做无锁化处理,线程池的任务窃取。
25. 你实现的这个框架 有和其他的框架进行一些对比吗,有什么优势?
26. 为什么没有人家的好,有达到你都的预期吗,性能方面来说可能是差在哪?
27. 协程实现,这里无栈协程需要进行寄存器的保存处理,主要需要处理哪些寄存器呢?
28. 可以使用 64 位寄存器进行 16 位操作运算吗?
29. 看你这里 hook 掉网络操作,可能说是涉及到 epoll 以及说某些网络读写操作对吧,那这里如果说我去拿这个做一些磁盘操作会有什么问题?
30. 在这里假如我注册磁盘的读写,就像你日志组件中去进行日志的刷盘会有什么问题,会对协程调度有影响吗?
31. 扩展到协程调度中抢锁问题,然后聊了很多相关的。
手撕
32. 知道二叉树吗,就随便写个二叉树的直径吧那。
leetcode. 543 二叉树直径
反问
33. base & 技术栈 & 业务内容
#第一次面试##快手求职进展汇总##快手##秋招#