第二部分 网络编程和并发(34题)

备注:自用回答

1、简述 OSI 七层协议。

答:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层

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

答:c/s 客户端服务器,b/s 浏览器服务器

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

答:https://blog.csdn.net/younglao/article/details/79453777

4、什么是arp协议?

答:地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议

5、TCP和UDP的区别?

答:TCP与UDP区别总结:

(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、什么是局域网和广域网?

答:局域网(Local Area Network),简称LAN,是指在某一区域内由多台计算机互联成的计算机组。“某一区域”指的是同一办公室、同一建筑物、同一公司和同一学校等

广域网(Wide Area Network),简称WAN,是一种跨越大的、地域性的计算机网络的集合。通常跨越省、市,甚至一个国家。

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

答:TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。

UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。

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

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

答:

https://www.cnblogs.com/haiyan123/p/7413412.html

10、IO多路复用的作用?

答:https://blog.csdn.net/wjtyy/article/details/46373089

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

答:它可通过监测、限制、更改跨越防火墙的数据流,尽可能地对外部屏蔽网络内部的信息、结构和运行状况, 以此来实现网络的安全保护。

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

答:https://www.cnblogs.com/Anker/p/3265058.html

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

答:1.线程和进程:

线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。

2.线程、进程与协程:

线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员

协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保持状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。

协程的适用场景: 当程序中存在大量不需要CPU的操作时(IO),适用于协程;

14、GIL锁是什么鬼?

答:Python GIL其实是功能和性能之间权衡后的产物,它尤其存在的合理性,也有较难改变的客观因素。从本分的分析中,我们可以做以下一些简单的总结:

因为GIL的存在,只有IO Bound场景下得多线程会得到较好的性能

如果对并行计算性能较高的程序可以考虑把核心部分也成C模块,或者索性用其他语言实现

GIL在较长一段时间内将会继续存在,但是会不断对其进行改进

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

16、threading.local的作用?

答:threading.local()这个方法的特点用来保存一个全局变量,但是这个全局变量只有在当前线程才能访问

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

18、什么是并发和并行?

答:并行是多个核心同时运行任务,并发是单个核心上的多线程。

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

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

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

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

答:效率更高,

  因为打电话是你(等待者)的事情,而通知你则是柜台(消息触发机制)的事情,

  程序没有在两种不同的操作中来回切换.

  比如说,这个人突然发觉自己烟瘾犯了,需要出去抽根烟,

  于是他告诉大堂经理说,排到我这个号码的时候麻烦到外面通知我一下(注册一个回调函数),

  那么他就没有被阻塞在这个等待的操作上面,自然这个就是异步+非阻塞的方式了.

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

答:路由器在网络层,路由器根据IP地址寻址,路由器可以处理TCP/IP协议,交换机不可以,交换机在中继层,交换机根据MAC地址寻址。

22、什么是域名解析?

答:域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。

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

答:127.0.0.1 www.baidu.com

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

答:生产者与消费者模式是通过一个容器来解决生产者与消费者的强耦合关系,生产者与消费者之间不直接进行通讯,而是利用阻塞队列来进行通讯,生产者生成数据后直接丢给阻塞队列,消费者需要数据则从阻塞队列获取,实际应用中,生产者与消费者模式则主要解决生产者与消费者生产与消费的速率不一致的问题,达到平衡生产者与消费者的处理能力,而阻塞队列则相当于缓冲区。

这就好比去学校食堂吃饭,食堂大妈并不会等你点了餐之后才立马去给你做,而是先把饭菜做好了放在食堂窗口等你来自己取,而这个窗口就相当于阻塞队列,食堂大妈就是生产者,而学生就是消费者。

25、什么是cdn?

答:CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

26、LVS是什么及作用?

答: LVS 是 Linux  Virtual Server ,Linux 虚拟服务器

27、Nginx是什么及作用?

答:    Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器

28、keepalived是什么及作用?

答:keepalived是基于VRRP协议实现的保证集群高可用的一个服务软件,主要功能是实现真机的故障隔离和负载均衡器间的失败切换,防止单点故障。

29、haproxy是什么以及作用?

答:HAProxy提供高可用性、负载均衡以及基于TCPHTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案

30、什么是负载均衡?

答:负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器FTP服务器企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

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

答:RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用。

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

答:asyncio 作用:异步网络操作、并发、协程

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

答:gevent是第三方库,通过greenlet实现协程,其基本思想是:

当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。

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

答:twisted是一个用python语言写的事件驱动的网络框架,他支持很多种协议,包括UDP,TCP,TLS和其他应用层协议,比如HTTP,SMTP,NNTM,IRC,XMPP/Jabber。 

推荐阅读更多精彩内容