2021年的N个问题

通过问题的形式完成2021年的技术领域的学习计划,每个部分最少包含5个问题,问题总数在50个左右

  • 数据结构与算法

    • 决策树是什么
    • 深度优先遍历
    • 广度优先遍历
  • 设计模式

    • 分布式的AP CP CAP什么意思
  • 缓存和数据库

    • mysql 丁奇的课程
    • redis的sentinel机制 哨兵
  • 中间件 kafka CDN

    • kafka极客时间的课程
    • 分布式锁的实现 redis
  • 编程语言 golang rust

    • golang 连接池的实现
    • golang interface 依赖倒置
    • 单元测试的最佳实践
    • go的并发编程怎么搞的
    • 仿照rosedb实现一个golang版本的kv缓存数据库
  • linux

    • I/O模型
    • 协议状态

    关闭连接过程:

    1. 客户端没有待发送的数据时,向服务端发送FIN消息,发送消息后进入FIN_WAIT_1状态;

    2. 服务端接收到FIN消息后,进入CLOSE_WAIT状态并向客户端发送ACK消息,客户端接收到ACK进入到FIN_WAIT_2状态;

    3. 服务端没有待发送数据时,服务端会发送FIN消息;

    4. 客户端接收到FIN消息后,会进入TIME_WAIT状态,并给服务端发送ACK消息,服务端收到后CLOSED;

    5. 客户端等待两个最大数据段生命周期后进入CLOSED状态。

    tcp建立连接为什么需要3次握手:

    reference

    https://draveness.me/whys-the-design-tcp-three-way-handshake/

    https://mp.weixin.qq.com/s/8WmASie_DjDDMQRdQi1FDg

    transmission control protocol 传输控制协议 用于保证可靠性和流控制机制的信息。 其中一个tcp连接包括socket、序列号和窗口大小。

    • socket由ip和端口组成
    • 窗口大小用于进行流控制
    • 序列号用来追踪数据包序号,保证不丢失。
    1. 三次握手才能阻止重复历史连接的初始化(主要)
    2. 三次握手才能对通信双方的序列号进行初始化
    3. 其他次数握手的可能性

    引入RST控制信息,发送方会判断是否为历史连接

    • 判断SEQ即序号,SEQ过期或者超时,发送方会发送RST中止连接。
    • 如果不是,发送ACK建立连接。

**三次握手把是否连接的控制权交给发送方。**

Time_Wait的作用

  1. 防止前一个连接上延迟的数据包被后面的链接复用

DNS为什么用UDP

I/O模型 多路复用

select epoll区别

– test