京东
1、进程与线程的区别?
- 一个进程至少拥有一个线程,进程可以根据需要创建其他进程,也可以创建若干个线程。而线程虽然可以创建其他线程,但是不能创建进程。
- 进程是个拥有资源的独立单位,而线程本身基本不拥有资源(只含有必不可少的资源,比如TCB和栈)。
- 在通信方面进程中所有的线程共享该进程的所有资源在通信方面进程中所有的线程共享该进程的所有资源,并驻留在同一地址空间,访问相同的数据。但是进程只能通过同步,互斥来实现对共享资源的访问
- 从调度的角度,在引入线程的操作系统中,线程是调度和分派的基本单位,进程是资源分配的基本单位。在同一个进程中,线程的切换不会引起进程的切换,只有在进程中一个线程切换到另一个进程的线程中的时候,才会引起进程的切换。
- 从系统开销来说。在创建和撤销进程的时候,操作系统所付出的时间和空间开销将远远大于重建或者撤销线程的开销
2、HTTP和HTTPS的区别?
HTTPS 协议(Hyper Text Transfer Protocol Secure),HTTPS 是基于 HTTP 的,用 TCP 作为底层协议,并使用 SSL/TLS 协议用作加密和安全认证。
SSL/TLS 的核心要素是非对称加密。非对称加密采用两个密钥——一个公钥,一个私钥。在通信时,私钥仅由解密者保存,公钥由任何一个想与解密者通信的发送者(加密者)所知。可以设想一个场景,
数字签名,是 CA 在给服务器颁发证书时,使用散列+加密的组合技术,在证书上盖个章,以此来提供验伪的功能。
3、了解TCP吗?谈谈三次握手的流程?
https://blog.csdn.net/qzcsu/article/details/72861891
测试双方 收发功能是否可用
- TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
- TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
- TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
- TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
- 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
4、了解操作系统吗?进程调度的方式?
- 先到先服务(FCFS)调度算法 : 从就绪队列中选择一个最先进入该队列的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。
- 短作业优先(SJF)的调度算法 : 从就绪队列中选出一个估计运行时间最短的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。
- 时间片轮转调度算法 : 时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法,又称 RR(Round robin)调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。
- 多级反馈队列调度算法 :前面介绍的几种进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程 。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。,因而它是目前被公认的一种较好的进程调度算法,UNIX 操作系统采取的便是这种调度算法。
- 对于同一个队列中的各个进程,按照FCFS分配时间片调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列末尾,直至完成。
- 优先级调度 : 为每个流程分配优先级,首先执行具有最高优先级的进程,依此类推。具有相同优先级的进程以 FCFS 方式执行。可以根据内存要求,时间要求或任何其他资源要求来确定优先级。
5、了解哪些IO模型?
UNIX 系统下, IO 模型一共有 5 种: 同步阻塞 I/O、同步非阻塞 I/O、I/O 多路复用、信号驱动 I/O 和异步 I/O。
- 阻塞I/O模型 (Blocking I/O):应用进程对一个套接字的read操作,应用进程会进行系统调用,如果此时内核没有数据,该应用进程会一直被阻塞,这段期间什么事都做不了,干等数据,直到数据从内核缓冲区复制到应用进程缓冲区才返回。
- NIO: 进程发起IO系统调用后,系统返回一个错误码而不会被阻塞。应用进程可以继续执行,但是需要不断的执行系统调用来获知IO是否完成。如果内核缓冲区有数据,内核就会把数据返回进程。虽然应用进程每次发起I/O请求可以立即返回,但是为了等到数据,需要不断地请求,会消耗大量的CPU资源。
- AIO: 当进程发起一个IO操作,进程返回不阻塞,但也不能返回结果;内核把整个IO处理完后,会通知进程结果。如果IO操作成功则进程直接获取到数据。它跟信号驱动I/O类似,都是事件有响应时,内核通知应用进程可以进行I/O了。但是异步I/O是将I/O操作交给内核,当内核做完(拷贝操作)后就去通知应用进程。
6. 了解滑动窗口吗?
TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
TCP 的拥塞控制作用于网络的,采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。
作者:代码界的小白 链接:https://leetcode-cn.com/circle/discuss/KLnm9d/