整理牛客网100份面经的C/C++校招、社招面试题总结

B--站搜索程序员老廖,有更多面试题分享。

注:部分面试题分类不一定严格按类别分类。

200+道常见面试题。大部分的面试题对于C++后端、桌面开发、嵌入式、音视频开发都是通用的。

建议大家根据老廖整理的面试题整理答案,一定要自己整理答案才能把知识转化成自己的能力,只有通过动手动脑才能加深映像。

C/C++

常见问题:智能指针、多态、虚函数、stl原理。

  1. 智能指针实现原理
  2. 智能指针,里面的计数器何时会改变
  3. 智能指针和管理的对象分别在哪个区(智能指针本身在栈区,托管的资源在堆区,利用了栈对象超出生命周期后自动析构的特征,所以无需手动delete释放资源。
  4. 面向对象的特性:多态原理
  5. 介绍一下虚函数,虚函数怎么实现的
  6. 多态和继承在什么情况下使用
  7. 除了多态和继承还有什么面向对象方法
  8. C++内存分布。什么样的数据在栈区,什么样的在堆区
  9. C++内存管理(RAII啥的)
  10. C++从源程序到可执行程序的过程
  11. 一个对象=另一个对象会发生什么(赋值构造函数)
  12. 如果new了之后出了问题直接return。会导致内存泄漏。怎么办(智能指针,raii)
  13. c++11的智能指针有哪些。weak_ptr的使用场景。什么情况下会产生循环引用
  14. 多进程fork后不同进程会共享哪些资源
  15. 多线程里线程的同步方式有哪些
  16. size_of是在编译期还是在运行期确定
  17. 函数重载的机制。重载是在编译期还是在运行期确定
  18. 指针常量和常量指针
  19. vector的原理,怎么扩容
  20. 介绍一下const
  21. 引用和指针的区别
  22. Cpp新特性知道哪些
  23. 类型转换
  24. RAII基于什么实现的(生命周期、作用域、构造析构
  25. 手撕:Unique_ptr,控制权转移(移动语义)

手撕:类继承,堆栈上分别代码实现多态

  1. unique_ptr和shared_ptr区别
  2. 右值引用
  3. 函数参数可不可以传右值
  4. 参考c/c++堆栈实现自己的堆栈。要求:不能用stl容器。
  5. stl容器了解吗?底层如何实现:vector数组,map红黑树,红黑树的实现
  6. 完美转发介绍一下 去掉std::forward会怎样?
  7. 介绍一下unique_lock和lock_guard区别?
  8. C代码中引用C++代码有时候会报错为什么?
  9. 静态多态有什么? 虚函数原理 虚表是什么时候建立的 为什么要把析构函数设置成虚函数?
  10. map为啥用红黑树不用avl树?(几乎所有面试都问了map和unordered_map区别)
  11. inline 失效场景
  12. C++ 中 struct 和 class 区别
  13. 如何防止一个头文件 include 多次
  14. lambda表达式的理解,它可以捕获哪些类型
  15. 友元friend介绍
  16. move函数
  17. 模版类的作用
  18. 模版和泛型的区别
  19. 内存管理:C++的new和malloc的区别
  20. new可以重载吗,可以改写new函数吗
  21. C++中的map和unordered_map的区别和使用场景
  22. 他们是线程安全的吗
  23. c++标准库里优先队列是怎么实现的?
  24. gcc编译的过程
  25. C++ Coroutine
  26. extern C有什么作用
  27. c++ memoryorder/elf文件格式/中断对于操作系统的作
  28. C++的符号表
  29. C++的单元测试

数据结构算法

常见问题:链表、排序、二叉树

  1. 数组和链表区别和优缺点
  2. 快速排序
  3. 堆排序是怎么做的
  4. 冒泡排序
  5. 二分查找(复杂度)
  6. hash表数据很大。rehash的代价很高,怎么办
  7. 二叉树前序遍历非递归
  8. 链表反转
  9. 二叉树输出每一层最右边的节点
  10. 千万级数组如何求最大k个数?(用最小堆反之最大堆) 千万数据范围有限,0到1000,有很多重复的,按频率排序怎么处理?
  11. 计算二叉树层高。
  12. 给一个连续非空子数组,找它乘积最大的(动态规划)
  13. 排序算法. 哪些是稳定的,哪些不稳定的
  14. 树的深度和高度。一开始分别用了一个层序遍历和一个dfs,然后面试官问能否都在一个dfs里面呢,提示了一下在dfs是否可以传一个参数,然后解决了。
  15. 布隆过滤器介绍
  16. 为什么不用布隆过滤器
  17. .数据结构相关,图的种类,表示方法,图有哪些经典算法+描述算法
  18. 求最大的k个数字,解法:优先队列(堆)或者快速排序
  19. 一个大数问题,解法:转换为字符串解决,这题没写好,leetcode应该有很多类似的问题
  20. hash解决冲突 ( 开放定址法、链地址法、再哈希法、建立公共溢出区 ),四种方式详细的过程、思路
  21. 链地址法和再哈希法之间的关联和区别,两者分别适用场景,两者底层的数据结构,关联和区别
  22. 链表和数组的底层结构设计、关联、区别、应用场景
  23. 死锁的概念,进程调度算法怎么解决死锁

gdb/gcc/g++

  1. 怎么debug,怎么看内存泄漏。
  2. gdb 使用 -> 多线程程序切换到某线程栈帧 -> 如何查看寄存器值
  3. 怎么分析C++的core文件
  4. GDB有哪些命令
  5. gcc和g++的区别
  6. Linux下程序有问题,如何调试?(答GDB打开,打上Breakpoint进行调试)

设计模式

  1. 单例模式实现区别
  2. 策略模式实现

操作系统

操作系统原理

  1. 线程和进程的区别、应用场景。
  2. 多线程中各种锁,读写锁,互斥锁
  3. 内存池
  4. 内存管理
  5. 内存写漏
  6. 如果频繁进行内存的分配释放会有什么问题吗?
  7. 如果频繁分配释放的内存很大(>128k),怎么处理?
  8. 虚拟内存以及堆栈溢出相关的问题,堆栈溢出怎么处理等等。
  9. 分段和分页的区别
  10. 进程间通信原理和方式
  11. fork()读时共享写时拷贝
  12. 互斥锁+条件变量
  13. 如果非堆内存一直在增长,可能哪个区域的内存出了问题(Java)
  14. 堆和栈的区别。什么情况下会往堆里放
  15. fork函数返回值是怎么实现的
  16. 用户级线程和内核级线程的区别
  17. 线程池和线程开销
  18. 线程切换的到底是什么
  19. 线程同步共享怎么实现
  20. 互斥同步的方法
  21. 信号量和自旋锁的区别
  22. 查看磁盘、cpu 占用、内存占用命令
  23. linux虚拟地址空间结构/动态库地址无关代码
  24. top命令排查高占有率进程/top命令的占用率怎么算的
  25. 谈谈进程创建后在Linux中的内存分布?(回答内存四区,虚拟地址空间,栈内存堆内存)
  26. 在Linux系统下,使用for循环,一直进行new操作,会发生heap-overflow吗?如果不会,原因呢?(答应该不会,Linux系统可能会对此情况进行处理,面试官追问如果不用C++而用Java呢,答Java虚拟机等,胡扯了一些)
  27. 死锁的概念,进程调度算法怎么解决死锁
  28. 讲讲进程管理

系统编程

  1. 除了MQ和websocket之外,你还能想到什么异步通信的办法?
  2. 为什么要用多线程。多进程可以吗(webserver的)
  3. 为什么要用线程池,线程池中的线程是怎么运作的?
  4. 生产者消费者,信号量的使用
  5. 队列空时,消费者和生产者会发生什么 线程池请求队列是用什么实现的?(链表)
  6. .C++多线程并发问题(场景千万级数量级怎么处理)
  7. 哪几种常见的 signal? SIGSEGV... -> 正常终止程序的信号?-> kill 进程,几号信号?
  8. 什么情况下会使用静态变量
  9. 多线程读写同一个静态变量你是怎么解决的
  10. 用过无锁编程吗,知道原子量吗

定时器

  1. 小根堆定时器是怎么弄的。如果一次pop一个的话。高并发情况下会不会有问题
  2. 心跳检测如何实现
  3. 为什么用小根堆实现定时器

网络

网络原理

  1. 为什么握手是三次而挥手需要四次
  2. tcp和udp的原理、区别、应用场景。
  3. TCP慢启动,拥塞控制实现
  4. HTTP是在OSI模型的哪一层
  5. HTTPS用到的是对称加密还是非对称加密?分别体现在哪里?
  6. http2和http1的区别
  7. http1.0 / 1.1 / 2 / 3
  8. get和post区别
  9. WebSockt
  10. tcp/ip五层模型
  11. dns服务器用的是什么协议。
  12. ping命令 用的是什么协议。在哪一层。
  13. 能详细讲一下有限状态机怎么解析http报文吗
  14. 如果解析http请求的时候,用户一次性没传完数据,(如果头部都没传完,请求报文长度字段都没传完,怎么办)
  15. 路由表说一下
  16. 路由表为空怎么找到下一跳
  17. 粘包拆包是什么,发生在哪一层
  18. TCP在什么情况下会出现大量time_wait,哪个阶段出现
  19. TCP 包头字段... 标志位-> 建立连接过程,终止连接过程-> TIME_WAIT, CLOSE_WAIT 分析,属于哪一方?
  20. TCP 建立连接过程 -> SYN + ACK 包能不能拆开来发
  21. 讲讲quic/听说过哪些快速重传算法/timewait状态干啥用的
  22. 提到了TCP,黏包怎么解决?(固定包头接收,指定内存长度)
  23. 查看网络状况(以为是netstate,其实是ping、traceroute,紧张忘记说了)
  24. 抓包工具?(wireshark,紧张又给忘了靠)
  25. TCP 2MSL说一下,为什么

网络编程

  1. 为什么要用epoll
  2. epoll实现原理,epoll使用的哪种模式, 除了epoll,了解select/poll吗
  3. 怎么理解多路复用机制的
  4. reactor和proactor的好处和坏处。为什么要用reactor而不用proactor
  5. select怎么用。底层原理
  6. select为什么只能支持1024个。poll和epoll是怎么解决这个问题的。
  7. epoll 底层为什么用红黑树不用hash
  8. ET和LT的区别、IO多路复用
  9. 游戏中数据传输用啥协议(有没有改进的协议,基于UDP的可靠传输)
  10. 项目架构(webserver)两种高并发模式(问的很细)
  11. 除了Reactor模型,还有什么模型

数据库

MySQL

  1. 有哪些引擎
  2. 数据库的架构
  3. 不同引擎对索引的支持
  4. InnoDB和MyISAM的区别
  5. 隔离级别
  6. 最左前缀原则
  7. MySQL的集群是用什么样的方式去增加并发量
  8. 除了读写分离还有吗?
  9. mysql的隔离级别和锁。
  10. 数据库delete和trancate区别(这个trancate没用过,没说出来)
  11. mysql索引(B+树)
  12. B树和B+树的区别
  13. B+树树高怎么算?树高为4能支持多少数据量
  14. 数据库ACID怎么实现
  15. binlog记录的是什么
  16. mysql的ACLS(事务)
  17. mysql的mvcc
  18. mysql锁,每个锁的应用场景
  19. 什么情况下会照成死锁,举个例子
  20. 事务安全(隔离级别)
  21. 你的项目死锁怎么检测的
  22. 数据库三大范式(忘了)
  23. 如何加快数据检索的效率
  24. .注册登陆的用户名和密码存在哪里?(数据库)
  25. 面试官灵魂4连问:乐观锁与悲观锁的概念、实现方式、场景、优缺点?
  26. 哪几种常见的 signal? SIGSEGV... -> 正常终止程序的信号?-> kill 进程,几号信号?
  27. 一千五百万行数据如何快速找到某一行数据,给出方案,设计数据库表结构
  28. sql优化
  29. 事务
  30. 什么情况下使用读已提交
  31. 对于脏读的理解
  32. 慢查询怎么看,怎么优化
  33. 联合索引(a,b,c),where a, b, c和where b, a, c区别
  34. 是否了解db底层

redis

  1. redis有什么数据结构
  2. 设计一个存储字符串kv对的数据结构,要考虑并发和持久化存储
  3. redis 基本数据结构... zset-> zset 底层实现?-> skiplist 和 red-black tree 对比?
  4. 对于redis的理解
  5. redis在项目中进行怎么样的使用
  6. redis 为什么读取速度那么块 (io、单线程、内存)
  7. 为什么redis单线程会快 (完全基于内存、单线程避免不必要的上下文切换、cpu消耗、加锁问题。。。)
  8. 对于很多文件和数据,怎么进行数据的查找、排序,使用什么样的数据结构 (类似于TopK、这个主要是让你进行优化、类似于位图、hash、过滤器之类的)

服务器开发

  1. 用户认证和鉴权(jwt)
  2. 从url下图片10000张图片(写了想法,代码没写出来,http的api忘了),10台机器并行下载,怎么实现(主线程给子线程分配下载任务,从线程池取(给自己挖坑))。
  3. 雪花算法原理
  4. 分布式锁
  5. redis和MySQL数据一致性相关设计
  6. 长短连接的区别和应用场景
  7. RAII实现数据库连接池,怎么实现的
  8. http服务器,他的目标是什么,通过什么方式实现的
  9. 负载均衡的一些场景问题
  10. 为什么用vector实现缓冲区,有没有想过别的数据结构

rpc

  1. grpc怎么用的
  2. 为什么grpc速度快
  3. rpc调用流程和机制,rpc超时计时器在什么位置,如果调用超时了怎么处理,当前连接还能继续使用吗

开放性问题

项目相关

  1. 介绍自己的c++项目,遇到的难点,实现了那些功能
  2. 看过源码嘛,轻量级服务器项目
  3. 计算机基础知识是怎么去补滴,之后的技术/职业规划
  4. 物联网有个简版的MQ协议叫做MQTT,你可以想一下扫码支付使用的机器,这些机器的服务器是怎么做到跟这千万级别的客户端通信的?你扫码支付完之后,服务器是怎么精准返回你这个客户端说它收到了多少钱?
  5. 情景题。手机店。不同品牌的不同型号手机有不同的业务逻辑。怎么设计系统
  6. 如果有两个服务器,一个服务器坏了,另一个服务器怎么判断并接手坏的服务器的用户数据(共用一个堆)
  7. 服务器进行过压测么
  8. 场景设计问题,UDP设计安全可靠的文件传输
  9. 客户端资源下载到一半突然网络中断怎么办,有进行处理吗?
  10. 有进行过压力测试吗?
  11. 在学校里或者公司中最有成就感的事。
  12. 井盖为什么是圆的

音视频相关

  1. 音视频的编解码和同步问题能讲一下吗
  2. 你遇到过解码卡顿的情况吗

参考文章

部分参考文章:

https://www.nowcoder.com/feed/main/detail/61c62b0d97974a93a77030aeb278f880 https://www.nowcoder.com/discuss/501752554045308928 https://www.nowcoder.com/feed/main/detail/a4bcfe4ed24247019cbdbd176c2cb0b8 https://www.nowcoder.com/feed/main/detail/7b2e7b35e3ff4893aa2623b761103f15 https://www.nowcoder.com/feed/main/detail/b11ab7e902324190a96bd33c79b1f8c1

还有其他的文章太多了,如果侵权请告知删除。

C/C++一站式学习知识库 文章被收录于专栏

C/C++学习难度较大且方向较多,设置的开发环境也比较多,为了节省大家的时间,程序员老廖我创建了该知识库,大家可以参考知识库的文章系统学习。

全部评论
井盖为什么是圆的
2 回复 分享
发布于 01-05 11:19 湖北

相关推荐

不愿透露姓名的神秘牛友
11-08 12:30
点赞 评论 收藏
分享
48 487 评论
分享
牛客网
牛客企业服务