面灵AI

腾讯音乐后端开发岗多轮面经

轮次
多轮
时间
2026-09
来源
牛客网

《面试题目》

  1. C++ 中 const 和 static 的作用分别是什么?
  2. 协程相比线程的性能优势来自哪里?
  3. Reactor 是什么?单 Reactor 与多 Reactor 有什么区别?
  4. select、poll、epoll 的工作方式和适用场景有什么区别?
  5. 什么是 TCP 粘包与拆包?为什么某些场景不直接使用 HTTP?
  6. protobuf 解决了哪些问题,如何与其他序列化协议比较?
  7. MySQL 分库分表时如何选择分片键并处理跨库查询?
  8. MySQL 主从复制如何工作,如何处理复制延迟?
  9. Redis 缓存击穿、穿透和雪崩分别如何防范?Redis 持久化和主从同步如何选择?
  10. 如何设计 10 万 QPS 的用户消息查询服务并决定 Redis 的缓存内容?
  11. Go 的 goroutine 如何由 GMP 调度?发生网络 IO 时调度器如何处理?
  12. 线上服务内存占用过高、慢查询或下游变慢时,如何定位和保护系统?
  13. 如何设计秒杀系统的幂等、库存扣减、限流熔断和故障恢复?
  14. 优化 RAG 检索时,文档切分大小和 topK 过大或过小分别有什么影响?

《参考解析》

  1. 协程由用户态运行时调度,切换通常不需要完整切换内核线程;Reactor 以事件循环分发 IO 事件,多 Reactor 可把连接接收和业务处理分摊到不同线程。select/poll 需要遍历描述符,epoll 通过就绪事件回调更适合大量连接。
  2. 粘包拆包来自字节流没有消息边界,应在协议层增加定长、长度字段或分隔符。protobuf 用 schema 定义紧凑的二进制编码,需结合兼容性、可读性和跨语言支持与 JSON 等方案权衡。
  3. 分库分表应先按访问模式选择稳定、分布均匀的分片键,跨分片查询通过路由、并行查询和聚合处理;主从复制需监控位点/延迟,读写一致性要求高的请求应读主库或按位点等待。
  4. 缓存穿透可用布隆过滤器和空值缓存,击穿可用互斥重建或逻辑过期,雪崩可通过随机 TTL、分批预热和限流降级缓解。Redis 持久化按恢复目标选择 RDB/AOF,主从同步与哨兵/集群共同提供故障转移。
  5. Go 的 goroutine 由 P 持有本地队列并在 M 上运行,阻塞 IO 时运行时会让出执行资源。线上排查应结合指标、火焰图、堆转储、慢查询和链路追踪;下游突发变慢时用超时、舱壁、限流和熔断防止线程、连接池及消息堆积。
  6. 秒杀扣库存要保证原子性,业务唯一键或幂等记录防止重复下单,令牌桶/漏桶控制入口流量,熔断后需有明确恢复条件。RAG 参数应以评测集权衡召回率、上下文噪声、延迟和成本,不能只凭单个案例调整。