作者:程序喵大人链接:https://www.zhihu.com/question/451327108/answer/1868370927来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    直接抛出来一份我们部门的C++面试题吧(希望别被领导看见)
    首先会考察一波C语言基础:
    C语言

    • const的作用有哪些,谈一谈你对const的理解?
    • 描述char、const char、char const、const char const的区别?
    • 指针常量和常量指针有什么区别?
    • static的作用是什么,什么情况下用到static?
    • 全局变量与局部变量的区别?
    • 宏定义的作用是什么?
    • 内存对齐的概念?为什么会有内存对齐?
    • inline 内联函数的特点有哪些?它的优缺点是什么?
    • 如何避免野指针?
    • 如何计算结构体长度?
    • sizeof和strlen有什么区别?
    • 知道条件变量吗?条件变量为什么要和锁配合使用?
    • 如何用C 实现 C++ 的面向对象特性(封装、继承、多态)
    • memcpy怎么实现让它效率更高?
    • typedef和define有什么区别?
    • extern有什么作用,extern C有什么作用?

    fightingwangzq/cpp-learninggithub.com
    下面是C++基础知识面试题

    • C语言和C++有什么区别?
    • struct和class有什么区别?
    • extern “C”的作用?
    • 了解RAII吗?介绍一下?RAII可是C++很重要的一个特性。
    • 函数重载和覆盖有什么区别?
    • 谈一谈你对多态的理解,运行时多态的实现原理是什么?
    • 对虚函数机制的理解,单继承、多继承、虚继承条件下虚函数表的结构
    • 如果虚函数是有效的,那为什么不把所有函数设为虚函数?
    • 构造函数可以是虚函数吗?析构函数可以是虚函数吗?
    • 基类的析构函数可以调用虚函数吗?基类的构造函数可以调用虚函数吗?
    • 什么场景需要用到纯虚函数?纯虚函数的作用是什么?
    • 指针和引用有什么区别?什么情况下用指针,什么情况下用引用?
    • new和malloc有什么区别?
    • malloc的内存可以用delete释放吗?
    • malloc出来20字节内存,为什么free不需要传入20呢,不会产生内存泄漏吗?
    • new[]和delete[]一定要配对使用吗?为什么?
    • 类的大小怎么计算?
    • volatile关键字的作用
    • 如何实现一个线程池?说一下基本思路即可!
    • 了解各种强制类型转换的原理及使用吗?说说?

    C++11新特性基本上在面试中一定会被问到,其实现在C++14,C++17也有很多人在使用。
    C++11新特性你都了解多少?可以介绍一下吗?

    • 了解auto和decltype吗?
    • 谈一谈你对左值和右值的了解,了解左值引用和右值引用吗?
    • 了解移动语义和完美转发吗?
    • enum 和 enum class有什么区别?
    • 了解列表初始化吗?
    • 对C++11的智能指针了解多少,可以自己实现一个智能指针吗?
    • 平时会用到function、bind、lambda吗,都什么场景下会用到?
    • 对C++11的mutex和RAII lock有过了解吗?
    • 一般什么情况下会出现内存泄漏?出现内存泄漏如何调试?
    • unique_ptr如何转换的所有权?
    • 谈一谈你对面向对象的理解
    • 什么场景下使用继承方式,什么场景下使用组合?

    STL系列

    • C++直接使用数组好还是使用std::array好?std::array是怎么实现的?
    • std::vector最大的特点是什么?它的内部是怎么实现的?resize和reserve的区别是什么?clear是怎么实现的?
    • deque的底层数据结构是什么?它的内部是怎么实现的?
    • map和unordered_map有什么区别?分别在什么场景下使用?
    • list的使用场景?std::find可以传入list对应的迭代器吗?
    • string的常用函数

    设计模式,不强求一一列出那23种设计模式,说出几个常见的即可。

    • 分别写出饿汉和懒汉线程安全的单例模式
    • 说出观察者模式类关系和优点
    • 说出代理模式类关系和优点
    • 说出工厂模式概念和优点
    • 说出构造者模式概念
    • 说出适配器模式概念

    操作系统

    • 进程和线程的区别?
    • 操作系统是怎么进行进程管理的?
    • 操作系统是如何做到进程阻塞的?
    • 进程之间的通信方式有哪些?
    • 线程是如何实现的?
    • 线程之间私有和共享的资源有哪些?
    • 一般应用程序内存空间的堆和栈的区别是什么?
    • 进程虚拟空间是怎么布局的?
    • 虚拟内存是如何映射到物理内存的?了解分页内存管理吗?
    • 什么是上下文切换,操作系统是怎么做的上下文切换?
    • 什么是大端字节,什么是小端字节?如何转换字节序?
    • 产生死锁的必要条件有哪些?如何避免死锁?
    • 信号和信号量的区别是什么?
    • 锁的性能开销,锁的实现原理?

    编译原理,编译和链接的知识还是很重要的,解决编译和链接过程中的报错也是C++程序员的基本能力。

    • gcc hello.c 这行命令具体的执行过程,内部究竟做了什么?
    • 程序一定会从main函数开始运行吗?
    • 如何确定某个函数有被编译输出?
    • 动态链接库和静态链接库的区别是什么?

    打完收工!
    可以先试着自己回答一下这些问题,大多数问题的答案也可以在这里找到
    如果觉得这篇回答对你挺有帮助,请帮我两个忙
    1. 点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓-_-)。
    2. 关注@程序喵大人,互相学习,共同进步。