[toc]

# 内存对齐

遵循以下三个原则
- 结构体变量的 起始地址 能够被其最宽的成员大小整除 - 结构体每个成员相对于 起始地址的偏移 能够被其 自身大小整除 ,如果不能则在前一个成员后补齐字节 - 结构体总体大小能够 被最宽的成员的大小 整除,如不能,在后面补齐 主要是为了提高内存的访问效率,比如 intel 32 位 cpu,每个总线周期都是从偶地址开始读取 32 位的内存数据,如果数据存放地址不是从偶数开始,则可能出现需要两个总线周期才能读取到想要的数据,因此需要在内存中存放数据时进行对齐。

# 为什么要装箱拆箱

因为 C# 作为一门基本都是对象的语言,不单单要考虑到方便的问题,还要平衡性能。但有时候装箱发生的很隐蔽,比如在容器中添加值类型,就会触发一次装箱。

# 浮点数表示

N=M×REN=M×R^E M 是符号位,R 是基数,E 是阶数

# 快排解决 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 渲染顺序

    1. 同 Order GameObject 上下顺序
    1. Canvas 设置 Order
    1. 材质球更改 RenderQueue
    1. 摄像机深度,渲染层级
    1. 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
2
3
4
顶点属性最大限制900,
使用lightmap的物体不行进行批处理
使用MultiplePass的shader也不会进行批处理
接受实时阴影的物体也不会进行批处理

# 静态批处理

全设置为静态,不动,一套材质,只会调用一次 DrawCall 灯光和阴影打开会触发大量 DrawCall

更新于

请我喝[茶]~( ̄▽ ̄)~*

Solvarg 微信支付

微信支付

Solvarg 支付宝

支付宝

Solvarg 贝宝

贝宝