恒生电子C++后端开发面试经验分享
面试题目
一面(4月10日)
- 多态如何实现?
- 进程和线程的区别?
- 智能指针有哪些?
- C++中的锁用过吗?用过读写锁吗?
- 实习阶段跟上级意见冲突时如何解决?
- 项目性能优化:C++实现MCP工具调度,如何优化LLM决策性能?
- 了解哪些设计模式,在项目或实习中哪里用到过?
- SQL了解多少?索引的数据结构是什么?
二面(4月24日,线下)
- 深入挖掘实习项目经历(占据前15分钟)。
- 个人兴趣爱好及软技能考察(乐器、音乐类型、游戏等)。
- 个人成长经历背景调查(家庭背景与学业表现)。
参考解析
-
多态实现:通过虚函数(virtual function)实现。编译器会为包含虚函数的类生成虚函数表(vtable),对象头部存储虚函数指针(vptr)指向该表,运行时通过vptr查找目标函数地址,实现动态绑定。
-
进程与线程:进程是系统资源分配的最小单位,拥有独立地址空间;线程是CPU调度的最小单位,共享进程资源。进程间切换开销大,线程间通信更高效但需注意同步。
-
智能指针:C++11引入了
std::unique_ptr(独占所有权)、std::shared_ptr(共享所有权,引用计数管理)和std::weak_ptr(配合shared_ptr解决循环引用),利用RAII机制自动管理内存。 -
索引数据结构:MySQL(InnoDB)使用B+树。其优势在于叶子节点存储所有数据且通过双向链表链接,支持范围查询高效;树的高度较低,减少了磁盘IO次数。
-
性能优化(RAG):在LLM处理超长上下文时,全量输入会导致延迟和成本问题。通过引入RAG(检索增强生成),利用向量数据库或相似度匹配算法,仅向模型提供与当前指令最相关的Top-K个工具描述,能显著降低Token消耗并提升响应速度。