算法与基础

1.计算机基础

进程和线程

进程:程序运行后,代码+用到的资源称之为进程,它是操作系统分配资源的基本单元。
线程(英语:thread):是操作系统能够进行运算调度的最小单位。包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

并行与并发

并行:多个CPU同时执行多个任务,比如两个程序,这两个程序在两个不同的CPU内同时被执行。
并发:CPU交替处理多个任务,还是有两个程序,但是只有一个CPU,会交替处理这两个程序,而不是同时执行,只不过因为CPU执行的速度过快,而会使得人们感到是在“同时”执行,执行的先后取决于各个程序对于时间片资源的争夺。

三次握手/四次挥手

三次握手——建立TCP连接
1)客户进程发出连接请求,此时首部同步为SYN=1,同时选择一个初始序号seq=x,客户进程进入SYN_SENT(同步发送)状态;
2)服务进程接收到客户进程发送的连接请求报文段,如果同意建立连接,在确认报文段中SYN=1,ACK=1,同时选择一个初始序号seq=y,服务进程进入SYN_RCVD(同步接收)状态;
3)客户进程收到服务进程的响应后,再次给出确认,发送ACK=1,序号seq=x+1,确认序号ack=y+1,此时可以携带数据,此时客户进程进入ESTABLISHED(已建立连接)状态。

四次挥手——释放TCP连接
此时客户进程和服务进程都处于ESTABLISHED状态。
1)客户进程主动关闭TCP连接,连接释放报文段的终止控制位FIN=1,客户进程进入FIN-WAIT1(终止等待1)状态,等待服务进程连接释放确认;
2)服务进程收到客户进程的连接释放报文段,发出确认报文段,然后服务进程进入CLOSE-WAIT(关闭等待)状态,此时客户进程到服务进程这个方向的TCP连接被释放,TCP连接处于半关闭状态(HALF-CLOSE),即客户进程不会向服务进程发送数据
3)客户进程收到服务进程的确认报文段后进入(FIN-WAIT2)终止等待2状态,等待服务进程发出连接释放报文段;
4)若此时服务进程没有数据要发送,则服务进程发出连接释放请求,服务进程进入LAST-ACK(最后确认状态),等待客户进程确认;
5)客户进程收到服务进程的连接释放请求,服务进程进入CLOSED状态
6)服务进程收到客户进程的确认报文段后进入CLOSED 状态;

死锁 活锁 饥饿

死锁:死锁是指多个进程相互等待,互不相让,导致所有进程无限期等待
活锁:每一个进程需要两个资源并使用try_lock()试图获取锁,进程A获得了资源1,进程2获得了资源2,接下来,它们分别试图获取另一个锁但都失败了,于是它们分别释放当前持有的锁,然后再试一次,这个过程会一直重复,就像两个人在一条路上相遇并同时给对方让路一样,相同对步调将导致双方无法前进
饥饿:一些进程永远无法获得运行机会,导致饿死。比如在打印机总是先打印最小文件的进程,那么大文件就可能因为不断需要打印对小文件而无法运行导致饿死。

时间与空间复杂度

时间复杂度
时间复杂度的大小关系
内层执行次数最多的语句就是算法的复杂度,for是n,while是log(n)

空间复杂度:指算法在计算机内执行时所需存储空间的度量,就是看创建了多少次,复杂度就是多少。

TCP/UDP的异同

都是传输层协议
TCP是面向连接的
TCP效率低,UDP效率高
TCP是全双工的,UDP不是
TCP传输速度慢,UDP传输速度快
TCP面向字节流,UDP面向报文

http/https的区别

https是在http的基础上调用ssl协议来加密内容

http返回码

1xx 消息
2xx 成功
3xx 重定向
4xx 客户端错误
5xx 服务器错误

2.Python

Python的闭包

闭包是指函数内部嵌套函数,内部的函数可以改变外部函数的值

python全局锁(GIL)

即全局解释器所(global interpreter lock),每个线程在执行时候都需要先获取GIL,为了保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用CPU,也就是说多线程并不是真正意义上的同时执行。
通过加锁,可以解决多线程之间数据完整性和状态同步, 有了GIL这把锁,就可以保证同一个时刻只允许一个线程使用cpu。

3.C语言

c++的左值和右值

左值通常是地址,右值为地址所存的数值数据

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章