python网络编程与并发面试题(二)

1:简述 OSI 七层协议。

2:什么是C/S和B/S架构?

3:简述 三次握手、四次挥手的流程。

4:什么是arp协议?

5:TCP和UDP的区别?

6:什么是局域网和广域网?

7:为何基于tcp协议的通信比基于udp协议的通信更可靠?

8:什么是socket?简述基于tcp协议的套接字通信流程。

9:什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?

10:IO多路复用的作用?

11:什么是防火墙以及作用?

12:select、poll、epoll 模型的区别?

13:简述 进程、线程、协程的区别 以及应用场景?

14:GIL锁是什么鬼?

15:Python中如何使用线程池和进程池?

16:threading.local的作用?

17:进程之间如何进行通信?

18:什么是并发和并行?

19:进程锁和线程锁的作用?

20:解释什么是异步非阻塞?

21:路由器和交换机的区别?

22:什么是域名解析?

23:如何修改本地hosts文件?

24:生产者消费者模型应用场景及优势?

25:什么是cdn?

26:LVS是什么及作用?

27:Nginx是什么及作用?

28:keepalived是什么及作用?

29:haproxy是什么以及作用?

30:什么是负载均衡?

31:什么是rpc及应用场景?

32:简述 asynio模块的作用和应用场景。

33:简述 gevent模块的作用和应用场景。

34:twisted框架的使用和应用?
 

11. 什么是防火墙以及作用?

防火墙是设置在被保护网络(本地网络)和外部网络(主要是Internet)之间的一道防御系统,以防止发生不可预测的、潜在的破坏性的侵入。它可以通过检测、限制、更改跨越防火墙的数据流,尽可能的对外部屏蔽内部的信息、结构和运行状态,以此来保护内部网络中的信息、资源等不受外部网络中非法用户的侵犯。基本功能如下:
1.过滤进出网络的数据 
2.管理进出访问网络的行为 
3.封堵某些禁止业务 
4.记录通过防火墙信息内容和活动 
5.对网络攻击检测和告警

12. select、poll、epoll 模型的区别?

select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。

epoll使用一组函数来完成,而不是单独的一个函数;其次,epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,无须向select和poll那样每次调用都要重复传入文件描述符集合事件集。

python网络编程与并发面试题(二)_第1张图片

13、简述 进程、线程、协程的区别 以及应用场景?

进程是指程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。进程——资源分配的最小单位,线程——程序执行的最小单位。协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。协程与线程主要区别是它将不再被内核调度,而是交给了程序自己而线程是将自己交给内核调度。
详细内容点击查看博文

14、GIL锁是什么鬼?

Python全局解释锁(GIL)简单来说就是一个互斥体(或者说锁),这样的机制只允许一个线程来控制Python解释器。这就意味着在任何一个时间点只有一个线程处于执行状态。GIL对执行单线程任务的程序员们来说并没什么显著影响,但是它成为了计算密集型(CPU-bound)和多线程任务的性能瓶颈。

详细内容点击查看博文

15、Python中如何使用线程池和进程池?

池:可以将其理解为一种容器,有其固定的大小。当程序中的任务并发数远远大于计算机的承受能力时,就应该用池的概念将开启的进程数或者线程数限制在计算机的承受范围之内。用进程池还是线程池取决于程序的类型,对于IO密集型--->线程,对于计算密集型--->进程。

详细内容点击查看博文

16、threading.local的作用?

当我们使用线程的时候,能使用线程的局部变量,就尽量不要用全局变量,因为使用全局变量涉及同步的问题。使用局部变量的时候,需要传递参数,比如有这样一个例子,程序需要处理客户申请,每来一个客户,就新开一个线程进行处理,而客户有姓名、年龄、性别等属性(参数),如果都需要传递参数的话很繁琐。Python提供了threading.local模块,方便我们实现线程局部变量的传递。

详细内容点击查看博文

17、进程之间如何进行通信?

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。

详细内容点击查看博文

18、什么是并发和并行?

并发:指应用能够交替执行不同的任务,其实并发有点类似于多线程的原理,多线程并非是同时执行多个任务,如果你开两个线程执行,就是在你几乎不可能察觉到的速度不断去切换这两个任务,已达到"同时执行效果",其实并不是的,只是计算机的速度太快,我们无法察觉到而已。(交替进行,吃一口饭,喝口水,再继续吃饭)

并行:指应用能够同时执行不同的任务,例:吃饭的时候可以边吃饭边打电话,这两件事情可以同时执行。(同时进行,边走路边玩手机)

19、进程锁和线程锁的作用?

线程锁:主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其余线程必须要等待当前线程执行完之后才能执行该代码段。但是,其余线程是可以访问该对象中的非加锁代码块的。

进程锁:也是为了控制同一操作系统中多个进程访问一个共享资源,只是因为程序的独立性,各个进程是无法控制其他进程对资源的访问的,但是可以使用本地系统的信号量控制。

查看相关博文点击链接

https://www.cnblogs.com/intsmaze/p/6384105.html

 

 

 

你可能感兴趣的:(python网络编程与并发面试题(二))