热门话题白皮书HR资料
c++工程师校招面试考点汇总(附面试题和答案)
2024.03.04

#C++后台开发

 面试考点汇总 


Tips:


以下不作为C++学习路径,只是汇总的校招C++后台开发面试考点(因为还有笔试考点,后面结合在一起给大家学习路径),后续会为大家更新10w+字数的C++校招面试题库,还有其他岗位的相关题库和资料,想要什么岗位的可以留言哦~


本篇根据各个公司的面试问的问题的大数据进行总结,后面还会更新面试中考察所占比例,当然,本文只包括技术面,不太包括hr面或者一些其他谈人生理想的


▼点击图片可查看大图▼




附题目


一、基础知识


1、基本语言


  1. 说一下**static关键字的作用**

  2. 说一下C++和C的区别

  3. 说一下C++中static关键字的作用

  4. 请说一下static的作用

  5. 说一说c++中四种cast转换

  6. 请说一下C/C++ 中指针和引用的区别?

  7. 给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内,给出思路并手写代码

  8. 怎么判断一个数是二的倍数,怎么求一个数中有几个1,说一下你的思路并手写代码

  9. 请你说一下你理解的c++中的smart pointer四个智能指针:

  10. 请回答一下数组和指针的区别

  11. 请你回答一下野指针是什么?

  12. 请你介绍一下C++中的智能指针

  13. 请你回答一下**智能指针有没有内存泄露的情况

  14. 请你来说一下**智能指针的内存泄漏如何解决

  15. 请你理解的c++中的**引用和指针

  16. 请你来说一下C++中的**智能指针

  17. 请你回答一下为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数

  18. 请你来说一下函数指针

  19. 请你来说一下**fork函数

  20. 请你来说一下C++中析构函数的作用**

  21. 请你来说一下静态函数和虚函数的区别

  22. 请你来说一说重载和覆盖

  23. 请你来说一说static关键字

  24. 请你说一说strcpy和strlen

  25. 请你说一说你理解的虚函数和多态

  26. 请你来回答一下++i和i++的区别

  27. 请你来说一说++i和i++的实现

  28. 请你来写个函数在main函数执行前先运行

  29. 有段代码写成了下边这样,如果在只修改一个字符的前提下,使代码输出20个hello?

  30. 请你来说一下智能指针shared_ptr的实现

  31. 以下四行代码的区别是什么?

  32. 请你来说一下C++里是怎么定义常量的?常量存放在内存的哪个位置?

  33. 请你来回答一下const修饰成员函数的目的是什么?

  34. 如果同时定义了两个函数,一个带const,一个不带,会有问题吗?

  35. 请你来说一说隐式类型转换

  36. 说说你了解的类型转换

  37. 请你来说一说C++函数栈空间的最大值

  38. 请你来说一说extern“C”

  39. 请你回答一下new/delete与malloc/free的区别是什么

  40. 请你说说你了解的RTTI

  41. 请你说说虚函数表具体是怎样实现运行时多态的?

  42. 请你说说C语言是怎么进行函数调用的?

  43. 请你说说C语言参数压栈顺序?

  44. 请你说说C++如何处理返回值?

  45. 请你回答一下C++中拷贝赋值函数的形参能否进行值传递?

  46. 请你回答一下malloc与new区别

  47. 请你说一说select

  48. 请你说说fork,wait,exec函数

  49. 请你回答一下静态函数和虚函数的区别

  50. 请你说一说重载和覆盖

  51. 请你说一说static关键字

  52. 请你说一说strcpy和strlen


2、容器和算法


  1. 请你来说一下map和set有什么区别,分别又是怎么实现的

  2. 请你来介绍一下STL的allocaotr

  3. 请你来说一说STL迭代器删除元素

  4. 请你说一说STL中MAP数据存放形式

  5. 请你讲讲STL有什么基本组成

  6. 请你说说STL中map与unordered_map

  7. 请你说一说vector和list的区别,应用,越详细越好**

  8. 请你来说一下STL中迭代器的作用,有指针为何还要迭代器**

  9. 请你说一说epoll原理

  10. 请你说一说STL迭代器是怎么删除元素的呢

  11. 请你说一说STL中MAP数据存放形式

  12. n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N)

  13. 请你回答一下STL里resize和reserve的区别

  14. 请你说一说stl里面set和map怎么实现的


3、类和数据抽象


  1. 请你来说一下C++中类成员的访问权限

  2. 请你来说一下C++中struct和class的区别

  3. 请你回答一下C++类内可以定义引用数据成员吗?


4、面向对象与泛型编程


  1. 请你回答一下什么是右值引用,跟左值又有什么区别?


5、编译与底层


  1. 请你来说一下一个C++源文件从文本到可执行文件经历的过程?

  2. 请你来回答一下include头文件的顺序以及双引号””和尖括号的区别?

  3. 请你回答一下malloc的原理,另外brk系统调用和mmap系统调用的作用分别是什么?

  4. 请你说一说C++的内存管理是怎样的?

  5. 请你来说一下C++/C的内存分配

  6. 请你回答一下**如何判断内存泄漏?

  7. 请你来说一下什么时候会发生段错误

  8. 请你来回答一下什么是memory leak,也就是内存泄漏

  9. 请你来回答一下new和malloc的区别

  10. 请你来说一下共享内存相关api

  11. 请你来说一下reactor模型组成

  12. 请自己设计一下如何采用单线程的方式处理高并发

  13. 请你说说C++如何处理内存泄漏?

  14. 请你说说select,epoll的区别,原理,性能,限制都说一说

  15. 请你说一说C++ STL 的内存优化


6、C++11


  1. 请问C++11有哪些新特性?

  2. 请你详细介绍一下C++11中的可变参数模板、右值引用和lambda这几个新特性。


二、操作系统


  1. 请你说一下进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的

  2. 请你说一说Linux虚拟地址空间

  3. 请你说一说操作系统中的程序的内存结构

  4. 请你说一说操作系统中的缺页中断

  5. 请你回答一下fork和vfork的区别

  6. 请问如何修改文件最大句柄数?

  7. 请你说一说并发(concurrency)和并行(parallelism)

  8. 请问MySQL的端口号是多少,如何修改这个端口号

  9. 请你说一说操作系统中的页表寻址

  10. 请你说一说**有了进程,为什么还要有线程?

  11. 请问单核机器上写多线程程序,是否需要考虑加锁,为什么?

  12. 请问线程需要保存哪些上下文,SP,PC,EAX这些寄存器是干嘛用的?

  13. 请你说一说**线程间的同步方式,最好说出具体的系统调用

  14. 请你说一下多线程和多进程的不同

  15. 请你说一说**进程和线程的区别

  16. 游戏服务器应该为每个用户开辟一个线程还是一个进程,为什么?

  17. 请你说一说OS缺页置换算法

  18. 请你说一说**进程和线程区别

  19. 请你说一下多进程和多线程的使用场景

  20. 请你说一说死锁发生的条件以及如何解决死锁

  21. 请问虚拟内存和物理内存怎么对应

  22. 请你说一说操作系统中的结构体对齐,字节对齐

  23. 请问进程间怎么通信

  24. 请你说一下虚拟内存置换的方式

  25. 请你说一下多线程,线程同步的几种方式

  26. 请你讲述一下互斥锁(mutex)机制,以及互斥锁和读写锁的区别

  27. 请回答一下进程和线程的区别

  28. 请你说一说进程状态转换图,动态就绪,静态就绪,动态阻塞,静态阻塞

  29. A a = new A; a->i = 10;在内核中的内存分配上发生了什么?

  30. 给你一个类,里面有static,virtual,之类的,来说一说这个类的内存分布

  31. 请你回答一下软链接和硬链接区别

  32. 请问什么是大端小端以及如何判断大端小端

  33. 请你回答一下静态变量什么时候初始化

  34. 请你说一说**用户态和内核态区别

  35. 请问如何设计server,使得能够接收多个客户端的请求

  36. 死循环+来连接时新建线程的方法效率有点低,怎么改进?

  37. 请问怎么唤醒被阻塞的socket线程?

  38. 请问怎样确定当前线程是繁忙还是阻塞?

  39. 空闲的进程和阻塞的进程状态会不会在唤醒的时候误判?

  40. 请问就绪状态的进程在等待什么?

  41. 请你说一说多线程的同步,锁的机制

  42. 两个进程访问临界区资源,会不会出现都获得自旋锁的情况?

  43. 假设临界区资源释放,如何保证只让一个线程获得临界区资源而不是都获得?

  44. windows消息机制知道吗,请说一说

  45. C++的锁你知道几种?

  46. 说一说你用到的锁

  47. 请你说一说死锁产生的必要条件?

  48. 请你说一说什么是线程和进程,多线程和多进程通信方式

  49. 请你说一说**内存溢出和内存泄漏

  50. 进程和线程的区别,你都使用什么线程模型

  51. 请你来说一说协程

  52. 系统调用是什么,你用过哪些系统调用

  53. 请你来手写一下fork调用示例

  54. 请你来说一说用户态到内核态的转化原理

  55. 请你说一下源码到可执行文件的过程

  56. 请你来说一下微内核与宏内核

  57. 请你说一下僵尸进程

  58. 请问GDB调试用过吗,什么是条件断点

  59. 请你来介绍一下5种IO模型

  60. 请你说一说异步编程的事件循环

  61. 请你回答一下操作系统为什么要分内核态和用户态

  62. 请你回答一下为什么要有page cache,操作系统怎么设计的page cache

  63. server端监听端口,但还没有客户端连接进来,此时进程处于什么状态?

  64. 请问如何设计server,使得能够接收多个客户端的请求

  65. 死循环+来连接时新建线程的方法效率有点低,怎么改进?

  66. 就绪状态的进程在等待什么?

  67. 请你说一下多线程的同步,锁的机制

  68. 两个进程访问临界区资源,会不会出现都获得自旋锁的情况?

  69. 假设临界区资源释放,如何保证只让一个线程获得临界区资源而不是都获得?

  70. 请问怎么实现线程池

  71. Linux下怎么得到一个文件的100到200行

  72. 请你来说一下awk的使用

  73. 请你来说一下linux内核中的Timer 定时器机制


三、计算机网络


  1. 你的研究方向是无线传感器网络,**请问**怎么确保节点传输存储的可靠性

  2. 请你说一下**TCP怎么保证可靠性,并且简述一下TCP建立连接和断开连接的过程

  3. 请你说一说TCP的模型,状态转移

  4. 请回答一下HTTP和HTTPS的区别,以及HTTPS有什么缺点?

  5. 请你说一说HTTP和HTTPS的不同

  6. 请你说一说HTTP返回码

  7. 请你说一说IP地址作用,以及MAC地址作用

  8. 请介绍一下操作系统中的中断

  9. 请回答OSI七层模型和TCP/IP四层模型,每层列举2个协议

  10. 请你说一说TCP的三次握手和四次挥手的过程及原因

  11. 搜索baidu,会用到计算机网络中的什么层?每层是干什么的

  12. 请你说一说TCP拥塞控制?以及达到什么情况的时候开始减慢增长的速度?

  13. 请问TCP用了哪些措施保证其可靠性

  14. 请你说说**TCP/IP数据链路层的交互过程

  15. 请你说说传递到IP层怎么知道报文该给哪个应用程序,它怎么区分UDP报文还是TCP报文

  16. 请问你有没有基于做过socket的开发?具体网络层的操作该怎么做?(其实就是网络编程的基本步骤)

  17. 请问server端监听端口,但还没有客户端连接进来,此时进程处于什么状态?

  18. 请问TCP三次握手是怎样的?

  19. 请问tcp握手为什么两次不可以?为什么不用四次?

  20. 请你来说一下TCP拥塞控制?

  21. TCP和UDP的区别和各自适用的场景

  22. 请你来说一下TCP三次握手四次挥手的过程,为什么tcp连接握手需要三次, time_wait状态

  23. 请你来说一说http协议

  24. 请你来说一下GET和POST的区别

  25. 请你来说一下socket编程中服务器端和客户端主要用到哪些函数

  26. 请你来说一下**数字证书是什么,里面都包含那些内容

  27. 请你来介绍一下UDP的connect函数

  28. 请你讲述一下TCP三次握手,四次挥手,以及为什么用三次握手?

  29. 请你说一下阻塞,非阻塞,同步,异步

  30. 请你讲述一下Socket编程的send() recv() accept() socket()函数?

  31. 请你说一下http协议会话结束标志怎么截出来?

  32. 请你说一说三次握手

  33. 请你说一说四次挥手

  34. 请你说一说TCP/IP数据链路层的交互过程


四、数据库


1、数据库基础


  1. 请你说一下数据库事务以及四个特性

  2. 请你说一说数据库的三大范式

  3. 请你介绍一下数据库的ACID特性

  4. 请你说一说数据库索引

  5. 请你说一说数据库事务

  6. 请你说一说数据库事务隔离

  7. 请你说一说inner join和left join

  8. 请你聊一聊**数据库事物的一致性

  9. 请你说说**索引是什么,多加索引一定会好吗

  10. k-v存储中,key有哪些要求?

  11. 介绍数据库中的WAL技术


2、Mysql


  1. 请你说一说mysql的四种隔离状态

  2. 请你介绍一下mysql的MVCC机制

  3. 请问SQL优化方法有哪些

  4. 请你说一下MySQL引擎和区别


3、Redis


  1. 请你回答一下mongodb和redis的区别

  2. 请你说一下mysql引擎以及其区别

  3. 请你来说一说Redis的定时机制怎么实现的

  4. 请你来说一说Redis是单线程的,但是为什么这么高效呢?

  5. 请问Redis的数据类型有哪些,底层怎么实现?

  6. 请问Redis的rehash怎么做的,为什么要渐进rehash,渐进rehash又是怎么实现的?

  7. 请你来说一下Redis和memcached的区别

  8. 请问Redis怎么实现的定期删除功能

  9. 请你说一说**Redis对应的命令和数据类型


五、算法与数据结构


1、树


  1. 请你来说一说红黑树和AVL树的定义,特点,以及二者区别

  2. 请你聊一聊哈夫曼编码

  3. 请你回答一下map底层为什么用红黑树实现

  4. 请你介绍一下B+树

  5. 请你说一说map和unordered_map的底层实现

  6. 请你回答一下map和unordered_map优点和缺点

  7. 请你回答一下epoll怎么实现的

  8. 请你说一说C++两种map

  9. 请问红黑树了解吗

  10. 请你说一说红黑树的性质还有左右旋转

  11. 请你说一说**红黑树的原理以及erase以后迭代器的具体分布情况?

  12. 请你实现二叉树的层序遍历并输出

  13. 手写代码:二叉树序列化反序列化


2、堆和栈


  1. 请说一说你理解的stack overflow,并举个简单例子导致栈溢出

  2. 请你回答一下栈和堆的区别,以及为什么栈要快

  3. 手写代码:两个栈实现一个队列

  4. 请你来说一下堆和栈的区别

  5. 请你说一说小根堆特点


3、数组


  1. 请你回答一下**Array&List, 数组和链表的区别

  2. 一个长度为N的整形数组,数组中每个元素的取值范围是[0,n-1],判断该数组否有重复的数,请说一下你的思路并手写代码


4、排序


  1. 请你来手写一下**快排**的代码

  2. 请你手写一下**快排**的代码

  3. 请问求第k大的数的方法以及各自的复杂度是怎样的,另外追问一下,当有相同元素时,还可以使用什么不同的方法求第k大的元素

  4. 请你来介绍一下各种排序算法及时间复杂度

  5. 请你说一说你知道的**排序算法及其复杂度

  6. 请问海量数据如何去取最大的k个

  7. 请你说一说Top(K)问题

  8. 请问快排的时间复杂度最差是多少?什么时候时间最差

  9. 请问稳定排序哪几种?

  10. 请你介绍一下快排算法;以及什么是稳定性排序,快排是稳定性的吗;快排算法最差情况推导公式


5、哈希


  1. 请你来说一说hash表的实现,包括STL中的哈希桶长度常数。

  2. 请你回答一下hash表如何rehash,以及怎么处理其中保存的资源

  3. 请你说一下哈希表的桶个数为什么是质数,合数有何不妥?

  4. 请你说一下解决hash冲突的方法

  5. 请你说一说哈希冲突的解决方法


6、动态规划


  1. 请你手写代码:最长公共连续子序列

  2. 手写代码:求一个字符串最长回文子串

  3. 手写代码:查找最长回文子串


7、链表


  1. 请你手写代码,如何合并两个有序链表

  2. 手写代码:反转链表

  3. 判断一个链表是否为回文链表,说出你的思路并手写代码

  4. 请你手写链表反转

  5. 什么是单向链表,如何判断两个单向链表是否相交


8、高级算法


  1. 如果让你做自然语言理解(NLU),在处理语言规则的时候大概会用到什么算法

  2. 请问加密方法都有哪些

  3. 什么是LRU缓存

  4. 请你说一说洗牌算法


9、字符串


  1. 给你一个字符串,找出第一个不重复的字符,如“abbbabcd”,则第一个不重复就是c


六、项目相关


  1. 请你回答一下git中Merge和rebase区别


七、设计模式


  1. 请问你用过哪些设计模式,介绍一下单例模式的多线程安全问题

  2. 请问你了解哪些设计模式?

  3. 请问如何保证单例模式只有唯一实例?你知道的都有哪些方法?

  4. 请你说一说OOP的设计模式的五项原则

  5. 请你说说**工厂模式的优点?

  6. 请你说一下观察者模式

  7. 请你介绍一下单例模式

  8. 单例模式中的懒汉加载,如果并发访问该怎么做?

  9. 装饰器模式和单例模式,使用单例模式应该注意什么


八、场景题


  1. 给你两个球,100层楼,每个球在一定高度扔下去会碎,怎么用最少的次数给判断是几层楼能把求摔碎?


九、分布式与架构


  1. 分布式缓存和分布式存储的设计



答案领取


点击链接进入牛客面试资料馆

领取面试题答案~


https://www.nowcoder.com/interview/center


(建议使用pc端进入,以获取最佳体验)



本资料【持续更新】

“阅读原文”收藏,随时查看更新