[toc]
# 内存对齐
遵循以下三个原则
- 结构体变量的 起始地址
能够被其最宽的成员大小整除 - 结构体每个成员相对于 起始地址的偏移
能够被其 自身大小整除
,如果不能则在前一个成员后补齐字节 - 结构体总体大小能够 被最宽的成员的大小
整除,如不能,在后面补齐 主要是为了提高内存的访问效率,比如 intel 32 位 cpu,每个总线周期都是从偶地址开始读取 32 位的内存数据,如果数据存放地址不是从偶数开始,则可能出现需要两个总线周期才能读取到想要的数据,因此需要在内存中存放数据时进行对齐。
# 为什么要装箱拆箱
因为 C# 作为一门基本都是对象的语言,不单单要考虑到方便的问题,还要平衡性能。但有时候装箱发生的很隐蔽,比如在容器中添加值类型,就会触发一次装箱。
# 浮点数表示
# 快排解决 TopK
类似于二分,因为一趟快排后目标数一定会在最终的位置上,所以如果排序后的位置大于 K, 则表明 K 在 [0-i] 上,否则反之。依此类推
# tcp 三次握手,四次挥手
三次握手 防止已过期的连接请求报文突然又传送到服务器
- 第一次:客户端向服务端发送一个 SYN - 当服务端接收到后,会反发送一个 SYN+ACK 的数据包 - 客户端接收到服务端的 SYN+ACK 数据包时,会向服务端发送 ACK 四次挥手
确保数据能够完成传输
- 第一次,客户端向服务端发送一个 FIN, 请求关闭数据传输 - 第二次,服务端收到客户端的 FIN 时,向客户端发送一个 ACK
- 然后服务端再向客户端发送一个 FIN, 告诉客户端程序关闭 - 当客户端收到 FIN 时,回复一个 ACK 给服务端,开始连接
# 什么是 KCP
kcp 是一种改良的可靠有序的 udp
# CPU 多进程调度
那个状态图
就绪,阻塞,运行 (1) 就绪→执行 处于就绪状态的进程,当 CPU 调度执行该进程后,该进程便由就绪状态转变成执行状态。
(2) 执行→就绪 处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出 CPU,于是进程从执行状态转变成就绪状态。
(3) 执行→阻塞 正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。
(4) 阻塞→就绪 处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
# UGUI 渲染顺序
-
- 同 Order GameObject 上下顺序
-
- Canvas 设置 Order
-
- 材质球更改 RenderQueue
-
- 摄像机深度,渲染层级
-
- Canvas 的 RenderMode
UGUI 基础组件是 UIBehaviour
# C# GC 回收
GC 的根,是调用栈,寄存器,全局变量空间 这种引用关联的数据结构是森林或者图 分代的概念
GC 用堆管理内存区域,但是我记得有个叫做什么池,是内存池,但是大部分的所谓池都是链表
# Unity 四个坐标系
- 屏幕坐标系:游戏画面
- 世界坐标系
- 模型坐标系:模型自身
- 观察坐标系:摄像机视椎体
# Unity 顺序
OnEnable Awake Start FixedUpdate Update LateUpdate OnDisable OnApplicationQuit
# 常考图形
# 管线阶段
顶点 -> 顶点着色器 (各个空间变换,比如 MVP 变换)-> 图元装配阶段 (不可编程,三角形)-> 几何着色器 (逐图元,修改拓扑关系,之类的)-> 光栅化 (将图元以点阵形式表示出来,并进行视椎体剔除)-> 片元着色器 (逐像素)->Blend-> 输出 中间还有测试阶段,ZTest, 模板测试,深度测试等等
# 光照模型
Phong = ambient + diffuse + max(dot(viewDir,lightDir),0)
Blin-Phong = ambient + diffuse + max(dot(halfDir,normal),0) specular = lightcolor*specularColor*(max(N·H,0))^Shininess
用这个公式替换上面的 max 后面的
halfDir 是视线和点光源方向相加后归一化的向量
# 什么是 DrawCall
每次 CPU 准备数据并通知 GPU 的过程就称之为一个 DrawCall。 但有看文章说其实应该是优化 Set Pass, 即传数据的阶段
# 优化 DrawCall 方法
- 图集,UI 上会一直向下遍历,如果同一个 Panel 公用一套材质和贴图,则只会调用一次 DrawCall, 否则多次
# 动态批处理
限制条件
1 | 顶点属性最大限制900, |
# 静态批处理
全设置为静态,不动,一套材质,只会调用一次 DrawCall 灯光和阴影打开会触发大量 DrawCall