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

news2024/11/25 0:36:06

目录

    • 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.coloradmin.cn/o/1400450.html

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

相关文章

kotlin $ (字符串模版)的使用

$ 在kotlin 中当做字符串模版使用,作用就是在字符串里面识别自己定义的字符 例如打印一个字符 这个时候编译就提示我们使用字符串模版的是个 $ 的作用就是识别字符串里面的i 字数有点少了,在写一个demo private fun String.appendArchive(): String …

Python小项目:还在为备份烦恼?这个tkinter项目帮你解决!

文章目录 1 引言2 Tkinter概览3 设计备份软件的界面4 文件夹选择逻辑5 备份方案介绍5.1 完全备份5.2 增量备份5.3 镜像备份 完整代码: import tkinter as tk from tkinter import filedialog, messagebox import os import shutil import filecmpdef choose_source(…

【git分支管理策略】

文章目录 前言一、分支管理策略简介二、git基本操作三、git分支远程分支本地分支 四、gitflow分支管理策略分支定义gitflow分支管理策略评价 五、GITHUB FLOW分支管理策略分支使用流程创建分支(Create a branch)新增提交(add and commit)提出 Pull 请求&…

快速上手的AI工具-文心3.5vs文心4.0

前言 大家好晚上好,现在AI技术的发展,它已经渗透到我们生活的各个层面。对于普通人来说,理解并有效利用AI技术不仅能增强个人竞争力,还能在日常生活中带来便利。无论是提高工作效率,还是优化日常任务,AI工…

TCP服务器的演变过程:C++使用libevent库开发服务器程序

C使用libevent库开发服务器程序 一、引言二、libevent简介三、Libevent库的封装层级3.1、reactor对象封装struct event_base3.2、事件对象struct event3.3、struct bufferevent对象3.4、evconnlistener对象3.5、事件循环3.6、事件处理 四、完整示例代码小结 一、引言 手把手教…

基于springboot的一个IT人才招聘网站系统源码+数据库+部署文档,公司可以发布岗位需求,求职者查找岗位并递交简历等

介绍 实现一个IT人才招聘系统,公司可以发布岗位需求,求职者查找岗位并递交简历等 启动 1. 主要技术版本 技术名称版本SpringBoot2.5.0MySQL8.0Redis6.2.0 2. 本地启动部署 2.1 数据库数据源部署 src/main/resources/application.yaml 配置文件&am…

C++入门学习(一)写一个helloworld

1、头文件 #include <iostream> using namespace std; 任何程序都需要这两句的&#xff0c;写上就好。 2、主文件 int main() {cout<<"Hello World!"<<endl;return 0; } 由于是int型数据&#xff0c;所以要返回一个值&#xff0c;即return0。…

如何在Mac上安装PHP环境

前置环境&#xff1a;HomeBrew # Homebrew 是 Mac 上最好的包管理器之一&#xff0c;可以用于安装各种开源软件。从 Terminal&#xff08;终端&#xff09;执行以下命令安装 Homebrew&#xff1a; /usr/bin/ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/i…

保姆级最新版Kali虚拟机安装和汉化中文教程

Kali虚拟机简介 Kali虚拟机是一款基于Debian的Linux发行版虚拟机操作系统&#xff0c;专为安全渗透测试和数字取证而设计。该虚拟机预装了许多渗透测试软件&#xff0c;包括Metasploit、BurpSuite、sqlmap、nmap以及Cobalt Strike等&#xff0c;这些工具都是为了进行网络安全测…

Go后端开发 -- 反射reflect 结构体标签

Go后端开发 – 反射reflect && 结构体标签 文章目录 Go后端开发 -- 反射reflect && 结构体标签一、反射reflect1.编程语言中反射的概念2.interface 和反射3.变量内置的pair结构4.reflect的基本功能TypeOf和ValueOf5.从relfect.Value中获取接口interface的信息6…

初识HarmonyOS

文章目录 本章节目标一、 HarmonyOS简介初识HarmonyOSHarmonyOS系统定位HarmonyOS典型应用场景 二、HarmonyOS架构与安全1. HarmonyOS架构解析内核层系统服务层框架层应用层应用服务智能分发 2. HarmonyOS系统安全正确的人正确的设备正确地使用数据 三、HarmonyOS关键特性1. 硬…

M1 MacOS下安卓虚拟化的最佳方案

categories: [VM] tags: MacOS VM 写在前面 一直想在桌面环境虚拟化安卓app, 但是看网上的推荐一直感觉不合胃口, 不是要花钱就是有广告, 想着找找开源的实现, 后来发现还是 Google 自家的产品用着舒服. 安装与配置 brew install android-studio然后随便开一个项目, 选默认…

JavaWeb-Filter

一、概念 Filter&#xff1a;过滤器&#xff0c;JavaWeb三大组件&#xff08;Servlet&#xff0c;Filter&#xff0c;Listener&#xff09;之一。作用是把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控…

[全连接神经网络]Transformer代餐,用MLP构建图像处理网络

一、MLP-Mixer 使用纯MLP处理图像信息&#xff0c;其原理类似vit&#xff0c;将图片进行分块(patch)后展平(fallten)&#xff0c;然后输入到MLP中。理论上MLP等价于1x1卷积&#xff0c;但实际上1x1卷积仅能结合通道信息而不能结合空间信息。根据结合的信息不同分为channel-mixi…

移动机器人规划 - 基于采样的路径搜索

0 预备知识 基于采样的规划器&#xff1a; &#xff08;1&#xff09;不要试图显示地构造C空间及其边界 &#xff08;2&#xff09;只需要简单的机器人配置是否发生碰撞 &#xff08;3&#xff09;利用简单的碰撞测试&#xff0c;充分了解空间 &#xff08;4&#xff09;碰撞检…

UKP3d的管道编辑

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

Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断

0 工具准备 Keil uVision5 Cortex M3权威指南&#xff08;中文&#xff09; Cortex M3与M4权威指南 stm32f407的HAL库工程 STM32F4xx中文参考手册 1 使用HAL库配置外部中断 前面我们已经熟悉了有关内核部分的寄存器配置&#xff0c;接下来我们结合stm32f407的GPIO外设&#xf…

深耕文档型数据库12载,SequoiaDB再开源

1月15日&#xff0c;巨杉数据库举行SequoiaDB新特性及开源项目发布活动。本次活动回顾了巨杉数据库深耕JSON文档型数据库12年的发展历程与技术演进&#xff0c;全面解读了SequoiaDB包括在高可用、安全、实时、易用性四个方向的技术特性&#xff0c;宣布了2024年面向技术社区的开…

toolz,一个无敌的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个无敌的 Python 库 - toolz。 Github地址&#xff1a;https://github.com/pytoolz/toolz Python是一种多用途的编程语言&#xff0c;具备广泛的库和框架&#xff0c;以支持各种编程范式&#x…

SSD硬盘数据恢复工具哪个强?分享五款好用的SSD硬盘数据恢复软件

固态硬盘 (SSD) 是数据存储领域真正的奇迹。SSD 没有机械部件&#xff0c;具有类似激光的读写速度&#xff0c;在笔记本电脑、游戏机和超级计算机中非常受欢迎。 然而&#xff0c;数据删除问题仍然很突出。如果您不小心删除了 SSD 中的关键数据怎么办&#xff1f; 5 款最佳 SS…