网络相关面试题_can 进阶面试题-程序员宅基地

技术标签: 网络  多线程  队列  数据库  面经  

1.简述OSI七层协议

在这里插入图片描述
物理层:定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质
数据链路层:定义如何传输格式化数据,以及如何访问物理介质
网络层:定义逻辑网络地址
传输层:定义传输协议和端口
会话层:定义客户端与服务端的连接
表示层:定义数据格式转换,对来自应用层的数据进行解释
应用层:定义应用程序

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

C/S架构:client(客户端)与server(服务端),即客户端与服务端的架构
B/S架构:brosver(浏览器端)与server(服务端),即浏览器端与服务端架构

3.三次握手、四次挥手

三次握手 ——> 请求连接

第一次握手
客户端先向服务端发送一次询问建立连接的请求,并随机生成一个值作为标识
第二次握手
服务端向客户端先回应第一个标识,再重新发一个确认标识
第三次握手
客户端确认标识,建立连接,开始传输数据

四次挥手 ——> 断开连接

第一次挥手
客户端向服务端发送请求断开连接的请求
第二次挥手
服务端向客户端确认请求,表示知道了
第三次挥手
服务端向客户端发起断开连接请求
第四次挥手
客户端向服务端确认断开请求,表示已断开

4.TCP与UDP的区别

TCP协议:面向连接,高可用性的传输层协议
UDP协议:不面向连接,数据会丢失,不可靠的传输层协议 (短信和QQ基于UDP协议)

5.为何基于TCP协议的通信比基于UDP协议的通信更可靠?

TCP:可靠,因为只要对方回了确认收到信息,才发下一个,如果没收到确认信息就重发
UDP:不可靠,它是一直发数据,不需要对方回应
流式协议:TCP协议,可靠传输
数据报协议:UDP协议,不可传输

6.什么是socket?简述基于TCP协议的套接字通信流程

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。
在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部。
流程
服务端:创建socket对象;绑定IP和端口bind(); 创建双工通信,等待连接; send(), recv(), 收发数据;close()
客户端:创建socket对象;与服务端创建双工通信,请求连接; send(),recv(), 收发数据;close()

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

只有TCP有粘包现象,UDP永远不会粘包!
粘包:在接收数据时,一次性多接收了其它请求发送来的数据(即多包接收)。如,对方第一次发送hello,第二次发送world,在接收时,应该收两次,一次是hello,一次是world,但事实上是一次收到helloworld,一次收到空,这种现象叫粘包。

原因:粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。

什么情况会发生:
1、发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据很小,会合到一起,产生粘包)
2、接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)

8.IO多路复用的作用

socketserver,多个客户端连接,单线程下实现并发效果,就叫多路复用。
与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。

9.select、poll、epoll 模型的区别?(属于多路复用IO的模型)

都是i/o多路复用的机制,监视多个socket是否发生变化,本质上都是同步i/o,select,poll实现需要自己不断轮询所有监测对象,直到对象发生变化,在这个阶段中,可能要睡眠和唤醒多次交替,而epoll也需要调用epoll_wait不断轮询就绪链表,但是当对象发生变化时,会调用回调函数,将变化的对象放入就绪链接表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都会睡眠和唤醒,但是select和poll在被唤醒的时候要遍历整个监测对象集合,而epoll只要判断就绪链表是否为空即可,节省了大量cpu的时间。
select、poll、epoll都是IO多路复用的机制,但select,poll,epoll本质上都是同步I/O,
因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的.

FD(文件描述符)
select模型
优点:
1:可移植性好,在某些Unix系统不支持poll()
2:对于超时值提供了更好的精度:微妙,而poll是毫秒
缺点:
1:最大并发数限制,因为一个进程所打开的 FD (文件描述符)是有限制的,由 FD_SETSIZE 设置,默认值是 1024/2048 ,因此 Select 模型的最大并发数就被相应限制了。
2:效率问题,select每次调用都会线性扫描全部的FD集合,所以将FD_SETSIZE 改大,会越慢
3:需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大。

poll本质上和select 没有区别,它将用户传入的数组拷贝到内核空间,它没有最大连接数的限制,原因是它基于链表来存储的但是同样有一个缺点:大量的fd的数组被整体复制于用户态和内核地址空间,而不管这样的复制是不是有意义。

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

防火墙是一个分离器、一个限制器,也是一个分析器,有效地监控了内部网和Internet之间的任何活动,保证了内部网络的安全。

作用:

  • 网络安全的屏障
  • 对网络存取和访问进行监控审计
  • 防止内部信息的外泄
  • 除了安全作用,防火墙还支持具有Internet服务特性的企业内部网络技术体系VPN(虚拟专用网)

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

线程是指进程内的一个执行单元,
**进程:**进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。
**线程:**线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度。
**协程:**协程是运行在单线程中的"并发",协程相比多线程的一大优势就是省去了多线程之间的切换开销,获得了更高的运行效率。所以可以用协程取代多线程。协程避免了无意义的调度,由此可以提高性能;但同时协程也失去了线程使用多核CPU的能力。

进程与线程的区别
如果把进程比喻成项目组办公室,那么线程就是办公室里的员工,一个办公室可以有多个员工,每个员工的任务不同,但他们共享办公司资源。
(1)地址空间:线程是进程内的一个执行单位,进程内至少有一个线程,他们共享进程的地址空间,而进程有自己独立的地址空间
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内多线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是
(4)二者均可并发执行
(5)每个独立的线程有一个程序运行的入口

协程与线程
(1)一个线程可以有多个协程,一个进程也可以有多个协程,这样Python则能使用多核CPU
(2)线程、进程都是同步机制,而协程是异步
(3)协程能保留上一次调用时的状态

12.GIL锁是什么?

GIL本质就是一把互斥锁,既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,进而保证数据安全。
GIL保护的是解释器级的数据,保护用户自己的数据则需要自己加锁处理。
应用(总结):
多线程用于IO密集型,如socket,爬虫,web
多进程用于计算密集型,如金融分析

  1. 每个cpython进程内都有一个GIL
  2. GIL导致同一进程内多个进程同一时间只能有一个运行
  3. 之所以有GIL,是因为cpython的内存管理不是线程安全的

13.Python中如何使用线程池和进程池?

因为在切换线程/进程的时候,需要切换上下文环境,线程很多的时候,依然会造成CPU的大量开销。为解决这个问题,线程池的概念被提出来了。
预先创建好一个数量较为优化的线程/进程组,在需要的时候立刻能够使用,就形成了线程/进程池。
如果池还没有满,那么就会创建一个新的线程/进程用来执行该请求;但如果池中的线程/进程数已经达到规定最大值,那么该请求就会等待。

from multiprocessing import Pool

p = Pool(processes=4)        # 允许最多同时放入4个进程,自由调配子程序。默认是本机的CPU核数。
for i in range(20):          # 开启20个进程
    res = p.apply_async(func=task, args=(x,), callback='回调函数')    # 异步运行进程池,func传入函数,arg是元组,有返回结果
                                                                            
p.close()                    # 调用join()之前必须先调用close()
p.join()                     # 等待目前子进程结束后,继续运行下一个子进程。如果没有则进入主进程

14.threading.local()的作用

实现线程的不同函数之间局部变量的传递。
threading.local()最常用的地方:
为每个线程绑定一个资源(数据库连接,HTTP请求,用户身份信息等),这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源。

15.进程之间如何进行通信?

线程/进程彼此之间互相隔离,要实现线程/进程间通信,Python提供了队列Queue(线程通信)、管道Pipe(进程通信)等多种方式来交换数据。
Queue主要方法:put(),get()
Pipe主要方法:send(),recv()

16.什么是并发和并行?

并发:同一时刻只能处理一个任务,但可以交替处理多个任务。(一个处理器同时处理多个任务)
并行:同一时刻可以处理多个任务。(多个处理器或者是多核的处理器同时处理多个不同的任务)
类比:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。

17.进程锁和线程锁的作用

为了保证数据安全,Python设计了锁,即同一时刻只允许一个线程或进程操作数据。

18.同步和异步,阻塞和非阻塞的区别?

同步:执行一个操作之后,需要主动等待返回结果;
异步:执行一个操作之后,不需要主动等待返回结果,若接收到结果通知,再回来执行刚才没执行完的操作。
同步和异步关心的问题是:要不要主动等待结果。

阻塞:在执行一个操作时,不能做其他操作;
非阻塞:在执行一个操作时,能做其他操作。
阻塞和非阻塞关心的问题是:能不能做其他操作。

19.路由器和交换机的区别

  1. 交换机:是负责内网里面的数据传递(arp协议)根据MAC地址寻址。
    路由器:在网络层,路由器根据路由表,寻找该ip的网段。
  2. 路由器可以把一个IP分配给很多个主机使用,这些主机对外只表现出一个IP。
    交换机可以把很多主机连起来,这些主机对外各有各的IP。
  3. 交换机是做端口扩展的,也就是让局域网可以连进来更多的电脑。
    路由器是用来做网络连接,也就是连接不同的网络。

20.什么是域名解析?

在互联网上,所有的地址都是ip地址,现阶段主要是IPv4(比如:110.110.110.110)。
但是这些ip地址太难记了,所以就出现了域名(比如http://baidu.com)。
域名解析就是将域名,转换为ip地址的这样一种行为。

21.如何修改本地hosts件?

Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,
当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,
一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交给DNS域名解析服务器进行IP地址的解析。

文件路径:C:\WINDOWS\system32\drivers\etc。
将127.0.0.1 www.163.com 添加在最下面
修改后用浏览器访问“www.163.com”会被解析到127.0.0.1,导致无法显示该网页。

22.生产者消费者模型应用场景及优势

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

  1. 解耦
    假设生产者和消费者分别是两个类。如果让生产者直接调用消费者的某个方法,那么生产者对于消费者就会产生依赖(也就是耦合)。将来如果消费者的代码发生变化,可能会影响到生产者。而如果两者都依赖于某个缓冲区,两者之间不直接依赖,耦合也就相应降低了。
  2. 支持并发
    生产者直接调用消费者的某个方法,还有另一个弊端。由于函数调用是同步的(或者叫阻塞的),在消费者的方法没有返回之前,生产者只能一直等着;而使用这个模型,生产者把制造出来的数据只需要放在缓冲区即可,不需要等待消费者来取。
  3. 支持忙闲不均
    缓冲区还有另一个好处。如果制造数据的速度时快时慢,缓冲区的好处就体现出来了。当数据制造快的时候,消费者来不及处理,未处理的数据可以暂时存在缓冲区中。等生产者的制造速度慢下来,消费者再慢慢处理掉。

23.什么是cdn?

目的是使用户可以就近到服务器取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
cdn 即内容分发网络

24.LVS是什么及作用?

LVS :Linux虚拟服务器
作用:LVS主要用于多服务器的负载均衡。
它工作在网络层,可以实现高性能,高可用的服务器集群技术。
它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。
它易用,配置非常简单,且有多种负载均衡的方法。
它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

25.Nginx是什么及作用

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器,同时也是一个IMAP、POP3、SMTP代理服务器。
可以用作HTTP服务器、方向代理服务器、负载均衡。

26.什么是负载均衡?

将服务器接收到的请求按照规则分发的过程,称为负载均衡。

27.twisted框架的应用

twisted是异步非阻塞框架。爬虫框架Scrapy依赖twisted。

28.大规模连接上来,并发模型怎么设计?

**多进程:**开启多个进程为客户端服务,同一时刻可为多个客户端提供服务,但是任务量大会因为创建进程的开销影响服务器性能。
**多线程:**一个进程内开启多个线程,同一时刻只能为一个客户端服务,I/O等待的时间可以进行别的任务,不会浪费时间,不影响服务器性能,推荐使用。
**协程:**协程的优势在于函数入口可以是上次停止的地方,显然对大规模连接没什么帮助。
所以这种情况推荐使用多线程来设计并发模式。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Candance_star/article/details/103904999

智能推荐

yum安装及配置_安装yum-程序员宅基地

文章浏览阅读10w+次,点赞40次,收藏332次。yum是用来管理rpm的,就跟maven管理jar包相似。yum源(库)分为本地库、网络库。首先要配置yum源,可支持多个源。先查看一下挂载情况:df -h这里我们要更换光盘,并挂载:mount /dev/cdrom /mnt(如果不能成功挂载,点击一下连接即可)之后再次使用 df -h命令,就能查看到光盘的内容。下面我们cd到 /mnt下查看一下:首先关注一下Pa..._安装yum

关于STM32 CAN的过滤器/滤波器_stm32can mailbox filter-程序员宅基地

文章浏览阅读3.8k次,点赞5次,收藏12次。1.在设置CanTxMsg.StdId时注意需要将其右移一位,比如如下滤波器配置:CAN_FilterInitStructure.CAN_FilterNumber=0;CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;CAN_FilterInitStructure.CAN_FilterScale=CAN_Filter..._stm32can mailbox filter

HDU 5119 Happy Matt Friends(动态规划)【状压基础类模板】_matt has n friends. they are playing a game togeth-程序员宅基地

文章浏览阅读373次。att has N friends. They are playing a game together. Each of Matt’s friends has a magic number. In the game, Matt selects some (could be zero) of his friends. If the xor (exclusive-or) sum of the selected friends’magic numbers is no less than M , Matt wi_matt has n friends. they are playing a game together.

vue3+vite+ts项目配置开发环境和生产环境 打包命令配置_vite打包配置-程序员宅基地

文章浏览阅读8.4k次,点赞6次,收藏29次。开发环境和生产环境的配置和打包方式有所不同,下面是基于vue3+vite+ts项目的开发环境和生产环境配置及打包方式的详细说明。打包完成后会在项目根目录下生成dist目录,里面包含了打包后的静态文件和index.html文件,可以直接部署到服务器上。这里配置了三个命令,分别是开发环境启动命令、开发环境打包命令和生产环境打包命令。1.3 配置.env.development。2.2 配置.env.production。1.2 配置vite.config.ts。2.1 配置vite.config.ts。_vite打包配置

(最新最详细)安装ubuntu18.04-程序员宅基地

文章浏览阅读2w次,点赞4次,收藏91次。目录1. window10中下载ubuntu镜像2. 制作U盘启动盘3. Ubuntu 分配硬盘空间1. window10中下载ubuntu镜像下载地址2. 制作U盘启动盘安装制作工具:UltraISO(点我下载),下载完成后安装插入用来做启动盘的U盘(最好是usb3.0接口,16GB或以上),并清空里面的文件打开安装好的UltraISO,点击继续试用按钮工作界面进入工作界面后,点击菜单栏文件(F),在弹出的选项卡里点击打开在弹出的文件选择对话框中找到下载好的 Ubuntu18.04._ubuntu18.04

Toad报“No valid Oracle Client found”错-程序员宅基地

文章浏览阅读203次。2019独角兽企业重金招聘Python工程师标准>>> ..._toad no valid oracle client

随便推点

Linux 文件系统 EXT4 的前世今生-程序员宅基地

文章浏览阅读161次。在先前关于Linux文件系统的文章中,我写了一份说明书去介绍Linux文件系统,里面有一些高级的概念,比如说,一切都是文件。我很想去深入地讨论更多EXT文件系统的特性的信息。所以,首先让我们来回答这个问题:什么是文件系统?一个文件系统应该遵循以下特点: 1.数据存储:文件系统主要的功能是结构化存储和取回数据。 2.命名空间:提供一套命名和组织的方法,就是命名和结构化数据的规则。 3.安全模型:一种访问控制的策略。 4.API:系统操控文件系统对象的函数,就像操作文件夹...

别人家的公司:微软为员工发1500美元疫情奖金-程序员宅基地

文章浏览阅读308次。西雅图IT圈:seattleit【今日作者】Dexter读书巨慢理事会会长别人家的公司什么样?坐拥巨额现金流的微软,一言不合就发钱。01昨天微软首席人事官凯瑟琳霍根宣布——将向微软全球员工..._微软 西雅图 年底奖金

Ik分词器配置远程扩展字典_ik analyzer 扩展词典配置远程词典 可实时编辑-程序员宅基地

文章浏览阅读2k次。通过配置远程扩展词典,可以读取远程词典,当改变远程词典时,不必重启服务器,elasticsearch会自动加载并进行分词。步骤:配置文件服务器,把远程扩展词典放到服务器下。修改elasticsearch目录下plugins\ik\config\IKAnalyzer.cfg.xml文件并保存,如下: <properties> <comment>IK A..._ik analyzer 扩展词典配置远程词典 可实时编辑

分布式系列教程(11) -分布式协调工具Zookeeper(分布式锁实现)_分布式锁 的具体实现工具-程序员宅基地

文章浏览阅读553次,点赞2次,收藏2次。代码已提交至Github,有兴趣的同学可以下载来看看(git版本号:bea4d6f7ec9f7309033bcfa43316a660171ae5b6):https://github.com/ylw-github/Zookeeper-Demo本文目录结构:l____1. 知识点回顾l________1.1 多线程l________1.2 Java共享内存模型l____2. 分布式锁的解决方..._分布式锁 的具体实现工具

Nginx网站服务详解(Nginx服务的主配置文件 ——nginx.conf)-程序员宅基地

文章浏览阅读9.3k次,点赞9次,收藏51次。Nginx网站服务详解,Nginx服务的主配置文件,修改,监听,配置,密码认证,以及IP和端口虚拟主机配置方法,含图文步骤拆解讲解_nginx.conf

Java并发——Synchronized关键字和锁升级,详细分析偏向锁和轻量级锁的升级_3.轻量级锁-程序员宅基地

文章浏览阅读10w+次,点赞266次,收藏1.1k次。目录一、Synchronized使用场景二、Synchronized实现原理三、锁的优化1、锁升级2、锁粗化3、锁消除一、Synchronized使用场景Synchronized是一个同步关键字,在某些多线程场景下,如果不进行同步会导致数据不安全,而Synchronized关键字就是用于代码同步。什么情况下会数据不安全呢,要满足两个条件:一是数据共享(临界资源),二..._3.轻量级锁

推荐文章

热门文章

相关标签