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呢?
- (太多了... 不一一列举)
C++面试题分享 文章被收录于专栏
C++面试题分享