【C/C++】面试基础题目收集
C++ 软件开发面试中常见的刷题题目通常可分为以下几大类:数据结构与算法、系统编程、面向对象设计、C++ 语言特性、并发编程等。
🧠 一、数据结构与算法(力扣/牛客经典题)
掌握 STL 和底层结构实现能力:
📌 数组 & 字符串
- 两数之和(LeetCode 1)
- 三数之和(LeetCode 15)
- 盛水最多的容器(LeetCode 11)
- 最长不重复子串长度(LeetCode 3)
- 字符串转整数(LeetCode 8)
📌 链表
- 反转链表(LeetCode 206)
- 判断链表是否有环(LeetCode 141)
- 合并两个有序链表(LeetCode 21)
- K 个一组翻转链表(LeetCode 25)
📌 栈与队列
- 用两个栈实现队列(剑指 Offer 09)
- 最小栈(LeetCode 155)
- 滑动窗口最大值(LeetCode 239)
📌 哈希
- 有效的字母异位词(LeetCode 242)
- 字符串中的第一个唯一字符(LeetCode 387)
- 和为 K 的子数组(LeetCode 560)
📌 树与图
- 二叉树前/中/后/层序遍历(LeetCode 102/94/145)
- 判断二叉搜索树合法性(LeetCode 98)
- 最小公共祖先(LeetCode 236)
- 克隆图(LeetCode 133)
📌 排序 & 搜索
- 快排/归并排序手写实现
- 二分查找变种(如搜索旋转数组 LeetCode 33)
- TopK 问题(堆或快排思想)
📌 动态规划
- 爬楼梯(LeetCode 70)
- 最长回文子串(LeetCode 5)
- 零一背包问题(经典 DP)
- 编辑距离(LeetCode 72)
💡 二、C++ 语言特性与底层
了解 C++ 的内存模型、语法糖和 STL 容器底层实现:
📌 C++ 核心语言特性
- 拷贝构造、移动构造、赋值操作区别
- 智能指针实现原理(
shared_ptr
/unique_ptr
/weak_ptr
) - 虚函数表机制、RTTI、类型转换(static_cast 等)
- RAII 和资源管理模式
- 模板特化、SFINAE、完美转发
- lambda 表达式、bind、function
📌 STL 相关
-
vector
,list
,map
,set
,unordered_map
的底层实现 - 自己实现简易版
vector
(支持动态扩容) - 自己实现
shared_ptr
- 红黑树(map/set 底层)基本操作手写(插入、删除)
🧵 三、并发与多线程编程
大厂常问线程模型、锁机制、任务调度类问题:
- 用 C++ 实现线程池(支持任务提交和执行)
- 生产者消费者模型(使用 condition_variable)
- 原子操作与内存序(std::atomic, memory_order)
- 实现一个读写锁
- 死锁的产生与解决
- 基于定时器的任务调度系统
🛠️ 四、系统编程基础题目
涵盖文件、网络、内存、信号等系统能力:
- 实现 mmap/read/write 的文件读写工具
- 实现一个简易 echo server(select/epoll)
- TCP 三次握手/四次挥手过程图解
- fork + pipe 实现父子进程通信
- 实现一个自定义内存池 allocator
📦 五、面向对象设计 & 设计模式
企业级系统设计能力的基础:
- 电梯系统设计 / 订票系统 / 日志系统
- 实现观察者模式 / 单例模式 / 策略模式
- 模拟实现一个 LRU Cache(LeetCode 146)
✅ 建议刷题顺序与方法
- 第一轮(基础刷题): 数据结构 + 算法题精刷(100 道以内)
- 第二轮(C++ 特性): STL/模板/智能指针/RAII/虚函数专题刷
- 第三轮(系统能力): 多线程 + 网络 + 内存 + 项目实战题
- 第四轮(综合系统设计): 设计一个线程池、异步日志、RPC 框架等
📚 配套资料推荐
- 《Effective C++》《More Effective C++》《Effective Modern C++》
- 《C++ Primer》《STL 源码剖析》
- LeetCode、牛客网 C++ 题库
- 《Linux 高性能服务器编程》(游双)