一、TCP分片和UDP分片
1、为什么?
数据报太大,拆分成小数据包
2、怎么做?
(1)TCP分片是在传输层
如果在IP层分片,如果当一个IP包丢失,那么整个IP报文的所有分片都得重传
TCP是由超时重传机制,重传丢失的TCP报文
(2)UDP是在IP层
UDP传输不可靠
二、第二次握手丢失情况
重传5次
客户端角度
认为第一次握手SYN报文丢失或者第二次握手ACK-SYN报文,会重传SYN请求连接报文
服务器角度
没有收到第三次ACK报文,认为第二次握手ACK-SYN报文或者第三次ACK丢失,会重传第二次握手ACK-SYN报文
三、进程的上下文切换
实际上linux内核中,进程上下文包括进程的虚拟地址空间和硬件上下文
1、是什么?
分配CPU资源的一个过程,一个运行的进程切换到另外一个进程去运行
2、为什么?
为了使得计算机能够并发执行多个进程
3、怎么做?
先保存当前进程的PCB状态,再加载下一个进程的PCB状态
四、线程池
线程池参数、线程池拒绝策略和等待队列类型之间的关系
拒绝策略
- 直接抛弃
- 抛弃最老的
- 丢弃抛异常的
- 当前线程直接执行
五、MySQL日志
binlog、redo log、undo log
binlog(归档):记录对数据库进行修改的更新操作,用于数据库的同步和恢复(比如主从数据库之间使用bin log进行同步),只在事务结束时写入
redo log(重做):记录InnoDB引擎的事务,保证事物的持久性,执行过程中会不断写入
undo log(回滚):undo log会记录数据的版本,可以实现事务的回滚,回滚到某个版本的数据,实现MVCC
六、主从复制
1、是什么?
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表
2、为什么?
- 读写分离
- 数据的实时备份
- 高可用
3、怎么做?
增量发送
主节点接收到来自从节点的I/O请求后,通过负责复制的I/O进程(log dump 线程)根据请求信息读取指定日志指定位置之后的日志信息,返回给从节点。返回信息中除了日志所包含的信息之外,还包括本次返回的信息的bin-log file 的以及bin-log position(bin-log中的下一个指定更新位置)
七、死锁问题
1、什么是死锁?
死锁是指两个或以上进程在执行过程中,由于资源竞争造成的一种阻塞现象,若无外力作用,将一直阻塞下去。我们称这种现象为系统产生了死锁或者系统处于死锁状态
2、产生死锁的原因有哪些?
- 系统资源不足
- 程序执行顺序不当
- 资源分配不当
3、产生死锁的必要条件
互斥条件
一个资源只能被一个进程使用
请求与保持条件
请求资源阻塞时,对已获得的资源并不释放
不剥夺条件
进程已获得的资源,除非自己释放,否则不能被剥夺
循环等待条件
进程之间形成一种头尾相接的资源等待关系
4、如何解决死锁?
在系统设计、进程调度等方面注意不要让四个必要条件成立,确定合理的资源分配算法、防止进程处于等待状态下占用资源
八、TCP协议如何保证可靠传输
https://segmentfault.com/a/1190000022944999
通过下面几种机制共同保证可靠传输
1、数据块划分
应用数据被划分为TCP认为合适发送的数据块
2、数据排序
TCP会对每个数据进行编号,接收端对收到的数据进行排序,将有序的数据传给应用层
3、校验和
发送端和接收端分别计算数据的数据的校验和,如果数据有差错就丢弃
4、数据包去重
丢弃重复接收的数据
5、超时重传
当TCP发出一个段后,会启动一个定时器,等待接收方会送确认报文,如果不能及时收到一个确认就重传
6、流量控制
连接双方都有固定大小的缓冲区,接收端只允许发送端发送接收段缓冲区大小的数据,当接收方来不及处理发送方发送的确认数据时候,会提示发送方降低发送速率。TCP使用滑动窗口协议实现流量控制
7、拥塞避免
- 慢开始
- 拥塞避免
- 快重传和快恢复
8、ARQ协议
发送完一个分组就停止等待确认报文,收到确认报文后在发送下一个分组数据
九、Redis为什么这么快?
https://juejin.cn/post/6978280894704386079
基于内存实现省去了磁盘IO的消耗
底层实现了高效的数据结构
合理的数据编码
合理的线程模型
单线程(避免了上下文切换和竞争锁的切换):是指Redis网络IO和键值对读写是由一个线程来完成的,其他诸如持久化、异步删除、集群数据同步由额外的线程执行
I/O多路复用
I/O:网络IO
多路:多个网络连接
复用:复用同于一个线程
是一种同步的IO模型,实现一个线程可以监视多个文件句柄
虚拟内存机制