【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的回答

  1. 时间点:constexpr 是在编译时确定值的,而 const 是在运行时确定值的。
  2. 编译期计算:constexpr 变量可以用于编译时期间的计算,比如数组大小、模板参数等需要在编译阶段确定大小的场景。而 const 变量只是表示它的值不可以修改,在编译阶段无法使用 const 变量进行编译期计算。
  3. 初始化:constexpr 变量必须在声明时进行初始化,并且只能使用常量表达式初始化;const 变量可以在声明时初始化,也可以稍后赋值,但赋值后就不能再修改。
  4. 地址:constexpr 变量往往会被编译器优化,可能不会占用内存空间,并且在编译期间被消除。const 变量在运行时分配内存,并且有相应的内存地址。
  5. 但是这两个关键字声明的变量都具有常量属性,不可修改;

对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.进程通信

有哪些,这里主要问了共享内存和管道的优劣,使用谁的资源消耗更优(这里问的是资源消耗,不是通信速度)

我答的是因为管道是文件描述符,操作系统需要维护文件和进程之间的关系,所以消耗会高一点;然后共享内存是直接在页表上操作,没有额外的消耗;

咱也不知道对不对,感觉答案应该是下面这个

alt

问有没有用过消息队列(知道这玩意,没用过)

2.进程和线程区别

说了资源消耗区别,功能比较隔离的时候适合用进程,还举了个epoll的reactor模式的例子(我瞎编的,说实话,也不知道对不对)

3.开发环境

前期用vs2019,后期用vscode+remote ssh;

面试官问我很多个文件怎么进行编译和管理,我说了makefile;问有没有用过cmake(无)

4.编译链接过程

这个其实是第一个问的问题,就简单地说了一下;

5.动静态库

有啥区别?优缺点?

The end

没有问网络,也没有写OJ,也没有问项目;

这次的面试官很耐心,会引导你回答问题。爱了;

#我的实习求职记录##晒一晒我的offer##面经#
凉凉面试记录 文章被收录于专栏

笨蛋CPP选手记录的面经。

全部评论
m
1 回复 分享
发布于 2023-09-15 18:08 浙江
祝大家都拿到心仪公司的offer 借楼发个招聘广告,光峰科技,没有无聊的评测,不搞虚的,简历通过后直接进面。
点赞 回复 分享
发布于 2023-09-15 17:36 广东
天翼云科技有限公司
校招火热招聘中
官网直投
m
点赞 回复 分享
发布于 2023-09-19 12:08 湖北
如何确定一个类中的大小这个问题问得非常好。包括空类,成员变量的内存对齐,虚函数表的虚函数指针,静态成员变量所有类所共有不算
点赞 回复 分享
发布于 03-24 22:28 广东

相关推荐

路过的各位佬,求给鼠鼠一点职业发展建议。也希望能得到一些机会(江浙沪)学历背景:本科中流211,硕士中上985,通信专业一些经历:1、本科有小厂的python开发实习,硕士有大外企的Wi-Fi测试实习。2、硕士研究方向是通感一体化(5.5G和6G的主要场景之一),目前一作发表了一篇二区期刊(letters)和顶会,一篇一区待投,另外还挂了一些其他文章,谷歌引用20多个。但是出于不想离家远以及和npy团聚,没有读博的打算(也是因为感觉读博出来就业面窄)。3、本科做了些AI的竞赛,大体是照搬人家的算法,再调整用到赛题上面,拿了两个国家级三等奖,都是比赛团队的负责人。大一也做过一些电子设计,但是没有好的成绩。技能:1、无线通信物理层基础还不错,感觉思想比较活,能找到创新点去做。英语阅读、写作、做汇报的能力也还可以。2、C和C++就基本会语法,C的技能还是大一上课和写单片机代码时锻炼的,C++就完全只看视频没做项目练过。python在本科时是写过一些代码的,主要是把CV/NLP算法根据需求来用,数据处理、前端和后端都搞过一些。缺陷:1、数学的功力没那么强,已做的科研里面不是特别依赖数学,而是一些物理含义的理解。2、计算机的数据与结构、算法暂时还没学完。所以编程能力不太行,只够写写基本的数据处理和通信仿真算法。3、做不到长期8点后下班,希望可以回家吃晚饭,不过可以接受晚上在家办公。也是更喜欢不约束人身自由的岗位。引流 #高通#  #华为#  #中兴#  #大疆#  #oppo#  #vivo#  #荣耀#  #研究所#  #国企#
投递谷歌等公司10个岗位
点赞 评论 收藏
分享
9 46 评论
分享
牛客网
牛客企业服务