第一部分:python基础篇
第三部分:数据库和缓存
第四部分:Django、Flask、Tornado
这一块中侧重理解底层的网络知识概念,不要专研代码怎么去写
1、简述 OSI 七层协议。(*****)
1
2
3
4
5
6
7
8
9
|
应用层:HTTP,FTP,NFS
表示层:Telnet,SNMP
会话层:SMTP,DNS
传输层:TCP,UDP
网络层:IP,ICMP,ARP,
数据链路层:Ethernet,PPP,PDN,SLIP,FDDI
物理层:IEEE 802.1A,IEEE802.11
|
2、什么是C/S和B/S架构?
1
2
|
C/S是客户端和服务器端结构;B/S是浏览器和服务器结构;
|
3、简述 TCP三次握手、四次挥手的流程。(*****)
1
2
3
4
5
6
7
8
9
10
|
三次握手过程:
1首先客户端向服务端发送一个带有SYN=1标志(标志此时握手的含义是什么),以及随机生成的Seq=100序列号(0-2的32次方之间,比如100)的报文2服务端收到报文后返回一个报文(SYN=1,ACK=1,Seq=200,ack=101)给客户端,表示收到请求,同意建立连接.(这里ACK和SYN都是标志位,表示握手的含义是什么,比如ACK=1表示对上一请求握手的一次确认,代表收到请求了,SYN=1表示同意建立连接,ack=101是确认号)3客户端再次发送报文(ACK=1,ack=201)给服务端至此三次握手过程结束,客户端开始向服务端发送数据。
1客户端向服务端发起请求:我想给你通信,你准备好了么?
2服务端收到请求后回应客户端:I'm ok,你准备好了么3客户端礼貌的再次回一下客户端:准备就绪,咱们开始通信吧!
整个过程跟打电话的过程一模一样:1喂,你在吗2在,我说的你听得到不3恩,听得到(接下来请开始你的表演)
上面有两个核心概念:标志位:ACK/SYN 序列号Seq/确认号ack
三次握手的目的:(1)双方都准备好了 (2)协商得知对方的序列号
四次挥手过程:
由于TCP连接是可以双向通信的(全双工),因此每个方向都必须单独进行关闭(这句话才是精辟,后面四个挥手过程都是其具体实现的语言描述)四次挥手过程,客户端和服务端都可以先开始断开连接1客户端发送带有fin标识的报文给服务端,请求通信关闭2服务端收到信息后,回复ACK答应关闭客户端通信(连接)请求3服务端发送带有fin标识的报文给客户端,也请求关闭通信4客户端回应ack给服务端,答应关闭服务端的通信(连接)请求
|
4、什么是arp协议?
1
2
3
4
5
6
|
1、ARP全称“Address Resolution Protocol”,即地址解析协议
2、实现局域网内通过IP地址获取对应主机的物理地址(MAC地址)。
3、MAC地址48位主机的物理地址,局域网内唯一。
4、ARP协议类似DNS服务,但不需要配置服务。
5、ARP协议是三层协议。
|
5、TCP和UDP的区别?
1
2
3
4
|
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制, 因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
|
6、什么是局域网和广域网?
1
2
3
4
5
6
|
局域网和广域网是按规模大小而划分的两种计算机网络。
局域网一般指覆盖范围在10公里以内,一座楼房或一个单位内部的网络。
--由于传输距离直接影响传输速度,因此,局域网内的通信,由于传输于距离短,传输的速率一般都比较高。
广域网是指远距离的、大范围的计算机网络。
--由于广域的覆盖范围广,联网的计算机多,因此广域网上的信息量非常大,共享的信息资源很丰富。因特网(Intenet)就是目前最大的广域网。
|
7、为何基于tcp协议的通信比基于udp协议的通信更可靠?
1
2
3
|
TCP:面向连接,对方给了确认收到信息,才发下一个,如果没收到确认信息就重发,数据不会丢失
UDP:无连接,一直发数据,不需要对方回应,可能造成数据丢失
|
8、什么是socket?简述基于tcp协议的套接字通信流程。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
通常称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
基于tcp 协议的套接字通信流程: 服务端先初始化Socket实例化一个类拿到对象(才能调用下面的接口),然后绑定IP端口(bind),监听(listen)就是说客户端可以来连我了,调用accept接收链接;这时客户端初始化一个socket,然后connect与服务端建立好双向链接与accept对应。客户端发送请求数据,服务端处理请求并给客户端回应数据,这样一个通信循环;最后关闭套接字,一次交互结束。具体流程:
1). 服务器先用 socket 函数来建立一个套接字,用这个套接字完成通信的监听。
2). 用 bind 函数来绑定一个端口号和 IP 地址。因为本地计算机可能有多个网址和 IP,每一个 IP 和端口有多个端口。需要指定一个 IP 和端口进行监听。
3). 服务器调用 listen 函数,使服务器的这个端口和 IP 处于监听状态,等待客户机的连接。
4). 客户机用 socket 函数建立一个套接字,设定远程 IP 和端口。
5). 客户机调用 connect 函数连接远程计算机指定的端口。
6). 服务器用 accept 函数来接受远程计算机的连接,建立起与客户机之间的通信。
7). 建立连接以后,客户机用 write 函数向 socket 中写入数据。也可以用 read 函数读取服务器发送来的数据。
8). 服务器用 read 函数读取客户机发送来的数据,也可以用 write 函数来发送数据。
9). 完成通信以后,用 close 函数关闭 socket 连接。
|
!img
9、什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
1
2
3
4
5
6
7
8
9
10
11
12
|
粘包指的是数据和数据之间没有明确的分界线,导致不能正确读取数据,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
所谓粘包问题原因:(1)主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。
(2)发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一个TCP段。
若连续几次需要send的数据都很少,通常TCP会根据优化算法把这些数据合成一个TCP段后一次发送出去,这样接收方就收到了粘包数据。
发生粘包的情况:(1)发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据很小,会合到一起,产生粘包)
(2)接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿
上次遗留的数据,产生粘包)
解决方法:问题的根源在于,接收端不知道发送端将要传送的字节流的长度,所以解决粘包的方法就是围绕,如何让发送端在发送数据前,把自己将要发送的字节流总
大小让接收端知晓,然后接收端来一个死循环接收完所有数据
|
10、IO多路复用的作用?
1
2
|
I/O多路复用是通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
IO 多路复用是5种I/O模型中的第3种,对各种模型讲个故事,描述下区别:
故事情节为:老李去买火车票,三天后买到一张退票。参演人员(老李,黄牛,售票员,快递员),往返车站耗费1小时。
1.阻塞I/O模型老李去火车站买票,排队三天买到一张退票。
耗费:在车站吃喝拉撒睡 3天,其他事一件没干。
2.非阻塞I/O模型老李去火车站买票,隔12小时去火车站问有没有退票,三天后买到一张票。
耗费:往返车站6次,路上6小时,其他时间做了好多事。
3.I/O复用模型
(1).select/poll老李去火车站买票,委托黄牛,然后每隔6小时电话黄牛询问,黄牛三天内买到票,然后老李去火车站交钱领票。
耗费:往返车站2次,路上2小时,黄牛手续费100元,打电话17次
(2).epoll老李去火车站买票,委托黄牛,黄牛买到后即通知老李去领,然后老李去火车站交钱领票。
耗费:往返车站2次,路上2小时,黄牛手续费100元,无需打电话
4.信号驱动I/O模型
老李去火车站买票,给售票员留下电话,有票后,售票员电话通知老李,然后老李去火车站交钱领票。
耗费:往返车站2次,路上2小时,免黄牛费100元,无需打电话
5.异步I/O模型
老李去火车站,告诉售票员要买票,售票员买到票之后,打电话通知老李把票放在某某储物箱,老李根据储物箱地址自己去取票。
耗费:往返车站1次,路上1小时,免黄牛费100元,无需打电话
1同2的区别是:自己轮询
2同3的区别是:委托黄牛
3同4的区别是:电话代替黄牛
4同5的区别是:电话通知是自取还是送票上门
|
11、什么是防火墙以及作用?
1
2
3
|
简单的来说,防火墙就是一种,避免你的电脑被黑客入侵的一种防护工具,一种确保网络安全的方法!
1.允许网络管理员定义一个中心点来防止非法用户进入内部网络。2.可以很方便地监视网络的安全性,并报警。3.可以作为部署NAT(Network Address Translation,网络地址变换)的地点,利用NAT技术,将有限的IP地址动态或静态地与内部的IP地址对应起来, 用来缓解地址空间短缺的问题等
|
12、select、poll、epoll 模型的区别?(*****)
1
2
3
|
I/0多路复用的本质就是用select/pol1/epol1,去监听多个socket对象,如果其中的socket对象有变化,只要有变化,用户进程就知道了。
select是不断轮询去监听的socket,socket个数有限制,一般为1024个;po11还是采用轮询方式监听,只不过没有个数限制;epol1并不是采用轮询方式去监听了,而是当socket有变化时通过回调的方式主动告知用户进程。注:阿帕奇网络底层模型用的是select,Nginx网络底层模型用的是epoll,所以Nginx比阿帕奇要高效
|
13、简述 进程、线程、协程的区别 以及应用场景?(*****)
1
2
3
4
5
6
7
8
9
|
CPU工作的最小单元是线程,一个进程中可以存在多个线程;对于进程来说,每个进程内部共享一块内存,进程和进程之间的数据是隔离的;
协程可以称为微线程,将线程进行分片,可以由程序员人为的控制当前线程先执行这段代码再执行另外一段代码,让它在代码之间进行切换;如果协程执行计算性任务的时候,
速度快不了,如果遇到IO操作,并是非阻塞的,用协程的时候它的速度就会很快,因为它先执行一个任务,遇到IO的时候会切换到其它任务。
多进程做并发:需要给每个进程开辟一个空间,浪费空间
多线程做并发:存在多线程等待的状态
协程做并发:遇到IO效率高
协程缺点:计算性任务效率不高、如果多个任务同时有结果返回协程会处理不过来,这时候需要用到多核优势。
|
14、Python中的进程与线程的使用场景?
1
2
3
|
多进程适合在CPU密集型操作(CPU操作指令比较多,如位数多的浮点运算)。
多线程适合在IO密集型操作(读写数据操作较多的,比如爬虫)
|
15、进程之间如何进行通信?
1
2
|
python提供了多种进程通信的方式,主要Queue和Pipe这两种方式,Queue用于多个进程间实现通信,Pipe是两个进程的通信。
|
16、什么是并发和并行?
1
2
3
4
|
并发:同一时刻只能处理一个任务,但可以交替处理多个任务。(一个处理器同时处理多个任务)
并行:同一时刻可以处理多个任务。(多个处理器或者是多核的处理器同时处理多个不同的任务)
类比:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。
|
17、线程是并发还是并行,进程是并发还是并行?
1
2
3
|
线程是并发,进程是并行;
进程之间相互独立,是系统分配资源的最小单位,同一个进程中的所有线程共享资源。
|
18、同步和异步,阻塞和非阻塞的区别?
1
2
3
4
5
|
同步:执行一个操作之后,需要主动等待返回结果;异步:执行一个操作之后,不需要主动等待返回结果,若接收到结果通知,再回来执行刚才没执行完的操作。
同步和异步关心的问题是:要不要主动等待结果。
阻塞:在执行一个操作时,不能做其他操作;非阻塞:在执行一个操作时,能做其他操作。
阻塞和非阻塞关心的问题是:能不能做其他操作。 总结:阻塞和非阻塞指的一个是客户端等待消息处理时的本身的状态,是挂起还是继续干别的。 同步和异步指的对于消息结果的获取是客户端主动获取,还是由服务端间接推送。
|
19、解释什么是异步非阻塞?
1
2
3
4
5
6
|
关于同步和异步
同步和异步其实指的是,请求发起方对消息结果的获取是主动发起的,还是等被动通知的。如果是请求方主动发起的,一直在等待应答结果(同步阻塞),或者可以先去处理其他的事情,但要不断轮询查看发起的请求是否有应答结果(同步非阻塞 )因为不管如何都要发起方主动获取消息结果,所以形式上还是同步操作。如果是由服务方通知的,也就是请求方发出请求后,要么在一直等待通知(异步阻塞),要么就先去干自己的事了(异步非阻塞),当事情处理完成之后,服务方会主动通知请求方,它的请求已经完成,这就是异步。异步通知的方式一般是通过状态改变,消息通知,或者回调函数来完成,大多数时候采用的都是回调函数。
关于阻塞和非阻塞
阻塞和非阻塞在计算机的世界里面,通常指的是针对IO的操作,如网络IO和磁盘IO等。那么什么是阻塞和非阻塞呢?简单的说就是我们调用了一个函数之后,在等待这个函数返回结果之前,当前的线程是处于挂起状态,还是运行状态,如果是挂起状态,就意味着当前线程什么都不能干,就等着获取结果,这就叫同步阻塞,如果仍然是运行状态,就意味当前线程是可以的继续处理其他任务,但要时不时的去看下是否有结果了,这就是同步非阻塞。
|
20、GIL锁是什么?
1
2
|
全局解释锁,每次只能一个线程获得cpu的使用权:为了线程安全,也就是为了解决多线程之间的数据完整性和状态同步而加的锁,因为我们知道线程之间的数据是共享的
|
21、请简述GIL对Python性能的影响?
1
2
3
4
5
|
GIL:全局解释器锁。每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行字节码。
线程释放GIL锁的情况:
在IO操作等可能会引起阻塞的system cal1之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL, Python 3.x使用计时器(执行时间达到阈值后,当前线程释放GIL),或Python 2.x,tickets计数达到100Python使用多进程是可以利用多核的CPU资源的。
多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GIL锁
|
22、进程锁和线程锁的作用?
1
2
3
4
5
|
线程锁:当多个线程几乎同时修改一个共享数据的时候,需要进行同步控制,线程同步能够保证多个线程安全的访问竞争资源(全局内容),最简单的同步机制就是使用互斥锁。
某个线程要更改共享数据时,先将其锁定,此时资源的状态为锁定状态,其他线程就能更改,直到该线程将资源状态改为非锁定状态,也就是释放资源,其他的线程才能再次锁定资源。互斥锁保证了每一次只有一个线程进入写入操作。从而保证了多线程下数据的安全性。
进程锁:也是为了控制同一操作系统中多个进程访问一个共享资源,只是因为程序的独立性,各个进程是无法控制其他进程对资源的访问的,但是可以使用本地系统的信号量控制。
|
23、解释一下什么是锁,有哪几种锁
1
2
|
锁(Lock)是Python提供的对线程控制的对象。有互斥锁、递归锁
|
24、什么是死锁?
1
2
3
4
5
|
若干子线程在系统资源竞争时,都在等待对方对某部分资源解除占用状态,结果是谁也不愿先解锁,互相干等着,程序无法执行下去,这就是死锁。
GIL锁(有时候,面试官不问,你自己要主动说,增加b格,尽量别一问一答的尬聊,不然最后等到的一句话就是:你还有什么想问的么?)GIL锁全局解释器锁(只在cpython里才有)作用:限制多线程同时执行,保证同一时间只有一个线程执行,所以cpython里的多线程其实是伪多线程!
所以Python里常常使用协程技术来代替多线程,协程是一种更轻量级的线程,进程和线程的切换时由系统决定,而协程由我们程序员自己决定,而模块gevent下切换是遇到了耗时操作才会切换。
三者的关系:进程里有线程,线程里有协程。
|
25、Python中如何使用线程池和进程池?
1
2
3
4
5
6
|
为什么要有进程池?
在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时间,销毁进程也需要消耗时间。第二即便开启了成千上万的进程,操作系统也不能让他们同时执行,这样反而会影响程序的效率。因此我们不能无限制的根据任务开启或者结束进程。
那么我们要怎么做呢?
进程池的概念,定义一个池子,在里面放上固定数量的进程,有需求来了,就拿一个池中的进程来处理任务,等到处理完毕,进程并不关闭,而是将进程再放回进程池中继续等待任务。如果有很多任务需要执行,池中的进程数量不够,任务就要等待之前的进程执行任务完毕归来,拿到空闲进程才能继续执行。也就是说,池中进程的数量是固定的,那么同一时间最多有固定数量的进程在运行。这样不会增加操作系统的调度难度,还节省了开闭进程的时间,也一定程度上能够实现并发效果。
|
26、路由器和交换机的区别?
1
2
3
4
5
6
7
8
9
10
11
12
13
|
区别一:
路由器可以给局域网自动分配IP,虚拟拨号。交换机则只是用来分配网络数据的。
区别二:
路由器可以把一个IP分配给很多个主机使用,这些主机对外只表现出一个IP。交换机可以把很多主机连起来,这些主机对外各有各的IP。
区别三:
交换机工作在数据链路层,根据MAC地址寻址,不能处理TCP/IP协议。
路由器工作在网络层,根据IP地址寻址,可以处理TCP/IP协议。
区别四:
路由器提供防火墙服务,交换机不能提供该功能。
|
27、threading.local的作用?
!img 详细
1
2
|
为每个线程创建一个独立的空间,使得线程对自己的空间中的数据进行操作(实现数据隔离)。
|
28、什么是域名解析?
1
2
3
4
|
在互联网上,所有的地址都是ip地址,现阶段主要是IPv4(比如:110.110.110.110)。
但是这些ip地址太难记了,所以就出现了域名(比如http://baidu.com)。
域名解析就是将域名转换为ip地址的这样一种行为。
|
29、如何修改本地hosts文件?
30、生产者消费者模型应用场景及优势?
1
2
3
4
5
6
7
8
9
10
|
生产者消费者模型:
在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题;该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。
为什么要使用生产者和消费者模式?
在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。
什么是生产者消费者模式?
生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。
|
1
2
3
|
“生产者与消费者模式”是通过一个容器来解决生产者与消费者的强耦合关系,生产者与消费者之间不直接进行通讯,而是利用阻塞队列来进行通讯,生产者生成数据后直接丢给阻塞队列,消费者需要数据则从阻塞队列获取,实际应用中,生产者与消费者模式则主要解决生产者与消费者的生产与消费的速率不一致的问题,达到平衡生产者与消费者的处理能力,而阻塞队列则相当于缓冲区。应用场景:用户提交订单,订单进入引擎的阻塞队列中,由专门的线程从阻塞队列中获取数据并处理。
优势:1: 解耦。 假设生产者和消费者分别是两个类,如果让生产者直接调用消费者的某个方法,那么生产者对于消费者就会产生依赖(也就是耦合)。将来如果消费者的代码发生变化, 可能会影响到生产者。而如果两者都依赖于某个缓冲区,两者之间不直接依赖,耦合也就相应降低了。2: 支持并发。 生产者直接调用消费者的某个方法,还有另一个弊端。由于函数调用是同步的(或者叫阻塞的),在消费者的方法没有返回之前,生产者只能一直等着而使用这个模型, 生产者把制造出来的数据只需要放在缓冲区即可,不需要等待消费者来取。3:支持忙闲不均。 缓冲区还有另一个好处。如果制造数据的速度时快时慢,缓冲区的好处就体现出来了。当数据制造快的时候,消费者来不及处理,未处理的数据可以暂时存在缓冲区中。 等生产者的制造速度慢下来,消费者再慢慢处理掉。
|
31、什么是cdn?
1
2
3
4
5
|
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的
更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况
以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,
提高用户访问网站的响应速度。
|
32、LVS是什么及作用?
1
2
3
4
5
6
7
8
|
LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。
它是我们国家的章文嵩博士的一个开源项目。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。
LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。
它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。
它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。
另外可扩展性也非常好。
|
33、Nginx是什么及作用?
1
2
|
nginx是一个高性能的HTTP和反向代理服务器,其特点是占用内存少,并发能力强.
|
一、服务器
nginx可以作为静态页面的服务器,在前后端分离开发中比较常见,如:前台静态资源部署在nginx上,后台服务部署在tomcat服务器中
二、虚拟主机
虚拟主机通过子域名可以实现多级域名,只需要在dns服务器上注册一个域名,通过nginx实现了多个域名:
如:注册 lishaojun.com 域名,可以在nginx中配置 aaa.lishaojun.com bbb.lishaojun.com 的映射到不同的资源(静态资源或者服务器)
三、反向代理
所谓的反向代理就是代理服务器,而不是客户端。通过反向代理可以实现服务器负载均衡的功能,负载均衡很好理解,在虚拟主机映射到服务器时,每个配置的域名(虚拟主机)可以配置多个服务器,而且可以配置权重,nginx自动选择合适的服务器转发请求。
总结:nginx可以直接作为网页服务器,或者间接代理服务器,并且可以实现域名虚拟化
34、keepalived是什么及作用?
1
2
3
4
|
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用),它能够保证当个别节点宕机时,整个网络可以不间断地运行。
所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
|
35、haproxy是什么以及作用?
1
2
3
4
5
6
|
HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,
借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。
HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。
并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
|
36、什么是负载均衡?
1
2
3
|
Load balancing,即负载均衡,是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源
使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。
|
37、什么是rpc及应用场景?
1
2
3
4
5
|
RPC是Remote Procedure Call的缩写,远程过程调用协议,也就是调用远程服务就跟调用本地服务一样方便,一般用于将程序部署在不同的机器上,
供客户端进行调用。
利用rpc可以实现系统的分布式架构,一方面有些功能比较相关应该放到一起实现,一方面物理因素的原因要求系统分解为多机实现,因此有的功能实现为了一个机器上
的进程,而另外的功能实现为在另外机器上的进程,这两个进程间的协同和信息交互就可以通过rpc来实现。
|
38、简述 asynio模块的作用和应用场景。
1
2
3
4
|
asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持。
asyncio的编程模型就是一个消息循环。我们从asyncio模块中直接获取一个EventLoop的引用,
然后把需要执行的协程扔到EventLoop中执行,就实现了异步IO。
|
39、简述 gevent模块的作用和应用场景。
1
2
3
4
5
|
当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,
再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,
有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。
gevent一般高并发用的比较多:游戏服务器、爬虫
|
40、twisted框架的使用和应用?
41、python的底层网络交互模板有哪些?
1
2
|
socket, urllib, urllib3, requests, grab, pycurl
|
42、描述用浏览器访问www.baidu.com的过程(*****)
1
2
3
4
5
6
7
8
9
10
11
|
先要解析出baidu.com对应的ip地址
-要先使用arp获取默认网关的mac地址
-组织数据发送给默认网关(ip还是dns服务器的ip,但是mac地址是默认网关的mac地址)
-默认网关拥有转发数据的能力,把数据转发给路由器
-路由器根据自己的路由协议,来选择一个合适的较快的路径转发数据给目的网关
-目的网关(dns服务器所在的网关),把数据转发给dns服务器
-dns服务器查询解析出baidu.com对应的ip地址,并原路返回请求这个域名的client 得到了baidu.com对应的ip地址之后,会发送tcp的3次握手,进行连接使用http协议发送请求数据给web服务器
-web服务器收到数据请求之后,通过查询自己的服务器得到相应的结果,原路返回给浏览器。
-浏览器接收到数据之后通过浏览器自己的渲染功能来显示这个网页。
-浏览器关闭tcp连接,即4次挥手结束,完成整个访问过程
|
43、cookie和session的区别(*****)
1
2
3
4
5
6
|
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、建议:将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中
|