熬夜爆肝万字,牛客网C/C++校招、社招面试题大总结
前言:C/C++校招、社招面试题1000+道常见面试题,大部分的面试题对于C++后端、桌面开发、嵌入式、音视频开发都是通用的,建议大家根据整理的面试题整理答案,一定要自己整理答案才能把知识转化成自己的能力,只有通过动手动脑才能加深映像(注:部分面试题分类不一定严格按类别分类)。
特殊说明:转载之公众号《深入浅出cpp》。|仅供本人学习使用
一、C/C++语言
常见问题:智能指针、多态、虚函数、stl原理。
- 智能指针实现原理
- 智能指针,里面的计数器何时会改变
- 智能指针和管理的对象分别在哪个区(智能指针本身在栈区,托管的资源在堆区,利用了栈对象超出生命周期后自动析构的特征,所以无需手动delete释放资源。
- 面向对象的特性:多态原理
- 介绍一下虚函数,虚函数怎么实现的
- 多态和继承在什么情况下使用
- 除了多态和继承还有什么面向对象方法
- C++内存分布。什么样的数据在栈区,什么样的在堆区
- C++内存管理(RAII啥的)
- C++从源程序到可执行程序的过程
- 一个对象=另一个对象会发生什么(赋值构造函数)
- 如果new了之后出了问题直接return。会导致内存泄漏。怎么办(智能指针,raii)
- c++11的智能指针有哪些。weak_ptr的使用场景。什么情况下会产生循环引用
- 多进程fork后不同进程会共享哪些资源
- 多线程里线程的同步方式有哪些
- size_of是在编译期还是在运行期确定
- 函数重载的机制。重载是在编译期还是在运行期确定
- 指针常量和常量指针
- vector的原理,怎么扩容
- 介绍一下const
- 引用和指针的区别
- Cpp新特性知道哪些
- 类型转换
- RAII基于什么实现的(生命周期、作用域、构造析构
- 手撕:Unique_ptr,控制权转移(移动语义)
- 手撕:类继承,堆栈上分别代码实现多态
- unique_ptr和shared_ptr区别
- 右值引用
- 函数参数可不可以传右值
- 参考c/c++堆栈实现自己的堆栈。要求:不能用stl容器。
- stl容器了解吗?底层如何实现:vector数组,map红黑树,红黑树的实现
- 完美转发介绍一下 去掉std::forward会怎样?
- 介绍一下unique_lock和lock_guard区别?
- C代码中引用C++代码有时候会报错为什么?
- 静态多态有什么?虚函数原理 虚表是什么时候建立的 为什么要把析构函数设置成虚函数?
- map为啥用红黑树不用avl树?(几乎所有面试都问了map和unordered_map区别)
- inline 失效场景
- C++ 中 struct 和 class 区别
- 如何防止一个头文件 include 多次
- lambda表达式的理解,它可以捕获哪些类型
- 友元friend介绍
- move函数
- 模版类的作用
- 模版和泛型的区别
- 内存管理:C++的new和malloc的区别
- new可以重载吗,可以改写new函数吗
- C++中的map和unordered_map的区别和使用场景
- 他们是线程安全的吗
- c++标准库里优先队列是怎么实现的?
- gcc编译的过程
- C++ Coroutine
- extern C有什么作用
- c++ memoryorder/elf文件格式/中断对于操作系统的作
- C++的符号表
- C++的单元测试
二、数据结构算法
常见问题:链表、排序、二叉树。
- 数组和链表区别和优缺点
- 快速排序
- 堆排序是怎么做的
- 冒泡排序
- 二分查找(复杂度)
- hash表数据很大。rehash的代价很高,怎么办
- 二叉树前序遍历非递归
- 链表反转
- 二叉树输出每一层最右边的节点
- 千万级数组如何求最大k个数?(用最小堆反之最大堆) 千万数据范围有限,0到1000,有很多重复的,按频率排序怎么处理?
- 计算二叉树层高。
- 给一个连续非空子数组,找它乘积最大的(动态规划)
- 排序算法. 哪些是稳定的,哪些不稳定的
- 树的深度和高度。一开始分别用了一个层序遍历和一个dfs,然后面试官问能否都在一个dfs里面呢,提示了一下在dfs是否可以传一个参数,然后解决了。
- 布隆过滤器介绍
- 为什么不用布隆过滤器
- .数据结构相关,图的种类,表示方法,图有哪些经典算法+描述算法
- 求最大的k个数字,解法:优先队列(堆)或者快速排序
- 一个大数问题,解法:转换为字符串解决,这题没写好,leetcode应该有很多类似的问题
- hash解决冲突 ( 开放定址法、链地址法、再哈希法、建立公共溢出区 ),四种方式详细的过程、思路
- 链地址法和再哈希法之间的关联和区别,两者分别适用场景,两者底层的数据结构,关联和区别
- 链表和数组的底层结构设计、关联、区别、应用场景
- 死锁的概念,进程调度算法怎么解决死锁
三、gdb/gcc/g++
- 什么是GDB?它用于做什么?
- GDB的常用命令有哪些?
- 如何在GDB中设置断点?
- 如何在GDB中查看变量的值?
- 如何使用GDB进行程序调试时,定位内存泄漏问题?
- 请解释GCC和G++之间的区别。
- GCC和G++都可以编译C++代码吗?如果可以,有什么不同之处?
- GCC的常用编译选项有哪些?
- G++的常用编译选项有哪些?
- 如何在GCC/G++中指定特定版本的标准(如C++11或C++14)进行编译?
- 怎么debug,怎么看内存泄漏。
- gdb 使用 -> 多线程程序切换到某线程栈帧 -> 如何查看寄存器值
- 怎么分析C++的core文件
- GDB有哪些命令
- gcc和g++的区别
- Linux下程序有问题,如何调试?(答GDB打开,打上Breakpoint进行调试)
四、设计模式
- 什么是设计模式?为什么使用设计模式?
- 列举常见的设计模式分类,并简要描述每个分类中的几个具体设计模式。
- 解释单例模式的概念和用途,以及如何实现单例模式。
- 什么是工厂方法模式和抽象工厂模式?它们之间有何区别?
- 解释装饰器模式和适配器模式的概念,并举例说明它们的应用场景。
- 什么是观察者模式?如何实现观察者模式?
- 解释策略模式和状态模式之间的区别,以及在什么情况下使用它们。
- 什么是迭代器模式和组合模式?它们可以一起使用吗?
- 解释桥接模式和适配器模式之间的区别,并说明在哪种情况下选择使用桥接或适配器。
- 介绍责任链模式和命令模式的概念,并说明它们如何解耦发送者和接收者。
- 单例模式实现区别
- 策略模式实现
五、操作系统
5.1操作系统原理
- 线程和进程的区别、应用场景。
- 多线程中各种锁,读写锁,互斥锁
- 内存池
- 内存管理
- 内存写漏
- 如果频繁进行内存的分配释放会有什么问题吗?
- 如果频繁分配释放的内存很大(>128k),怎么处理?
- 虚拟内存以及堆栈溢出相关的问题,堆栈溢出怎么处理等等。
- 分段和分页的区别
- 进程间通信原理和方式
- fork()读时共享写时拷贝
- 互斥锁+条件变量
- 如果非堆内存一直在增长,可能哪个区域的内存出了问题(Java)
- 堆和栈的区别。什么情况下会往堆里放
- fork函数返回值是怎么实现的
- 用户级线程和内核级线程的区别
- 线程池和线程开销
- 线程切换的到底是什么
- 线程同步共享怎么实现
- 互斥同步的方法
- 信号量和自旋锁的区别
- 查看磁盘、cpu 占用、内存占用命令
- linux虚拟地址空间结构/动态库地址无关代码
- top命令排查高占有率进程/top命令的占用率怎么算的
- 谈谈进程创建后在Linux中的内存分布?(回答内存四区,虚拟地址空间,栈内存堆内存)
- 在Linux系统下,使用for循环,一直进行new操作,会发生heap-overflow吗?如果不会,原因呢?(答应该不会,Linux系统可能会对此情况进行处理,面试官追问如果不用C++而用Java呢,答Java虚拟机等,胡扯了一些)
- 死锁的概念,进程调度算法怎么解决死锁
- 讲讲进程管理
5.2系统编程
- 除了MQ和websocket之外,你还能想到什么异步通信的办法?
- 为什么要用多线程。多进程可以吗(webserver的)
- 为什么要用线程池,线程池中的线程是怎么运作的?
- 生产者消费者,信号量的使用
- 队列空时,消费者和生产者会发生什么 线程池请求队列是用什么实现的?(链表)
- .C++多线程并发问题(场景千万级数量级怎么处理)
- 哪几种常见的 signal? SIGSEGV... -> 正常终止程序的信号?-> kill 进程,几号信号?
- 什么情况下会使用静态变量
- 多线程读写同一个静态变量你是怎么解决的
- 用过无锁编程吗,知道原子量吗
5.3定时器
- 什么是定时器?请简要描述定时器的作用和原理。
- 在多线程环境下,如何实现一个线程安全的定时器?
- 解释定时器的精度和分辨率之间的区别。
- 如何处理在定时器回调函数中发生阻塞的情况?
- 解释定时器的触发方式:一次性触发和周期性触发。它们有何不同以及各自适用的场景。
- 在嵌入式系统中,如何实现低功耗的定时器?
- 介绍操作系统中常见的定时器机制,比如基于硬件中断、轮询等方式。
- 在网络编程中,如何使用定时器来处理超时事件?
- 如何实现一个高并发、高可靠性的分布式定时任务调度系统?
- 解释时间轮算法,并说明它在实现定时器中的应用场景。
- 小根堆定时器是怎么弄的。如果一次pop一个的话。高并发情况下会不会有问题
- 心跳检测如何实现
- 为什么用小根堆实现定时器
六、网络编程
6.1网络原理
- 为什么握手是三次而挥手需要四次
- tcp和udp的原理、区别、应用场景。
- TCP慢启动,拥塞控制实现
- HTTP是在OSI模型的哪一层
- HTTPS用到的是对称加密还是非对称加密?分别体现在哪里?
- http2和http1的区别
- http1.0 / 1.1 / 2 / 3
- get和post区别
- WebSockt
- tcp/ip五层模型
- dns服务器用的是什么协议。
- ping命令 用的是什么协议。在哪一层。
- 能详细讲一下有限状态机怎么解析http报文吗
- 如果解析http请求的时候,用户一次性没传完数据,(如果头部都没传完,请求报文长度字段都没传完,怎么办)
- 路由表说一下
- 路由表为空怎么找到下一跳
- 粘包拆包是什么,发生在哪一层
- TCP在什么情况下会出现大量time_wait,哪个阶段出现
- TCP 包头字段... 标志位-> 建立连接过程,终止连接过程-> TIME_WAIT, CLOSE_WAIT 分析,属于哪一方?
- TCP 建立连接过程 -> SYN + ACK 包能不能拆开来发
- 讲讲quic/听说过哪些快速重传算法/timewait状态干啥用的
- 提到了TCP,黏包怎么解决?(固定包头接收,指定内存长度)
- 查看网络状况(以为是netstate,其实是ping、traceroute,紧张忘记说了)
- 抓包工具?(wireshark,紧张又给忘了靠)
- TCP 2MSL说一下,为什么
6.2网络编程
- 为什么要用epoll
- epoll实现原理,epoll使用的哪种模式, 除了epoll,了解select/poll吗
- 怎么理解多路复用机制的
- reactor和proactor的好处和坏处。为什么要用reactor而不用proactor
- select怎么用。底层原理
- select为什么只能支持1024个。poll和epoll是怎么解决这个问题的。
- epoll 底层为什么用红黑树不用hash
- ET和LT的区别、IO多路复用
- 游戏中数据传输用啥协议(有没有改进的协议,基于UDP的可靠传输)
- 项目架构(webserver)两种高并发模式(问的很细)
- 除了Reactor模型,还有什么模型
七、数据库
7.1MySQL
- 有哪些引擎
- 数据库的架构
- 不同引擎对索引的支持
- InnoDB和MyISAM的区别
- 隔离级别
- 最左前缀原则
- MySQL的集群是用什么样的方式去增加并发量
- 除了读写分离还有吗?
- mysql的隔离级别和锁。
- 数据库delete和trancate区别(这个trancate没用过,没说出来)
- mysql索引(B+树)
- B树和B+树的区别
- B+树树高怎么算?树高为4能支持多少数据量
- 数据库ACID怎么实现
- binlog记录的是什么
- mysql的ACLS(事务)
- mysql的mvcc
- mysql锁,每个锁的应用场景
- 什么情况下会照成死锁,举个例子
- 事务安全(隔离级别)
- 你的项目死锁怎么检测的
- 数据库三大范式(忘了)
- 如何加快数据检索的效率
- .注册登陆的用户名和密码存在哪里?(数据库)
- 面试官灵魂4连问:乐观锁与悲观锁的概念、实现方式、场景、优缺点?
- 哪几种常见的 signal? SIGSEGV... -> 正常终止程序的信号?-> kill 进程,几号信号?
- 一千五百万行数据如何快速找到某一行数据,给出方案,设计数据库表结构
- sql优化
- 事务
- 什么情况下使用读已提交
- 对于脏读的理解
- 慢查询怎么看,怎么优化
- 联合索引(a,b,c),where a, b, c和where b, a, c区别
- 是否了解db底层
7.2redis
- 什么是Redis?请简要描述Redis的特点和用途。
- Redis支持哪些数据结构?请逐个介绍并说明其应用场景。
- Redis的持久化机制有哪些?分别介绍RDB和AOF的工作原理以及优缺点。
- Redis如何处理高并发读写操作?
- 如何保证Redis的高可用性?可以介绍一下Redis Sentinel和Redis Cluster。
- Redis在内存管理方面有哪些策略?
- 什么是Redis事务?它的特点和使用场景是什么?
- Redis支持哪些常见的客户端操作命令?
- 如何实现分布式锁在Redis中?
- Redis有哪些常见的应用场景,比如缓存、消息队列等?
- redis有什么数据结构
- 设计一个存储字符串kv对的数据结构,要考虑并发和持久化存储
- redis 基本数据结构... zset-> zset 底层实现?-> skiplist 和 red-black tree 对比?
- 对于redis的理解
- redis在项目中进行怎么样的使用
- redis 为什么读取速度那么块 (io、单线程、内存)
- 为什么redis单线程会快 (完全基于内存、单线程避免不必要的上下文切换、cpu消耗、加锁问题。。。)
- 对于很多文件和数据,怎么进行数据的查找、排序,使用什么样的数据结构 (类似于TopK、这个主要是让你进行优化、类似于位图、hash、过滤器之类的)
八、服务器开发
- 用户认证和鉴权(jwt)
- 从url下图片10000张图片(写了想法,代码没写出来,http的api忘了),10台机器并行下载,怎么实现(主线程给子线程分配下载任务,从线程池取(给自己挖坑))。
- 雪花算法原理
- 分布式锁
- redis和MySQL数据一致性相关设计
- 长短连接的区别和应用场景
- RAII实现数据库连接池,怎么实现的
- http服务器,他的目标是什么,通过什么方式实现的
- 负载均衡的一些场景问题
- 为什么用vector实现缓冲区,有没有想过别的数据结构
九、rpc
- 什么是RPC?请简要描述RPC的概念和工作原理。
- RPC与HTTP之间有什么区别?它们各自适用于哪些场景?
- RPC框架有哪些常见的实现方式?例如,基于TCP/UDP、HTTP、消息队列等。
- 请解释一下序列化和反序列化在RPC中的作用,以及常用的序列化方式有哪些?
- 在RPC通信中,如何处理服务发现和负载均衡?
- RPC框架如何保证通信的安全性?可以谈谈认证、加密和防止恶意攻击等方面。
- 如何处理分布式系统中的幂等性问题?
- 常见的跨语言RPC框架有哪些?比较它们的特点和优劣势。
- 如何进行RPC接口版本控制和演进?请分享一些实践经验。
- 谈谈你对于微服务架构中使用RPC的看法,并解释为什么选择使用RPC而不是其他通信方式。
- grpc怎么用的
- 为什么grpc速度快
- rpc调用流程和机制,rpc超时计时器在什么位置,如果调用超时了怎么处理,当前连接还能继续使用吗
十、开放性问题(项目相关)
- 介绍自己的c++项目,遇到的难点,实现了那些功能
- 看过源码嘛,轻量级服务器项目
- 计算机基础知识是怎么去补滴,之后的技术/职业规划
- 物联网有个简版的MQ协议叫做MQTT,你可以想一下扫码支付使用的机器,这些机器的服务器是怎么做到跟这千万级别的客户端通信的?你扫码支付完之后,服务器是怎么精准返回你这个客户端说它收到了多少钱?
- 情景题。手机店。不同品牌的不同型号手机有不同的业务逻辑。怎么设计系统
- 如果有两个服务器,一个服务器坏了,另一个服务器怎么判断并接手坏的服务器的用户数据(共用一个堆)
- 服务器进行过压测么
- 场景设计问题,UDP设计安全可靠的文件传输
- 客户端资源下载到一半突然网络中断怎么办,有进行处理吗?
- 有进行过压力测试吗?
- 在学校里或者公司中最有成就感的事。
- 井盖为什么是圆的
十一、音视频相关
- 什么是音视频开发?请简要描述音视频开发的概念和工作范围。
- 音频编码和视频编码有什么区别?请举例说明常见的音频编码和视频编码格式。
- 什么是采样率和位深度?它们对音频质量有何影响?
- 解释一下声道(Channel)和立体声(Stereo)的概念,以及它们在音频中的应用。
- 视频帧率是什么?为什么重要?
- 请解释一下视频分辨率和纵横比(Aspect Ratio),并举例说明常见的分辨率和纵横比值。
- 音频信号处理中常用的滤波器有哪些类型?请简要介绍它们的作用与特点。
- 在实时音视频通信中,延迟(Latency)是一个重要指标,请解释一下延迟在音视频通信中的意义,并提出减少延迟的方法。
- 什么是实时传输协议(RTP)?它在音视频传输中扮演着怎样的角色?
- 描述一下流媒体技术中常见的三个组成部分:播放器、流媒体服务器和编码器。
- 在音视频开发中,常见的编解码库有哪些?请列举几个并简要介绍它们的特点。
- 如何进行音频采集和播放?请描述一下常见的音频设备接口和API。
- 请解释一下音视频同步的原理,并提出实现同步的方法。
- 音视频通信中,如何处理网络抖动和丢包问题?
- 解释一下H.264和HEVC这两种视频编码标准的区别和优劣势。
- 音频降噪技术在通信领域有着重要应用,请介绍一下常见的音频降噪算法。
- 在直播场景中,如何实现低延迟播放?请列举几种相关的技术手段。
- 什么是自适应比特率(ABR)技术?它在流媒体传输中有何作用?
- 描述一下WebRTC技术在实时音视频通信中的应用,并提及其优势与挑战。
- 视频编码过程中,有哪些重要的预测方法和压缩技术?
- 如何实现音频混音功能?请简述常见的混音算法与实现方式。
- 常见的音频特效处理有哪些?请举例说明并解释其原理。
- 在音视频开发中,什么是容器格式(Container Format)?请列举几种常见的容器格式。
- 音频编码过程中,有哪些重要的压缩技术和数据结构?
- 描述一下实时音视频传输协议(RTSP)及其在流媒体领域的应用。
- 音视频质量评估是一个重要的任务,请介绍一下常用的音视频质量评估方法。
- 如何实现音频回声消除功能?请简述常见的回声消除算法与实现方式。
- 解释一下网络传输控制协议(TCP)和用户数据报协议(UDP),以及它们在音视频传输中的应用场景。
- 在实时音视频通信中,如何保证通信安全性?请描述常见的安全策略与机制。
- 描述一下流媒体服务器架构,包括内容分发网络(CDN)、转码与转封装等关键组件。
- 什么是帧间压缩和帧内压缩?它们在视频编码中起到怎样的作用?
- 音频编解码中存在许多有损和无损压缩算法,请解释它们之间的区别和应用场景。
- 在音视频处理中,什么是傅里叶变换(Fourier Transform)?它有何作用?
- 描述一下音频采样和重采样的过程与原理。
- 音频编解码器如何实现声音的压缩和解压缩?请简要介绍一下常见的音频编解码算法。
- 在音视频开发中,什么是媒体同步(Media Synchronization)?请提出实现媒体同步的方法。
- 解释一下多通道音频(Multichannel Audio)的概念与应用领域。
- 视频流媒体服务中,如何实现视频转码和分辨率自适应?
- 在音视频通信中,常见的传输协议有哪些选择?请比较它们的特点和适用场景。
- 如何进行视频流切片(Segmentation)和动态自适应比特率调整(ABR)?
- 什么是虚拟现实(VR)和增强现实(AR)技术在音视频领域的应用?
- 解释一下HLS(HTTP Live Streaming)协议及其在流媒体传输中的作用。
- 如何实现视频流加密与数字版权保护?
- 音频立体声效果产生的原理是什么?请介绍几种常见的立体声效果算法。
- 在实时音视频通信中,如何进行网络拥塞控制和流量调度?
- 描述一下音频编解码中的自适应比特率(ABR)技术和带宽管理策略。
- 什么是直播推流和拉流技术?请列举几个常用的直播协议。
- 如何优化音视频处理算法以提高性能和降低资源消耗?
- 解释一下媒体容器与编码格式之间的关系,并简要介绍常见的容器-编码器组合。
- 音频信号处理中,什么是混响(Reverberation)?请解释混响产生的原理及去混响方法。
- 音视频的编解码和同步问题能讲一下吗
- 你遇到过解码卡顿的情况吗