影石 C++ 一面面经

影石(Insta360)的 C++ 岗位近几年热度不低,一面普遍围绕语言基础、内存与对象模型、现代 C++、RAII、设计模式、STL 底层展开,题量不大,但单题可追问较深,和「只会写业务、说不清原理」的候选人区分度比较明显。

C++ 基础与面向对象

  1. 空类 class Empty {} 在主流编译器下 sizeof 是多少?为什么要占这么多字节?
  2. 成员函数、静态成员函数、虚函数在内存里分别存在哪里?调用方式有什么不同?
  3. 构造函数可以是虚函数吗?析构函数为什么常常要声明成虚函数?
  4. 菱形继承下数据成员和虚函数表是怎么布局的?虚继承解决了什么问题?

现代 C++(C++11 及以后)

  1. 左值、右值、将亡值(xvalue)分别是什么?int&& 和 const int& 绑定右值时行为有何差异?
  2. std::move 和 std::forward 本质上做了什么?为什么说它们通常不搬数据本身?
  3. 完美转发(perfect forwarding)典型用在哪些场景?写错引用折叠会出现什么问题?
  4. = default、= delete、explicit 各自解决什么工程问题?各举一个例子。

内存、异常与资源管理

  1. RAII 的核心思想是什么?和「手动 new/delete」相比,在异常安全上强在哪里?
  2. 三种异常安全保证(basic / strong / nothrow)分别是什么意思?vector::push_back 应尽量满足哪一种?
  3. unique_ptr 和 shared_ptr 底层实现差异是什么?shared_ptr 循环引用怎么破?

类型转换与设计模式

  1. static_cast、reinterpret_cast、const_cast 的使用边界分别是什么?各举一个合理/不合理的例子。
  2. 手写一个线程安全的单例,至少说出两种写法,并比较懒汉/饿汉的优缺点。
  3. 策略模式、模板方法模式、观察者模式各适合什么场景?你在项目里用过哪一种?

STL 与容器底层

  1. std::vector 的 reserve 和 resize 区别是什么?扩容时迭代器为什么会失效?小对象优化(SSO)对 vector<string> 有什么影响?

核心大厂开发面试题以及基础八股文资料汇总:

https://www.nowcoder.com/creation/manager/columnDetail/Mq7XWW

准备方法与策略

1. 按模块刷,不要只背答案

影石一面题目之间有内在联系:虚函数 → 多态 → 析构 → 智能指针 → RAII → 异常安全,是一条线。建议按「OOP 内存模型 → 现代 C++ → STL → 设计模式」四个块准备,每块能画图 + 讲清楚 + 举项目例子。

2. 现代 C++ 是重点,但要能落到工程

move/forward、智能指针、= delete 这类题,面试官常追问:你在代码里怎么用的?有没有踩过坑? 准备 1~2 个真实场景(资源封装、回调传参、容器传大对象)比背标准答案更有用。

3. STL 别只会用,要懂「为什么这样设计」

vector 扩容、allocatorstring SSO 是高频方向。重点搞懂:扩容代价、迭代器失效规则、移动语义在扩容里的作用,能口述 push_back 触发扩容时发生了什么。

4. 设计模式别堆名词

影石偏硬件 + 软件结合,更在意场景匹配:单例怎么保证线程安全、观察者怎么处理订阅/退订、工厂怎么解耦创建逻辑。每准备一个模式,配一句「如果不用它会怎样」。

5. 一面节奏建议

  • 先给结论,再补 1~2 句原理,面试官感兴趣会深挖
  • 不会的题直接说边界,别硬编——一面更看重思路和诚实度
  • 留 5 分钟反问:团队技术栈、C++ 标准版本、业务里性能/并发挑战等,显得有准备

6. 推荐复习清单(精简版)

内存布局

对象模型、虚表、继承布局

C++11/14/17

右值引用、移动语义、智能指针、constexpr

异常与 RAII

异常安全等级、析构顺序、资源泄漏

设计模式

单例、观察者、工厂、策略(能讲场景)

STL

vector/string 底层、迭代器失效、allocator 概念

结尾

影石 C++ 一面整体难度中等偏上,题量不大但每道都能往下挖三层。我最大的感受是:光会写业务代码不够,得把「为什么这样写更安全、更高效」讲清楚。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务