linux下的五种网络IO模型以及select/poll/epoll区别

前提知识:了解同步/异步,阻塞/非阻塞

参考:聊聊同步、异步、阻塞与非阻塞

正题:5种IO模型

  1. 同步阻塞
  2. 同步非阻塞
  3. 异步IO
  4. IO多路复用
  5. 信号驱动IO

参考:聊聊Linux 五种IO模型

select/poll/epoll区别

select, poll,以及epoll都是多路复用。

配合视频享用更加

这里插入我们的pdf图。。

场景:设计一个高性能的网络服务器,可以向多个客户端提供同时连接,并且可以处理这些客户端的请求。如何设计呢?

redis知识汇总

redis就数据结构 单线程 高可用 缓存应用 reidis 数据结构!> redis中键的类型是字符串,值的数据类型有很多 字符串 列表 字典 集合 有序集合 bitmap hyperloglog geospatial stream(5.0推出的数据类型。支持多播的可持久化的消息队列,用于实现发布订阅功能,借鉴了kafka的设计。 对应的底层实现: 字符串: embstr...
redis

进程,线程与协程区别和联系

!> 很多题目还没有完善,之后会慢慢补充并完善……

进程概念

进程:正在执行程序的一个实例,是资源分配的基本单位。(进程控制块(process control block)描述进程的基本信息和运行状态,所谓的创建和撤销进程,都是指对PCB的操作)

线程概念

线程:进程中的单条流向,是程序独立调度的基本单位。(线程控制块(process control block)描述线程的基本信息和运行状态,所谓的创建和撤销线程,都是指对TCB的操作)

协程概念

协程可以理解为用户态的线程,其实就是可以被暂停以及可以被恢复运行的函数。虽然线程也可以自己暂停和恢复,只不过线程的调度是操作系统实现的,这些对程序员都不可见,而协程是在用户态实现的,对程序员可见。这就是为什么有的人说可以把协程理解为用户态线程的原因。
参考

OS

二叉树的序列化与反序列化

前言

序列化:二叉树被记录成文件的过程叫做序列化

反序列化:通过文件内容重建原来二叉树的过程叫做反序列化

go中的heap实现大根堆与小根堆

小根堆

几个注意点:

  1. 因为heap需要我们实现sort接口(3个方法,Less,Swap,以及Len)我们使用Less比较的时候决定了大根堆或小根堆
  2. push以及pop因为涉及到切片中元素个数的改变,可能进行扩容或缩容,所以要使用指针
  3. Push以及Pop的实现就按照对切片的处理即可
  4. 之后初始化我们的堆的时候需要先建立我们自己的堆,然后使用heap.Init()初始化
  5. 后面堆要弹出或加入元素都必须使用heap.Push()以及heap.Pop()

面试问题之Top K系列

思路整理:

内存泄漏与内存溢出

内存泄漏与内存溢出:

前缀树

前缀树的结构: 结点的话本身不存储任何单词,它只存它要去到下一个路径上面这个路径代表的字符。 基本性质 结点本身不存储完整的单词。 从根节点到某一结点,路径上经过的字符连接起来,为该节点对应的字符串。 每个节点的所有子节点路径代表的字符都不相同。 走过的边就形成了单词 前缀树中的单词可以存储额外的信息,例如频次,后续的话我们就可以给用户做相应的推荐, 因为每个节点后面都有26个可能的字...

单工通信,半双工通信,双工通信

1. 单工通信(simplex)只有一个信道不可改变方向 单工通信只支持信号在一个方向上传输(正向或反向),任何时候不能改变信号的传输方向。为保证正确传送数据信号,接收端要对接收的数据进行校验,若校验出错,则通过监控信道发送请求重发的信号。 应用:此种方式适用于数据收集系统,如气象数据的收集、电话费的集中计算等。例如计算机和打印机之间的通信是单工模式,因为只有计算机向打印机传输数据,而没有相...

描述输入url到页面呈现的整个过程

大致过程客户端获取URL - > DNS解析 - > TCP连接 - >发送HTTP请求 - >服务器处理请求 - >返回报文 - >浏览器解析渲染页面 - > TCP断开连接 详细文字讲解客户端: (应用层开始)获取URL,通过负责域名解析的DNS服务获取网址的IP地址,根据HTT协议生成HTTP请求报文(应用层结束) (传输层开始)根据TCP协...