面灵AI→

恒生电子 C/C++工程师一面面经

轮次
一面
时间
2026-10
来源
牛客网

《面试题目》

面试形式:腾讯会议,需开麦与摄像头,不需要屏幕共享;全程约 15 分钟。

  1. 自我介绍。
  2. 讲讲你的实习经历。
  3. 你对 C++ 有哪些能力?
  4. (提到新语言特性后追问)泛型编程的理解?
  5. 设计模式是否有了解,选一种说说?
  6. 同步非阻塞的概念是什么?
  7. 反问:有什么想了解的?

补充:后续还会有二面和 HR 面;岗位会涉及金融相关知识,入职后会开展教学。

《参考解析》

「你对 C++ 有哪些能力」怎么答。这题问的是能力边界,不是让你背语法。稳妥的答法是按层次给自己的掌握度划档:语言基础(RAII、移动语义与右值引用、智能指针的所有权模型、const 正确性)、标准库(容器与迭代器失效规则、algorithm、string_view)、内存管理(栈与堆、对象生命周期、自定义分配器与内存池)、并发(std::thread、mutex 与条件变量、原子操作与内存序)、工程能力(CMake、GDB、性能剖析、跨平台编译)。再明确说出自己没深入的部分,比如模板元编程、协程、无锁数据结构——面试官最反感的是把「听过」说成「精通」,后面一追问就露馅。如果实习里用过 C++,直接把场景带上:写过什么模块、代码量多少、遇到过什么内存或性能问题、怎么定位的。

泛型编程的理解。泛型编程的核心是「把类型也当作参数」,让同一份逻辑在编译期适配多种类型,同时不牺牲运行期性能。C++ 的实现手段是模板:函数模板与类模板在实例化时生成具体代码,属于编译期多态,与虚函数那种运行期多态相比没有虚表开销,但会带来代码膨胀和编译时间变长。常被追问的几个点:① 模板为什么通常写在头文件里——因为实例化需要看到完整定义;② 模板特化与偏特化用来给特定类型开小灶;③ type_traits 与 SFINAE 用来在编译期做约束与分派,C++20 的 concepts 把这件事变得可读得多,报错信息也不再是几屏的模板展开;④ 可变参数模板与完美转发(std::forward)是写通用包装的基础;⑤ 泛型代码的坑在于错误信息难读、隐式要求(比如要求类型可拷贝)没有写进接口,用 static_assert 或 concepts 把约束显式化是加分项。能给一个自己写过的例子——比如一个通用的环形缓冲区或序列化模板——比背定义有效得多。

设计模式选一个说说。选单例就要把坑讲透:C++11 起「函数内局部静态变量」的初始化由标准保证线程安全,所以最简洁的线程安全单例是 static Singleton& instance() { static Singleton s; return s; },不需要手写双重检查锁定;如果非要自己实现 DCLP,必须用原子变量并处理好内存序(acquire/release),否则会踩到指令重排导致的半初始化对象。再补一句为什么单例常被诟病:全局状态导致测试困难、依赖关系隐式化,工程上更倾向依赖注入。选工厂就要讲清简单工厂、工厂方法、抽象工厂的差别与适用场景;选观察者就讲订阅列表的生命周期管理——观察者析构时没反注册是典型悬垂指针来源。回答的结构建议是「解决什么问题 → 结构角色 → 代价与替代方案」,只背类图是拿不到分的。

同步非阻塞的概念。先把两个维度分开:同步/异步描述的是「谁负责等待结果」,阻塞/非阻塞描述的是「调用是否立刻返回」。同步非阻塞就是调用立刻返回,但结果可能还没就绪(返回 EAGAIN/EWOULDBLOCK),需要调用方自己反复来问。直接的用法是轮询,代价是空转烧 CPU;工程上不会裸轮询,而是用 IO 多路复用(select/poll/epoll)把它变成「有事件才回来处理」,这也是 Reactor 模式的基础——严格说 epoll 仍属于同步 IO,因为数据从内核拷贝到用户态这一步还是要自己做,真正意义上的异步 IO 是 io_uring 或 Windows 的 IOCP(Proactor 模式)。顺着往下可以聊 LT 与 ET 的区别:水平触发只要缓冲区还有数据就一直通知,边沿触发只在状态变化时通知一次,用 ET 必须配非阻塞 fd 并一次读到 EAGAIN,否则会丢事件。再往前一步就是 Reactor 的线程模型(单 Reactor 单线程、多线程、主从)和为什么金融低延迟场景偏爱非阻塞加多路复用。

这场面试的额外信息。面试官主动说了两点:后面还有二面和 HR 面,不需要准备太多;岗位会涉及金融相关业务知识,入职后会开展教学。对 C++ 岗来说,金融方向的加分项通常是低延迟与稳定性相关的话题——内存池、无锁队列、避免动态分配、CPU 亲和性、性能测量方法,以及「宁可预测得准,不可抖动」的工程取向。反问环节可以问团队负责的业务模块、新人上手的技术栈、代码评审与测试流程,问交付方式比问薪资区间更合适。