作业-day-240521

ops/2024/9/25 1:47:33/

多点思维导图

面试题

1、项目中如何实现TCP的并发

1)、一般的TCP服务器通信,只能完成一个客户端的操作。要实现多客户端的通信,可使服务器端循环创建并收发客户端的通信。

2)、但仅循环服务器使用的情况,由于accept、send、recv函数都是阻塞函数,必须等上一个任务执行完成后,才能执行下一个任务。

3)、为了解决上述问题,可以采用多进程和多线程的的方式实现多任务并发。

4)、多进程实现原理:

父进程:用于接收客户端的连接请求,并创建子进程。

子进程:只负责和客户端进行通信。

5)、多线程实现原理:

主线程:用于客户端的连接请求,并创建分支线程。

分支线程:只负责和客户端进行通信。

6)、注意资源回收:

子进程结束时,非阻塞形式(waitpid)回收资源。

分支线程创建时,设置分离态,结束时自动回收资源。

2、TCP通信的三次握手、四次挥手过程

三次握手:

1)主机A向主机B发送连接请求

2)主机B向主机A发送同意回复并发送连接请求

3)主机A向主机B发送收到回复

四次挥手:

1)主机A向主机B发送断开请求

2)主机B向主机A发送同意回复

3)主机B向主机A发送断开请求

4)主机A向主机B发送收到回复

TCP/IP协议分层及常见的协议

共有4层

应用层:

HTTP超文本传输协议(万维网的数据通信的基础)

FTP文件传输协议(用于在网络上进行文件传输的一套标准协议,TCP传输)

TFTP简单文件传输协议(用于在网络上进行文件传输的一套标准协议,UDP传输)

SMTP简单邮件传输协议(一种提供可靠且有效的电子邮件传输的协议)

传输层:

TCP传输控制协议(是一种面向连接的、可靠的、基于字节流的传输层通信协议)

UDP用户数据报协议(是一种无连接、不可靠、快速传输的传输层通信协议)

网络层:

IP网际互连协议(能够在多个不同网络间实现信息传输的协议)

ICMP互联网控制信息协议、IGMP互联网组管理

数据链路层:

ARP地址解析协议(通过IP地址获取对放mac地址)

RARP逆向地址解析协议(通过mac地址获取IP地址)

3、UDP传输丢包原因?发生在哪一层?

主要发生在网络层

丢包原因:

1)发送频率过快:UDP的sendto函数不会造成线程阻塞,不会像TCP中的send函数那样,直到数据完全发送才会return回调用函数,它不保证当执行下一条语句时数据是否被发送。

2)发送的报文过大,超过接受者缓存导致丢包。

3)网络连接不稳定

避免方法:

1)发送端控制发送评论。发送时使用usleep(1)延迟1微秒发送,即发送频率不要过快,延迟1微妙发送。

2)增大接受端缓存区。设置socket接收缓冲:

int nRecvBuf=64*1024;//设置为64K

setsockopt(rfd,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));

3)使用可靠的网络连接

4、同步和异步的区别?TCP是同步还是异步?

同步:多任务间有计划顺序的去执行。

异步:多任务间无指向顺序,哪个任务抢到时间片即指向。

TCP为同步,

服务器端任务执行顺序:收到客户端连接---->收到客户端信息---->返回信息到客户端

客户端任务执行顺序:和服务区端建立连接---->先服务器端发送信息---->接收服务器端的返回信息

5、TCP沾包现象?如何避免?

当TCP发送的多个数据包较小且前后间隔时间很短时,两个文件可能会被沾成一个数据包发送。

避免方式:

1)发送数据间间隔一段时间sleep。

2)格式化数据:每条数据有固定的格式(开始符、结束符)

3)发送数据长度:发送每条数据时,将数据长度一起发送。

6、组播和广播的异同

相同点:

1、都是一对多通信,所有接收端都会收到信息;2、都是通过UDP实现;3、都需加入相应的地址组才能接受到信息;4、都分为接收端和发送端;5、信息只能在当前网络中传输,无法通过路由。

不同点:

1、广播占用的网络带宽较大,容易影响通信。组播占用的网络带宽较小;

2、广播使用的地址:网络号+255

        组播使用的地址:D类网络[224.0.0.0~~239.255.255.255]

7、阻塞IO和非阻塞IO的区别

阻塞IO:当程序执行IO操作时,会发生阻塞直到操作完成。

1)针对阻塞IO的系统调用(如read, write)可能因为无法完成而被系统挂起,直到等待的事件发生为止。举例:read和write,通常IO操作都是阻塞I/O的,也就是说当你调用read时,如果没有数据收到,那么线程或者进程就会被挂起,直到收到数据。

2)阻塞IO是同步的,应用程序必须等待IO操作完成。

3)执行IO操作时,线程被阻塞,不能执行其他任务。

4)阻塞IO往往是单线程处理IO请求。

非阻塞IO:允许程序在进行IO操作时继续执行其他任务。

1)针对非阻塞IO的系统调用总是立刻返回,不管事件是否发生,如果事件没有立刻发生就返回-1,并且设置errno。对于accept,recv 和 send,事件未发生时,errno 通常被设置成 EAGAIN。

2)非阻塞IO是同步的,但可以通过设置非阻塞标志来实现异步效果。

3)执行IO操作时,线程不会被阻塞,可以继续处理其他任务。

4)非阻塞IO往往需要使用循环轮询或选择机制来判断IO操作是否就绪。

8、并发和并行的区别

并发:对于单核CPU,通过时间片分配机制,宏观上显示多个任务同时在执行,但微观上,在同一时间片中,只有一个任务在执行。
并行:对于多核CPU,同一个时间片中,会有多个任务在执行。

区别:

1)并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。

2)并行在多核处理器系统中存在,而并发可以在单核处理器和多核处理器系统中都存在。


http://www.ppmy.cn/ops/44385.html

相关文章

docker 清空所有镜像日志

Docker清空所有镜像日志流程 1. 查看当前运行的容器 首先,我们需要查看当前正在运行的容器,以确定需要清空日志的容器。 可以使用以下命令查看当前正在运行的容器: docker ps 1. 2. 停止所有运行中的容器 在清空镜像日志之前,我…

鲜花门店小程序开发流程:详细教程,让你轻松掌握

想要开发一款专属于自己鲜花门店的小程序吗?不知道从何开始?别担心,本文将为你提供详细的开发流程,帮助你轻松掌握。 1. 注册登录乔拓云网并进入操作后台 首先,你需要注册并登录乔拓云网,然后进入操作后台…

Golang对nil的Slice和空Slice处理是一致的吗

在Go中,nil的slice和空的slice并不完全相同,尽管它们的许多行为在很多情况下是相似的。 nil slice var s []int在这种情况下,s是一个nil的slice。它的容量和长度都为0,且没有指向任何底层的数组。 空slice s : []int{} // s :…

Apache Doris 2.1.3 版本正式发布!

亲爱的社区小伙伴们,Apache Doris 2.1.3 版本已于 2024 年 5 月 20 日正式发布。该版本在功能特性上对数据湖、物化视图、负载管理等方面进行了多项更新,进一步简化湖仓一体架构、加速了查询性能;同时提交了若干改进项以及问题修复&#xff0…

设计模式18—— 迭代器模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 迭代器模式(Iterat…

JavaWeb开发 3.Web开发 Web前端开发 ③ HTML、CSS

没有一朵花,一开始就是一朵花 —— 24.5.28 HTML、CSS知识在博主前端专栏,可以对照博客大致进行了解 https://blog.csdn.net/m0_73983707/category_12654678.htmlhttps://blog.csdn.net/m0_73983707/category_12654678.html

Vue.js 第五章 路由

1.初识路由 1.后端路由 2.前端路由 1.Hash模式 2.HTML5模式 2.初识Vue Router 1. Vue Router的安装 在Vue 3项目中演示Vue Router的安装 步骤一: 步骤二&#xff1a; 步骤三&#xff1a; 2. Vue Router的基本使用 1. 定义路由组件 <!-- Home.vue文件 --> <templa…

【运维项目经历|023】Docker自动化部署与监控项目

目录 项目名称 项目背景 项目目标 项目成果 我的角色与职责 我主要完成的工作内容 本次项目涉及的技术 本次项目遇到的问题与解决方法 本次项目中可能被面试官问到的问题 问题1&#xff1a;项目周期是多久&#xff1f; 问题2&#xff1a;服务器部署架构方式及数量配置…