2023 年初的米哈游面试复盘
面试
一面(1 小时 13 分钟)
- 自我介绍
Go 基础
- Go 里面使用 Map 时应注意问题和数据结构?
- Map 扩容是怎么做的?
- Map 的 panic 能被 recover 掉吗?了解 panic 和 recover 的机制吗?
- Map 怎么知道自己处于竞争状态?是 Go 编码实现的还是底层硬件实现的?
- CAS 具体是怎么实现的呢?
- 并发使用 Map 除了加锁还有什么其他方案吗?
- 有对比过 sync.Map 和加锁的区别吗?
- 实际使用 sync.Map 的时候碰到过什么问题?
- sync.Mutex 的数据结构可以说一下吗?
- Context 平时什么场景使用到?
- context.WithTimeout 使用现象和实现?
- context.WithTimeout 还有 cancel 返回值,如果不去调用是否有问题?
存储
- Redis 哪些场景在使用?
- 说一下分布式锁的实现?
- 基于 Redis 的分布式锁会有什么问题?
- Redis 分布式锁超时可以超时时间设长一点可以吗?不可以的话需要怎么解决?
- 对 Redis 锁续期这个怎么实现呢?
- 日常在用的 Redis 集群都是什么架构?在主从模式和 Redis Cluster 中分布式锁会有什么问题?
- 日常什么项目会用到缓存,用 Redis 做缓存有遇到什么问题吗?
消息队列
- 平时在使用 Kafka 吗,具体做哪些业务使用到?
业务
- 主要 owner 哪些业务或者经历过哪些成长较多/难度较大的项目?
- 介绍一个业务项目从 0 到 1 的上线过程?
- 介绍 TiDB -> MySQL 的数据迁移,原因和方案?
继续存储
- 为
SELECT e FROM a WHERE b = 1 AND c > 1 ORDER BY d;
建立索引。 - 有用过 EXPLAIN 吗,结果中有哪些字段值得关注?
写代码
- 30 个并发打印 0-99
反问
- Golang 在米哈游的使用场景?
- 项目组的一些细节,代码组织、管理形式等是怎样的?
- 项目质量的保障手段有哪些,单元测试覆盖率要求如何?
- 测试的同学主要以白盒测试还是黑盒测试为主?
- 前面很多问题都没有答对,面试官的建议?