315道题——网络编程和并发(81~112)
第二部分 网络编程和并发
81. 简述 OSI 七层协议。
为了实现计算机系统的互连,OSI参考模型把整个网络的通信功能划分为7个层次,同时也定义了层次之间的相互关系以及各层所包括的服务及每层的功能。OSI的七层由低到高依
次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,下三层(物理层、数据链路层、网络层)面向数据通信,而上三层(会话层、表示层、应用层)则面向
资源子网,而传输层则是七层中最为重要的一层。它位于上层和下层中间,起承上启下的作用。
82. 什么是C/S和B/S架构?
C/S 架构其全称是Client/Server,即客户端服务器端架构,是一种典型的两层架构。其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务
器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信。
优点:
- C/S架构的界面和操作可以很丰富。
- 安全性能可以很容易保证,实现多层认证也不难。
- 由于只有一层交互,因此响应速度较快。
缺点:
- 适用面窄,通常用于局域网中。
- 用户群固定。由于程序需要安装才可使用,因此不适合面向一些不可知的用户。
- 维护成本高,发生一次升级,则所有客户端的程序都需要改变。
B/S架构的全称为Browser/Server,即浏览器/服务器结构。Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现,Browser客户端,WebApp
服务器端和DB端构成所谓的三层架构。B/S架构的系统无须特别安装,只有Web浏览器即可。
B/S架构中,显示逻辑交给了Web浏览器,事务处理逻辑在放在了WebApp上,这样就避免了庞大的胖客户端,减少了客户端的压力。因为客户端包含的逻辑很少,因此也被成为
瘦客户端。
优点:
- 客户端无需安装,有Web浏览器即可。
- BS架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性较强。
- BS架构无需升级多个客户端,升级服务器即可。
缺点:
- 在跨浏览器上,BS架构不尽如人意。
- 表现要达到CS程序的程度需要花费不少精力。
- 在速度和安全性上需要花费巨大的设计成本,这是BS架构的最大问题。
- 客户端服务器端的交互是请求-响应模式,通常需要刷新页面,这并不是客户乐意看到的。(在Ajax风行后此问题得到了一定程度的缓解)
83. 简述 三次握手、四次挥手的流程。
syn(syn=j)
ack(ack=j+1)syn(syn=k)
ack(ack=K+1)
FIN
ACK
84. TCP和UDP的区别?
什么时候应该使用TCP:
当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮
件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输
………… 什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如
下: QQ语音 QQ视频 TFTP
85. 为何基于tcp协议的通信比基于udp协议的通信更可靠?
三次握手,四次挥手
86. 什么是socket?简述基于tcp协议的套接字通信流程。
Socket 又称”套接字”,是系统提供的用于网络通信的方法。给程序员提供了一个发送消息的接口,程序员能使用这个接口提供的方法,发送与接收消息。Socket 描述了一个 IP,端口
对.它简化了程序员的操作,知道对方的 IP以及 port 就可以给对方发送消息,再由服务器处理发送的这些消息,Socket 包含了通信的双发,即客户端与服务端.

Socket 的通信过程
每一个应用或者服务,都有一个端口.比如 DNS的53端口(FTP 的21端口),http 的80端口.我们能由 DNS请求到查询信息,是因为DNS服务器时时刻刻都在监听53端口,当收到我们的查询请求以后,就能够返回我们想要的 IP信息.所以,从程序设计上来讲,应该包含以下步骤:
- 服务端利用 Socket 监听端口
- 客户端发起链接
- 服务端返回信息,建立连接,开始通信
- 客户端,服务端断开连接
87. 什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
服务端和客户端都会粘包
发包粘包: nagle(纳格尔)算法(把数据量较小且间隔时间比较短的包合成一个包发送)
收包: 最大字节数(一次收不完,分片收),是从缓存里面取数据,
解决粘包的问题
发包粘包:加一个固定长度的报头
收包粘包:收固定长度的报头
连续发送的数据毫无联系,不是一个数据的小部分。
88. IO多路复用的作用?
IO多路复用: 循环监听socket是否发生变化,一旦发生变化,可以自定义操作(触发某个函数的执行)
89. 什么是防火墙以及作用?
防火墙是指设置在不同网络(如可信任的企业内部网和不可信的公共网)或网络安全域之间的一系列部件的组合。 它可通过监测、限制、更改跨越防火墙的数据流,尽可能地对
外部屏蔽网络内部的信息、结构和运行状况, 以此来实现网络的安全保护。
在逻辑上,防火墙是一个分离器,一个限制器,也是一个分析器,有效地监控了内部网和Internet之间的任何活动, 保证了内部网络的安全。
极大地提高网络安全和减少子网中主机的风险。
90. select、 poll、 epoll 模型的区别?
select,poll,epoll都是IO多路复用的机制。
I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。
但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O
的实现会负责把数据从内核拷贝到用户空间。
https://www.cnblogs.com/Anker/p/3265058.html
91. 简述 进程、线程、协程的区别 以及应用场景?
92. GIL锁是什么鬼?
GIl本质是互斥锁
既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,进而保证数据安全。
典型应用: 垃圾回收机制
93. Python中如何使用线程池和进程池?
94. threading.local的作用?
这个方法的特点用来保存一个全局变量,但是这个全局变量只有在当前线程才能访问,每个线程里面都有一个单独的空间来保存这个数据,而且这个数据是隔离的,其他线程无法
访问
这个东西可以用在那些地方呢,比如下载,现在都是多线程下载了,就像酷狗那样,可以同时下载很多首歌曲,那么就可以利用这个方法来保存每个下载线程的数据,比如下载进
度,下载速度之类的
所以 如果你在开发多线程应用的时候 需要每个线程保存一个单独的数据供当前线程操作,可以考虑使用这个方法,简单有效
其实这样的功能还有很多种方法可以实现,比如我们在主线程实例化一个dict对象,然后用线程的名字作为key,因为线程之间可以共享数据,
95. 进程之间如何进行通信?
file文件:write,read
消息队列:进程Queue: 管道,put get
socket
redis
96. 什么是并发和并行?
“并行”概念是“并发”概念的一个子集。
并发:一个cpu执行多个任务
并行:多个cpu能同时执行多个任务
97. 进程锁和线程锁的作用?
保护数据安全(进程修改同一数据)
进程锁(主进程把锁传给子进程,保证是同一把锁)
98. 解释什么是异步非阻塞?
99. 路由器和交换机的区别?
交换机: 实现多台计算机的互联,任意两台计算机的通信(是根据网口地址传送信息),工作在数据链路层。
路由器: 将不同网络或网段之间的数据信息进行“翻译”(信息经协议加工成统一形式),传送出去
100.什么是域名解析?
通过DNS服务,把域名解析成IP地址,指向具体的网站服务器
101.如何修改本地hosts文件?
C:\Windows\System32\drivers\etc
102.生产者消费者模型应用场景及优势?
消息队列
解耦
支持并发:不用等待
支持忙闲不均
103.什么是cdn?
CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘",使用户可以
就近取得所需的内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问
网站响应速度慢的问题。 (也就是一个服务器的内容,平均分部到多个服务器上,服务器智能识别,让用户获取离用户最近的服务器,提高速度
104.LVS是什么及作用?
LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。
LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。
它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。
它易用,配置非常简单,且有多种负载均衡的方法。
它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。
另外可扩展性也非常好。
http://www.cnblogs.com/codebean/archive/2011/07/25/2116043.html
105.Nginx是什么及作用?
Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。
反向代理服务器: 客户访问Nginx,Nginx访问应用服务器
静态文件的处理
反向代理:负载均衡、虚拟主机等,都基于反向代理实现
负载均衡:访问量大,网站越来越慢,一台服务器已经不够用了
虚拟主机:有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。
106.keepalived是什么及作用?
keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
107.haproxy是什么以及作用?
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP代理和HTTP反向代理。
GitHub、、Stack Overflow、Twitter及亚马逊网络服务系统都使用了HAProxy。
108.什么是负载均衡?
访问量大,一台服务器不够用,网站越来越慢,把应用分布到多态服务器上,通过代理服务器,。。。。
109.什么是rpc及应用场景?
客户端发送请求:某个应用将请求信息交给客户端,然后客户端发送RPC请求,再发送RPC请求到RPC请求队列时,客户端至少发送带有reply_to以及correlation_id两个属性的信
息
服务器端工作流程: 等待接受客户端发来RPC请求,当请求出现的时候,服务器从RPC请求队列中取出请求,然后处理后,将响应发送到reply_to指定的回调队列中
客户端接受处理结果: 客户端等待回调队列中出现响应,当响应出现时,它会根据响应中correlation_id字段的值,将其返回给对应的应用
110.简述 asyncio模块的作用和应用场景。
支持异步IO, 原理就是一个消息循环,把需要执行的协程扔到这个循环中执行,就实现了异步IO。
asyncio+requests爬虫
111.简述 gevent模块的作用和应用场景。
Gevent
gevent.sleep(2)
是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet
遇到IO是会自动切换任务
greenlet
g2.switch('任务2')
虽然也是 切换+保存状态,但不是 遇到IO自动切换,只是单纯的切换
112.twisted框架的使用和应用?
twisted是一个用python语言写的事件驱动的网络框架(回调)
浙公网安备 33010602011771号