本文主要是介绍cpper绝不当炮灰选手-剑指大厂-c++后端面试大成攻略副本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
针对于c++后端,本文会直接从面试角度出发,盘点整理在c++后端面试中出现的面试题型与经典题目。
包含:
-
c/c++(36道)
-
设计模式(14道)
-
数据结构与算法(35道)
-
操作系统(17道)
-
数据库(32道)
-
网络(15道)
-
分布式与集群(44道)
-
设计方案(7道)
共计200道面试题
需要的朋友,建议点个收藏,需要的时候随时阅读。
后续针对面试题的视频教程也会陆续更新,喜欢直接看视频面试题的朋友可以关注视频账号
目前已更新分享的c++后端面试题答案及解析思路:视频教程在此
一、c/c++
1.语言
-
static、const 作用
-
引用与指针作用以及区别?
-
如何避免野指针?
-
malloc、free 和new、 delete 区别? malloc申请空间失败怎么办?
-
extern有什么作用?
-
简述strcpy、 sprintf 与memcpy 的区别?
-
c/c++中强制类型转换使用场景?
-
什么时候生成默认构造函数?
-
什么时候生产默认拷贝构造函数?
-
什么是深拷贝?什么是浅拷贝?默认拷贝构造函数是哪种拷贝?什么时候用深拷贝?
2.标准库
-
vector底层实现原理?
-
vector内存增长机制?
-
vector的reserve 和resize 的区别?
-
vector的元素类型为什么不能是引用?
-
list的底层实现原理
-
deque的底层实现原理
-
什么时候使用vector、list、以及deque?
-
priority_queue的底层实现原理
-
map、set、multimap、multiset 的底层实现原理?红黑树原理?
-
unordered_ map、unordered_ set的底层实现原理?哈希表原理?
-
迭代器底层实现原理?以及有哪些种类?
-
迭代器失效?连续存储容器的失效?非连续存储容器的失效?以及分别的处理方式?
-
STL容器的线程安全性
3.面向对象
-
面对对象的三大特征
-
简述多态实现原理
-
怎么解决菱形继承?
-
函数重载和重写的区别?
-
运行期多态的实现原理?
-
虚函数的调用过程?
-
继承下的构造函数和析构函数执行顺序?
-
虚函数表和虚函数表指针(vptr)的创建时机?
-
虚析构函数的作用?
-
智能指针种类以及使用场景?
-
c++ 11用过哪些特性?
-
动态库和静态库的区别?
-
左值引用与右值引用的区别?右值引用的意义?
二、设计模式
1.设计原则
-
面对对象中有哪些设计原则?
-
简述开闭原则,哪些原则与它相关,分别是什么关系?
-
什么是里氏替换原则?
-
什么是迪米特原则?
-
什么是依赖倒置原则?
2.创建型
-
单例模式多线程?
-
什么是工厂模式?什么是抽象工厂?应用场景是什么?
3.结构型
-
什么是代理模式?应用场景是什么?
-
什么是装饰器模式?应用场景是什么?
-
什么是组合模式?应用场景是什么?
-
什么是责任链模式?应用场景是什么?
4.行为型
-
什么是模版方法?应用场景是什么?
-
什么是策略模式?应用场景是什么?
-
什么是观察者模式?应用场景是什么?
三、数据结构与算法
1.栈、队列
-
用两个栈实现队列
-
包含min函数的栈
-
队列的最大值
-
用一个栈实现另一个栈的排序
-
如何仅用递归函数和栈操作逆序一个栈
2.链表
-
链表中倒数第k个节点?
-
链表中环的入口节点?
-
反转链表?
-
从尾到头打印链表
-
两个链表的第一个公共节点
3.字符串
-
第一个只出现一次的字符
-
最长不含重复字符的子字符串
-
字符事的排列
-
反转字符亭
-
把数字翻译成字符率
4.二叉树
-
重建二叉树
-
二叉树的下一个节点
-
树的子结构
-
二叉树的镜像
-
对称的二叉树
-
从上到下打印二叉树.
-
序列化二叉树
-
二叉树的深度
-
二叉树第k大节点
-
树中两个节点的最低公共祖先
5.动态规划、贪心
-
剪绳子
-
二进制中1的个数
-
矩阵的最小路径和
-
换钱的方法数
-
换钱的最少货币数
-
最长公共于序列问题
-
最长公共子事问题
-
数组中的最长连续序列
-
最长递增于序列
-
最小编辑代价
四、操作系统
1.进程线程
-
进程和线程的区别?
-
操作系统中进程与线程切换过程?
-
请描述整个系统调用过程?
-
后台进程有什么特点,如果要你设计一个进程是后台进程,需要考虑什么?
-
进程间通信有哪几种方式?
-
操作系统中进程调度策略有哪几种?
-
线程同步的方式?
-
CAS是一种什么样的同步机制?
-
CPU是怎么执行指令的?
2.内存
-
用户态和核心态的区别?
-
内存管理有哪几种方式?
-
分页和分段有什么区别?
-
页面直换算法有哪些?
-
什么是虚拟内存?
-
为什么虚拟地址空间切换会比较耗时?
-
虚拟内存和物理内存怎么对应?
-
请求页面直换策略有哪些方式?他们的区别是什么?各自有什么算法解决?
五、数据库
1.mysql
-
数据库三大范式?
-
MySQL cpu飙升,该怎么处理?
-
如何定位以及优化SQL语句的性能问题?或者如何解决慢查询问题?
-
什么是视图?为什么要使用视图?
-
SQL语句在MySQL 是如何执行的?
-
索引在哪些情况下会失效?
-
索引的目的和代价分别是什么?
-
主键索引和唯一索引的区别?
-
聚集索引和非聚集索引的区别?
-
什么是覆盖索引?原理是什么?
-
什么是回表查询?原理是什么?
-
什么是最左匹配规则?原理是什么?
-
什么是索引下推?原理是什么?
-
InnoDB与MyISAM 的区别?
-
索引为什么要用B+树,而不是二又树或者B树?
-
数据库事务的四个特性以及含义?
-
数据库的脏读,幻读,不可重复读出现的原因原理,解决办法?
-
不可重复读与幻读的区别?
-
SQL注入原理?如何避免SQL注入?
-
MySQL死锁问题产生的原因以及如何解决?
-
MVCC底层原理?
2.Redis
-
什么是redis? redis 的应用场景?
-
redis 的对象类型有哪些,底层实现用了哪些数据结构?
-
redis 中相同数量的数据,对比分别使用hash 与zset存储的空间占用情况?
-
基于redis 实现限流功能有哪几种方式?
-
redis 为什么是单线程?这里单线程指什么?为什么这么快?
-
redis 怎么实现分布式镇?有哪些缺陷?
-
redis 怎么做高可用?
-
redis 特久化有哪些,不同的持久化机制都有什么优缺点?
-
什么是缓存雪崩、缓存穿透、缓存击穿?分别有哪些解决方案?
-
redis 淘汰策略有哪些?
-
分析redis 的事务?
六、网络
1.网络编程
-
简述Reactor 网络编程模型?
-
比较Reactor 和Proactor 的区别?
-
连接断开有哪几种判定方式?
-
接收客户端连接有几种方式?
-
为什么用户态需要设置读写缓冲区?
2.网络原理
-
水平触发和边缘触发的区别?在边缘触发下,一个socket 已读取200然后不再处理,是不是剩下的300就永远无法读取?
-
CLOSE_ WAIT和TIME_ WAIT是什么?如何排查?有什么意义?
-
TCP三次握手的过程?为什么不可以是两次握手?
-
TCP四次挥手的过程? TIME_ WAIT为什么至少设置两倍的MSL 时间?
-
什么是连接的半打开,半关闭状态?
-
linux io模型有哪几种?简述io多路复用机制?
-
阻塞io和非阻塞io的区别?
-
select、poll、epoll 三者的区别?
-
为什么边缘触发一定要用非阻塞io?
-
描述io多路复用机制
七、分布式和集群
1.分布式理论
-
什么是CAP理论?
-
什么是Base理论?
-
什么是2PC (两阶段提交) ?
-
什么是Raft协议?解决了什么问题?
2.kafka
-
kafka是什么?解决了什么问题?
-
zookeeper对于kafka 的作用是什么?
-
kafka如何判断一个节点是否还活着?
-
简述kafka 的ack三种机制?
-
如何控制消费的位置?
-
kafka在分布式场景下,如何保证消息的顺序消费?
-
kafka的高可用机制是什么?
-
kafka如何减少数据丢失?
-
kafka如何确保不消费重复数据?
-
kafka如何维护消费状态的?
3.gRPC
-
gRPG 服务端启动流程?
-
gRPG 服务类型有哪些?
-
一个connection 可以同时处理多个stream, 那keepalive 是针对stream设置的,还是针对connection 设置的?
-
多路复用指的是什么?
-
如何自定义resolver?
-
如何自定义balance?
-
如何实现gRPC 全链路追踪?
-
客户端connection 连接状态有哪些?
-
客户端如何获取服务端的服务函数列表?
-
gRPC 如何为每个stream 进行限流?什么是flow control?
4.etcd
-
etcd 中一个任期是什么意思?
-
etcd 中raft状态机是怎么样切换的?
-
如何防止candidate 在遗漏部分数据的情况下发起投票成为leader ?
-
etcd某个节点宕机后会怎么做?
-
为什么Raft算法在确定可用节点数量时不需要考虑拜占庭将军问题?
-
如何选举出leader 节点?
-
怎么保证数据一致性?
5.docker/k8s
-
什么是docker 镜像?
-
什么是docker容器?
-
docker容器有几种状态?
-
DockerFile中的命令COPY和ADD命令有什么区别?
-
容器与主机之间的数据拷贝命令?
-
解释一下dockerfile 的ONBUILD 指令?
-
如何在生产中监控docker?
-
构建docker镜像应该遵循哪些原则?
-
容器退出后,通过docker ps 命令查看不到,数据会丢失么?
6.数据库集群
-
MySQL主从复制原理?
-
MySQL分库分表?
-
简述redis 高可用的方案?
-
简述redis cluster 集群的原理?
八、设计方案
1.发散题
-
只用2GB内存在20亿个整数中找到出现次数最多的数
-
找到100亿个URL中重复的URL及搜索词汇的Top K问题
-
40亿个非负整数中找到未出现的数
-
40亿个非负整数中找到出现两次的数和所有数的中位数
-
岛问题
2.综合题
-
redis和mysql缓存一致性
-
设计一个海量定时器方案,时间跨度毫秒级到年
此200道面试题主要针对的为c++后端面试。但是成功拿下offer,不仅仅只需要面试题就够了的,大家也需要掌握一定的技术知识,配合的本文总结的面试题,更好的为大家面试提供帮助。
需要c++后端的技术学习路线的朋友,可以我之前写的这篇文章:
Linuxc/c++大厂开发岗学习指南(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构) - 知乎
PS:如果对应求职的岗位不是c++后端,也可以分享一份c++1000到通用经典面试题PDF
这篇关于cpper绝不当炮灰选手-剑指大厂-c++后端面试大成攻略副本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!