查看原文
其他

C++面试宝典(纯干货)

程序喵大人 程序喵大人 2022-08-22

# 干了这碗鸡汤

别为难自己,活得像你自己就行了


-- 东野圭吾


大家好,我是程序喵!


继上篇发了送书活动之后,不知道为什么掉了十来个粉丝。。。当然也有新增的粉丝,所以整体上也还算平衡,看了大家上一篇的留言,老喵我泪牛满面~

谢谢大家对程序喵大人的认可,很多朋友说关注我是因为我一直坚持输出干货,所以我之后会继续努力输出更优质的内容,请大家持续关注!


话不多说,进入正题,之前许多朋友私信问过我整理一篇“C++面试题”,我把自己在面试过程中被问的和自认为重要的面试题整理出来,希望对大家有所帮助。其中一些问题,我之前曾经发过详细的文章,我放了链接,方便大家阅读。



01

C语言
  1. const的作用有哪些,谈一谈你对const的理解?

  2. 描述char*、const char*、char* const、const char* const的区别?

  3. 指针常量和常量指针有什么区别?

  4. static的作用是什么,什么情况下用到static?

  5. 全局变量与局部变量的区别?

  6. 宏定义的作用是什么?

  7. 内存对齐的概念?为什么会有内存对齐?

  8. inline 内联函数的特点有哪些?它的优缺点是什么?

  9. 如何用C 实现 C++ 的面向对象特性(封装、继承、多态)

  10. memcpy怎么实现让它效率更高?

  11. typedef和define有什么区别?

  12. extern有什么作用,extern C有什么作用?

  13. 如何避免野指针?

  14. 如何计算结构体长度?

  15. sizeof和strlen有什么区别?

  16. 知道条件变量吗?条件变量为什么要和锁配合使用?




















02



C++基础
  1. C语言和C++有什么区别?
  2. struct和class有什么区别?
  3. extern "C"的作用?
  4. 函数重载和覆盖有什么区别?
  5. 谈一谈你对多态的理解,运行时多态的实现原理是什么?
  6. 对虚函数机制的理解,单继承、多继承、虚继承条件下虚函数表的结构
  7. 如果虚函数是有效的,那为什么不把所有函数设为虚函数?
  8. 构造函数可以是虚函数吗?析构函数可以是虚函数吗?
    面试系列之C++的对象布局【建议收藏】
  9. 什么场景需要用到纯虚函数?纯虚函数的作用是什么?
  10. 了解RAII吗?介绍一下?
    RAII妙用之计算函数耗时
    RAII妙用之ScopeExit
  11. 类的大小怎么计算?
  12. volatile关键字的作用?什么时候需要使用volatile关键字
  13. 如何实现一个线程池?C++线程池的实现之格式修订版
  14. 了解各种强制类型转换的原理及使用?
  15. 指针和引用有什么区别?什么情况下用指针,什么情况下用引用?
  16. 一般什么情况下会出现内存泄漏?怎么用C++在编码层面尽量避免内存泄漏。
  17. unique_ptr如何转换所有权?
  18. 谈一谈你对面向对象的理解
  19. 什么场景下使用继承方式,什么场景下使用组合?

  20. new和malloc有什么区别?
  • malloc的内存可以用delete释放吗?

  • malloc出来20字节内存,为什么free不需要传入20呢,不会产生内存泄漏吗?

  • new[]和delete[]一定要配对使用吗?new[]和delete[]为何要配对使用?


21. C++11新特性你都了解多少?



22. STL
  • C++直接使用数组好还是使用std::array好?std::array是怎么实现的?

  • std::vector最大的特点是什么?它的内部是怎么实现的?resize和reserve的区别是什么?clear是怎么实现的?

  • deque的底层数据结构是什么?它的内部是怎么实现的?

  • map和unordered_map有什么区别?分别在什么场景下使用?

  • list的使用场景?std::find可以传入list对应的迭代器吗?

  • string的常用函数



















03
设计模式
如果你能知道所有的设计模式最好,即便不知道所有的设计模式,下面这些高频设计模式你还是需要了解的。
  1. 分别写出饿汉和懒汉线程安全的单例模式
  2. 说出观察者模式类关系和优点
  3. 说出代理模式类关系和优点
  4. 说出工厂模式概念和优点
  5. 说出构造者模式概念
  6. 说出适配器模式概念

















04

操作系统
  1. 进程和线程的区别?深度好文|面试官:进程和线程,我只问这19个问题
  2. 操作系统是怎么进行进程管理的?
  3. 操作系统是如何做到进程阻塞的?
  4. 进程之间的通信方式有哪些?
  5. 什么是上下文切换,操作系统是怎么做的上下文切换?
  6. 线程是如何实现的?
  7. 线程之间私有和共享的资源有哪些?
  8. 一般应用程序内存空间的堆和栈的区别是什么?
  9. 进程虚拟空间是怎么布局的?10张图22段代码,万字长文带你搞懂虚拟内存模型和malloc内部原理
  10. 虚拟内存是如何映射到物理内存的?了解分页内存管理吗?操作系统内存管理,你能回答这8个问题吗?
  11. 产生死锁的必要条件有哪些?如何避免死锁?
  12. 什么是大端字节,什么是小端字节?如何转换字节序?
  13. 信号和信号量的区别是什么?
  14. 锁的性能开销,锁的实现原理?
  15. 了解CPU的Cache吗?如何写一个高效的多维矩阵乘法?如何利用CPU Cache写出高性能代码,看这些图就够了!

















05

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
















大家如果对哪个问题有疑问可以留言,有其他觉得比较好的问题也可以分享在留言区!




往期推荐


1、深度好文|面试官:进程和线程,我只问这19个问题

2、他来了,他来了,C++17新特性精华都在这了

3、一文让你搞懂设计模式

4、C++11新特性,所有知识点都在这了!





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存