游戏开发面试题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.mfbz.cn/a/781114.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flask使用定时任务flask_apscheduler(APScheduler)

Flask-APScheduler描述: Flask-APScheduler 是一个 Flask 扩展,增加了对 APScheduler 的支持。 APScheduler 有三个内置的调度系统可供您使用: Cron 式调度(可选开始/结束时间) 基于间隔的执行(以偶数间隔运行作业…

RabbitMq - Java客户端基础【简单案例 +Work模型】

目录 1、前置知识 1.1、AMQP怎么理解 1.2、Spring AMQP是什么 1.3、为什么要了解Spring-AMQP? 2、使用Spring-AMQP实现一个发消息案例 3、Work模型 问题: 优化: 小结:Work模型的使用: 1、前置知识 1.1、AMQP怎…

[激光原理与应用-101]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 5 - 3C行业应用 - 电子布局类型

目录 前言: 一、激光在3C行业的应用概述 1.1 概述 1.2 激光焊接在3C-电子行业应用 二、3C电子行业中激光焊接 2.1 纽扣电池 2.2 均温板 2.3 指纹识别器 2.4 摄像头模组 2.5 IC芯片切割 三、3C行业中激光切割 四、激光在3C行业中的其他应用 4.1 涂层去除…

Towards Accurate and Robust Architectures via Neural Architecture Search

基于网络架构搜索的准确性与鲁棒性结构研究 论文链接:https://arxiv.org/abs/2405.05502 项目链接:未开源 Abstract 为了保护深度神经网络免受对抗性攻击,对抗性训练因其有效性而受到越来越多的关注。然而,对抗训练的准确性和鲁…

服务器本地部署文件服务器minio

minio类似于阿里云的OSS,为不方便把图、文、日志等形式的文件保存在公有云上的,可以在自己的服务器上部署文件服务器 看过本人前几个文章的,使用docker就会很快上手部署,直接上所有代码 #添加镜像 docker search minio docker p…

jvm 03 JVM的运行时数据区域 ,(类常量池,运行时常量池,字符串常量池这个三个的区别),操作系统内存模型JMM和JVM的内存模型联系

方法区在jdk8后,改成元空间 JVM内存模型: JMM 主内存:本地方法区和堆 工作内存:私有的工作栈 其实一个JVM内存模型(主要就是运行时数据区域)一个Java进程的JMM,工作内存JVM中线程的内存区域…

关于umjs的主题切换实现

注意本文写作日期2024年7月7日,我目前是最新版本的 注意:该功能仅 antd v5 可用 最后目标实现 先说一下,umijs布局默认是内置ant-design/pro-layout布局写的 看一下官网ProLayout - 高级布局和布局与菜单 直接在app.tsx加入以下&#xff…

Git管理源代码、git简介,工作区、暂存区和仓库区,git远程仓库github,创建远程仓库、配置SSH,克隆项目

学习目标 能够说出git的作用和管理源代码的特点能够如何创建git仓库并添加忽略文件能够使用add、commit、push、pull等命令实现源代码管理能够使用github远程仓库托管源代码能够说出代码冲突原因和解决办法能够说出 git 标签的作用能够使用使用git实现分支创建,合并…

磐维2.0数据库日常维护

磐维数据库简介 “中国移动磐维数据库”(ChinaMobileDB),简称“磐维数据库”(PanWeiDB)。是中国移动信息技术中心首个基于中国本土开源数据库打造的面向ICT基础设施的自研数据库产品。 其产品内核能力基于华为 OpenG…

pyrender 离线渲染包安装教程

pyrender 离线渲染包安装教程 安装 安装 官方安装教程:https://pyrender.readthedocs.io/en/latest/install/index.html#installmesa 首先 pip install pyrenderclang6.0安装 下载地址:https://releases.llvm.org/download.html#6.0.0 注意下好是叫:clangllvm-6…

L04_MySQL知识图谱

这些知识点你都掌握了吗?大家可以对着问题看下自己掌握程度如何?对于没掌握的知识点,大家自行网上搜索,都会有对应答案,本文不做知识点详细说明,只做简要文字或图示引导。 1 基础 1.1内部组件结构 1.2 数据…

尚品汇-(十四)

(1)提交git 商品后台管理到此已经完成,我们可以把项目提交到公共的环境,原来使用svn,现在使用git 首先在本地创建ssh key; 命令:ssh-keygen -t rsa -C "your_emailyouremail.com" I…

用kimi实现一键实体识别与关系抽取

实体识别与关系抽取是自然语言处理(NLP)中的两个重要任务,通常被视为知识图谱构建的基础技术。 实体识别(Named Entity Recognition, NER): 实体识别的目标是从文本中识别出具有特定意义的实体&#xff0…

动手学深度学习(Pytorch版)代码实践 -循环神经网络- 56门控循环单元(`GRU`)

56门控循环单元(GRU) 我们讨论了如何在循环神经网络中计算梯度, 以及矩阵连续乘积可以导致梯度消失或梯度爆炸的问题。 下面我们简单思考一下这种梯度异常在实践中的意义: 我们可能会遇到这样的情况:早期观测值对预测…

Nacos2.X源码分析:服务注册、服务发现流程

文章目录 Nacos2.1.X源码源码下载服务注册NacosClient端NacosServer端 服务发现NacosClient端NacosServer端 Nacos2.1.X源码 源码下载 源码下载地址 服务注册 官方文档,对于NamingService接口服务注册方法的说明 Nacos2.X 服务注册总流程图 NacosClient端 一个…

华为OSPF配置DR和BDR与指定DR

基础配置 <Huawei>sys #进入配置模式 Enter system view, return user view with CtrlZ. [Huawei]un in en #关闭报文弹窗 Info: Information center is disabled. [Huawei]sys R1 #设备名更改为R1 [R1]int g0/0/0 …

智能物联网鱼缸

硬件部分及接线图 工具 继电器、开发板、物联网os、云平台 微信小程序 结构&#xff1a;images、pages两个为主体。 标题头部分 <view class"container"> <view class"head_box"> <image src"/images/面性鱼缸.png"><…

【Java】详解String类中的各种方法

创建字符串 常见的创建字符串的三种方式&#xff1a; // 方式一 String str "hello world"; // 方式二 String str2 new String("hello world"); // 方式三 char[] array {a, b, c}; String str3 new String(array); "hello" 这样的字符串字…

昇思学习打卡-8-FCN图像语义分割

目录 FCN介绍FCN所用的技术训练数据的可视化模型训练模型推理FCN的优点和不足优点不足 FCN介绍 FCN主要用于图像分割领域&#xff0c;是一种端到端的分割方法&#xff0c;是深度学习应用在图像语义分割的开山之作。通过进行像素级的预测直接得出与原图大小相等的label map。因…

3-4 优化器和学习率

3-4 优化器和学习率 主目录点这里 优化器是机器学习和深度学习模型训练过程中用于调整模型参数的方法。它的主要目标是通过最小化损失函数来找到模型参数的最优值&#xff0c;从而提升模型的性能。 在深度学习中&#xff0c;优化器使用反向传播算法计算损失函数相对于模型参数…