持续更新,每天三道题!
1.简述OSI 七层协议。
答:从上到下:应用层->(表示出->会话层->)传输层->网络层->数据链路层->物理层
应用层:对应应用程序的通信服务
表示层:定义数据格式及加密
会话层:定义了如何开始、控制和结束一个会话
传输层:是否选择差错恢复协议还是无差错恢复协议(TCP/UDP)
网络层:对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。(IP)
数据链路层:定义了在单个链路上如何传输数据
物理层:有关传输介质的特性,这些规范通常也参考了其他组织制定的标准。
2.什么是C/S和B/S架构?
C/S架构:client/server架构,分为服务器端和用户端,可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Serve端来实现,降低了系统的通讯开销
B/S架构:Browser/server架构,是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件
3.简述三次握手、四次挥手的流程。
三次握手:
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
四次挥手:
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
4.什么是arg协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议
5.TCP和UDP的区别?
tcp是安全可靠的协议,但是速度慢,udp速度快但是不太稳定可靠且无连接。
6.什么是局域网和广域网?
局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。
广域网(英语:Wide Area Network,缩写为 WAN),又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。
7.为何基于tcp协议的通信比基于udp协议的通信更可靠?
以为udp是无连接的,而tcp有三次握手和四次挥手
8.什么是socket?简述基于tcp协议的套接字通信流程。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口
9.什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
原因:发送方:只有上一个包被确认才会发送下一个包,会收集多个小组在一个确认到来前一起发送
接受方:如果接收速度大于程序读包的速度,多个包就会存到缓存,就会出现粘包现象
10.IO多路复用的作用?
在一个线程内同时处理多个io请求
11.什么是防火墙以及作用?
防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。
12.select、poll、epoll 模型的区别?
1.最大连接数:select:单个进程是32*32,32*64; poll:没有最大连接数; epoll:1g内存=10w
2.FD剧增后带来的效率问题: select:每次调用会对连接进行线性遍历,所以fd越多效率越差; poll和select一致;
epoll:只有活跃的socket才会调用callback函数
3.消息传递方式:内核需要将信息传递到用户空间,需要拷贝操作; poll和select一致; epoll:内核和用户空间共享内存
13.简述 进程、线程、协程的区别 以及应用场景?
多进程一般使用multiprocessing库,来利用多核CPU,主要是用在CPU密集型的程序上,多进程的优势就是一个子进程崩溃并不会影响其他子进程和主进程的运行,但缺点就是不能一次性启动太多进程,会严重影响系统的资源调度,特别是CPU使用率和负载。
多线程一般是使用threading库,完成一些IO密集型并发操作。多线程的优势是切换快,资源消耗低,但一个线程挂掉则会影响到所有线程,所以不够稳定。现实中使用线程池的场景会比较多
协程一般是使用gevent库,当然这个库用起来比较麻烦,所以使用的并不是很多。
14.GIL锁是什么?
线程锁,帮助我们保持不同线程之间的数据一致性问题。
15.Python中如何使用线程池和进程池?
concurrent.futures.ThreadPoolExecutor(max_workers)
concurrent.futures.ProcessPoolExecutor(max_workers)
# 线程池执行
start_time_1 = time.time()
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
futures = executor.submit(func, argument)
# 进程池
start_time_2 = time.time()
with concurrent.futures.ProcessPoolExecutor(max_workers=5) as executor:
futures = executor.submit(func, argument)
16.threading.local的作用?
为每个线程开辟一块独立的空间用于存储。
17.进程之间如何进行通信?
1.共享内存:mmap; 2.信号:signal; 3.管道:queue
18.什么是并发和并行?
并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。
19.进程锁和线程锁的作用?
线程锁:主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其余线程必须要等待当前线程执行完之后才能执行该代码段。
进程锁:为了控制同一操作系统中多个进程访问一个共享资源,只是因为程序的独立性,各个进程是无法控制其他进程对资源的访问的,但是可以使用本地系统的信号量控制
20.解释什么是异步非阻塞?
请求发出后做自己的事情,服务方会来通知
21.路由器和交换机的区别?
交换机发生在网络的第二层数据链路层(根据mac地址寻找),而路由器发生在第三层网络层(更具ip地址寻找)。
22.什么是域名解析?
将域名解析成ip地址
23.如何修改本地hosts文件?
本地的dns解析对照表,服务器上也是有的,一般我们访问域名时会先去访问dns服务器找到对应ip以后就可以访问我们想去的网站,位置一般是c:\windows\system32\drivers\etc
24.生产者消费者模型应用场景及优势?
当某个模块产生数据,另外一个模块处理数据时。
优势:解耦,支持并发,支持忙闲不均
25.什么是cdn?
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
26.LVS是什么及作用?
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。
作用:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.
27.Nginx是什么及作用?
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
28.keepalived是什么及作用?
是Linux集群管理中保证集群高可用的一个服务软件,其功能是用来防止单点故障。原理是vrrp协议:
VRRP协议:Virtual Route Redundancy Protocol虚拟路由冗余协议。是一种容错协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。
29.haproxy是什么以及作用?
HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
30.什么是负载均衡?
反向代理服务器接收到的请求数量,就是我们说的负载量。请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。所以,将服务器接收到的请求按照规则分发的过程,称为负载均衡。
31.什么是rpc及应用场景?
RPC(Remote Procedure Call,即远程过程调用)是建立在Socket之上的,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序
应用场景:客户端调用哪个服务器比较明确
32.简述asynio模块的作用和应用场景。
作用:异步网络操作,协程,高并发
异步操作mysql连接: asyncio + sqlalchemy
1, 创建一个全局的连接池,每个HTTP请求都可以从连接池中直接获取数据库连接。
2, 使用连接池的好处是不必频繁地打开和关闭数据库连接
33.简述gevent模块的作用和应用场景。
作用:为Python提供了比较完善的协程支持。
使用gevent,可以获得极高的并发性能,但gevent只能在Unix/Linux下运行,在Windows下不保证正常安装和运行。由于gevent是基于IO切换的协程,所以最神奇的是,我们编写的Web App代码,不需要引入gevent的包,也不需要改任何代码,仅仅在部署的时候,用一个支持gevent的WSGI服务器,立刻就获得了数倍的性能提升。
34.twisted框架的使用和应用?