熬夜爆肝万字,牛客网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)?请解释混响产生的原理及去混响方法。
  • 音视频的编解码和同步问题能讲一下吗
  • 你遇到过解码卡顿的情况吗
#面试题打卡学习##C/C++##校招##社招##应届生面试题#
全部评论
神仙,看完这个直接能面所有面试
4 回复 分享
发布于 08-12 00:30 广东
大佬,太及时了,已经很全了
点赞 回复 分享
发布于 08-12 11:29 黑龙江

相关推荐

34 211 评论
分享
牛客网
牛客企业服务