网络编程和并发2--【python】面试题汇总
1.路由器和交换机的区别
路由器可以为局域网自动分配IP和虚拟拨号
交换机只是用来分配网络数据
路由器在网络层,根据IP地址寻址
路由器可以处理TCP/IP协议,交换机不行
交换机在中继层,根基MAC地址寻址
路由器可以吧一个IP分给多个主机使用,对外IP相同
交换机可以把很多主机连接起来,对外IP不同
路由器可以提供防火墙,交换机不能
交互机是扩大局域网接入点的,可以让局域网连接更多的电脑
路由器是用来做网间连接的
2.什么是域名解析
域名解析就是域名到IP地址的转换过程
3.生产者消费者模型应用场景及优势
解耦
支持并发
支持闲忙不均
使用多线程,在做爬虫的时候,生产者用着产生url链接,消费者用于获取url数据,在队列的帮助下可以使用多线程加快爬虫速度。
4.什么是cdn
cdn:内容分发网络
缓存算法
缓存算法决定命中率,源服务器压力,pop节点存储能力
分发能力
分发能力取决于IDC能力和IDC策略性分布
负载均衡
智能调度决定最佳路由,响应时间,可用性,服务质量
基于DNS
基于DNS的负载均衡智取最优节点服务
支持协议
静动态加速,下载加速,流媒体加速,企业应用加速,手机应用加速
负载均衡软件nginx
5.nginx是什么以及作用
nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强
代理服务器就是代理网络用户去取得网络信息
主要作用
1.突破自身IP访问限制,访问国外站点
2.访问一些单位或团体内部资源
3.突破中国电信的IP封锁
4.提高访问速度
5.隐藏真实IP,免受网络攻击
Nginx支持的负载均衡算法如下:
1.weight轮询
默认算法,接收到的请求按顺序逐一分配,可以给每台后端服务器配置不同的权重值(weight),用于调整不同服务器的分配率
2.ip_hash
每个请求按照发起客户端的IP的hash结果进行匹配,这样每次分配的后端服务器都是同一个
3.fair
智能调整调度算法,结合前两种模式动态分配,需要额外安装upstream_fair模块
4.url_hash
按照访问url的hash结果分配请求,nginx作为静态服务器的情况下可以提高缓存效率
优势:
1.作为Web服务器,Nginx处理静态文件,索引文件,自动索引的效率高
2.作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站的运行速度
3.作为负载均衡服务器,Nginx可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡
4.在性能方面,Nginx支持高并发
5.在稳定性方面,占用内存低
6.在高可用方面,Nginx支持热部署
6.lvs是什么及作用
lvs:Linux Virtual Server,Linux虚拟服务器,是一个虚拟的服务器集群系统
lvs主要用于多服务器的负载均衡
1.工作在网络层,可以实现高性能,高可用的服务器集群技术
2.可以把许多低性能的服务器组合在一起形成一个超级服务器
3.易用,配置简单,且有多种负载均衡的方法
4.稳定,即使在集群中的某台服务器无法正常工作,也不影响整体效果
5.可扩展性很好
7.keepalived是什么及作用
Keepalived是Linux下一个轻量级的高可用解决方案
起初为lvs设计,专门用来监控集群系统中各个服务节点的状态
VRRP协议
8.haproxy是什么及作用
haproxy是一款提供高可用性,负载均衡以及基于TCP和HTTP应用的代理软件,支持虚拟主机,免费快速且可靠
特别适宜用在负载特大的web站点,这些站点通常又需要会话保持或七层处理
作用:高可用性,负载均衡和用于TCP和基于http的应用程序的代理
9.什么是负载均衡
1.将大量的并发处理转发给后端多个节点处理,减少工作响应时间;
2.将单个繁重的工作转发给后端多个节点处理,处理完再返回给负载均衡中心,再返回给用户
四层负载均衡
从第四层传输层开始,使用ip+port接收请求,再转发到对应的机器
F5:硬件负载均衡器,功能好,成本高
lvs:重量级的四层负载软件
nginx:轻量级的四层负载软件,带缓存功能,正则表达式灵活
haproxy:模拟四层转发,较灵活
七层负载均衡
从第七层应用层开始,根据虚拟的url或ip,主机名接收请求,再转向相应的处理服务器
haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移
nginx:只在http协议和mail协议上功能比较好
apache:功能较差
mysql proxy:功能尚可
一般是lvs做四层负载,nginx做七层负载
10.简述asynio模块的作用和应用场景
asyncio是python3.4版本引入的标准库,直接内置了对异步IO的支持
asyncio的编程模型就是一个消息循环,我们从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程扔到EventLoop中执行,就实现了异步IO
11.简述genent模块的作用和应用场景
当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了greenlet自动切换协程,就保证总有greenlet在运行,而不是等待IO
12.twisted框架的使用和应用
twisted是一个单线程异步框架,可以并发处理多个任务
单线程和多线程用来处理多个任务
用循环来驱动任务处理--reactor模型
用Application类来解决Reactor Loop的管理,用户只需要引入该类并声明即可
用service类来管理用户的业务逻辑,用户只需将该service注册到Application中即可
用defferred类来管理回调,该类对象可以帮助用户处理异常问题