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 在米哈游的使用场景?
  • 项目组的一些细节,代码组织、管理形式等是怎样的?
  • 项目质量的保障手段有哪些,单元测试覆盖率要求如何?
  • 测试的同学主要以白盒测试还是黑盒测试为主?
  • 前面很多问题都没有答对,面试官的建议?