C++面试题 (Ⅰ章节)

C++面试题 (面试官们别再问什么是虚函数)

有一些C++岗位的面试官,在面试的时候总是问一下莫名其妙、烂大街,甚至不合逻辑的问题,万年不变的“指针和引用的区别”、“构造析构函数能否是虚函数”、“虚函数的原理”,听得都烦,根本看不出对C++的熟悉和理解程度。这里我整理了一些非传统的问题,摒弃那种细枝末节的语法,专注在使用和理解方向,可以适当参考。

(下面的问题并不严格按照小标题划分,更多的是连环问,彼此之间有关系)

======================

C++面试题 (Ⅱ章节)

C++面试题 (Ⅲ章节)

======================

计算机基础

  • 逻辑与或非的优先级?
  • 逻辑运算的短路特性?
  • x&(x-1)可以被视为什么作用?
  • float和double的存储方式?为什么一般说float的精度不超过6位小数,double不超过15位呢?

C++语言基础

  • 介绍一下了解的C++数据类型?
  • 有没有了解C++的值类别?在C++11之前和之后有没有什么区别?
  • 解释什么叫预处理?介绍几个用过的预处理器?
  • 有没有接触过运算符重载?可以举几个常用的例子?
  • 介绍一下C++的转换运算符?
  • "123"s,"123"sv,1ms是什么意思?是否了解字面量?有没有自定义过?
  • 解释一下什么叫引用?引用的分类?
  • 左值引用和右值引用各有什么含义和用途?
  • 说到右值引用(前一个问题如果回答了为临时对象延长生存期),那么const左值引用也可以起到相同的效果,那和右值引用有什么区别吗?
  • 说到const左值引用,const string& s="123" 是否正确?会发生什么?
  • 如果把const左值引用作为引用返回,是否可以?有没有隐患?
  • 什么叫悬垂引用?
  • 如果一个函数,重载了右值引用,左值引用,const左值引用,那么在进行函数调用的时候是如何选择的?
  • 什么叫universal reference(万能引用)?基本的语法是怎么样的?简单说一下即可
  • 有了解引用折叠么?
  • C++11之后vector引入了emplace_back是用来做什么的?怎么实现的?和push_back有什么区别?
  • std::move的作用是什么?怎么实现的?
  • std::forward的作用是什么?怎么实现的?
  • std::move和std::forward的区别是什么?在使用上有什么考虑么?
  • C++标准是否支持变长数组?C语言中的0长数组一般怎么使用?
  • 怎么理解inline的?(主要从C++17的可重复定义角度讲)
  • 那可以写一个编译期失败的程序么?那链接期失败的程序呢?运行期异常的程序?(这个问题也是从inline的作用想到的)
  • static_assert有没有用过?怎么使用的?那在STL源码中是否遇到过?能否举一个简单的例子?
  • const和constexpr有什么区别?
  • 满足什么条件下,会触发constexpr的编译期求值?
  • auto在C++11之前和之后有什么含义的区别?是否有了解auto作为返回值和函数形参的情况?
  • decltype的推导规则有了解么?
  • C++11提供的统一初始化方式叫什么?自己用的多么?
  • 初始化列表initializer_list的实现是否清楚?
  • RVO和NRVO是否有了解?可以结合C++17的复制消除讲一讲?
  • 如果在返回值的时候使用std::move是否可行?怎么评价?
  • 如果现在有一个场景要求是参数量任意多,你会用什么方法来实现?开放性的,不要求性能
  • lambda有没有了解过?它的语法是怎么样的?
  • 使用lambda之后生成的是个什么东西?函数对象?还是?怎么验证你的说法?
  • lambda的捕获方式介绍一下?
  • 平时一般在什么场景使用lambda?举几个例子即可
  • 如果要实现lambda的递归,一般怎么做?说出你了解的方式即可
  • lambda的说明符有一种是mutable,它的用途是什么?
  • 既然lambda是一个类对象,那么为什么可以赋值给一个函数指针类型的变量呢?
  • 其实不管是函数(通过指针),lambda表达式,bind表达式,都可以被function存储,那你有了解过function模板类么?
  • 说到这里,如果让你获取一个函数的返回值类型,你会用什么方法?该方法的原理是否理解?
  • 我们刚才提到了bind,那么如果某个函数的形参是引用类型,是否可以直接传递呢?
  • 如果不可以,是为什么呢?是否了解bind的原理?
  • 那一般通过什么方式解决呢?(std::ref)
  • 那std::ref函数是做什么用的?(生成一个reference_wrapper对象)为什么reference_wrapper为什么可以解决呢?如果实现reference_wrapper类向被wrap类型转换呢?
  • 一个空类的大小?为什么?空基类优化是什么意思?
  • 一个空类编译器默认生成的函数有哪些?三/五/零法则是否有了解?

经典问题翻版

  • (老问题...) 说一下C++提供的智能指针?各自有什么用途?你一般在什么场景使用?
  • shared_ptr的基本数据结构可以讲讲么?
  • (老问题...) make_shared和构造函数传裸指针的区别?
  • shared_ptr是否是线程安全的?或者说哪些部分是线程安全的(引用计数)?
  • 那引用计数的线程安全性怎么实现的(可能一般人说原子类型)?
  • 如果有一个场景需要用到线程安全的shared_ptr,一般你会怎么做?开放性问题
  • 说到线程安全性,在语言层面,你一般使用什么手段?
  • 如何在代码角度来避免死锁呢?是否用过相关的API?原理了解吗?
  • C++提供的shared_mutex是否了解?主要用于什么场景?
  • 我们刚才也提到了线程安全版本的shared_ptr,那你是否知道shared_ptr有特化的原子操作?
  • 那提到原子操作,atomic有了解吗?一般特化了哪几种类型的模板呢?
  • 说到原子操作了,那你是否知道C++11引入的内存顺序呢?为什么要引入内存顺序呢?知道哪几种顺序模型?atomic默认哪一种?是否有针对内存顺序做过优化呢?
  • shared_ptr引用计数器的增减使用哪种的内存顺序呢?

暂时写这些,很多很多东西都没涉及。。。

#牛客解忧铺##24届软开秋招面试经验大赏#
C++面试题分享 文章被收录于专栏

C++面试题分享

全部评论
顺便我来试着强行回答一下最后一节(评论留言只给 1000 字很讨厌) 说一下 C++ 提供的智能指针?各自有什么用途 - 本问题太宽泛了,暂略 shared_ptr 的基本数据结构可以讲讲么? - 分两层,sp 直接成员是 ① 对象指针 ② 控制块指针。控制块主要包含 ① 被管理的对象 (或指针),② deleter、③ allocator、④ shared 引用计数、⑤ weak 引用计数。 make_shared 和构造函数传裸指针的区别? - 两点。首先标准建议 make_shared 同时申请控制块与对象的内存 (直观可减少一次内存申请);其次是异常安全,C++17 之前形如 f(sp(new A), g()) 的执行顺序可能是 new A、g()、sp(),一旦 g() 中发生异常,那么 new A 将无法被回收,使用 make_shared 可以避免。 shared_ptr 是否是线程安全的?或者说哪些部分是线程安全的? - 前问提到的“控制块”是线程安全的。 那引用计数的线程安全性怎么实现的(可能一般人说原子类型)? - 看情况,比如 libstdc++ 的文档提到他们的 sp 有三种模式:不保证并发安全、cas、mutex。 如果有一个场景需要用到线程安全的 shared_ptr,一般你会怎么做? - 本问题太开放了,需要根据上下文作答,暂略。 说到线程安全性,在语言层面,你一般使用什么手段? - 主要借助各种同步原语,或者一开始从设计上消除 data race。 如何在代码角度来避免死锁呢?是否用过相关的API?原理了解吗? - 可以参考 C++ Concurrency in Action 这本书,里面有些建议。比如保证平时加锁的顺序是“嵌套”的,又比如使用 std::lock 等自带死锁避免算法的加锁方式。原理我也不了解。 C++ 提供的 shared_mutex 是否了解?主要用于什么场景? - 读写锁,用于多个读者需要并发读取数据的情况。
7 回复 分享
发布于 2023-09-21 20:04 四川
哥们,给了问题不给出答案是在断后人的路啊!有时间把答案做做?
6 回复 分享
发布于 2023-09-21 00:17 湖北
哇,博主好厉害呀,真的太棒了捏!!!
1 回复 分享
发布于 2023-09-20 23:54 辽宁
还能说什么,收藏感谢
1 回复 分享
发布于 2023-09-21 00:18 陕西
m
1 回复 分享
发布于 2023-09-21 18:04 江苏
妈呀好难的面试题,我就被问过STL,迭代器,指针这些。内存顺序,奇异模板啥的都没听过
1 回复 分享
发布于 2023-09-22 19:36 北京
太厉害了
1 回复 分享
发布于 2023-09-25 15:10 四川
点赞 回复 分享
发布于 2023-09-22 13:50 湖北
cpp现在八股水平确实卷上来了 说实话这些我能答出来百分之九十 但主要是没面试机会
点赞 回复 分享
发布于 2023-09-23 13:49 北京
哥们没必要吧,咋着还提升难度来了
点赞 回复 分享
发布于 2023-10-04 20:39 山东
千万别被面试官们看到这篇精华帖子
点赞 回复 分享
发布于 2023-10-07 14:51 辽宁

相关推荐

11-20 17:33
已编辑
门头沟学院 嵌入式工程师
小米汽车 底软测开岗 n*15(15大概率拿不到) 双非硕
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
10-09 09:39
门头沟学院 C++
HHHHaos:这也太虚了,工资就一半是真的
点赞 评论 收藏
分享
59 561 评论
分享
牛客网
牛客企业服务