C++ 面试题(Ⅲ章节)

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

(经过三个章节的检验,C++的基础知识和使用可以算是 简单入门,更多需要的是亲身实践;除了应付面试(肯定要高于面试难度的),可以提高自己对C++的理解,感谢大家支持;如果有任何问题,或者还有想了解的知识点,欢迎评论~~~ )

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

C++ 面试题(Ⅰ章节)

C++ 面试题(Ⅱ章节)

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

语言支持

  • 了解过initializer_list么?一般用在什么场景?可以举几个例子吗?
  • 那你有没有想过initializer_list为什么要被提出来呢?它和vector的区别是什么?
  • initializer_list的源码有没有看过呢?(任意一种实现即可)谈谈怎么使用的?拷贝一个initializer_list会不会触发deep copy?为什么呢?

内存管理

  • 讲一讲unique_ptr的概念?
  • unique_ptr你平时使用么?具体用在哪些场景呢?
  • unique_ptr有哪两种版本呢?(管理单个对象和数组)怎么实现的?
  • unique_ptr可以直接用于布尔语境,那你觉得是怎么实现的?
  • 问一些使用上的拓展,vector的元素可以是unique_ptr类型么?那unique_ptr可以实现虚派发么?(虚函数调用)
  • 讲一讲shared_ptr的概念?
  • 对比unique_ptr,shared_ptr更适合在哪些场景呢?
  • shared_ptr什么时候销毁对象并解分配内存呢?
  • 在典型的实现中,shared_ptr是怎么布局的?讲讲数据成员的组成?
  • shared_ptr可以直接用于布尔语境,那你觉得是怎么实现的?
  • (老问题...)make_shared和shared_ptr构造函数创建shared_ptr的区别?
  • 如果构造函数传入同一个裸指针构造两个shared_ptr对象,会发生什么现象?
  • 还是上面的问题,你觉得对于所谓的智能指针,为什么会出现这样的现象?
  • 有没有了解过enable_shared_from_this?它是用来解决什么问题的?具体怎么使用?
  • 那你有没有研究过enable_shared_from_this的原理呢?为什么可以它可以通过shared_from_this返回shared_ptr对象呢?(可能会回答weak_ptr的存在)
  • 那你觉得weak_ptr对象是什么时候被赋值的呢?
  • 话说回来,说一个基础的知识点,你没有对enable_shared_from_this的使用有一些疑问吗?比如说为什么父类模板可以使用子类类型呢?是不是有些类似循环引用的问题呢?
  • 说说奇异模板重现的概念?以及自己的理解?

和类型擦除相关的容器

(ps:这里不要求掌握,只是在一两次面试中被问到过,因此也稍微整理一下,混个眼熟吧)

  • 有没有了解过variant?它可以用在什么场景?具体怎么使用的?
  • 如果说variant保存的是类似vector、string这种需要动态分配内存的元素类型,那么你觉得还有哪一点需要被考虑?(开放性)
  • 怎么获取variant当前激活的元素呢?
  • 如果get非激活的元素,会有什么现象?
  • 一个比较重要的使用,如何访问variant呢?(开放性)
  • variant的实现有没有研究过?(不要求)
  • 我们经常能遇到这样的场景,需要执行某个api,成功时返回json数据,失败时有必要的说明;这样的场景有多种解决方案,例如使用map作为返回值,或者通过参数获取是否执行成功,但是在C++中有这样一种容器,optional,你有了解过么?可以稍微解释一下
  • optional一个常见的使用情况是:一个可能失败的函数的返回值,那你觉得它和pair<T, bool>相比,有什么优势么?
  • any容器有没有了解过?具体是什么作用?
  • 有没有了解过any容器的实现?
  • 如何访问any容纳的元素呢?

字符串库

  • string应该经常使用吧?讲讲string的原理?
  • 如果sizeof(string)结果是多少呢?(开放性,不要求准确)
  • 为什么sizeof的结果是这样的数值呢?说说你的看法?(SSO优化)
  • 那你还有没有见过STL库中同样的设计呢?(vector,any等等)
  • 有没有了解过string字面量呢?
  • 如果在string中查找子串,但是未找到,会返回什么呢?(npos)
  • 这个string::npos是什么意思呢?
  • 平时使用string有没有什么疑问?比如很多次不必要的拷贝呢?即使使用了const string&
  • C++17提供的string_view有没有了解过呢?典型的实现是怎么样的?可以简单说说?(开放性)
  • 有没有了解过string_view的字面量呢?
  • 你觉得string_view和string相比,有哪些场景会非常有优势呢?
  • 但是你觉得string_view是不是完美无缺的?会有哪些隐患呢?

算法

  • 说几个经常使用的STL算法?
  • std::sort有没有了解过?结合你的编译器环境,讲一讲具体实现?
  • std::nth_element是做什么的?复杂度多少?
  • lower_bound、upper_bound是用来做什么的?
  • accumulate有使用过没?
  • std::gcd、lcm呢?
  • (太多了... 不一一列举)
#我的实习求职记录##牛客解忧铺##24届软开秋招面试经验大赏##我发现了面试通关密码##牛客在线求职答疑中心#
C++面试题分享 文章被收录于专栏

C++面试题分享

全部评论
循环引用,呜呜呜,今天腾讯暑期实习三面手撕题就是判断循环引用
点赞 回复 分享
发布于 03-19 22:08 湖南

相关推荐

10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
09-25 10:34
东北大学 Java
多面手的小八想要自然醒:所以读这么多年到头来成为时代车轮底下的一粒尘
点赞 评论 收藏
分享
8 30 评论
分享
牛客网
牛客企业服务