腾讯后端开发岗面经 09
- 时间
- 2025-10
- 来源
- 牛客网
《面试题目》
- 服务调用超时后,主调用方应该怎么处理?
- 服务发现的实现思路是什么?
- gRPC 底层如何进行通信?
- LevelDB 为什么选择 SkipList?适合哪些场景?
- Redis 的 RDB 和 AOF 备份有什么风险?
- Prometheus 的推模式和拉模式有什么区别?
- API 网关如何鉴权?JWT 怎么实现?
- Go 的 interface 如何工作?两个 interface 能比较吗?
- 有缓冲和无缓冲 channel 有什么区别?
- C++ 中如何实现互斥和条件变量?
- 死锁产生的条件是什么?
- B+ 树为什么比哈希表更适合数据库索引?
- WebSocket 如何实现全双工通信?
- 什么是零拷贝?Go 中如何使用?
- 分布式一致性哈希如何处理节点增减?
- 什么是脑裂?分布式系统如何避免?
- 缓存雪崩导致数据库过载时如何应急?
《参考解析》
- 超时处理要区分连接、读写和业务超时,配合重试预算、幂等键、熔断和降级;重试次数不能无限增加上游压力。
- 服务注册中心保存实例地址、版本和健康状态,客户端订阅或定期拉取后本地负载均衡;调用失败应触发摘除和重新解析。
- LevelDB 用 SkipList 作为 MemTable,写入简单、并发读性能稳定,并通过 WAL 和 SSTable 完成持久化与 compaction。
- Prometheus 默认拉取目标指标,便于统一发现和健康检查;推送适合短任务或无法被抓取的环境,但需防止推送端失控。
- 一致性哈希把节点和 key 映射到环上,节点变化只影响相邻区间;虚拟节点可改善负载不均,迁移期间仍要处理副本和故障切换。
- 缓存雪崩应先限流和保护数据库,再通过随机 TTL、分批重建、热点预热和多级缓存恢复;不能让大量请求同时回源。