金证科技 C++ 开发一面二面面经:多态、STL 与项目深挖
- 结果
- 已OC
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
一面
- 请做一下自我介绍。
- 自动化专业为什么转软件?为什么高考没有直接选择计算机?
- 哪个项目参与度最高、最满意?
- 按需求背景、方案和实现详细介绍 RAG 项目。
- 项目做了多久?相关技术是原本掌握还是边做边学?
- 项目是否开源,有没有关注量?为什么暂不推广?
- 快手数字人项目是新项目还是存量项目?团队人员结构如何?
- Android 技术是入职前掌握还是入职后学习?
- LiveData 是什么?其他 Android 技术栈分别做什么?
- 使用过哪些数据库?
- C 与 C++ 有哪些典型区别?
- 多态是什么?静态多态与动态多态如何实现?
- 基类析构函数可以是非 virtual 吗?构造函数为什么不能是虚函数?
- vector 与 list 的实现、复杂度和迭代器失效有什么差异?
- Lambda 的语法、捕获和底层实现是什么?
- 项目或学习过程中印象最深刻的问题是什么?
- Vibe Coding 用过哪些模型或工具?
- 平时如何学习并沉淀知识?
- 对金证科技有什么了解?
- 期望工作与公司岗位是否存在偏差?
二面
- 请先做一下自我介绍。
- 你简历里的天团新人入团承接和数字人项目分别是什么?要讲到能听懂。
- 你的项目偏应用开发,金证做传统金融证券交易软件,你怎么看后续职业方向?
- 我们这里的系统架构成熟,很多工作是写业务代码、做清算和数据转换,不一定有很强底层技术要求,你能理解和接受吗?
- 你们现在用 AI 开发吗?
- 你怎么看 AI 开发?主要优势场景是什么?
- AI 开发过程中是否会写 Markdown、skill 或类似结构化文件?
- 快手内部 AI 使用到了什么阶段?
- 快手使用的是什么大模型?
候选人反问
- 二面后具体是订单、清算、内存数据库还是其他平台组件?
- 内存数据库在清算场景下的核心工程难点是什么?
- 校招生 6 个月到 1 年应达到什么标准?团队如何判断新人成长?
《参考解析》
多态与对象模型:静态多态在编译期就定下调用目标——函数重载、模板、CRTP 都是按类型或签名在编译期解析,没有运行期开销,代价是代码膨胀、也处理不了运行期才确定的类型。动态多态靠虚函数实现:编译器为含虚函数的类生成虚函数表,对象里放一个 vptr 指向它,调用时通过 vptr 查表间接跳转,属于运行期绑定,比普通调用多一次间接寻址、通常也挡住内联。基类析构必须是 virtual——用基类指针 delete 派生类对象时,只有虚析构才会调到派生类的析构函数,否则派生类成员不释放,属于未定义行为;所以只要一个类可能被继承并多态删除,析构就应声明为 virtual。构造函数不能是虚函数,因为虚调用依赖 vptr,而 vptr 恰恰是在构造函数执行期间才被初始化的,对象没构造完就无表可查;语义上「构造哪个类型」在 new 的那一刻已由类型确定,也不需要运行期分派。C 与 C++ 的区别可以从这条线讲:C 是面向过程、无类与模板、无异常与引用,C++ 在此之上加了封装继承多态、泛型、RAII 与运算符重载,同时保留了与 C 的二进制兼容能力。
STL 容器与 Lambda:vector 是一段连续内存,随机访问 O(1)、尾部插入摊还 O(1)、中间插入删除要搬移元素为 O(n),扩容时整体重新分配并搬迁,所有迭代器、指针、引用一并失效,提前 reserve 能避免反复扩容。list 是双向链表,持有迭代器时任意位置插入删除都是 O(1)、按位置访问 O(n),插入不影响其他迭代器、删除只让指向被删元素的迭代器失效,但节点分散导致缓存命中差、每个节点还多两个指针开销。选型看访问模式而不是看谁「更快」:读多写少且要随机访问选 vector,频繁在中间增删、元素又大选 list,只在头尾操作可以用 deque,按 key 查用 unordered_map。Lambda 的本质是编译器生成的匿名仿函数类:捕获列表变成它的成员变量,值捕获是拷贝一份、引用捕获是存引用,operator() 默认是 const(加 mutable 才能改值捕获的副本),因此按引用捕获的变量生命周期必须长于这个闭包,否则就是悬垂引用。无捕获的 lambda 能隐式转成函数指针,有捕获的不能;要捕获 move-only 对象得用 C++14 的初始化捕获把所有权搬进去。
一面在筛什么:问「自动化为什么转软件」「高考为什么没直接选计算机」,是在验动机的真实性和一致性——回答要给出一条自然的因果链(兴趣从哪来、自学了哪些、做过什么验证性的事),别只停在「听说互联网好」。项目环节的套路是「哪个参与度最高 → 按背景、方案、实现展开 → 是否开源、有没有关注量」,这是三层追问:你有没有真的参与主干设计、能不能把技术选型讲出取舍、有没有把成果对外输出并接受检验的意识。被问到「技术是原本掌握还是边做边学」时,标准答案不是「全都会」,坦诚说清哪些来自原有基础、哪些是入职后补的,再补上补的过程和结果,反而更可信。至于「对金证科技有什么了解」「期望岗位是否有偏差」,本质是考察你投递前有没有做功课、以及预期是否现实。
二面在确认什么:二面几乎不考技术深度,全部在确认匹配度。「项目要讲到我听得懂」测的是表达与抽象能力,金融系统里跨团队沟通成本很高;「你的项目偏应用开发,我们做传统金融证券交易软件」是在提前排掉预期落差,好的答法不是硬夸底层,而是说清自己能贡献什么(业务抽象、数据处理、AI 提效)并愿意补底层,同时对「写业务代码、做清算和数据转换」如实接受。AI 那几问在摸工程化程度:用什么模型、落到什么阶段、有没有把使用经验沉淀成 Markdown 或 skill 这类结构化文件——回答时给具体做法和边界(哪些环节提效明显、哪些不能交给模型)比喊口号有说服力。反问是加分项,问团队具体在做订单、清算还是内存数据库,问内存数据库在清算场景下的工程难点,问校招生 6 个月到 1 年的成长标准,这些比问薪资更能体现长期意愿,也顺带把下一轮要准备的方向问清楚了。