游戏开发面试题4

局部变量全局变量

  • 全局变量是定义在函数外部的变量,它可以在函数的内外部的任何地方被访问和使用。全局变量通常定义在程序的开头,在整个程序运行期间都是可用的。
  • 局部变量是定义在函数内部的变量,它只能在函数的内部被访问和使用。局部变量只在函数的执行期间有效,函数结束后,它就会被销毁。

局部变量加static

static 修饰的局部变量可以在程序的多次执行过程中保持其值不变,也就是说当一个函数调用结束,其局部变量并不会被释放,而是保留在内存中,供以后使用。而且static修饰的局部变量只能在当前文件中访问,即使在其他文件中也不能访问。

值传递和引用传递

  • 值传递:把函数外部的值复制一份传递到函数内部,在函数内部修改,不会影响到函数外部的值。
  • 引用传递:把函数外部的变量的地址传递到函数内部,在函数内部修改,会影响到函数外部的值。

OSI七层模型

OSI七层模型分别为:物理层(Physical Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)和应用层(Application Layer)。

  1. 物理层(Physical Layer):负责传输电信号,规定电缆连接、传输模式、数据编码协议和电器设备等。
  2. 数据链路层(Data Link Layer):负责管理物理层的硬件设备,如网卡和无线接口等,局部网络的数据传输,进行错误检测和纠正,以及网络可靠性的提高等。
  3. 网络层(Network Layer):负责数据包在网络中传输,路由选择、网络地址分配等功能,实现网络中主机之间的通信。
  4. 传输层(Transport Layer):负责确保传输数据的正确传递,提供端到端(end-to-end)的可靠性和有序性,以及可靠性确认机制,如TCP协议、UDP协议等。
  5. 会话层(Session Layer):负责维护两台主机之间的会话,比如建立会话、终止会话等。
  6. 表示层(Presentation Layer):负责数据的表示格式,包括数据的编码和加密,提供应用程序之间的数据交换格式,以及压缩和解压缩等功能。
  7. 应用层(Application Layer):负责提供网络应用服务,支持用户与网络进行交互,如FTP、SMTP、HTTP等协议等。

TCP/IP五层网络模型

TCP/IP五层网络模型由应用层、传输层、网络层、数据链路层和物理层组成。

  1. 应用层:应用层提供网络应用程序之间的通信接口,如HTTP、FTP、Telnet、SMTP等。它为用户提供了定义特定网络应用服务的协议,比如文件传输协议FTP和网页浏览协议HTTP。
  2. 传输层:传输层提供进程间的通信服务,如传输控制协议(TCP)和用户数据报协议(UDP)等。它负责在两个端点之间传输数据,确保数据的可靠传输,并维护数据的流量控制和拥塞控制。
  3. 网络层:网络层定义了分组的路由选择,如因特网协议(IP)等。它为数据报文选择最有效的路由,并将数据报文传输到目的网络中。
  4. 数据链路层:数据链路层负责在传输媒介上传输数据报文,如以太网、无线局域网等。它负责将网络中的两台主机连接在一起,并在它们之间传送数据帧。
  5. 物理层:物理层定义了物理设备的接口,如光纤、双绞线、无线及其他通信信道等。它负责将比特流转换为电信号或光信号,并在物理设备之间传输。

UDP如何实现可靠传输

UDP可以使用超时重传和ACK机制来实现可靠传输。

  • 超时重传:发送端会把数据发送出去,并设置一个定时器,如果没有在规定的时间内收到确认信息,则会重新发送这条数据,直到收到确认信息为止。
  • ACK机制:接收端收到数据后,会发送一个ACK信息给发送端,告知发送端这条数据已经收到,这样发送端就收到了确认信息,就知道这条数据是可靠地传输到接收端了。

TCP和UDP的区别,应用场景

TCP面向连接的,UDP是无连接的,TCP需要三次握手建立可靠连接,UDP只需要知道地址,不可靠传输

UDP比TCP传输的速度更快

TCP面向字节流,UDP面向报文

TCp只能是一对一通信,UDP可以一对多,也可以多对多传输

UDP可以用于电话,视频,直播等实时应用。TCP可以用于文件传输,消息聊天等有可靠要求的应用

TCP连接三次握手的过程

  • 第一次握手:客户端请求建立连接,向服务端发送一个请求报文(SYN=1),同时选择一个随机数seq=x作为初始序列号,并进入等待连接状态,等待服务器的确认
  • 第二次握手:服务端收到请求连接报文之后,如果同意连接,就向客户端发送请求确认报文(SYN=1,ACK=1),确认号为ack=x+1,同时选择一个seq=y作为初始序列号,此时服务器进入等待连接状态
  • 第三次握手:客户端收到服务端的确认后,向服务端发送一个确认报文(ACK=1),确认号为ack=y+1,序列号为seq=x+1,客户端进入连接状态,服务端收到确认报文之后也进入连接状态,连接建立。

为什么TCP握手三次而不是两次、四次

为什么不是两次
  1. 防止已过期的连接请求又传送到服务器,由此产生的错误和资源浪费

如果两次握手就能建立连接,假设客户端发送A报文段请求连接,但是因为网络的原因造成A延迟到达,服务端收不到客户端的请求连接报文就不会反回确认报文。

客户端在长时间没有收到服务端的确认报文,就会触发超时重传机制,重新发送请求连接报文B,刚好这次报文B顺利到达了服务端,服务端也返回了确认连接报文,建立一次连接数据发送完成之后正常四次挥手断开连接

很巧啊,断开之后之前发送的请求连接报文A到达了服务端,服务端看到请求连接之后马上回了一个确认连接报文进入到了连接状态,但是客户端已经关闭了收不到服务端发来的确认连接请求,就造成了服务端单方面等待,浪费资源,如果是三次握手的话,服务端此时只是处于等待连接的状态

  1. 三次握手才能让双方都确认自己和对方的发送、接收能力都正常

第一次握手:客户端只是发送请求连接报文,什么都无法确认,而服务端收到客户端的请求连接报文,可以确认客户端的发送能力是正常的

第二次握手:客户端收到服务端的确认连接报文,可以确认服务端的接收和发送能力都是正常的

第三次握手:服务端收到客户端的确认连接报文,可以确认客户端的接收和发送功能都是正常的

如果只有两次握手,那服务端无法确认客户端的接收能力是不是正常的,违背了TCP可靠传输的前提

为什么不是四次
  • 因为没有必要,三次握手已经能建立可靠连接了

三次握手连接阶段,最后一次ACK包丢失,会发生什么

服务端:
  • 第三次的ACK包丢失之后,服务端此时处于待连接状态,长时间没有收到ACK包会触发超时重传机制,等待一段时间之后服务端重新发送SYN+ACK包,等待客户端的ACK包
  • 如果重发次数超过一定限制之后,还没有收到客户端的ACK包,服务端默认此次连接失败,关闭连接
客户端:
  • 而客户端已经进入了连接状态,当客户端向服务端发送数据时,服务端将返回RST包表示此次连接异常

TCP关闭连接四次挥手的过程

第一次挥手:客户端向服务端发送请求关闭报文(FIN=1,ACK=1),主动关闭连接,同时等待服务端确认序列号seq=u,即客户端上次发送报文的最后一个字节的序号+1,确认号ack=k,即服务端上次发送报文的最后一个字节的序号+1

第二次挥手:服务端收到关闭连接请求后,立即回复确认报文(ACK=1)序列号seq=k,确认号ack=u+1

第三次挥手:服务端向客户端发送连接释放报文(FIN=1,ACK=1),主动关闭连接,等待客户端确认。序列号seq=w,即服务端上次发送报文的最后一个字节的序列号+1.确认号ack=w+1

第四次挥手:客户端收到服务端的请求关闭连接之后,立即发送确认报文(ACK=1),序列号seq=u+1,确认号ack=w+1。

客户端进入超时等待状态,服务端收到客户端的确认报文之后立即关闭,客户端在超时等待之后也关闭

为什么客户端要有一个超时等待的状态

确保ACK报文能够顺利到达服务端,使服务端正常关闭,第四次挥手时,客户端发送的ACK报文不一定能到达服务端,服务端会超时重传(FIN、ACK)包,如果客户端马上断开了连接,那就无法响应服务端的第二次请求,造成资源浪费。

如果已经建立了连接,但是客户端出现故障了怎么办

TCP会有一个定时器+超时重传机制,如果服务端发送数据给客户端没有得到任何的反馈,在超时之后服务端会发送一个探测报文,在连续发送十个探测报文都没有得到回应,服务端默认此次连接关闭。

TCP协议如何保证可靠性

滑动窗口:滑动窗口提高了报文传输的效率,也避免了发送方发送过多的数据导致无法处理的现象

超时重传:如果发出去的数据在规定时间内没有得到应答,就会认为发生了丢包,重新发送一次

拥塞控制:传输的过程中,可能会因为网络的原因造成网络拥堵,引入拥塞控制机制,保证TCP传输的可靠性

流量控制:如果主机A一直向主机B发送数据,不考虑主机的接收能力,则很有可能导致主机B的接收缓冲区满了而无法在接收数据,从而导致大量的数据丢包,引发重传机制,流量控制机制,主机B告诉主机A自己的接收缓冲区的大小,来使主机A控制发送的数据量。

详细说一下滑动窗口

接收区大致分为四组,一组是已经发送并被确认的分组,一组是已经发送但还没有被确认的分组,一组是即将要发送的分组,一组是还没轮到要发送的分组,滑动窗口控制已经发送但没被确认和马上要发送的分组,当已经发送的数据被确认,窗口开始滑动,将没轮到的分组纳入滑动窗口。滑动窗口的最大尺寸由发送方设定,接收方收到数据包之后,会发送一个确认报文给发送方,发送方收到确认报文后会将滑动窗口移动

详细说一下拥塞控制

慢开始:不要一开始就发送大量数据,而是由小到大慢慢增加拥塞窗口的大小

拥塞避免:拥塞避免算法让拥塞窗口慢慢增长,每经过一个往返时间就把发送方的拥塞窗口加1而不是加倍

快重传:在收到接收方的一个失序的报文之后就立即发送重复确认,只要收到三个重复确认就立即重传丢失的报文段,而不用等待超时重传的计时器到期

快恢复:

在浏览器输入URL之后执行的过程

域名解析:向DNS服务器查询对应的服务器IP地址

三次握手,建立TCP连接

根据IP地址,向服务器发送HTTP请求

服务器收到请求,生成HTML文档

将HTML文档发送给浏览器

浏览器收到HTML文档,解析HTML文档,并请求HTML中的资源

浏览器对页面进行渲染,呈现给用户

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

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

相关文章

SUSAN

1995年英国牛津大学的S.M.Smith提出了一种新的图像边缘检测算法SUSAN算法,不同于以前经典边缘检测算法,SUSAN算法基于灰度相似性比较,采用圆形模板,对图像进行灰度差统计,无需计算方向导数,而且具备积分特性,它简单而且有效,适用于图像中边缘和角点的检测,可以去除图像…

土豆炒肉做法

菜单:土豆、葱、铁辣子、纯瘦肉、淀粉、生抽、酱油、刀、案板、十三香、盐巴、擦板 流程: 洗土豆,削皮,擦成条,用凉水过滤两遍淀粉,顺便放个燥里洗肉,切成条,按照生抽、酱油、淀粉、…

js好用的动态分页插件

js好用的动态分页插件是一款简单的分页样式插件,支持样式类型,当前页,每页显示数量,按钮数量,总条数,上一页文字,下一页文字,输入框跳转等功能。 js好用的动态分页插件

通过IDEA生成webapp及web.xml配置文件

1、选择File->Project Structure 2、选择Modules-> + -> Web 有的springboot工程选择是war工程,这个web可能已经存在了。 如果不存在,就手动创建,创建后,需要修改pom.xml中的配置 <packaging>war</packaging> 3、创建webapp根目录 这步重点就是创建…

介绍一款Java开发的商业开源MES系统

介绍一款Java开发的开源MES系统&#xff0c;万界星空科技开源的MES系统。该系统基于Java开发&#xff0c;具有广泛的适用性和高度的可定制性&#xff0c;能够满足不同行业、不同规模企业的智能制造需求。 一、系统概述 万界星空科技开源的MES系统是一款面向制造企业车间执行层…

第五十章 Web Service URL 汇总

文章目录 第五十章 Web Service URL 汇总Web 服务 URLWeb 服务的端点WSDL 使用受密码保护的 WSDL URL 第五十章 Web Service URL 汇总 本主题总结了与 IRIS 数据平台 Web 服务相关的 URL。 Web 服务 URL 与 IRIS Web 服务相关的 URL 如下&#xff1a; Web 服务的端点 http…

昇思25天学习打卡营第19天 | CycleGAN图像风格迁移互换

内容介绍&#xff1a; CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络&#xff0c;该模型实现了一种在没有配对示例的情况下学习将图像从源域 X 转换到目标域 Y 的方法。 该模型一个重要应用领域是域迁移(Domain Adaptation)&#xff0c;可以通俗地理解…

Java中获取Class对象的三种方式

Java中获取Class对象的三种方式 1、对象调用getClass()方法2、类名.class的方式3、通过Class.forName()静态方法4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;Class对象是一个非常重要的概念&#xff0c;它代…

JVM原理(二十):JVM虚拟机内存的三特性详解

1. 原子性、可进行、有序性 1.1. 原子性 Java内存模型围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的。 Java内存模型来直接保证的原子性变量操作包括read、load、assign、use、store和write这六个。我们大致可以认为&#xff0c;基本数据类型的访问、…

呼叫中心被DDOS攻击怎么办?

呼叫中心作为企业与客户沟通的重要桥梁&#xff0c;其稳定性和安全性直接关系到企业的运营效率和客户满意度。然而&#xff0c;面对日益猖獗的DDoS&#xff08;分布式拒绝服务&#xff09;攻击&#xff0c;如何保障呼叫中心的稳定运行成为了每一家企业都不得不面对的问题。 遭…

科普新能源充电桩

充电桩是新能源电动车的配套基础设施&#xff0c;为电动车提供充电服务&#xff0c;与我们的生活也是息息相关&#xff0c;本篇文章来科普一下充电桩基础知识。 充电桩的分类 按照供电方式分类 交流充电桩&#xff1a;特点是小电流、桩体较小、安装灵活&#xff1b;直流充电…

Vuetify3:v-data-table增加下拉筛选

我们在做列表显示的时候为了让用户快速找到自己想要的数据&#xff0c;都会提供快捷筛选&#xff0c;我们就需要在 v-data-table 表头中提供下拉选择&#xff0c;我们可以参考v-data-table Headers 插槽 &#xff0c;扩展很强&#xff0c;我们可以自定义&#xff0c;代码&…

算法整理——【动态规划练习(2)01背包】

一、背包问题简述以及01背包解题思路 背包问题包括01背包、完全背包、多重背包等。其中基础和重点就是01背包和完全背包&#xff0c;所以我们现在就背包问题中的01背包和完全背包问题进行学习&#xff0c;使用动态规划解决背包问题。 01背包是其他背包的基础&#xff0c;我们…

【TB作品】51单片机 Proteus仿真 超声波LCD1602ADC0832 身高体重测量仪

00024 超声波LCD1602ADC0832 实验报告&#xff1a;基于51单片机的身高体重测量仪设计 背景介绍 本实验设计并实现了一个基于51单片机的身高体重测量仪。该系统利用超声波传感器测量高度&#xff0c;通过ADC0832模数转换芯片获取重量数据&#xff0c;并使用LCD1602显示屏显示…

Alt与Tab切换窗口时将Edge多个标签页作为一个整体参与切换的方法

本文介绍在Windows电脑中&#xff0c;使用Alt与Tab切换窗口时&#xff0c;将Edge浏览器作为一个整体参与切换&#xff0c;而不是其中若干个页面参与切换的方法。 最近&#xff0c;需要将主要使用的浏览器由原本的Chrome换为Edge&#xff1b;但是&#xff0c;在更换后发现&#…

桌面快充插线板+伸缩数据线,轻松实现1+1>2

手机、平板、笔记本等电子设备已成为我们日常工作和学习的必备工具。然而,随着设备数量的增加,充电问题也日益凸显。桌面空间有限,多个快充头不仅显得杂乱无章,而且效率低下,无法满足我们高效办公的需求。 在这样的背景下,倍思Nomos氮化镓100W桌面充电站凭借其创新的设计和强大…

SpringBoot新手快速入门系列教程七:基于一个低配centoos服务器,如何通过宝塔面板部署一个SpringBoot项目

1&#xff0c;如何打包一个项目 通过IDEA自带的命令行&#xff0c;执行 ./gradlew clean build 2&#xff0c;检查生成的JAR文件 进入 build/libs 目录&#xff0c;你应该会看到一个类似 helloredis-0.0.1-SNAPSHOT.jar 的文件。 3&#xff1a;运行生成的JAR文件 你可以在…

ESP32-C3-Arduino-uart

引脚图 2实现串口发送接收 1默认值初始化串口&#xff08;默认是uart0&#xff09; Serial.begin(UART_BAUD); 参数是波特率 2自定义其他串口 2-1创建实例 HardwareSerial SerialUART(0); //数值指的是uart0 1为uart1.。。。。 2-2初始化 SerialUART.begin(UART_BAU…

Python面试题:如何在 Python 中读取和写入 JSON 文件?

在 Python 中读取和写入 JSON 文件可以使用 json 模块。以下是具体的示例&#xff0c;展示了如何读取和写入 JSON 文件。 读取 JSON 文件 要读取 JSON 文件&#xff0c;可以使用 json.load() 方法。下面是一个示例代码&#xff1a; import json# 假设有一个名为 data.json 的…

Docker运行MSSQL2022

安装地址: https://hub.docker.com/r/microsoft/mssql-server 拉取mssql容器镜像 docker pull mcr.microsoft.com/mssql/server 拉取成功 运行mssql镜像 docker run -e "ACCEPT_EULAY" -e "MSSQL_SA_PASSWORDAa123456" -p 1433:1433 -d mcr.microsof…