不鸣科技C++开发实习(非引擎)-电话面(一面)凉经
项目就两个,一个是levelDB,一个是实验室的SAR相关的。下面的面经用录音转文本发给GPT4o总结的。
下面是一次C++开发岗位的面试记录,已经进行了修改和总结。总结了问了哪些问题,并给出了标准答案。
面试记录:
面试官:好的,我们今天来简单面试一下。
应聘者:好的。面试官你好,我了解一定的深度学习算法和技术。我熟练使用C++,并且基于C++完成了两个项目,分别是高性能KV存储数据库引擎和基于CUDA加速的SAR成像目标仿真系统。我的硕士研究方向是SAR成像和波形设计,主要是用Matlab基于信号与系统雷达探测进行科研仿真。工具方面,我熟练使用Python,熟练使用Linux系统,了解并能够完成基本的SQL数据库操作。
面试官:好的,那我们先问一下C++的一些基础知识。因为你说你开发过两个工程,那么你对C++的多态方面有哪些了解呢?
应聘者:多态分为两种,一种是编译时多态,比如函数重载和模板,编译器在编译代码时会根据不同的代码匹配相应的函数。另一种是运行时多态,主要通过虚函数实现。在定义类时,定义一个虚函数,当在子类中使用时,只需要重写这个虚函数。
面试官:那你知道怎么重写虚函数吗?
应聘者:一般先写函数的返回值、函数名和形参,然后在形参后面加上override关键字。如果是纯虚函数,必须重写才能使用。如果不是纯虚函数,override关键字可以不加。
面试官:你知道C++运行时多态是怎么实现的吗?
应聘者:在运行时,虚函数通过虚表(vtable)实现。当一个对象调用虚函数时,程序会通过该对象的虚表指针找到相应的函数地址并进行调用。
面试官:你能介绍一下你做的高性能数据库项目吗?
应聘者:好的。这个项目实现了高性能的键值对存储数据库引擎,类似于Redis的NoSQL数据库。它适用于高并发、大数据量的缓存数据库,特别是查少写多的情况。项目中使用了LSM树数据结构来提高写性能,包括MemTable、不可变的MemTable和SSTable。数据在不同结构间传递是比较有挑战的部分。
面试官:你的数据库项目中用到了多线程操作吗?
应聘者:这个数据库引擎只支持单线程访问,但有些地方使用了线程锁来确保在查找操作过程中数据不会被销毁。
面试官:你对智能指针有哪些了解?
应聘者:智能指针是一种自动化的内存管理工具,用于防止内存泄漏和悬空指针。C++11提供了三种智能指针:unique_ptr、shared_ptr和weak_ptr。unique_ptr只能有一个所有者,shared_ptr可以有多个所有者并使用引用计数,weak_ptr用于防止shared_ptr循环引用。
面试官:智能指针能保证对象不会内存泄漏吗?
应聘者:不能完全保证。如果存在循环引用,shared_ptr也会造成内存泄漏,这时需要使用weak_ptr。
面试官:你在定义函数接口时,如何设计参数类型以提高传递效率?
应聘者:可以使用引用来传递参数,这样不会拷贝对象,节省内存和时间。如果传递的是临时对象,可以使用右值引用(&&)和std::move来避免拷贝。
面试官:你用过Qt写过界面吗?有哪些功能?
应聘者:我用C++的Qt编写了一个简单的参数输入界面,用户输入参数后点击“Start”按钮,程序读取参数并进行仿真,仿真结果会以图形方式显示在界面上。
面试官:你还有什么问题想问我的吗?
应聘者:如果我有幸进入贵公司,会负责什么样方向的业务?
面试官:我们正在做一个与Excel对标的工具,用于适配策划同学的需求,包括游戏开发中的数值配置和运营数据处理。这个工具需要适配他们的工作流,涉及UI和UX设计。
总结:
面试问题及标准答案:
- 自我介绍及项目经验简要介绍自身背景、技术技能及项目经验。
- C++多态编译时多态:函数重载、模板。运行时多态:通过虚函数和虚表(vtable)实现。
- 虚函数重写使用override关键字重写虚函数。纯虚函数必须重写,非纯虚函数可以不加override。
- 运行时多态实现原理通过虚表指针找到相应函数地址进行调用。
- 高性能数据库项目描述项目功能、用途和主要挑战(如LSM树数据结构的实现)。
- 多线程操作单线程访问,使用线程锁保护数据一致性。
- 智能指针unique_ptr:单一所有者。shared_ptr:多个所有者,引用计数。weak_ptr:防止shared_ptr循环引用。
- 内存管理智能指针不能完全保证内存不会泄漏(循环引用问题)。
- 函数参数设计使用引用或右值引用提高传递效率,减少不必要的拷贝。
- Qt界面开发描述界面功能及实现方式(参数输入、仿真结果显示)。
- 项目实际应用了解公司业务方向,具体负责的工作内容。
这些问题覆盖了C++语言的核心概念、项目经验及实际应用,展示了应聘者对C++及相关技术的理解和应用能力。
#不鸣科技##C++##实习#