面灵AI

腾讯后端开发岗面经 09

时间
2025-10
来源
牛客网

《面试题目》

  1. 服务调用超时后,主调用方应该怎么处理?
  2. 服务发现的实现思路是什么?
  3. gRPC 底层如何进行通信?
  4. LevelDB 为什么选择 SkipList?适合哪些场景?
  5. Redis 的 RDB 和 AOF 备份有什么风险?
  6. Prometheus 的推模式和拉模式有什么区别?
  7. API 网关如何鉴权?JWT 怎么实现?
  8. Go 的 interface 如何工作?两个 interface 能比较吗?
  9. 有缓冲和无缓冲 channel 有什么区别?
  10. C++ 中如何实现互斥和条件变量?
  11. 死锁产生的条件是什么?
  12. B+ 树为什么比哈希表更适合数据库索引?
  13. WebSocket 如何实现全双工通信?
  14. 什么是零拷贝?Go 中如何使用?
  15. 分布式一致性哈希如何处理节点增减?
  16. 什么是脑裂?分布式系统如何避免?
  17. 缓存雪崩导致数据库过载时如何应急?

《参考解析》

  1. 超时处理要区分连接、读写和业务超时,配合重试预算、幂等键、熔断和降级;重试次数不能无限增加上游压力。
  2. 服务注册中心保存实例地址、版本和健康状态,客户端订阅或定期拉取后本地负载均衡;调用失败应触发摘除和重新解析。
  3. LevelDB 用 SkipList 作为 MemTable,写入简单、并发读性能稳定,并通过 WAL 和 SSTable 完成持久化与 compaction。
  4. Prometheus 默认拉取目标指标,便于统一发现和健康检查;推送适合短任务或无法被抓取的环境,但需防止推送端失控。
  5. 一致性哈希把节点和 key 映射到环上,节点变化只影响相邻区间;虚拟节点可改善负载不均,迁移期间仍要处理副本和故障切换。
  6. 缓存雪崩应先限流和保护数据库,再通过随机 TTL、分批重建、热点预热和多级缓存恢复;不能让大量请求同时回源。