面试题二 网络编程与并发

1.简述 OSI 七层协议。
为了实现计算机系统的互连,OSI参考模型把整个网络的通信功能划分为7个层次,
同时也定义了层次之间的相互关系以及各层所包括的服务及每层的功能。
OSI的七层由低到高依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,
下三层(物理层、数据链路层、网络层)面向数据通信,
而上三层(会话层、表示层、应用层)则面向资源子网,
而传输层则是七层中最为重要的一层。它位于上层和下层中间,起承上启下的作用。

应用层
与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。
例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。
但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。
示例:TELNET,HTTP,FTP,NFS,SMTP等。
表示层
这一层的主要功能是定义数据格式及加密。
例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。
如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。
在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。
会话层
它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,
以便在只完成连续消息的一部分时可以通知应用,
从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,
则用数据代表表示层。示例:RPC,SQL等。
传输层
这层的功能包括是否选择差错恢复协议还是无差错恢复协议,
及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。
示例:TCP,UDP,SPX。
网络层
这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,
还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,
网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。
数据链路层
它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。
物理层
OSI的物理层规范是有关传输介质的特这些规范通常也参考了其他组织制定的标准。
连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。
物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。


2.什么是C/S和B/S架构?
C/S 架构的概念

C/S是Client/Server,即客户端/服务器端架构,一种典型的两层架构。

客户端包含一个或多个在用户的电脑上运行的程序

服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;
另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信。

C/S 可以看做是胖客户端架构

因为客户端需要实现绝大多数的业务逻辑和界面展示。作为客户端的部分需要承受很大的压力,
因为显示逻辑和事务处理都包含在其中,

通过与数据库的交互(通常是SQL或存储过程的实现)来达到持久化数据,以此满足实际项目的需要。

C/S 优点和缺点

优点: (1)界面和操作可以很丰富
(2) 安全性能可以很容易保证,实现多层认证也不难
(3)由于只有一层交互,因此响应速度较快。

缺点: (1)适用面窄,通常用于局域网中

(2)用户群固定。由于程序需要安装才可使用,因此不适合面向一些不可知的用户
   (3)维护成本高。发生一次升级,则所有客户端的程序都需要改变。

B/S 架构的概念

B/S是Browser/Server,即浏览器/服务器架构。

Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现,Browser客户端,WebApp服务器端和DB端构成所谓的三层架构。

B/S架构的系统无须特别安装,只有Web浏览器即可。

B/S 可以看做是瘦客户端架构

B/S架构中,显示逻辑交给了Web浏览器,事务处理逻辑在放在了WebApp上,这样就避免了庞大的胖客户端,减少了客户端的压力。因为客户端包含的逻辑很少,因此也被成为瘦客户端。

C/S 优点和缺点

优点:(1)客户端无需安装,有Web浏览器即可 (2)BS架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性较强。
(3)BS架构无需升级多个客户端,升级服务器即可。

缺点:(1)在跨浏览器上,BS架构不尽如人意。(2)表现要达到CS程序的程度需要花费不少精力。
(3)在速度和安全性上需要花费巨大的设计成本,这是BS架构的最大问题。
(4)C和S交互是请求-响应模式,通常需要刷新页面,这并不是客户乐意看到的。(在Ajax风行后此问题得到了一定程度的缓解)

3.简述 三次握手、四次挥手的流程。
三次握手
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,
Client进入SYN_SENT状态,等待Server确认。        (
2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,
Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,
并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。        (
3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,
如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,
Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,
完成三次握手,随后Client与Server之间可以开始传输数据了
四次握手
所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,
需要客户端和服务端总共发送4个包以确认连接的断开
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
    (2)第二次挥手:Server收到FIN后,发送一个ACK给Client,
确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。       
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

 


4.什么是arp协议?

地址解析协议ARP(Address Resolution Protocol),负责完成逻辑地址向物理地址的动态映射,
将32位逻辑地址(IP地址)转换为48位的物理地址(MAC地址)

ARP是通过一个查找表(ARP缓存)来执行这种转换的。
当在ARP缓存中没有找到地址时,则向网络发送一个广播请求,
网络上所有的主机和路由器都接收和处理这个ARP请求,
但是只有相同IP地址的接收到广播请求的主机或路由器,发回一个ARP应答分组,
应答中包含它的IP地址和物理地址,并保存在请求主机的ARP缓存中
1) 本地主机在局域网中广播ARP请求,ARP请求数据帧中包含目的主机的IP地址。
意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址”。
2) 目的主机的ARP层解析这份广播报文,识别出是询问其硬件地址。于是发送ARP应答包,
里面包含IP地址及其对应的硬件地址。
3) 本地主机收到ARP应答后,知道了目的地址的硬件地址,之后的数据报就可以传送了。

5. 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就没有了,udp信息发出后,不验证是否到达对方,所以不可靠

8. 什么是socket?简述基于tcp协议的套接字通信流程。
什么是socket?
简单来讲,Socket是网络应用程序接口,是应用层到传送层的接口。
也就是用户进程,与系统内核的接口,即API。
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

TCP Socket通信的基本流程
①服务端创建一个ServerSocket对象,指定端口号,ServerSocket对象等待客户端的连接请求。
②客户端创建一个Socket对象,指定主机地址和端口号,向服务端发出连接请求。
③服务端接收到客户端的连接请求,建立一条TCP连接,再创建一个Socket对象与客户端的Socket对象进行通信。
④服务端和客户端分别创建字节输入流和字节输出流,通过字节输入流获得对方发来的数据,通过字节输出流向对方发送数据。
⑤当一方决定结束通信时,向对方发送结束信息;另一方接收到结束信息后,双方分别关闭各自的TCP连接。
⑥ServerSocket对象停止等待客户端的连接请求。

 

 

 

 

 

 

9.什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
  TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,
从接收缓冲区看,后一包数据的头紧接着前一包数据的尾

因此TCP协议是面向流的协议,这也是容易出现粘包问题的原因
所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。

粘包情况
(1)发送方原因
  我们知道,TCP默认会使用Nagle算法。而Nagle算法主要做两件事:
1)只有上一个分组得到确认,才会发送下一个分组;
2)收集多个小分组,在一个确认到来时一起发送。
  所以,正是Nagle算法造成了发送方有可能造成粘包现象。
 (2)接收方原因
  TCP接收到分组时,并不会立刻送至应用层处理,
或者说,应用层并不一定会立即处理;
实际上,TCP将收到的分组保存至接收缓存里,然后应用程序主动从缓存里读收到的分组。
这样一来,如果TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,
应用程序读时,就会读到多个首尾相接粘到一起的包。

10. IO多路复用的作用?
I/O多路复用是用于提升效率,单个进程可以同时监听多个网络连接IO
I/O是指Input/Output
I/O多路复用,通过一种机制,可以监视多个文件描述符,
一旦描述符就绪(读就绪和写就绪),能通知程序进行相应的读写操作。
I/O多路复用避免阻塞在io上,
原本为多进程或多线程来接收多个连接的消息变为单进程或单线程保存多个socket的状态后轮询处理.

 

11. 什么是防火墙以及作用?
防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、
专用网与公共网之间的界面上构造的保护屏障,是一种获取安全性方法的形象说法,
它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),
从而保护内部网免受非法用户的侵入。

防火墙的功能
增强的保密性
使用Firewall可以阻止攻击者获取攻击网络系统的有用信息,如Figer和DNS。
记录和统计网络利用数据以及非法使用数据,Firewall可以记录和统计通过Firewall的网络通讯,
提供关于网络使用的统计数据,并且,Firewall可以提供统计数据, 来判断可能的攻击和探测。
保护脆弱的服务
通过过滤不安全的服务,Firewall可以极大地提高网络安全和减少子网中主机的风险。
例如, Firewall可以禁止NIS、NFS服务通过,Firewall同时可以拒绝源路由和ICMP重定向封包。
控制对系统的访问
Firewall可以提供对系统的访问控制。如允许从外部访问某些主机,
同时禁止访问另外的主机。例如, Firewall允许外部访问特定的Mail Server和Web Server。
集中的安全管理
Firewall对企业内部网实现集中的安全管理,在Firewall定义的安全规则可以运行于整个内部网络系统,
而无须在内部网每台机器上分别设立安全策略。Firewall可以定义不同的认证方法,
而不需要在每台机器上分别安装特定的认证软件。外部用户也只需要经过一次认证即可访问内部网。

12. 实现多路复用select、poll、epoll 模型的区别?

 

select,poll,epoll本质上都是步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,
也就是说这个读写过程是阻塞的

select
每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
select支持的文件描述符数量太小了,默认是1024

1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。
而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,
但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,
并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,
但是select和poll在“醒着”的时候要遍历整个fd集合,
而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间。
这就是回调机制带来的性能提升。
(2)select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,
并且要把current往设备等待队列中挂一次,而epoll只要一次拷贝,
而且把current往等待队列上挂也只挂一次(在epoll_wait的开始,注意这里的等待队列并不是设备等待队列,
只是一个epoll内部定义的等待队列)。这也能节省不少的开销。


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

1、进程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。
由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,
但相对比较稳定安全。

  2、线程
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.
线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),
但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,
上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。

  3、协程
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。
协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,
直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快
区别:
  1、进程多与线程比较
线程是指进程内的一个执行单元,也是进程内的可调度实体。线程与进程的区别:
1) 地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,
而进程有自己独立的地址空间
2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
3) 线程是处理器调度的基本单位,但进程不是
4) 二者均可并发执行
5) 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,
必须依存在应用程序中,由应用程序提供多个线程执行控制
  2、协程多与线程进行比较
1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。
2) 线程进程都是同步机制,而协程则是异步
3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态

应用场景:
1、多进程一般使用multiprocessing库,来利用多核CPU,主要是用在CPU密集型的程序上,
当然生产者消费者这种也可以使用。多进程的优势就是一个子进程崩溃并不会影响其他子进程和主进程的运行,
但缺点就是不能一次性启动太多进程,会严重影响系统的资源调度,特别是CPU使用率和负载。
  2、多线程一般是使用threading库,完成一些IO密集型并发操作。
多线程的优势是切换快,资源消耗低,但一个线程挂掉则会影响到所有线程,所以不够稳定。
  3、协程一般是使用gevent库,当然这个库用起来比较麻烦,所以使用的并不是很多。
相反,协程在tornado的运用就多得多了,使用协程让tornado做到单线程异步,据说还能解决C10K的问题。
所以协程使用的地方最多的是在web应用上。

总结一下就是IO密集型一般使用多线程或者多进程,CPU密集型一般使用多进程,
强调非阻塞异步并发的一般都是使用协程,当然有时候也是需要多进程线程池结合的,或者是其他组合方式。

14. GIL锁是什么鬼?

 

Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,
任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,
让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,
所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。

GIL是Python解释器设计的历史遗留问题,通常我们用的解释器是官方实现的CPython,
要真正利用多核,除非重写一个不带GIL的解释器。
所以,在Python中,可以使用多线程,但不要指望能有效利用多核。如果一定要通过多线程利用多核,
那只能通过C扩展来实现,不过这样就失去了Python简单易用的特点。
不过,也不用过于担心,Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务。
多个Python进程有各自独立的GIL锁,互不影响。

15. Python中如何使用线程池和进程池?
Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,
但是当项目达到一定的规模,频繁创建/销毁进程或者线程是非常消耗资源的,
这个时候我们就要编写自己的线程池/进程池,以空间换时间。
但从Python3.2开始,标准库为我们提供了concurrent.futures模块,
它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,实现了对threading和multiprocessing的进一步抽象,
对编写线程池/进程池提供了直接的支持。

16. threading.local的作用?
为每个线程创建一个独立的空间,使得线程对自己的空间中的数据进行操作(数据隔离)。

17. 进程之间如何进行通信?
1、无名管道通信
  无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。
进程的亲缘关系通常是指父子进程关系。
  2、高级管道通信
  高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,
这种方式我们成为高级管道方式。
  3、有名管道通信
  有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
  4、消息队列通信
  消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。
消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  5、信号量通信
  信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。
它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。
因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
  6、信号
  信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
  7、共享内存通信
  共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,
这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,
它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,
来实现进程间的同步和通信。
  8、套接字通信
  套接字( socket ) : 套接口也是一种进程间通信机制,与其他通信机制不同的是,
它可用于不同机器间的进程通信。

18. 什么是并发和并行?
并发:指应用能够交替执行不同的任务,例:吃完饭->喝水 喝完水->睡觉 一觉醒来->吃饭......
并行:指应用能够同时执行不同的任务,例:吃饭的时候可以边吃饭边打电话,这两件事情可以同时执行
两者区别:一个是交替执行,一个是同时执行.

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

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

  分布式锁:
当多个进程不在同一个系统之中时,使用分布式锁控制多个进程对资源的访问。

20. 解释什么是异步非阻塞?
同步和异步
同步就是烧开水,需要自己去轮询(每隔一段时间去看看水开了没),异步就是水开了,
然后水壶会通知你水已经开了,你可以回来处理这些开水了。
同步和异步是相对于操作结果来说,会不会等待结果返回。

阻塞和非阻塞
阻塞就是说在煮水的过程中,你不可以去干其他的事情,非阻塞就是在同样的情况下,
可以同时去干其他的事情。阻塞和非阻塞是相对于线程是否被阻塞。

这两者存在本质的区别,它们的修饰对象是不同的。
阻塞和非阻塞是指进程访问的数据如果尚未就绪,
进程是否需要等待,简单说这相当于函数内部的实现区别,也就是未就绪时是直接返回还是等待就绪。
而同步和异步是指访问数据的机制,同步一般指主动请求并等待I/O操作完毕的方式,
当数据就绪后在读写的时候必须阻塞,异步则指主动请求数据后便可以继续处理其它任务,
随后等待I/O,操作完毕的通知,这可以使进程在数据读写时也不阻塞。

21. 路由器和交换机的区别?
1.
路由器可以给你的局域网自动分配IP,虚拟拨号,就像一个交通警察,指挥着你的电脑该往哪走,你自己不用操心那么多了。
交换机只是用来分配网络数据的。
2.
路由器在网络层,路由器根据IP地址寻址,路由器可以处理TCP/IP协议,交换机不可以。
交换机在中继层,交换机根据MAC地址寻址。

3. 路由器可以把一个IP分配给很多个主机使用,这些主机对外只表现出一个IP。
交换机可以把很多主机连起来,这些主机对外各有各的IP。

4.
路由器提供防火墙的服务,交换机不能提供该功能。集线器、交换机都是做端口扩展的,
就是扩大局域网(通常都是以太网)的接入点,也就是能让局域网可以连进来更多的电脑。
路由器是用来做网间连接,也就是用来连接不同的网络。
5.
所有邮局构成的系统,就是“广域网”,而你的宿舍楼,就是“局域网”,构建局域网是不需要路由器的。

22. 什么是域名解析?
域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务.
域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。

23. 如何修改本地hosts文件?
hosts文件里面存放的是ip地址、主机名和主机缩略名的内容,一般可以用于测试本机上的网站
hosts文件位于C:\Windows\System32\drivers\etc文件夹中
记得使用管理员权限否则无法修改。
osts记录规则非常简单,只需要将你的记录以 “IP + 空格 + 域名” 的格式填写即可。
如:192.168.0.1 cpaneleasy.com
保存后通过cmd命令行进行ping测试,就会发现域名的解析地址已经变更为你所希望的了。

24. 生产者消费者模型应用场景及优势?
这样一种情况:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,
可以是类、函数、线程、进程等)。产 生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。
在生产者与消费者之间在加个缓冲区,我们形象的称之为仓库,生产者负责往仓库了进商品,
而消费者负责从仓库里拿商品,这就构成了生产者消费者模型。

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

26. LVS是什么及作用?
LVS即Linux虚拟服务器,是一个虚拟的四层交换器集群系统,
根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求转发。
27、Nginx是什么及作用?
Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。
28、keepalived是什么及作用?
Keepalived是Linux下一个轻量级别的高可用解决方案。
高可用,其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管,
29、haproxy是什么以及作用?
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,
完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架中,
同时可以保护你的web服务器不被暴露到网络上。
30、什么是负载均衡?
负载均衡有两方面的含义:
# 首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;
# 其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,
将结果汇总,返回给用户,系统处理能力得到大幅度提高。
31、什么是rpc及应用场景?
RPC 的全称是 Remote Procedure Call 是一种进程间通信方式。
它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。
即程序员无论是调用本地的还是远程的,本质上编写的调用代码基本相同(例如QQ远程操作)
32、简述 asynio模块的作用和应用场景。
asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持。
asyncio的异步操作,需要在coroutine中通过yield from完成。
33、简述 gevent模块的作用和应用场景。
Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,
在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。
Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。
34、twisted框架的使用和应用?
Twisted是一个事件驱动型的网络模型。
时间驱动模型编程是一种范式,这里程序的执行流由外部决定。
特点是:包含一个事件循环,当外部事件发生时,使用回调机制来触发相应的处理。

posted @ 2018-11-13 09:55  stalla  阅读(290)  评论(0)    收藏  举报