游戏开发面试总结1

秋招第一次面试,凉的透透的,面试还死机了。。 记录一下吧

1:Unicode和UTF-8的区别

Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号,每个符号的编码都不一样。Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

UTF-8是目前使用最广的一种Unicode的实现方式。它最大的特点就是变长编码的方式,采用了1~4个子节来表示一个符号,根据不同的符号而变化字节长度。

UTF-8的规则:

(1) : 对于单字节的符号,字节的第一位设置为0,后面7位位这个符号的Unicode编码。因此对于英文字母,UTF-8和ASCII码是一样的。

  (2) : 对于n字节的符号,第一个字节的前N位设置为1,第n+1位设置为0,后面字节的前两位一律设置为10。剩下的没有提及的二进制位全部设置为这个符号的Unicode

所以总结来说,UTF-8便阿门就是如果一个字节的第一位位0,则这个字节单独就是一个祖父,如果是1,那么连续多少个1就表示它占用了多少个字节。

2:unity的静态合批和动态合批

静态合批:在场景里面有有一些共享同一材质的模型存在,并且这些模型都一直不会移动,旋转和缩放那么就设置这些模型为static。

在build的时候,unity会将这些共享材质的静态模型的vertex buffer和index buffer,根据他们在场景的最终状态的信息,将模型的顶点转化为世界坐标下,储存在大的Vertex buffer和index buffer。并且记录子模型的index buffer数据在大的buffer的起始位置和结束位置。在后续的绘制中,一次性提交合并模型的数据,根据场景管理系统判断子模型的可见性然后设置一次渲染状态调用多次draw call分别绘制一次模型。

由于控制的时候使用的是index buffer,所以起到了降低draw call的效果而且子模型的顶点数据已经变化到了世界坐标下,共享材质所以多次draw call下没有渲染状态的切换起到了优化的目的。

 

静态合批也会带了一些负面影响,比如打包后体积增大,运行时占用更多的内存。当有许多不同的game object引用一个模型的情况下,共享模型只会在内存中保存一份,如果开始batch static,那么在build的时候会复制所有的game object引用的模型,导致体积增大。

 

面试的时候问到了动态合批的顶点限制和原因,当时写合批工具的时候只是简单看了一下,原因没有搞明白所以没答上来。

 

动态合批:动态合批在每一帧都会有一些CPU的性能消耗,如果开始了dynamic batching,unity会自动把所有共享了同一个材质的game object在一个draw call绘制

动态合批的原理:进行绘制之前将所有的共享同一个材质的模型的顶点信息变换到世界空间中,通过一次draw call绘制多个模型达到合批的目的。由于坐标变换是由CPU进行操作的,所以会带来一些性能消耗,所以计算的模型顶点数不能太多,否则CPU串行计算耗费的时间太长会造成卡顿。目前unity限制dynamic batching的模型最高含有900个顶点属性。而不是顶点。

 

3 :new和malloc的区别

  1.new/delete是C++的 关键字,而malloc/free是 库函数,new/delete可以进行重载,而malloc/free不行;
  2.new时不需要指定空间大小,但是需要指定分配对象类型,返回的也是该类型的指针;而malloc时需要指定空间大小,无需指定数据类型,返回的是void *泛型指针;
  3.new失败时直接抛异常,而malloc则是返回NULL;
  4. new时会先调用malloc,然后调用所分配对象的构造函数进行构造
 
4: C++中指针和引用的区别
  指针是一个变量,储存了地址。引用和原来的变量实质上是一个,是 变量的别名,在内存中 占用了同一个储存单元
  指针可以为空, 引用在定义的时候必须初始化
  引用在初始化之后就不会再改变了
  指针和引用在作为函数参数进行传递的区别:  指针传递参数的本质是值的传递。在引用传递的过程中,形参虽然也开辟了栈空间 ,但是这个时候 存储的是实参的地址
 

 

转载于:https://www.cnblogs.com/amadios/p/11515253.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值