C++面试题 (Ⅱ章节)
C++面试题 (面试官们别再问什么是虚函数)
有一些C++岗位的面试官,在面试的时候总是问一下莫名其妙、烂大街,甚至不合逻辑的问题,万年不变的“指针和引用的区别”、“构造析构函数能否是虚函数”、“虚函数的原理”,听得都烦,根本看不出对C++的熟悉和理解程度。这里我整理了一些非传统的问题,摒弃那种细枝末节的语法,专注在使用和理解方向,可以适当参考。
(下面的问题并不严格按照小标题划分,更多的是连环问,彼此之间有关系)
======================
======================
模板
- 什么是模板?为什么要使用模板?平时自己有没有基于模板做过coding?
- 你了解哪几种模板形参?可以根据每一种,举一个你了解的例子吗?
- 什么叫做模板的实例化?
- 除了类模板和函数模板是否了解过其他的呢?比如变量模板?
- 是否能举一个你使用过的变量模板?(is_same_v)
- 那你是否了解is_same_v的原理呢?(inline constexpr ... = is_same<>::value)
- 那你觉得为什么要引入变量模板呢?直接使用is_same不也可以么?
- 这里的inline和constexpr为什么要添加呢?
- 是否了解is_same的原理?能否自己写一个is_same呢?(偏特化)
- 那你介绍一下什么是模板偏特化?最好从类模板或者函数模板两方面讲解一下?
- 那除了这些,你是否用过一些偏特化或者全特化的模板类呢?举几个简单的例子即可?
- 那如果让你写一个模板,在编译期求斐波那契数列可以实现吗?(简单实现即可)
- 我们前面好像还提到了std::move吧,其中好像也用到了remove_reference?这个的原理你可以讲解一下么?
- 形参包有了解吗?具体是用来做什么的呢?自己有没有使用过?或者有没有了解在哪些地方会使用?
- 那如何获取形参包的元素数量呢?
- 折叠表达式有没有了解过?使用在那里?
- SFINAE是什么意思?解释一下?自己有没有针对这方面做过实践?
- enable_if的目的是什么?
STL模板库
- (老问题...) vector的底层逻辑?实现原理?
- (老问题...) vector什么时候会迭代器失效?迭代器失效是什么意思?说说你的理解?
- (老问题...) vector常见操作的复杂度?随机访问?末尾插入和删除?中间插入或删除?
- (老问题...) vector的扩容机制?为什么要这么做?
- 是否了解过vector有一种特化版本,vector< bool>,为什么要特化它呢?有什么区别?
- vector中capacity和size的区别?
- shrink_to_fit的作用是什么?(一些面试官,可以看看英文,文档或者源码,不要想当然)
- vector中emplace_back是什么时候提出的?和push_back有什么不同?可以结合源码谈一谈?
- (老问题...) 从vector中删除某个元素,你会怎么做?为什么要这么做?(一般可能回答for的时候erase,并接收迭代器)
- 那你是否看过erase的源码呢?返回的迭代器到底是什么?所以你有什么想法呢?
- 是否有了解其他的方式呢?(erase_if等)
- (老问题...) list的底层逻辑?实现原理?
- (老问题...) 和vector相比,list有什么区别?在读写元素时有什么优劣么?各自适用于什么场景?
- list什么时候迭代器会失效?
- (老问题...) 从list中删除某个元素,你会怎么做?和vector有什么区别吗
- list中提供了几个函数,例如unique,merge,sort等等,那你说为什么要专门提供一个sort函数呢?std::sort不可以么?
- 你刚才提到了迭代器,那你讲讲STL里面有几种迭代器类型呢?各自对应哪种模板类或者容器?
- deque的底层逻辑?实现原理?和vector有什么不同?结合具体场景讲讲?
- (老问题...) set有使用过吗?底层原理是怎么样的?
- map有使用过么?底层原理是什么?它和set有什么区别?
- emplace和insert有什么区别?
- 有没有使用过try_emplace?它是用来做什么的?
- map会不会迭代器失效?如果也是删除某些元素,你会怎么做?
- array容器有没有使用过?有哪些模板参数?底层原理是怎么样的?
- forward_list有没有使用过?它和list有什么区别?
- C++11之后提供了哈希表库,有了解么?
- 那unordered_map的底层原理是什么?发生哈希冲突怎么解决?
- unordered_map什么时候会迭代器失效?
- 什么是rehash?为什么要rehash?
- 什么叫 load factors?一般这个值要保持在一个什么样的水平?谈谈你的理解?
- 元素怎么计算hash code呢?
- 计算完hash code之后,怎么选择放在哪个桶呢?
- 如果想用unordered_map存储自定义类型,需要事先做哪些工作呢?
- 了解哪些容器适配器?简单讲讲底层原理?
- priority_queue默认什么堆?
- 如果priority_queue的元素是自定义类型,需要事先做哪些工作呢?(自定义类型重载<运算符,或者定义函数对象比较类型)
- 你自己更加倾向于哪种方法?
C++面试题分享 文章被收录于专栏
C++面试题分享