【23年9月】上海零念科技CPP实习生
看到校友也面了这家,顺带分享一下我的面经吧。
上来先做了个自我介绍,然后面试官介绍了他们是做系统进程调度的;
CPP
题目顺序并非实际问的顺序
1.类的大小
类的大小和什么东西有关系?
我答了成员变量和虚函数表
2.多态怎么实现的
顺着虚函数表问的,就说了一下动态多态的基本实现方式
3.只能在栈上的类
禁止拷贝构造和赋值,构造函数私有化,提供单独函数在栈上开辟空间;
顺便问了一下动态内存管理的基础形式
4.智能指针
哪些类型?有啥区别?weak ptr怎么解决循环引用问题的?
weak ptr的lock函数用过吗?有没有办法获取到shared ptr的引用计数?
unique_ptr可以转成share_ptr吗?
如果要用C++11的类型转换,要使用哪一个来进行unique_ptr和share_ptr的转换?(这个不会,应该是static_cast)
定制删除器是干嘛的?
智能指针线程安全吗?
拷贝构造share_ptr会不会有内存泄漏?
5.类型转换
C++11的类型转换,几个,区别是什么?
指针之间转换要用什么?(不会,答的static)
dynamic_cast父子转换的时候,向上还是向下是安全的?(子转成父是安全的,即向上安全)
6.单例
几种类型,怎么实现?
7.模板
模板的声明和定义为啥不能分离?(忘记了)
模板特化是什么?函数模板支持半特化吗?(不支持)
8.C++线程和async有啥区别?
thread是类,aysnc是函数
async有两种用法,一个是立马异步执行,会开一个线程;第二个是延迟同步执行,在使用future.get
的时候才会执行。
这部分是在云账房面试的时候问道的,得亏我专门去学了,开心!
9.C++14新特性
知道的全说了,auto,lambda新特性,constexpr(和c++11的区别),变量模板,二进制变量,然后还说了最后几个std的函数看不明白;面试官人很好,一直说没关系;
专门问了constexpr
声明变量和const有啥区别(不知道)
GPT的回答
- 时间点:
constexpr
是在编译时确定值的,而const
是在运行时确定值的。- 编译期计算:
constexpr
变量可以用于编译时期间的计算,比如数组大小、模板参数等需要在编译阶段确定大小的场景。而const
变量只是表示它的值不可以修改,在编译阶段无法使用const
变量进行编译期计算。- 初始化:
constexpr
变量必须在声明时进行初始化,并且只能使用常量表达式初始化;const
变量可以在声明时初始化,也可以稍后赋值,但赋值后就不能再修改。- 地址:
constexpr
变量往往会被编译器优化,可能不会占用内存空间,并且在编译期间被消除。const
变量在运行时分配内存,并且有相应的内存地址。- 但是这两个关键字声明的变量都具有常量属性,不可修改;
对C++17有没有了解?(无)
10.stl用过什么?
把常用的stl都说了一遍
stl线程安全吗?当然不
11.vector和array区别
array是定长数组,vector动态开辟
array可以使用迭代器,保证代码风格统一
这里顺便提到了[]
的重载,面试官问了vector里面at函数和[]
重载的区别(at会抛异常,[]
不会)
12.emplace_back和push_back区别
我说了emplace_back能节省一次拷贝的消耗;
面试官问要怎么使用才能节省这个消耗?使用方式(不会)
emplace_back既然高效,为啥没有取代push_back?(不会,这里我就说了一下设计考虑兼容性的问题)
13.初始化列表、构造函数体内初始化、成员变量给缺省值
那个更好?有啥区别?
引用是没有办法使用缺省值的,只有常量/普通变量可以用缺省值;
在VS2019里面调试测试了一下运行顺序:
- 缺省值(会优化成初始化列表)/初始化列表
- 函数体内
具体的测试参考 CPP类和对象默认成员函数,里面详细注明了构造顺序;
14.默认构造函数
什么时候可以不自己写构造函数?
这里没有答全,感觉自己已经被绕晕了
15.function和bind的作用
如题
16.final/overide/explicit
作用
explicit忘记了,面试官说没关系,反正也不用🤣
Linux
1.进程通信
有哪些,这里主要问了共享内存和管道的优劣,使用谁的资源消耗更优(这里问的是资源消耗,不是通信速度)
我答的是因为管道是文件描述符,操作系统需要维护文件和进程之间的关系,所以消耗会高一点;然后共享内存是直接在页表上操作,没有额外的消耗;
咱也不知道对不对,感觉答案应该是下面这个
问有没有用过消息队列(知道这玩意,没用过)
2.进程和线程区别
说了资源消耗区别,功能比较隔离的时候适合用进程,还举了个epoll的reactor模式的例子(我瞎编的,说实话,也不知道对不对)
3.开发环境
前期用vs2019,后期用vscode+remote ssh;
面试官问我很多个文件怎么进行编译和管理,我说了makefile;问有没有用过cmake(无)
4.编译链接过程
这个其实是第一个问的问题,就简单地说了一下;
5.动静态库
有啥区别?优缺点?
The end
没有问网络,也没有写OJ,也没有问项目;
这次的面试官很耐心,会引导你回答问题。爱了;
#我的实习求职记录##晒一晒我的offer##面经#笨蛋CPP选手记录的面经。