Unity 面试篇|(九)操作系统与网络篇 【全面总结 | 持续更新】

目录

    • 1. 客户端与服务器交互方式有几种?
    • 2. OSI七层模型有哪些,每一层的作用
    • 3. UDP/TCP含义,区别
    • 4. TCP/IP协议栈各个层次及分别的功能?
    • 5. 写出WWW的几个方法?
    • 6. Socket粘包
    • 7. Socket的封包、拆包
    • 8. Socket 客户端 队列 的问题
    • 9. 为什么会出现TCP 拥塞控制
    • 10. 简述序列化与反序列化
    • 11. 序列化的多种方案
    • 12. 网络抖动什么是网络抖动
    • 13. http与https的区别
    • 14. 进程和线程的区别
    • 15. 内存池、进程池、线程池

1. 客户端与服务器交互方式有几种?

  • socket通常也称作"套接字",实现服务器和客户端之间的物理连接,并进行数据传输,主要有UDP和TCP两个协议。Socket处于网络协议的传输层。
  • 协议传输的主要有http协议 和基于http协议的Soap协议(web service),常见的方式是 http 的post 和get 请求,web 服务。

2. OSI七层模型有哪些,每一层的作用

1

  • 应用层:是OSI参考模型的最高层
    它是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。它在其他6层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及应用所需的监督、管理和服务等各种协议。此外,该层还负责协调各个应用程序间的工作。

  • 表示层:是OSI模型的第六层
    它对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。其主要功能是“处理用户信息的表示问题,如编码、数据格式转换和加密解密”等。

  • 会话层:是OSI模型的第5层:
    是用户应用程序和网络之间的接口,主要任务是:向两个实体的表示层提供建立和使用连接的方法。将不同实体之间的表示层的连接称为会话。因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。

  • 传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。传输层的作用是向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。该层常见的协议:TCP/IP中的TCP协议、Novell网络中的SPX协议和微软的NetBIOS/NetBEUI协议。
    传输层提供会话层和网络层之间的传输服务,这种服务从会话层获得数据,并在必要时,对数据进行分割。然后,传输层将数据传递到网络层,并确保数据能正确无误地传送到网络层。因此,传输层负责提供两节点之间数据的可靠传送,当两节点的联系确定之后,传输层则负责监督工作。

  • 网络层:它是OSI参考模型中最复杂的一层,也是通信子网的最高一层。它在下两层的基础上向资源子网提供服务。其主要任务是:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。该层控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。
    一般地,数据链路层是解决同一网络内节点之间的通信,而网络层主要解决不同子网间的通信。例如在广域网之间通信时,必然会遇到路由(即两节点间可能有多条路径)选择问题。

  • 数据链路层:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。在计算机网络中由于各种干扰的存在,物理链路是不可靠的。因此,这一层的主要功能是在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。

  • 物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
    物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。

3. UDP/TCP含义,区别

  • UDP协议全称是用户数据报协议:

    • 面向无连接
    • 面向报文,
    • 不可靠性,
    • 有单播,多播,广播的功能
    • 头部开销小,传输数据报文时是很高效的。
  • TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。三次握手、四次挥手

  • TCP:

    • 面向连接
    • 仅支持单播传输
    • 面向字节流
    • 可靠传输
    • 提供拥塞控制
    • TCP提供全双工通信

4. TCP/IP协议栈各个层次及分别的功能?

  • 网络接口层:这是协议栈的最低层,对应OSI的物理层和数据链路层,主要完成数据帧的实际发送和接收。

  • 网络层:处理分组在网络中的活动,例如路由选择和转发等,这一层主要包括IP协议、ARP、ICMP协议等。

  • 传输层:主要功能是提供应用程序之间的通信,这一层主要是TCP/UDP协议。

  • 应用层:用来处理特定的应用,针对不同的应用提供了不同的协议,例如进行文件传输时用到的FTP协议,发送email用到的SMTP等。

5. 写出WWW的几个方法?

  • WWW.LoadFromCacheOrDownload:可被用于将Assets Bundles自动缓存到本地磁盘
  • WWW.Dispose :释放现有的 WWW 对象。
  • WWW.isDone:是否完成下载?(只读)
  • WWW.progress:下载进度(只读)。

6. Socket粘包

  • 什么是粘包?
    答:顾名思义,其实就是多个独立的数据包连到一块儿。

  • 什么情况下需要考虑粘包?
    答:实际情况如下:

    • 如果利用tcp每次发送数据,就与对方建立连接,然后双方发送完一段数据后,就关闭连接,这样就不会出现粘包问题。
    • 如果发送的数据无结构,比如文件传输,这样发送方只管发送,接收方只管接收存储就ok,也不用考虑粘包。
    • 如果双方建立连接,需要在连接后一段时间内发送不同结构数据,如连接后,有好几种结构:
      1)”good good study”
      2)”day day up”
      那这样的话,如果发送方连续发送这个两个包出去,接收方一次接收可能会是”good good studyday day up” 这样接收方就傻了,因为协议没有规定这么奇怪的字符串,所以要把它分包处理,至于怎么分也需要双方组织一个比较好的包结构,所以一般可能会在头加一个数据长度之类的包,以确保接收。
      所以说:Tcp连续发送消息的时候,会出现消息一起发送过来的问题,这时候需要考虑粘包的问题。
  • 粘包出现的原因 (在流传输中,UDP不会出现粘包,因为它有消息边界。)

    • 发送端需要等缓冲区满才发送出去,造成粘包 (发送端出现粘包)
    • 接收端没有及时接收缓冲区包数据,造成一次性接收多个包,出现粘包 (接收端出现粘包)
  • 解决粘包:

    • 缓冲区过大造成了粘包,所以在发送/接收消息时先将消息的长度作为消息的一部分发出去,这样接收方就可以根据接收到的消息长度来动态定义缓冲区的大小。(这种方法就是所谓的自定义协议,这种方法是最常用的)
    • 对发送的数据进行处理,每条消息的首尾加上特殊字符,然后再把要发送的所有消息放入一个字符串中,最后将这个字符串发送出去,接收方接收到这个字符串之后,再通过特殊标记操作字符串,把每条消息截出来。(这种方法只适合数据量较小的情况)
  • :要记住这一点:TCP对上层来说是一个流协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,是连成一片的,其间是没有分界线的,也就是没有包的概念。所以我们必须自己定义包长或者分隔符来区分每一条消息。

7. Socket的封包、拆包

  • 为什么基于TCP的通信程序需要封包、拆包?
    答:TCP是流协议,所谓流,就是没有界限的一串数据。但是程序中却有多种不同的数据包,那就很可能会出现如上所说的粘包问题,所以就需要在发送端封包,在接收端拆包。
  • 那么如何封包、拆包?
    答:封包就是给一段数据加上包头或者包尾。比如说我们上面为解决粘包所使用的两种方法,其实就是封包与拆包的具体实现。

8. Socket 客户端 队列 的问题

  • 项目中采用了socket通信,通过TCP发送数据给服务器端,因为项目需要,要同时开启大量的线程去发送不同的数据给服务器端,然后服务器端返回不同的数据。由于操作频繁,经常会阻塞,或没有接收到服务器端返回的数据;
  • 因此考虑到使用一个队列:将同一ip下的数据存入一个队列中,通过队列协调发送;当第一条数据发送出去没有收到服务器端返回的数据时,让第二条数据插入队列中排队,当第三条数据也发送出来后,继续排队,以此类推;
    如果当第四条数据发出来的时候,存入队列中,第一条数据收服务器端返回数据后,队列中的第二条第三条数据就扔掉,直接发送第四条数据

9. 为什么会出现TCP 拥塞控制

  • 拥塞的发生是因为路由器缓存溢出,拥塞会导致丢包,但丢包不一定触发拥塞。拥塞控制是快速传输的基础。一个拥塞控制算法一般包括慢启动算法、拥塞避免算法、快速重传算法、快速恢复算法四部分。

10. 简述序列化与反序列化

  • 序列化 :简单理解成把对象转换为容易传输的格式的过程。
    ⽐如,可以序列化⼀个对象,然后使⽤HTTP通过Internet在客户端和服务器端之间传输该对象

  • 反序列化 :将已经序列化过后的数据恢复成原先对象的过程。

11. 序列化的多种方案

  • XML:指可扩展标记语言(eXtensible Markup Language)。是一种通用和重量级的数据交换格式。以文本结构存储。
    • 优点:格式更为标准和统一、更容易和其它系统进行远程交互、数据共享比较方便
    • 缺点: 相比于JSON,由于需要成对的数据标签,数据更加的冗余。 而JSON使用键值对,压缩了数据空间并且更加可读。
  • JSON:是一种通用和轻量级的数据交换格式。以文本结构存储。
    • 优点:
      • 简单易用开发成本低、
      • 跨语言、
      • 轻量级数据交换、
      • 非冗长性(对比xml标签简单括号闭环)
    • 缺点:
      • 体积大,影响高并发
      • 无版本检查,自己做兼容
      • 片段的创建和验证过程比一般的XML复杂
      • 缺乏命名空间导致信息混合
      • 没有XML格式这么推广的深入人心和使用广泛,没有XML那么通用性
  • Protobuf
    protocol buffer是Google的一种独立和轻量级的数据交换格式。以二进制结构进行存储。
    Protobuf是一种以有效并可扩展的格式编码结构化数据的方式。
    • 优点:
      • 跨平台多语言,可自定义数据结构。
      • 字段被编号,新添加的字段不影响老结构。解决了向后兼容问题。
      • 序列化后体积相比json和xml很小,适合网络传输。
      • 序列化反序列化速度很快,快于Json的处理速度。
      • 自动化生成代码,简单易用。
      • 二进制消息,效率高,性能高。
      • Netty等框架集成了该协议,提供了编×××提高开发效率。
    • 缺点:
      • 二进制格式,可读性差(抓包dump后的数据很难看懂)
      • 对象冗余,字段很多,生成的类较大,占用空间。
      • 默认不具备动态特性(可以通过动态定义生成消息类型或者动态编译支持)
  • 三者比较:
    • json:一般的web项目中,最流行的主要还是json。因为浏览器对于json数据支持非常好,有很多内建的函数支持。
    • xml:在webservice中应用最为广泛,但是相比于json,它的数据更加冗余,因为需要成对的闭合标签。json使用了键值对的方式,不仅压缩了一定的数据空间,同时也具有可读性。
    • protobuf:是后起之秀,是谷歌开源的一种数据格式,适合高性能,对响应速度有要求的数据传输场景。因为profobuf是二进制数据格式,需要编码和解码。数据本身不具有可读性。因此只能反序列化之后得到真正可读的数据。

12. 网络抖动什么是网络抖动

  • 什么是网络抖动
    • 如果网络发生拥塞,排队延迟将影响端到端的延迟,并导致通过同一连接传输的分组延迟各不相同,而抖动,就是用来描述这样一延迟变化的程度。
    • 它是网络延时变化,最大延迟与最小延迟的时间差;
      如最大延迟是20毫秒,最小延迟为5毫秒,那么网络抖动就是15毫秒,它主要标识一个网络的稳定性。
  • 造成网络抖动的原因
    • 如果网络发生拥塞,排队延迟将影响端到端的延迟,并导致通过同一连接传输的分组延迟各不相同;
    • 当网络设备无法发送相同数据的流量,因此他们的数据包缓冲区已满并开始丢弃数据包。如果端点上的网络没有干扰,则每个数据包都会到达。
    • 但是,如果端点缓冲区满了,会使数据包到达的越来越晚,导致抖动。而抖动,就是用来描述这样一延迟变化的程度。因此,抖动对于实时性的传输将会是一个重要参数,比如:VOIP,视频等。
  • 解决方法
    • 数据包接收端的抖动缓存;缓存指针队列对接收到的数据包进行排序后,将接收到的数据包插入抖动缓存指针队列的相应位置;
    • 抖动缓存指针队列的出队线程定时器,以一定时间间隔触发出队线程,出队线程判断抖动缓存指针队列队头的数据包,是否应该在当前触发时刻出队,如果是,则将该数据包出队。

13. http与https的区别

  • HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
  • https则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。并且https协议需要到ca申请证书。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
  • HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
    HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

14. 进程和线程的区别

  • 线程是指进程内的一个执行单元,也是进程内的可调度实体。与进程的区别:
    • 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
    • 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。
    • 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
    • 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

15. 内存池、进程池、线程池

  • 内存池(Memory Pool)

    • 内存池是一种内存分配方式,用于分配大量大小相同的小内存块。使用内存池可以极大地加快内存分配与释放的速度,且能尽量避免内存碎片化。内存池在创建时先从系统中获取一大块内存(静态或动态),然后分成相同大小的多个小内存块,这些小内存块通过链表连接起来(此链表也称为空闲链表)。当需要分配内存时,系统从空闲链表中取出链头上第一个内存块,提供给申请者。当内存被释放时,它会被返回到空闲链表中,而不是直接返回给操作系统。
  • 进程池(Process Pool)

    • 进程池是一种用于并行处理的技术,它创建并管理一个固定数量(或动态数量)的进程集合。这些进程可以被用来并行地执行任务。当一个新任务提交到进程池时,如果池中有空闲的进程,该任务就会被分配给一个空闲进程去执行;如果没有空闲进程,任务通常会等待,直到有一个进程变得可用。进程池有助于减少创建和销毁进程的开销,提高系统资源的利用率。
  • 线程池(Thread Pool)

    • 线程池与进程池类似,但它是管理线程的集合,而不是进程。线程池中的线程数量可以是固定的,也可以是动态的。当需要执行一个新任务时,线程池会尝试使用一个现有的空闲线程来执行该任务,而不是创建一个新线程。这有助于减少线程的创建和销毁开销,并提高系统的吞吐量。线程池还提供了更好的控制和调度能力,例如可以设置线程的优先级、控制并发级别等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学建模常见算法的通俗理解(2)

目录 6 K-Means(K-均值)聚类算法(无需分割数据即可分类) 6.1 粗浅理解 6.2 算法过程 6.2.1 选定质心 6.2.2 分配点 6.2.3 评价 7 KNN算法(K近邻算法)(K个最近的决定方案) 7.…

【每日一题】按分隔符拆分字符串

文章目录 Tag题目来源解题思路方法一:遍历方法二:getline 写在最后 Tag 【遍历】【getline】【字符串】【2024-01-20】 题目来源 2788. 按分隔符拆分字符串 解题思路 方法一:遍历 思路 分隔符在字符串开始和结束位置时不需要处理。 分隔…

Crow:实现点击下载功能

Crow:设置网站的index.html-CSDN博客 讲述了如何完成一个最简单的网页的路由 很多网页提供了下载功能,怎么实现呢,其实也很简单。 假设网页的目录结构如图 $ tree static static ├── img │ └── goodday.jpg └── index.html //index.html <html> <body&…

专业137总分439东南大学920专业基础综合考研经验电子信息与通信电路系统芯片

我本科是南京信息工程大学&#xff0c;今年报考东南大学信息学院&#xff0c;成功逆袭&#xff0c;专业137&#xff0c;政治69&#xff0c;英语86&#xff0c;数一147&#xff0c;总分439。以下总结了自己的复习心得和经验&#xff0c;希望对大家复习有一点帮助。啰嗦一句&…

C++ :命名空间域

目录 冲突与命名&#xff1a; 举个例子&#xff1a; 全局与局部&#xff1a; 域作用限定符&#xff1a; 命名空间域&#xff1a; 冲突与命名&#xff1a; 在C语言中&#xff0c;我们通常会使用stdlib.h 而stdlib.h 本质上是一个函数的库&#xff0c;在程序中使用的大多数…

Java学习笔记(八)——Lambda表达式

文章目录 Lambda表达式Lambda表达式的省略写法Lambda练习练习1练习2 算法题算法题1 斐波那契数列算法题2 猴子吃桃子算法题3 爬楼梯 Lambda表达式 Lambda表达式是JDK8开始的一种新语法形式。 基本作用&#xff1a;简化函数式接口的匿名内部类的写法。 注意&#xff1a; Lam…

2023年总结我所经历的技术大变革

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;我们面对的不仅…

STL---Stack和Queue

一、stack的介绍和使用 &#xff08;1&#xff09;介绍 翻译: &#xff08;1&#xff09;stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。 &#xff08;2&#xff09; stack是作为容器…

微服务环境搭建:docker+nacos单机

nacos需要连接mysql&#xff0c;持久化相关配置。 1. 部署好mysql后&#xff0c;新建nacos数据库然后初始化nacos脚本 -- -------------------------------------------------------- -- 主机: 192.168.150.101 -- 服务器版本: …

c#调用matlab生成的COM DLL,Matlab GUI程序封装成exe文件并在不安装Matlab的电脑上运行

最近根据需求用Matlab写了一个简单的软件&#xff0c;但需要安装到其他电脑上运行&#xff0c;倒腾了很久最终成功在其他电脑上运行&#xff0c;现将方法共享给大家。安装方法&#xff1a;①程序封装 首先用Matlab写完程序并封装好&#xff08;我用的是Matlab2018b&#xff0c;…

【Linux系统编程】环境变量详解

文章目录 1. 环境变量的基本概念2. 如何理解呢&#xff1f;&#xff08;测试PATH&#xff09;2.1 切入点1查看具体的环境变量原因剖析常见环境变量 2.2 切入点2给PATH环境变量添加新路径将我们自己的命令拷贝到PATH已有路径里面 2.3 切入点3 3. 显示所有环境变量4. 测试HOME5. …

JNPF低代码开发平台总体架构介绍

目录 一、JNPF介绍 二、团队能力 三、技术选型 1.后端技术栈 2.前端技术栈 3.数据库支持 四、JNPF界面示意图 五、开发环境 一、JNPF介绍 JNPF是一款企业级低代码开发平台。基于Springboot、Vue技术&#xff0c;采用微服务、前后端分离架构&#xff0c;基于可视化数据建…

【论文解读】用于代码处理的语言模型综述

目录 1.简要介绍 2.代码处理的语言模型的评估 3.通用语言模型 4.用于代码处理的特定语言模型 5.语言模型的代码特性 6.软件开发中的LLM 7.结论与挑战 ​​​​​​​1.简要介绍 在这项工作中&#xff0c;论文系统地回顾了在代码处理方面的最新进展&#xff0c;包括50个模…

Ubuntu下安装Gazebo仿真器

Ubuntu下安装Gazebo仿真器 Gazebo仿真平台通常需要配合ROS使用&#xff0c;因此需要先安装ROS。可以参考ROS安装教程 首先安装一些必要的工具 sudo apt-get update sudo apt-get install lsb-release wget gnupg修改源 sudo wget https://packages.osrfoundation.org/gazebo…

cpp_12_异常处理

1 异常理论 1.1 何为异常&#xff1f; 在实际运行环境中发生&#xff0c;却在设计、编码、测试阶段无法预料的&#xff0c;各种潜在的问题。 1.2 报告异常的2种机制 1&#xff09;通过 return 返回值报告异常信息&#xff1a; 所有局部对象都能正确地被析构、被释放 定位错…

中仕教育:公务员政审需要哪些材料?

公务员政审则是公务员招聘过程中的重要环节&#xff0c;政审需要哪些材料呢? 一、个人基本信息 1. 身份证、户口本原件及复印件; 2. 学历学位证书原件及复印件; 3. 近期免冠一寸彩色照片2张; 4. 无犯罪记录证明材料; 5. 个人自传 6. 提供本人的现实表现证明材料(应届生…

【数据结构初阶】——顺序表

本文由睡觉待开机原创&#xff0c;转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 这里写目录标题 1.数据结构2.顺序表线性表顺序表的结构 3.动态顺序表的实现 1.数据结构 数据结构的概念&…

UKP3d的管道编辑

山西这家用户在使用UKP3d时&#xff0c;提出以下问题&#xff1a; 1、stp导入的模型怎么测量距离&#xff1b;另外需要把某一个点移动至原点坐标&#xff0c;这个怎么操作呢&#xff1f; 回复&#xff1a;dist&#xff08;主要是捕捉点&#xff0c;推荐使用&#xff08;开启精…

Java面试汇总——jvm篇

目录 JVM的组成&#xff1a; 1、JVM 概述(⭐⭐⭐⭐) 1.1 JVM是什么&#xff1f; 1.2 JVM由哪些部分组成&#xff0c;运行流程是什么&#xff1f; 2、什么是程序计数器&#xff1f;(⭐⭐⭐⭐) 3、介绍一下Java的堆(⭐⭐⭐⭐) 4、虚拟机栈(⭐⭐⭐⭐) 4.1 什么是虚拟机栈&…

Spark面试题

1. spark core 1.简述hadoop 和 spark的不同点&#xff08;为什么spark更快&#xff09;♥♥♥ shuffle都是需要落盘的&#xff0c;因为在宽依赖中需要将上一个阶段的所有分区数据都准备好&#xff0c;才能进入下一个阶段&#xff0c;那么如果一直将数据放在内存中&#xff0c…