这是我2018年参加的校园招聘中,整理出来的C++面试题。总共大概300多道题。从各个面经中抽离出来的,目前还没有整合,所以里面有些经常被问到的高频题会重复。重复率越高的题,说明越容易问,越重要。应该算比较全的了,基本上在我自己面试过程中,被问到关于C++的部分,都在这里面。
- 智能指针的作用:http://www.cnblogs.com/lanxuezaipiao/p/4132096.html
- 纯虚函数作用和实现方式:https://blog.csdn.net/hackbuteer1/article/details/7558868
- STL数据结构的内部实现
- 红黑树插入和红黑树的用途
- C、C++的区别以及C++的优势
- STL中的各种数据结构的底层实现
- C++11的新特性有哪些,智能指针
- STL的掌握程度
- 指针和引用的区别,引用需要释放内存吗
- 智能指针的底层实现
- 虚函数的底层实现:https://blog.csdn.net/iFuMI/article/details/51088091
- define的特点,预处理进行替换及define的优缺点
- static作用
- 红黑树有哪些具体应用
- 指针和引用的区别:https://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html
- new和malloc的区别
- 形参加const的优点:https://www.cnblogs.com/xudong-bupt/p/3509567.html
- 内存四区
- vector的扩容原理
- C++单例模式
- map查找重复值的函数
- map的实现原理和红黑树的特点
- main函数传参数的意义
- 三种继承方式:http://c.biancheng.net/view/2269.html
- 析构函数和虚函数:https://blog.csdn.net/weicao1990/article/details/81911341
- extern “C”的作用
- 多态:https://www.cnblogs.com/QG-whz/p/5132745.html ;https://blog.csdn.net/hackbuteer1/article/details/7475622
- 构造函数是否能为虚函数,构造顺序和析构顺序
- 指针常量和常量指针
- string的构造次数
- C++多态实现机制
- 模板和类封装各自在什么不同的情况使用,各有什么优缺点
- C++内存管理
- 多态实现机制:https://www.cnblogs.com/QG-whz/p/5132745.html ;https://blog.csdn.net/hackbuteer1/article/details/7475622
- 类中哪些函数不能为虚函数?static成员函数如果想实现虚函数的功能,怎么实现?
- C++11的auto和lambda:https://www.cnblogs.com/DswCnblog/p/5629165.html
- hashmap的底层实现
- vector的底层实现,有什么特点
- C++的内存布局
- 内存对齐是什么及其实现原理
- 函数调用怎么实现的,传参数怎么实现的?
- 有什么好的内存管理模式
- 智能指针,有什么缺点
- static、const
- C++多态
- C++特性
- 虚函数
- static作用,是否能为虚函数
- 析构函数能否为虚函数
- 如何检测内存泄漏
- 讲讲智能指针
- C++容器有哪些
- list和vector有什么区别
- 讲讲大端小端,如何检测
- public和private关键字
- 设计一个内存分配类
- 智能指针,shared_ptr内部实现
- 面向对象的特征,讲讲多态,什么是多态?
- sizeof和strlen的区别
- 析构函数能不能用virtual
- 引用和指针的区别
- 引用必须初始化,现在要设计一个类中如何初始化引用。
- C++如何处理异常,异常向上抛出,抛到最上层是什么情况?
- vector实现原理
- 如何实现vector在扩容的时候不进行新的空间申请,即不想有扩容操作,该如何设计?
- STL中的空间配置器
- 面向对象的特性
- 多态:重载,虚函数,override,overload
- 继承中的private、public;class与struct的区别
- 内联函数与虚函数
- 指针和引用
- static和const
- 智能指针
- 宏和const、inline
- 构造函数、析构函数、虚函数、拷贝构造、赋值操作符
- new和malloc
- 进程地址空间内存分配
- strcopy、memcopy、memmove
- 内存对齐
- 类型转换
- sizeof与strlen的区别
- 深拷贝、浅拷贝
- 静态链接、动态链接的区别
- STL空间配置
- STL空间配置,具体实现过程,如果内存链表中没有空间会怎么处理,如果内存池中没有空间会怎么处理,如果heap中没有空间会怎么处理,为什么自由链表中的倍数是8byte,而不是其他。
- vector的实现,如何实现不发生拷贝到新空间就只在当前空间扩容
- set、map的底层实现,红黑树的概念,红黑树的插入
- 多态实现机制
- static成员函数作用
- 虚拟内存
- 动态链接库的认识
- 继承和多态,多态的实现原理
- 指针和引用的区别
- 纯虚函数有什么特点
- vector::push_back()的实现
- 多态的类,内存布局是怎么样
- extern "c"的作用
- unordered_set的底层数据结构
- 隐式类型转换与显式类型转换
- 如何避免编译器进行隐式类型转换
- 大小端字节序相关
- 虚拟内存作用,如何根据虚拟地址得到物理地址
- 抽象类和普通类有什么区别
- 前置操作与后置操作的区别,比如++i和i++。
- STL中常用的容器的实现
- std::string类的实现
- 手写atoi
- 指针与引用的区别
- C++如何实现多态
- STL里面的map如何实现
- 谈谈红黑树
- C++中,你觉得哪些关键字比较有意思
- 宏定义#define与const常量有什么区别
- static关键字有什么作用
- STL下sort()的内部实现,stable_sort()内部实现,lower_bound()内部实现
- 简单说说,大小端字节序。
- malloc()申请的内存,在系统的内存分布中,处于哪一段
- 纯虚函数与一般函数的区别,纯虚函数能否具体实现。
- C++多态的实现
- 虚函数表存放什么内容,子类继承基类后,重写与不重写虚函数的情况下,虚函数表的内容分别是什么
- 函数压栈的过程
- 类的成员函数的压栈过程,this指针
- static关键字的作用,定义的变量存储在进程空间的哪个区域
- 只能在栈上构造的类,只能在堆上构造的类
- 对面向对象设计的认识
- STL中各容器的实现
- hash如何避免冲突
- 指针和引用的区别
- C++对象的内存布局
- 类的静态成员存储在哪,静态成员函数能访问非静态数据成员吗
- C++多态如何实现的
- 智能指针,使用智能指针会不会内存泄露
- C++类的内存分布
- 虚函数实现多态
- 静态库与动态库,静态链接与动态链接
- C++多态的实现
- 堆和栈的区别
- new和delete是如何实现的,new和malloc的异同处
- C和C++的区别
- struct和class的区别
- define和const的区别(编译阶段,安全性,内存占用等)
- 在C++中const和static的用法
- const和static在类中使用的注意事项
- C++中的const类成员函数
- C++的STL介绍
- STL源码中的hash表的实现
- STL中unordered_map和map的区别
- STL中vector的实现
- vector使用的注意点及其原因,频繁对vector调用push_back()对性能的影响和原因
- C++的重载和重写的区别
- C++内存管理
- 介绍面向对象的三大特性
- 多态的实现
- C++虚函数相关(虚函数表,虚函数指针),虚函数的实现原理
- 实现编译器处理虚函数表应该如何处理。
- 析构函数一般写成虚函数的原因
- 构造函数为什么一般不定义为虚函数
- 构造函数或许析构函数中调用虚函数会怎么样
- 纯虚函数
- 静态绑定和动态绑定的介绍
- 引用是否能实现动态绑定,为什么引用可以实现
- 深拷贝和浅拷贝的区别,举例子说明深拷贝的安全性
- 对象复用的了解,零拷贝的了解
- 介绍C++所有的构造函数
- 什么情况下会调用拷贝构造函数
- 结构体内存对齐方式和为什么要进行内存对齐
- 内存泄露的定义,如何检测与避免
- 手写智能指针类
- 调用程序的方法
- 遇到coredump要怎么调试
- 内存检查工具的了解
- 模板的用法与适用场景
- 成员初始化列表的概念,为什么用成员初始化列表会快一些
- 用过C++11吗,知道C++11新特性吗
- C++的调用管理(C++函数调用的压栈过程)
- C++的四种强制转换
- C++的内存管理有哪些
- 指针和引用的区别
- define和const有什么区别
- define和const分别在什么时候编译,哪个更安全
- 在类中,基类的析构函数为什么要设置成虚函数
- 虚函数的实现
- 面向对象的三个特性是什么
- 详细介绍一下多态
- set、map和vector的插入复杂度
- 讲讲static的用法
- 全局变量和局部的静态变量除了可见区域不同,还有什么不用
- 什么时候要有拷贝构造函数
- C++里面的红黑树
- C++类里面函数加const的原因和实现?能不能在函数前面加上static,为什么
- C++中加入构造函数里面有虚函数,会怎么样
- 虚函数的实现,及其具体的过程,例如虚函数指针在不同对象的指向
- vector迭代器失效的情况
- 面向对象的理解
- 多态的理解
- C++的const和static作用
- C++的内存泄漏
- 面向对象的三个特性
- C++的虚函数
- map里面的并发
- 怎么将一个map清空(map的clear和erase的区别)
- 怎么用C++连接到数据库
- 多态的实现
- static的作用
- vector一直插入会导致的问题
- 指针和引用的区别
- C++的static怎么使用
- new和malloc的区别
- 面向对象三大特性
- C++的虚函数实现
- C++的多态,详细说说动态绑定和静态绑定
- STL的了解:vector的扩容问题,map和unordered_map的底层实现
- list和vector的使用场景
- C++的多态实现
- 了解C++的模板吗?怎么使用的?
- C++模板为什么声明和定义要放在一个文件里,而不能放在不同文件
- 如何消除隐式转换?
- 重载、重写和隐藏的区别
- volatile表示什么?有什么作用?
- 四种强制转换的各自作用和使用环境
- free和delete的区别
- free一个数组时如何知道要释放多大的内存
- _stdcall和 _cdecl的区别
- 出现异常时,try和catch做了什么
- C++如何处理多个异常的
- 常对象的成员变量一定不可以修改吗?为什么?
- 虚函数的调用过程
- 单继承、多继承、菱形继承、虚继承时,对象内存中的差异区别?如果存在虚函数呢?
- 实现一个vector?是1.5还是2倍扩容,各有什么优缺点?
- map底层用了什么?
- 如果用map删除了一个元素,迭代器还能用吗?为什么?怎么做可以接着用?
- 红黑树的特征是什么?
- 红黑树如何插入和删除的?
- 红黑树和B+,B-的区别?
- 手写strcpy,memcpy,memmove函数?
- C++内存分为哪几部分
- 如果new申请内存失败了,如何去解决?如果让你实现一个new,你会怎么实现?
- 如何得到一个结构体内成员的偏移量?
- 构造函数能不能虚函数?为什么?那拷贝构造函数能不能为虚函数?为什么?
- 析构函数能不能为虚函数?为什么?
- 为什么要字节对齐?
- 在成员函数中调用delete this会出现什么问题?对象还可以使用吗?
- 对一个数组而言,delete a和delete[] a有什么区别?为什么?
- Dynamic_cast是如何实现运行时类型转换的?
- C语言调用C++语法函数怎么做?那C++调用C语法的函数怎么做?
- 变量的存储方式有哪些?(Auto,extern,register,static)
- 虚函数表是在什么时候确定的?那虚函数表指针呢?
- 如何检查内存泄露?如果不通过printf,debug等调试方式和编译器报错提示呢?
- STL空间配置器如何处理内存的?能说一下它的大概实现方案吗?为什么是8bytes的倍数?
- 静态函数能定义为虚函数吗?为什么?
- 静态函数能定义为常函数吗?为什么?
- 对于默认处理的结构体,能用memcmp来进行比较麻?为什么?如果不能,该如何比较(不能,因为字节对齐多出来的内存是随机的,必须要一个个成员比较)
- C++中哪些机制可以取代宏?
- 手写一个有可变参数的函数
- this指针调用成员变量时,堆栈会发生什么变化?
- 实现一个shared_ptr和auto_ptr类?
- 析构函数能抛出异常吗
- 指针和数组的关系
- 智能指针是怎么实现的?什么时候改变引用计数?
- 内存对齐的原则?
- 内联函数有什么优点?内联函数与宏定义的区别?
- STL的内存池实现
- 必须在构造函数初始化式里进行初始化的数据成员有哪些
- 模板特化
- 如何定位内存泄露
- 手写strcpy
- C++的特性?虚函数是什么?
- 虚函数原理,虚函数表在什么时候创建,以及创建在哪个位置?
- vector,list,map,set等数据结构的优缺点
- 迭代器类型有哪些?map的迭代器属于哪一种类型?
- set和优先队列的概念
- C++的内存结构,数组和指针的区别
- 32位和64位CPU在C++语言层面上有什么差异
- C++分配内存的方式
- 类的大小sizeof,加了虚函数呢?虚函数实现了C++的什么特性?
- 引用类型
- 私有继承是is-a还是has-a
- map的find和[]索引区别
- C++11新特性
- C++匿名函数
- vector的扩容机制
- 内存模型
- 多态的好处
- 实现一个字典,类似于C++中的map,及优化其中的key值比较函数
- 程序的内存布局————函数调用栈,当函数调用的时候发生了什么?
- C++ STL:vector会自减吗?
- 常量指针和指针常量
- 引用和指针的区别
- 手写字符串拷贝函数
- C++虚构函数/虚析构函数的可行性、使用场景以及原理(没有虚构造,有虚析构)
- 列举STL container,再问vector、list、deque的实现方式,红黑树的原理和作用
- 静态成员初始化问题。
- C++组合和继承的区别。