目录

cpp

设计模式

笔试 算法题 场景题

操作系统 进程 同步 通信 调度 线程 协程 命令 并发

计算机网络 网络分层 http https tcp udp ip dns arp dhcp nat vpn cdn 数据库 MySQL 索引, 事务, 锁, 视图, 缓存 Redis 缓存击穿, 缓存雪崩, 缓存穿透 中间件 消息队列 RabbitMQ Kafka

版本控制 Git Docker

cpp

1. 基础语法与关键字

问题 版本 笔记链接 网络链接
const/volatile作用 C++98/03
static作用域 C++98/03
指针与引用区别 C++98/03
类型转换(4种cast) C++98/03
宏与预处理器 C++98/03
auto类型推导 C++11
nullptr C++11
decltype C++11
范围for循环 C++11
原始字符串字面量 C++11
alignof/alignas C++11
using别名 C++11
二进制字面量 C++14
数字分隔符 C++14
泛型lambda C++14
函数返回类型推导 C++14
[[deprecated]]属性 C++14
结构化绑定 C++17
if/switch初始化语句 C++17
内联变量 C++17
折叠表达式 C++17
std::byte C++17
指定初始化 C++20
协程关键字(co_await等) C++20
模块(import) C++20
属性增强([[no_unique_address]]) C++20

2. 面向对象特性

问题 版本 笔记链接 网络链接
类访问控制 C++98/03
构造/析构函数 C++98/03
继承与多态 C++98/03
虚函数表(vptr) C++98/03
运算符重载 C++98/03
RTTI机制 C++98/03
委托构造 C++11
继承构造 C++11
final/override C++11
强类型枚举 C++11
移动语义 C++11
显式缺省/删除函数(=default/=delete) C++11
成员函数返回类型推导 C++14
放宽const成员函数约束 C++14
聚合体扩展初始化 C++17
内联静态成员 C++17
嵌套命名空间简化(namespace A::B) C++17
概念约束类模板 C++20
协程成员函数 C++20
三路比较运算符(<=>) C++20
基于范围的operator[] C++20

3. 模板与泛型编程

问题 版本 笔记链接 网络链接
函数/类模板基础 C++98/03
模板特化/偏特化 C++98/03
依赖名称解析(typename双义性) C++98/03
可变参数模板 C++11
模板别名 C++11
外部模板 C++11
类型萃取(type_traits) C++11
SFINAE与enable_if C++11
变量模板 C++14
泛型lambda捕获 C++14
函数模板默认参数 C++14
类模板参数推导(CTAD) C++17
折叠表达式 C++17
if constexpr C++17
结构化绑定模板 C++17
概念(concepts) C++20
约束模板 C++20
模板lambda C++20
简写函数模板 C++20
模板参数列表简化 C++20

4. 内存管理

问题 版本 笔记链接 网络链接
new/delete机制 C++98/03
内存分区(栈/堆等) C++98/03
深浅拷贝 C++98/03
定位new表达式 C++98/03
移动语义 C++11
右值引用 C++11
智能指针(unique_ptr/shared_ptr/weak_ptr) C++11
内存模型 C++11
allocator_traits C++11
make_unique C++14
共享指针数组支持 C++14
大小明确的delete C++14
内存对齐控制 C++17
多态分配器(std::pmr) C++17
未初始化内存工具 C++17
原子智能指针 C++20
销毁操作概念化 C++20
协程内存优化 C++20

5. 异常处理

问题 版本 笔记链接 网络链接
基本try-catch机制 C++98/03
异常规范(已弃用) C++98/03
RAII模式 C++98/03
异常安全保证 C++98/03
noexcept关键字 C++11
异常传播改进 C++11
exception_ptr(跨线程异常) C++11
uncaught_exceptions()(嵌套异常) C++17
异常类型系统增强 C++17
协程异常处理 C++20
契约编程(未正式采纳) C++20
异常概念化 C++20

6. 并发与多线程

问题 版本 笔记链接 网络链接
std::thread C++11
互斥量(mutex) C++11
条件变量 C++11
future/promise C++11
原子操作库 C++11
共享锁超时 C++14
泛型原子操作 C++14
读写锁(shared_timed_mutex) C++14
并行算法(std::execution) C++17
scoped_lock C++17
共享指针原子操作 C++17
文件系统库 C++17
协程支持 C++20
信号量(counting_semaphore) C++20
屏障(barrier) C++20
jthread(自动join) C++20
原子等待 C++20

7. 标准库关键组件

问题 版本 笔记链接 网络链接
智能指针 C++11
std::function/std::bind C++11
正则表达式 C++11
哈希容器 C++11
随机数库 C++11
自定义字面量 C++14
编译时整数序列 C++14
std::optional C++17
std::variant C++17
std::any C++17
std::string_view C++17
并行算法 C++17
std::span(无所有权视图) C++20
std::format(格式化) C++20
范围库(Ranges) C++20
日历与时区 C++20

8. 编译时计算

问题 版本 笔记链接 网络链接
constexpr函数 C++11
常量表达式基础 C++11
constexpr扩展(分支/循环) C++14
变量模板的constexpr C++14
if constexpr C++17
constexpr lambda C++17
内联变量编译时初始化 C++17
consteval(立即函数) C++20
constinit C++20
编译时虚函数 C++20
编译时容器(std::vector) C++20

9. 初始化演进

问题 版本 笔记链接 网络链接
构造函数初始化列表 C++98/03
值初始化 C++98/03
统一初始化({}语法) C++11
std::initializer_list C++11
列表初始化优先级 C++11
指定初始化(Designated Initializers) C++20
聚合初始化扩展 C++20

特性

nullptr替代 NULL
引入了 auto 和 decltype 这两个关键字实现了类型推导
基于范围的 for 循环for(auto& i : res){}
类和结构体的初始化列表
Lambda 表达式(匿名函数)
std::forward_list(单向链表)
右值引用和move语义
无序容器和正则表达式
成员变量默认初始化
智能指针等
线程库,原子库,锁和条件变量

问题 笔记链接 网络链接
指针与引用区别
智能指针
析构函数什么时候调用
实际运行中泄漏如何快速定位
开销大的话,用线程池不就能解决吗?
开销是指什么?你觉得线程池需要做哪些管理?
C++ 空类的大小?一个只包含int 变量的空class和只包含int变量的空struct的内存各占多大?
为什么一般构造函数定义为虚函数?析构函数不定义为虚函数?
static的作用(作用域限制)
extern的作用(作用域扩展)
C++ sort()函数实现
C ++, Python 哪一个更快?
编译型语言和解释型语言有没有了解过
堆内存和栈内存有什么区别
局部变量是放在堆还是放在栈里面?
链表跟数组有哪一些区别?
数组怎么动态扩容?
协程与我们普通的线程有什么区别?
协程的的通讯有哪些方式?
常规的多线程开发需要注意哪一些问题?
读写共享变量会遇到什么问题?
什么是死锁?
如何避免出现死锁,怎么排查?
缓存设计有哪些方案
shared_ptr的原理
多线程怎么保证引用计数的安全的
常见的锁有哪些
valotile关键字的用处
对new和malloc的理解
new是在内存上哪一块去分配的内存
如果new内存失败了会是怎么样?
析构函数为什么通常是会做成一个虚函数呢
线程和进程有什么区别
右值引用有什么作用
智能指针
在哪些场景下会应用智能指针
如果遇到内存泄漏这种问题,你一般是怎么去解决
class中缺省的函数
sort函数内部是什么
快排的原理
为什么选快排
多线程锁是什么
红黑树是什么?
什么是公平锁和非公平锁?
写代码中用到并发吗?
Git用过吗?Git上有敏感数据吗?比如说docker-compose中有敏感信息,你怎么来管理?
知道测试开发是怎么做的吗?
你用过线程池吗? 谈谈线程池的好处?
在这个项目中线程池参数怎么配置的?
说说 MVC?
存字符串用unordered_map还是用map好?为什么?要怎么优化?
垃圾回收算法有哪些?
对面向对象的理解
  • 计算机网络

    问题 笔记链接 网络链接
    不同地区的用户的请求怎么打到附近的地区呢?
    一条url请求页面的执行过程
    访问一个网站流程,从http方面
    输入网址后发生了什么?
    介绍一些osi七层模型
    tcp和udp哪层
    数据链路层有哪些协议?
    网络代理正向和反向区别?

    TCP

    问题 笔记链接 网络链接
    UDP和TCP区别
    TCP 工作流程 三次握手 四次挥手
    TCP 流量控制、拥塞控制
    知道ip和port就可以生成tcp连接吗?连接建立的具体流程
    计算机网络-TCP的可靠性和顺序性怎么实现的
    计算机网络-怎么进行流量控制的?
    TCP是如何保证可靠的?
    流量控制是使用什么数据结构来实现的?
    分块传输
    nagle算法是为了发送大数据块,数据块是越大越好吗?
    UDP 怎么改造变为可靠传输?
    TCP的close_wait在哪端,如果我们场景中出现了大量的close_wait,你觉得要怎么排查
    TCP粘包问题怎么解决
    如果使用特殊标记解决会遇到什么问题
    TCP连接中间会有什么操作
    TCP 三次握手、四次挥手的过程?
    为什么要三次握手、四次挥手?
    流量控制和拥塞控制的原理
    TCP是如何建立连接的
    TCP拆包沾包原因
    TCP 和 UDP 的区别、TCP 是如何保证可靠传输的?

    IP

    HTTP

    问题 笔记链接 网络链接
    HTTP状态码有哪些?
    HTTP1.0和2.0的区别,或者2.0和3.0的区别?
    HTTP/2 有什么缺陷?
    http协议的报文的格式有了解吗?
    HTTP和HTTPS有什么区别?
    怎么去使用这些加密算法?
    http和https的区别
    为什么有HTTP协议了?还要用RPC?
    http和https有什么区别?

    Linux

    问题 笔记链接 网络链接
    你能简单说一下里操作系统保护模式和实模式,区别在哪
    虚拟内存,它的内存布局大概是什么样子的
    怎么申请堆空间
    malloc 是一个系统调用么
    栈空间地址增长顺序(从低到高还是从高到低)
    操作系统-死锁怎么产生的
    操作系统-怎么避免死锁
    操作系统-pageCache是什么
    在并发编程时,在需要加锁时,不加锁会有什么问题?
    如何避免出现死锁?
    一个操作系统,我们在衡量它的内存占用的时候,它一般会有哪些内存的部分?
    主机的内存做一些清理的动作。你知道这里面会涉及到对哪些内存区域进行操作吗?
    线程和进程的区别?使用线程的心得?
    select、poll、epoll区别
    epoll 具体工作流程
    零拷贝
    IO特别密集时epoll效率还高吗
    讲一讲ET模式
    LINUX有哪些IO机制?
    select poll epoll,底层实现有什么区别?
    守护线程是什么意思?
    信号量的工作原理是什么?
    操作系统是如何实现 PV 操作的呢?
    Linux操作过吗?说一说常见的指令
    进程间的通信方式?管道模型的分类?
    有一个请求队列,有读者线程和写者线程 在同时操作这个共享的请求队列,属于什么样的读写模型 ?
    一写多读模型的情况下怎么解决读写冲突的问题?加锁是一种方案,但是影响性能,有没有更好的办法?
    select和epoll有什么区别?
    epoll中可以无限承载socket的连接吗?创建socket时的返回值是什么?
    fd在系统中有限制吗?可以无限申请吗?
    一个服务端进程最多可以和多少个客户端进行连接?和fd的数量有关吗?
    epoll可以解决这个问题吗?如果要识别这个问题,怎么识别?
    linux进程创建线程的流程是怎么样的?
    线程共享进程的资源在linux中是怎么实现的?
    什么是协程?协程有什么用?
    内核态和用户态区别?内核态的底层操作有什么?为什么要分两个不同的态?
    进程开辟虚拟空间有哪些段?都用什么用?
    栈里面放什么信息?
    进程上下文切换是什么?

    从 a 文件 copy 到另外一个目录, b 作为一个从 a 目录 copy 到一个 b 目录这样的一个文件,操作过程中间包含了哪些系统调用?这里面执行了多少次拷贝的动作?

    假设这样一个场景,客户端在和服务端进行TCP的三次握手的过程中,突然间客户端宕机了,那么这个socket怎么处理?可以删除吗?是怎么删除的? 在服务端调用accept()之后,socket就是一直可读的吗?就是调用read()函数就一直可以读吗?会阻塞吗? 如果服务端read()函数发生了阻塞,对方客户端异常关闭了,一直没有发数据过来,服务端会一直阻塞吗?会导致服务端卡死吗? 线程有自己私有的栈,那么这个栈的内存是被分配到哪里的?是放在进程所属的内存里面,还是说放在独立于进程外部的内存中?

    MySQL

    问题 笔记链接 网络链接
    MVCC 概念?如何实现?
    可重复读概念
    可重复读下,快照是在什么时候生成的,是事务启动时,还是语句执行前
    可重复读下,执行两个select语句,会生成几个快照?
    MySQL 常见的存储引擎是哪个?他的索引有哪些
    InnoDB 它如果是存储一张表的话它是怎么去存储的
    说一下数据库隔离级别。
    这个读可重复读和那个读提交这两个有什么区别
    MySQL-原子性怎么实现的
    MySQL-持久性是怎么实现的
    MySQL联合索引
    MySQL表里的数据很多,如何加快数据的查询?
    索引是怎么实现的?为什么它就能加快查询的?
    B+树具体实现?
    B+和红黑树,B树的区别
    我们什么时候会用到事务?
    一起成功,一起失败的原子性怎么保证的
    现在已经插入一条数据,接下来修正另外一条数据。被查入的数据在这个时候能够被查询到吗?
    一般有哪些隔离级别
    可重复读,已提交读,这两个隔离级别表现的现象是什么,区别是什么样的?
    数据管理里,数据文件大体分成哪几种数据文件?
    日志文件是分成了哪几种?
    说下MVCC机制的原理?
    hash索引的时间复杂度是o1,那为什么我们一般情况下不使用哈希索引,而使用b+树索引呢?
    对一个慢sql怎么去排查?
    索引字段是不是建的越多越好?
    说一下数据库事务的四大特性
    char和varchar的区别
    说一下外键约束
    说一下binlog
    说一下分库分表
    遇到过数据库死锁吗
    MySQL事务用过吗,应用场景是什么
    假如是跨行转账怎么解决事务
    先说说单库事务,事务的4个基本特性
    一致性指的是什么
    隔离级别有哪几种
    可重复读是是什么意思,怎么实现的
    可重复读具体实现细节
    MySQL binlog,redolog和undolog的区别
    binlog和redolog做数据恢复的区别
    MySQL常见的性能优化方式
    加了索引之后,插入速度跟那个读的速度有什么区别?
    说说MySQL的索引
    说说事务,什么是ACID,什么是一致性
    说说分布式事务的一致性
    mysql的事务是什么
    可重复读和已提交读隔离级别表现的现象是什么,区别是什么样的?
    数据文件大体分成哪几种数据文件?
    mysql日志文件是分成了哪几种?
    介绍一下MySQL的索引机制
    什么是聚簇索引?
    什么是覆盖索引?
    整个索引查询的过程是怎样的?
    事务的隔离级别有哪些?
    脏读、幻读、不可重读分别是什么意思?
    InnoDB 多版本并发控制的具体原理,底层细节?
    next Key是什么,怎么实现?
    索引失效的场景有哪些,你知道什么改进方法吗?
    提交事务的一整个过程,每个日志都是怎么工作的?
    看你项目上有用到雪花算法,你为什么要使用雪花算法?
    那你还了解别的生成主键的策略吗,你觉得他们能代替雪花算法吗 Leaf UidGenerator
    数据库的索引
    为什么采用B+树索引,它有什么优点
    数据库中事务可能带来的问题
    通过什么隔离级别解决这些问题
    mysql的隔离级别是什么?mysql是如何实现的?
    事务的隔离级别有哪些
    说说mysql的事务隔离级别有哪几种?
    说说 mvcc 机制?
    mvcc 会加锁吗?
    mvcc 解决了幻读吗?
    mysql 默认的隔离界别是可重复读,那是如何保证可重复读的呢?
    读已提交又是啥啊, 怎么保证的?
    说说你对索引的理解?
    联合索引在b+树怎么表示的?在对数据排序时,什么时候会根据第二个字段排序?
    索引底层数据是有序排序的,你知道它是怎样有序排序的原理吗?
    一条sql语句执行很慢,你怎么排查?
    如果 SQL 和索引都没问题,查询还是很慢怎么办?
    如果是在mysql 的话,你怎么写分页语句的?
    深分页如何优化?
    导致索引失效有哪些?
    模糊查询是哪些情况导致索引失效啊?
    为什么左模糊和全模糊查询会失效啊?
    一条语句,问怎么加索引比较好?
    什么是联合索引 ?
    mysql的四种隔离级别?
    什么是脏读、幻读、不可重复读?
    mysql的innodb如何避免不可重复读?
    mysql事务特性是什么?
    MySQL的行级锁有哪些?
    mysql 有哪些索引?
    mysql为什么用 b+树索引?
    为什么索引数据结构不用hash?
    组合索引是什么?优点?

    如说你创建一个索引的话,比如一个字一个表里面有 a b c 三个字段,对 b 和 c 这两个字段去做一个索引,顺序的话是先 b 或后 c,那这时候我需要去查 c 这个字段能用上这个索引么?

    or 一定会导致索引失效吗?,分析例如 where a = 1 or b = 1, 三种情况,a和b是联合索引,a是主键索引 b不是索引,a不是索引,b是主键索引

    Redis

    问题 笔记链接 网络链接
    redis 优点、场景
    redis 为什么快?
    持久化
    分布式锁的实现和四个特性
    一条语句可以完成加锁操作吗?
    同一个用户id两次加锁会怎么样?发生死锁了怎么解决?
    Redis-怎么持久化的数据
    Redis-集群是怎么做的?就是数据怎么分片的
    然后它的集群的高可用是什么?
    怎么部署的,这个有没有了解过?
    Redis怎么实现分布式锁
    NoSQL和关系型数据库的区别
    Redis有哪些数据类型
    map怎么扩容,扩容时会影响缓存吗
    扩容时访问key怎么处理?
    跳表结构了解吗
    和二叉树有什么区别,从时间复杂度和空间复杂度分析
    Redis在架构中会起到什么作用?
    说说Redis的底层数据结构
    ZSet底层数据结构
    还了解其他底层数据结构吗
    微博上的热度排行榜用什么数据结构
    Zset,讲了讲zrangebyscore
    rehash的过程讲一下
    迁移过程中老表是什么时候释放,怎么知道老表可以释放了
    Redis中有遇到并发竞争问题吗?
    分布式锁的实现是怎么样的?
    为何采用 redis 分布式锁啊,redis 分布锁有啥好处?
    redis有哪些基本数据结构?
    你了解过 redis 持久化机制?
    说说缓存击穿?
    介绍一下redis数据库?
    redis为什么更快?
    redis 怎么实现持久化的? AOF 日志 RDB 快照
    redis单线程在多核机器里使用会不会浪费机器资源?
    redis 执行命令还是单线程,那如何利用多核心来提升性能?
    redis缓存穿透、缓存击穿、缓存雪崩是什么?怎么解决?
    怎么用redis分布式锁?

    nginx

    问题 笔记链接 网络链接
    了解Ngnix原理吗,Ngnix IO模型是什么

    分布式

    问题 笔记链接 网络链接
    分布式-分布式事务是什么
    分布式-paxos和raft的区别
    为什么就是分布式的共识算法都需要要求多数派提交才能完成它的分布式一致性?

    中间件

    问题 笔记链接 网络链接
    使用消息中间件降低消息持久化的压力是怎么做的,为什么可以降低?
    怎么解决消息队列上的消息堆压?

    场景题

    问题 笔记链接 网络链接
    设计一个线程池
    LRU 缓存设计
    每隔1s调用一个会panic然后之后会recover的函数
    一致性哈希相关
    手写LRU

    思考题

    问题 笔记链接 网络链接
    抛硬币,先抛到正面算赢,否则轮流抛。问先抛的人获胜的概率。
    屋里四盏灯,屋外四个开关,屋外看不到屋里,怎样只进屋一次,就知道哪个开关控制哪盏

    算法题

    问题 笔记链接 网络链接
    Top K问题 如何实现热搜排行榜
    追问:用大顶推还是小顶堆
    追问:插入数据时结构变化
    寻找峰值
    合并两个有序数组
    打印圣诞树
    最长回文串
    根据前序中序恢复二叉树
    合并两个有序链表
    表内指定的区间反转
    链表判断相交
    写一个数据库的多表联查问题
    10w个字的文章,都是小写字母,求其中出现次数最多的字母
    有序数组循环位移之后,查找target数字的索引,不存在返回-1
    验证对称二叉树
    岛屿数量
    问题 笔记链接 网络链接
    用到过哪些加密算法?
    对称和非对称的加密算法的区别,具体讲讲非对称

    项目

    问题 笔记链接 网络链接
    性能调优是怎么做的?
    你觉得你的这个项目性能瓶颈在哪里?
    项目你自己做的吗?开源了吗?
    自我介绍+项目介绍
    就你负责比较多的项目详细说说,项目背景,data模型,流程,难点和挑战
    讲讲项目后端用到的技术栈,比如mq,rpc,缓存啥的
    消息队列用过吗,业务场景?
    怎么保证消息的有序性?
    protobuf了解吗
    说一下代码里使用异步的思路
    对于一个后端服务怎么提升性能

    反问

    问题 笔记链接 网络链接

    技巧

    面试的回答的时候,最好先抛出结论,再举例子,而不是先举例子,再说结论。因为面试其实说的是关键词,只要你说的几个技术词,命中了面试官心里的预期,他就会认为你知道这个知识的了。

    简历项目

    出差

    2022.02 河北廊坊 语音播报音量 吉林延边 4G模块 4G降到2G然后不恢复

    设备状态自检

    背景

    成果

    降低人力成本