Python面试网络编程和并发
1.简述 OSI 七层协议。
OSI 开放系统互联参考模型,它是理论的,参考模型
七层:物理层->数据链路层->网络层->传输层->会话层->表示层->应用层
2.什么是C/S和B/S架构?
3.简述 三次握手、四次挥手的流程。
4.什么是arp协议?
ARP (Address Resolution Protocal) 地址解析协议,就是 把 IP->MAC(你听过ARP欺骗的)
5.TCP和UDP的区别?
TCP是确认包的到达,所以不丢失包(数据),顺序也是好的。
UDP不会确认包的到达,所以可能会丢失数据包,当然顺序也有可能会乱。
除了这些以外:
1. TCP是面向连接(三次握手)的,所以稳定、可靠,那相对就慢了
比如平时的:文件传输,右键,http等用的都是tcp协议
2. UDP是面向无连接的,所以不稳定,但是相对快,实时性高
比如平时:做什么现场直播,视频通话啥的
6.什么是局域网和广域网?
局域网和广域网是按规模大小而划分的两种计算机网络。范围在几千米以内的计算机网络统称为局域网;而连接的范围超过10千米的,则称为广域网,因特网(Intenet)就是目前最大的广域网。
7.为何基于tcp协议的通信比基于udp协议的通信更可靠
TCP的可靠保证,是它的三次握手双向机制,这一机制保证校验了数据,保证了他的可靠性。而UDP就没有了,udp信息发出后,不验证是否到达对方,所以不可靠。
8.什么是socket?简述基于tcp协议的套接字通信流程。
在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
TCP Socket通信的基本流程
①服务端创建一个ServerSocket对象,指定端口号,ServerSocket对象等待客户端的连接请求。
②客户端创建一个Socket对象,指定主机地址和端口号,向服务端发出连接请求。
③服务端接收到客户端的连接请求,建立一条TCP连接,再创建一个Socket对象与客户端的Socket对象进行通信。
④服务端和客户端分别创建字节输入流和字节输出流,通过字节输入流获得对方发来的数据,通过字节输出流向对方发送数据。
⑤当一方决定结束通信时,向对方发送结束信息;另一方接收到结束信息后,双方分别关闭各自的TCP连接。
⑥ServerSocket对象停止等待客户端的连接请求。
9.什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
TCP是流式传送的 也就是连接建立后可以一直不停的发送 并没有明确的边界定义.发送端
-
接收端都存在这一个缓冲区
由接收方造成的粘包
当接收方不能及时接收缓冲区的包,造成多个包接收就产生了粘包
客户端发送一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次
遗留的数据
由传输方造成的粘包
tcp协议中会使用Nagle算法来优化数据。发送时间间隔短,数据量小的包会一起发送,造成粘包
10. IO多路路复用的作用?
11. 什么是防火墙以及作用?
它是一种位于内部网络与外部网络之间的网络安全系统。一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。
防火可以使企业内部局域网(LAN)网络与Internet之间或者与其他外部网络互相隔离、限制网络互访用来保护内部网络。
12. select、poll、epoll 模型的区别?
selete : 有最大连接数 遍历 支持win
poll : 无最大连接数 遍历 支持win
epoll : 无最大连接数 事件通知 不支持win
13. 简述 进程、线程、协程的区别 以及应用场景?
# 进程
一个任务,进程之间内存隔离,一个进程修改数据不会影响其他进程(创建变量,修改变量值)
# 线程
线程位于进程内
一个进程内至少有一个线程,线程之间资源共享.一个线程修改数据其他进程也会受影响所以有了锁的概念
# 协程
代码级别的保存状态
+
切换
多线程,协程用于IO密集型,如socket,爬虫,web,抢占cpu资源
多进程用于计算密集型,如金融分析,利用多核优势
14. GIL锁是什么鬼?
15. Python中如何使用线程池和进程池?
# 进程池
from concurrent.futures import ProcessPoolExecutor
import time,os
def piao(name,n):
print("%s is piaoing %s"%(name,os.getpid())) # 打印了进程id
time.sleep(1) if __name__ == "__main__":
p = ProcessPoolExecutor(4) # 指定进程池最大进程个数
for i in range(10):
obj = p.submit(piao,"alex %s"%i,i) 提交任务 # 线程池
rom concurrent.futures import ThreadPoolExecutor
import time,os,random
def piao(name,n):
print("%s is piaoing %s"%(name,os.getpid())) # 打印了进程id
time.sleep(random.randint(1,3)) if __name__ == "__main__":
p = ThreadPoolExecutor(4) # 指定线程池最大线程个数,不包含控制线程
for i in range(10):
obj = p.submit(piao,"alex %s"%i,i) # 提交任务
16. threading.local的作用?
创建一个对象,每个线程为该对象设置值数据都是隔离的
17. 进程之间如何进行通信?
18. 什么是并发和并行?
并发 : 看上去是在同时工作,实际上是cpu一直在切换着工作
并行 : 利用多核同时工作多个任务
19. 进程锁和线程锁的作用?
进程锁 : 防止进程同时操作一套文件系统
线程锁 : 防止多个线程同时修改进程内数据
20. 解释什什么是异步非阻塞?
# 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程
# 异步的概念和同步相对。当一个异步功能调用发出后,调用者不能立刻得到结果。当该异步功能完成后,
# 通过状态、通知或回调来通知调用者。
21. 路由器和交换机的区别?
路由器 : 连接外部网络,有接入外部的线
交换机 : 连接内部网络,可以没有接入外部的线
22.什么是域名解析?
我们在浏览器上输入网站域名时,会去请求DNS服务器获取该域名对应的IP地址,再去访问改地址
23.如何修改本地hosts文件?
win : C:\Windows\System32\drivers\etc\hosts
linux : /etc/hosts
按格式修改即可
24.生产者消费者模型应用场景及优势?
生产者与消费者模式是通过一个容器来解决生产者与消费者的强耦合关系,生产者与消费者之间不直接进行通讯,
而是利用阻塞队列来进行通讯,生产者生成数据后直接丢给阻塞队列,消费者需要数据则从阻塞队列获取,实际应
用中,生产者与消费者模式则主要解决生产者与消费者生产与消费的速率不一致的问题,达到平衡生产者与消费者
的处理能力,而阻塞队列则相当于缓冲区。
# 应用场景
由一个线程生成订单,并将其放入队列中.由多个线程去处理
# 优势
平衡生产者与消费者的处理能力
25.什么是cdn?
CDN的全称是Content Delivery Network,即内容分发网络。
其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根
据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近
的服务节点上。
其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
26.LVS是什么及作用?
LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器
LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把
许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定
可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。
27.Nginx是什么及作用?
处理静态文件
负载均衡
反向代理
28.keepalived是什么及作用?
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,
并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived
自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务
器。
29.haproxy是什么以及作用?
HAProxy是一个使用C语言编写的自由及开放源代码软件[
1
],其提供高可用性、负载均衡,以及基于TCP和HTTP
的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前
的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构
中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制
、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管
理的用户空间(User
-
Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程
序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket[
3
]、Stack Overflow[
4
]、Reddit、Tumblr、Twitter[
5
][
6
]和 Tuenti[
7
]在内的知
名网站,及亚马逊网络服务系统都使用了HAProxy。
# 作用
负载均衡
30.什么是负载均衡?
负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐
量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务
器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
# 重点
拓展网络设备
31.什么是rpc及应用场景?
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要
了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在
OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容
易。
RPC采用客户机
/
服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进
程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息
到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最
后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
# 简单来说就是客户端与服务端并不直接通信,而是通过两个管道,多客户端通过一个管道向服务端发送消息,
每个客户端都有一个管道来接收信息
Python面试网络编程和并发的更多相关文章
- Python之网络编程之并发编程的IO模型,
了解新知识之前需要知道的一些知识 同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调 ...
- Python学习---网络编程 1217【all】
OSI七层模型: 物理层, 数据链路层, 网络层,传输层,会话层,表达层,应用层 应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 传输层:TCP,UDP 网络层:I ...
- python之网络编程
本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用 ...
- Python的网络编程--思维导图
Python的网络编程--思维导图
- Python高级网络编程系列之第一篇
在上一篇中我们简单的说了一下Python中网络编程的基础知识(相关API就不解释了),其中还有什么细节的知识点没有进行说明,如什么是TCP/IP协议有几种状态,什么是TCP三次握手,什么是TCP四次握 ...
- python基础网络编程--转
python之网络编程 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的 ...
- python 基础网络编程2
python 基础网络编程2 前一篇讲了socketserver.py中BaseServer类, 下面介绍下TCPServer和UDPServer class TCPServer(BaseServer ...
- python 基础网络编程1
python 基础网络编程1 Source code: Lib/socketserver.py lib的主目录下有一个sockserver.py文件, 里面是python基本的网络编程模型 共有一个b ...
- Python网络编程与并发编程
网络编程基础 黏包 , 并发 计算机网络的发展及基础网络概念 Python 中的进程与 锁 Python IO 多路复用 \协程
随机推荐
- python与VScode
用VScode写python是非常方便的.vscode是一个功能非常强大的编辑器,下面介绍大致的使用方法: 下载安装python,配置环境变量. 下载安装VScode(vscode会自动连接pytho ...
- 7代CPU安装win7的方法
7代CPU安装win7会遇到的问题: 32位的win7不支持uefi启动,64位win7理论上支持uefi启动,但实际上需要开启兼容模式才能启动,并且启动速度并没有变快. 根据不同型号的主板,需要解决 ...
- Docker-创建和分享应用(3)
Dockerfile定义容器内环境中发生的事情.对网络接口和磁盘驱动器等资源的访问在此环境中进行虚拟化,该环境与系统的其他部分隔离,因此您需要将端口映射到外部世界,并具体说明要“复制”哪些 ...
- PHP代码审计笔记--变量覆盖漏洞
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击. 经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数, ...
- 【RF库Collections测试】Remove Values From List
Name:Remove Values From ListSource:Collections <test library>Arguments:[ list_ | *values ]Remo ...
- [XPath] XPath 与 lxml (一)XPath 术语
前言 这是一篇主要介绍 XPath 的文章,由于 JQuery 已经不支持 XPath,所以本文主要通过 Python 的 lxml.etree 来介绍 XPath. 什么是 XPath ? XPat ...
- 非IMU模式下DML语句产生的REDO日志内容格式解读
实验内容:非IMU模式下DML语句产生的REDO日志内容格式解读 最详细的解读是UPDATE的. 实验环境准备 11G中默认是开启IMU特性的,做此实验需要关闭此特性. alter system se ...
- jQuery().end()的内部实现及源码分析
jQuery().end()的作用是返回当前jQuery对象的上一个状态. 1.end()源码: // 所有通过pushStack方法获得的jQuery对象都可以通过end方法返回之前的状态 // ...
- js 判断数组重复元素以及重复的个数
知识点: .sort()方法用于对数组元素排序,并返回数组. var _arr = ['旅行箱', '旅行箱', '小米', '大米']; var _res = []; // _arr.sort(); ...
- [转]RedHat Enterprise Linux 7关闭防火墙方法
在之前的版本中关闭防火墙等服务的命令是 service iptables stop /etc/init.d/iptables stop 在RHEL7中,其实没有这个服务 [root@rhel7 ~]# ...