cpper绝不当炮灰选手-剑指大厂-c++后端面试大成攻略副本

2023-12-07 03:36

本文主要是介绍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++后端面试大成攻略副本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/464366

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)