跳转至

阿里 / 钉钉 C++ 面经真题整理

参考来源

高频真题

1. C++ 和 Java 的区别怎么答?

速答: 别只说语法,重点答对象生命周期、资源管理、运行时模型和性能边界;C++ 更强调值语义和确定性资源释放,Java 更偏托管运行时和 GC。
细看: 对象模型 / 内存管理

2. 静态局部、全局、成员变量分别存在哪里?作用域和生命周期有什么区别?

速答: 这题本质考存储期和作用域:成员变量属于对象,静态局部有函数作用域但程序级生命周期,全局变量和静态存储期对象更偏进程级共享。
细看: STL、模板、编译链接、const/static/inline

3. 编译过程是什么?能不能挑一步展开讲?

速答: 预处理、编译、汇编、链接四步,展开时可以补模板实例化、符号解析、ODR 和静态/动态链接差异。
细看: STL、模板、编译链接、const/static/inline

4. 分布式锁都有哪些做法?

速答: 常见是数据库锁、Redis 锁、ZooKeeper/etcd 这类协调服务;回答时别忘了补“锁只是手段,关键是超时、续租、幂等和误释放风险”。
细看: Redis:过期淘汰、持久化、高可用

5. 自己怎么做一个定时调度平台?

速答: 先把问题拆成任务存储、调度触发、分布式抢占、失败重试、幂等执行和监控告警;别把它答成单机 cron 包装。
细看: 设计模式、系统设计、高并发项目问答

6. 一般是客户端收消息,服务器怎么主动向客户端推送?

速答: 常见是长连接、WebSocket、MQ 转推或移动端推送通道;追问时通常会落到连接保活、心跳和离线补偿。
细看: 网络进阶:长连接、WebSocket

7. 红黑树和平衡二叉树(AVL)区别?

速答: AVL 更严格平衡,查询更稳;红黑树旋转更少、综合插删更友好,所以工程上更常用。
细看: 数据结构与算法面试基础

8. 数据库怎么设计?

速答: 先从核心实体、主键、索引、读写模式、一致性和热点表拆,再谈分库分表或缓存;不要一上来就空讲“范式”。
细看: 数据库与缓存:MySQL、Redis

9. 前端 / 客户端直播访问量很大时,链路该怎么扛?

速答: 通常从 CDN、长连接、消息分发、缓存、限流降级和异步化几层拆;阿里这类题很爱看全链路意识。
细看: RPC、消息队列、DNS、CDN / 设计模式、系统设计、高并发项目问答

10. 消息推送为什么常配长连接或 WebSocket,而不是纯轮询?

速答: 因为推送场景更在意低延迟和服务端主动下发,轮询实现简单但在连接和带宽成本上通常更差。
细看: 网络进阶:长连接、WebSocket

11. 为什么系统设计题里总会追问幂等、重试和补偿?

速答: 因为一旦进入分布式链路,失败和重试是常态;没有幂等和补偿,所谓“优化”很容易把一致性打烂。
细看: RPC、消息队列、DNS、CDN

12. 为什么调度平台和任务中心一定要考虑分布式抢占?

速答: 因为多实例部署下如果不做抢占和幂等控制,同一个任务很容易被多个节点重复执行。
细看: 设计模式、系统设计、高并发项目问答

13. 为什么推送 / 调度 / 分布式锁这几类题总会落到“失败处理”?

速答: 因为系统设计真正难的不在 happy path,而在超时、重试、重复执行、状态不一致和恢复路径。
细看: 项目面试题:性能优化、线上排障、系统思维

14. 如果让你设计一个消息推送系统,核心模块有哪些?

速答: 至少要讲连接管理、在线路由、离线存储、重试补偿、消息顺序和监控告警;阿里这类题很看结构拆分是否完整。
细看: 设计模式、系统设计、高并发项目问答

15. 如果一个分布式任务被重复执行了,你怎么止损?

速答: 先靠幂等键和状态机约束兜底,再从抢占、租约、重试策略和补偿链路回头修设计。
细看: RPC、消息队列、DNS、CDN

16. 如果推送系统有大量离线消息积压,你怎么处理?

速答: 先区分是消费者能力不足、回源链路慢、重试风暴还是存储模型不合理,再从削峰、分层存储、优先级和补偿策略下手。
细看: RPC、消息队列、DNS、CDN

17. 系统设计题里为什么经常要主动提监控和告警?

速答: 因为没有监控就没有闭环,系统设计不只是把功能跑通,还要能发现故障、定位瓶颈和验证优化效果。
细看: 项目面试题:性能优化、线上排障、系统思维

18. 如果一个系统功能做出来了,但监控、回滚、补偿都没做,你会怎么看?

速答: 这在工程上通常不算“完整上线能力”,因为一旦出问题几乎没有自救手段;阿里这类题很看上线闭环意识。
细看: 项目面试题:性能优化、线上排障、系统思维

19. 发一个请求出去,不同场景应该怎么优化?

速答: 可以从连接复用、序列化、压缩、缓存、异步化、限流降级和下游隔离几层拆;阿里面经里这类题很爱看你有没有“系统拆分能力”。
细看: 设计模式、系统设计、高并发项目问答

算法 / 题单补充

答题提示

  • 阿里这类题很适合主动从“系统拆分、失败处理、监控告警、补偿恢复”几层展开。
  • 如果是设计题,不要只答组件名,最好把数据流、状态流和异常流都说到。
  • 如果是分布式题,主动补幂等、重试、补偿、降级,会显得更像真正做过系统的人。

这一类面经的阿里风格

公开面经里,阿里 / 钉钉 C++ 题目常见特点是:

  • 语言基础照样问,但不会只停在语言
  • 很爱把语言题拽到系统设计里
  • 高频追问分布式锁、推送、调度、数据库设计、请求优化
  • 更看重“你能不能把一个系统问题拆开讲”