1、go调度器:GMP模型,线程运行是goroutine的实体,调度器的功能是把可运行的goroutine分配到工作线程上。
(1)我们通过go func()来创建一个goroutine
(2)有两个存储G的队列,局部调度器P的本地队列,一个是全局G队列。新建的G会保留在P的本地队列,如果P的本地队列满了就保留在全局中。
(3)G只能运行在M中,一个M必须有一个P,M与P是1:1的关系。
(4)一个M调度G的过程,必须是一个循环机制;
(5)当M执行一个G如果发送syscall和阻塞,M会阻塞,如果当前有一部分G,runtime把M从P中摘除,再新建服务这些P;
(6)当M系统调用结束时候,这个G会尝试获取一个空闲的P执行,并放入到这个P的本地队列。
TCP协议之握手和挥手:TCP是一种面向连接的,可靠的,基于字节流的传输层通信协议,是端到端的传输,TCP提供稳定的链接服务,连接三次握手进行初始化的,又因TCP是双工模式,所以需要四次挥手关闭连接。
第一次握手:建立连接时,由客户端发送Sync包到服务端,并进入SYN_SEN状态,等待服务端确认;
第二次握手:服务端收到Sync包,确认客户端的Sync包,再给客户发送一个Sync包,进入SYN_RECV状态,等待客户端接受确认;
第三次握手:客户端接到服务端的Syn+ack包,向服务端发送确认包ack,之后客户端和服务端都进入ESTABLISH状态,表示TCP连接成功,即完成三次握手。
四次挥手,终止TCP连接,就是指断开一个TCP连接时需要客户端和服务端一共4个包确认链接的断开,双端都发送Fin包,首先关闭一方主动关闭,另一方则被动关闭。
第一次挥手:客户端发出连接释放报文Fin包,并停止发送数据,客户端进入FIN-WAIT-1状态。
第二次挥手:服务端接收到释放报文,发出确认ACK包,服务端进入CLOSE-WAIT。
第三次挥手:服务端将最后的数据发送完毕,向客户端发送释放报文Fin包,服务端进入LAST-ACK状态。
第四次挥手:客户端接收到服务端的连接释放报文,必须发出确认,客户端进入TIME-WAIT状态。此时TCP链接还没有释放,需经过2*MSL(最长报文寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
服务端收到客户端的确认即进入CLOSED状态。
切片:是数组连续片段的引用,结构体包含数组的指针,数组的量和容量。
切片的扩容就是append,如果在容量之内就append;超过了容量底层数组会复制到新的数组上去,容量扩充2倍,再append。
锁:保证线程安全,主要针对多个线程对一个全局变量修改,如果涉及读写用读写锁更好。
Mysql索引底层原理:B+树存储的是数据的地址,一个节点可以存很多个数据,算法复杂度O(h*logn),大大减少了磁盘IO的读写次数。



