C++ 机器人方向常考面试题汇总(嵌入式 / ROS / 自动驾驶 / 运动控制)
机器人方向这几年越来越卷,尤其是 C++ 岗位。很多同学以为机器人开发只是“写算法”,但真正进入面试之后会发现:
- 八股文要会
- Linux 要熟
- C++ 要硬
- 多线程要懂
- ROS 要能讲
- 控制算法要知道
- 通信协议要能分析
- 实时性问题必须理解
尤其是机器人企业、自动驾驶公司、工业机器人、四足机器人、无人机方向,对 C++ 基础要求通常比普通开发岗更高。
因为机器人系统本质上是:
“实时 + 并发 + 硬件 + 算法 + 系统工程”的综合体。
很多公司甚至会直接从:
- STL
- 内存管理
- 多线程
- Linux
- 网络通信
- ROS
- 控制理论
一路问到项目架构。
这篇文章主要整理:
- 机器人方向岗位分析
- 企业常见技术要求
- 高频 C++ 面试题(25题)
文章不提供答案,适合:
- 面试前自查
- 八股整理
- 面试路线规划
- 查漏补缺
一、机器人方向岗位分析
1. 机器人岗位主要分支
机器人方向实际上细分很多:
① ROS开发工程师
主要负责:
- ROS1/ROS2
- 节点通信
- Topic / Service
- MoveIt
- Gazebo
- SLAM
- Navigation
常见公司:
- 服务机器人
- 配送机器人
- 巡检机器人
- 无人叉车
更多C++大厂面试八股文题目汇总:
https://www.nowcoder.com/creation/manager/columnDetail/Mq7XWW
② 嵌入式机器人开发
主要负责:
- STM32
- FreeRTOS
- 电机控制
- CAN/UART/SPI
- PID
- 传感器驱动
偏硬件底层。
③ 自动驾驶 / 感知方向
主要涉及:
- C++
- Linux
- 多线程
- 点云
- OpenCV
- CUDA
- TensorRT
很多会要求:
- 工程能力
- 高性能优化
④ 运动控制方向
核心内容:
- PID
- MPC
- 卡尔曼滤波
- 轨迹规划
- 电机控制
- 状态机
数学要求通常更高。
⑤ 机器人系统工程
偏整体架构:
- 通信
- 软件架构
- 实时系统
- 多进程
- Docker
- Linux部署
大厂越来越看重这一块。
二、机器人岗位核心能力要求
1. C++基础必须扎实
机器人行业大量使用:
- C++11/14/17
- STL
- 智能指针
- RAII
- 模板
- 多线程
很多公司已经默认:
“不会现代C++ = 基础不行”
2. Linux能力很关键
因为机器人几乎都跑 Linux。
至少需要会:
- shell
- gdb
- cmake
- make
- systemd
- 网络调试
- 性能分析
3. 多线程是重点
机器人天然是:
- 传感器线程
- 控制线程
- 通信线程
- 图像线程
所以:
- mutex
- condition_variable
- atomic
- 死锁
- 线程同步
是高频问题。
4. ROS几乎是标配
尤其是 ROS2。
重点:
- DDS
- QoS
- 节点生命周期
- topic机制
- tf树
5. 实时性问题越来越重要
机器人最怕:
- 卡顿
- 延迟
- 抖动
- 丢包
所以很多公司会问:
- 实时系统
- 锁竞争
- 内存碎片
- 零拷贝
三、C++机器人方向常考面试题(25题)
C++基础
1.
什么是 RAII?为什么机器人项目中大量使用 RAII?
2.
shared_ptr、unique_ptr、weak_ptr 的区别是什么?
3.
vector 扩容机制是什么?
4.
map 和 unordered_map 的区别是什么?
5.
什么情况下会发生内存泄漏?
6.
new/delete 和 malloc/free 的区别是什么?
7.
C++11 新特性你用过哪些?
8.
左值引用和右值引用的区别是什么?
9.
什么是移动语义?
10.
什么是虚函数?虚函数表是怎么实现的?
多线程与并发
11.
mutex 和 spinlock 的区别是什么?
12.
什么情况下会发生死锁?
13.
condition_variable 的作用是什么?
14.
atomic 为什么比 mutex 更快?
15.
多线程下 vector 是否线程安全?
16.
机器人系统为什么需要多线程架构?
Linux方向
17.
Linux 下如何定位程序崩溃问题?
18.
什么是僵尸进程?如何处理?
19.
select、poll、epoll 的区别是什么?
20.
CMake 和 Makefile 有什么区别?
ROS / 机器人方向
21.
ROS Topic、Service、Action 的区别是什么?
22.
ROS2 为什么使用 DDS?
23.
机器人中的 tf 坐标变换是什么?
24.
PID 控制器的三个参数分别有什么作用?
25.
机器人系统为什么强调实时性?
四、机器人面试的真实情况
很多机器人公司的面试并不是:
“只问算法”
而是:
- 八股
- Linux
- 工程能力
- 调试经验
- 项目架构
一起问。
尤其是中小公司特别喜欢:
“从项目里深挖”
比如:
- 为什么这样设计?
- 为什么使用多线程?
- 为什么不用消息队列?
- 为什么通信延迟这么高?
- 为什么电机会抖动?
如果项目是自己真正做过的,通常能答出来。如果只是“拼项目”,很容易被问穿。
五、学习路线建议
机器人方向比较推荐的学习顺序:
第一阶段
- C语言
- 数据结构
- Linux基础
第二阶段
- C++11/14
- STL
- 多线程
- 网络编程
第三阶段
- ROS2
- OpenCV
- 控制算法
- 电机驱动
第四阶段
- 项目实战
- 机器人整机开发
- 系统架构
- 性能优化
机器人方向的 C++ 岗位,本质上非常偏工程。真正拉开差距的,往往不是刷了多少题,而是:
- 有没有完整项目
- 有没有调试经验
- 能不能解决真实问题
- 是否理解系统设计
对于校招来说:
“会写代码”只能及格,“能做系统”才真正有竞争力。
尤其现在很多机器人公司已经开始要求:
- Linux工程化
- 现代C++
- ROS2
- 高性能并发
所以越早建立完整技术体系,后面越容易进入核心开发岗位。
