AI生成,仅供参考。
一、计算机网络
-
网络分层模型
-
OSI七层模型 vs TCP/IP四层模型:各层功能(如传输层负责端到端通信,网络层负责路由)。
-
游戏数据包在协议栈中的封装与解封装流程。
-
-
传输层协议
-
TCP:三次握手/四次挥手、可靠性机制(超时重传、滑动窗口)、流量控制、拥塞控制(慢启动、拥塞避免)。
-
UDP:无连接、低延迟、适用场景(实时游戏、音视频流)。
-
对比:TCP的可靠性与UDP的高效性,游戏开发中如何选择(如MOBA用UDP+自定义可靠性逻辑)。
-
-
HTTP/HTTPS与WebSocket
-
HTTP请求方法(GET/POST)、状态码(200、404、502)。
-
HTTPS加密流程(SSL/TLS握手)。
-
WebSocket:全双工通信,适用于游戏实时交互(如聊天系统、状态同步)。
-
-
网络延迟与优化
-
延迟来源:带宽、路由跳数、物理距离。
-
优化手段:CDN加速、数据压缩、预测插值(Dead Reckoning)、客户端渲染补偿。
-
-
常见攻击与防护
-
DDoS攻击、中间人攻击(MITM)、数据包篡改。
-
防护措施:加密(AES、RSA)、心跳包检测、服务器端校验。
-
-
Socket编程
-
基础API(
send()
/recv()
)、非阻塞IO、多路复用(select
/epoll
)。
-
二、计算机组成原理
-
计算机体系结构
-
冯·诺依曼架构:五大部件(运算器、控制器、存储器、输入/输出)。
-
CPU工作流程:取指、译码、执行、访存、写回。
-
-
存储系统
-
存储器层次:寄存器 > 缓存(Cache) > 内存 > 磁盘,访问速度与成本权衡。
-
Cache映射方式:直接映射、组相联,缓存命中率对游戏性能的影响。
-
虚拟内存:分页机制、缺页中断。
-
-
数据表示与运算
-
浮点数存储(IEEE 754)、精度问题(游戏物理引擎中需注意)。
-
位运算优化(如掩码处理状态标志)。
-
-
性能优化相关
-
CPU流水线:指令级并行、流水线冲突(数据冒险、控制冒险)。
-
多核与多线程:线程同步(锁、信号量)、避免竞态条件(游戏逻辑线程 vs 渲染线程)。
-
-
输入/输出系统
-
DMA(直接内存访问):减少CPU干预,提升数据传输效率(如加载游戏资源)。
-
中断处理流程:外设触发→保存现场→执行ISR→恢复现场。
-
三、游戏开发特殊考点
-
网络同步问题
-
帧同步 vs 状态同步,延迟补偿技术(如《守望先锋》的“时光倒流”机制)。
-
权威服务器模型与客户端预测。
-
-
实时性要求
-
如何减少网络抖动(Jitter Buffer)、时钟同步(NTP协议)。
-
-
资源加载优化
-
内存池技术、预加载策略、LOD(Level of Detail)。
-
四、典型笔试题目示例
TCP如何保证可靠性?游戏为何有时选择UDP?
答案:
-
TCP的可靠性机制:
-
确认应答(ACK):接收方收到数据后返回确认信号。
-
超时重传:发送方未收到ACK时重发数据包。
-
数据排序:通过序列号(Sequence Number)保证数据按序到达。
-
流量控制:滑动窗口机制动态调整发送速率,避免接收方缓冲区溢出。
-
拥塞控制:慢启动、拥塞避免算法防止网络过载。
-
-
游戏选择UDP的原因:
-
低延迟:TCP的重传和排序机制可能增加延迟(如FPS游戏中射击指令需实时响应)。
-
灵活性:UDP允许自定义可靠性逻辑(如只重传关键数据包,丢弃过时位置信息)。
-
无连接开销:无需三次握手,适合高频小数据包(如MOBA游戏的技能同步)。
-
解释游戏中“延迟”和“卡顿”的可能原因及优化方案。
答案:
-
延迟(高Ping):
-
原因:网络往返时间(RTT)高、路由跳数多、物理距离远(如跨国服务器)。
-
优化:
-
使用CDN或边缘服务器减少物理距离。
-
数据压缩减少传输量(如Protobuf替代JSON)。
-
预测算法(Dead Reckoning):客户端预测玩家移动,服务器后续校正。
-
-
-
卡顿(帧率波动):
-
原因:
-
CPU/GPU瓶颈:复杂场景渲染或物理计算超负荷。
-
内存瓶颈:频繁GC(垃圾回收)或资源加载阻塞主线程。
-
网络抖动:突发丢包导致同步等待。
-
-
优化:
-
多线程渲染:分离逻辑线程与渲染线程。
-
对象池技术:避免运行时动态内存分配。
-
插值同步:网络波动时平滑过渡角色位置。
-
-
Cache失效对游戏性能的影响及避免方法。
答案:
-
Cache失效的影响:
-
缓存命中率下降导致CPU频繁访问内存(内存延迟是Cache的10~100倍),引发帧率下降或卡顿。
-
常见于数据局部性差的代码(如随机访问大数组)。
-
-
优化方法:
-
数据布局优化:
-
使用紧凑数据结构(如Struct of Arrays代替Array of Structs)。
-
热数据分离:高频访问数据(如玩家位置)单独存储。
-
-
算法优化:
-
避免随机访问(如用空间换时间的哈希表替代链表)。
-
循环分块(Loop Tiling):提升矩阵运算的Cache利用率。
-
-
预取指令:手动预加载可能访问的数据(如
__builtin_prefetch
)。
-