1.ugui优化方法:
可以参考我另一篇文章:
https://blog.csdn.net/qq_17347313/article/details/99640957
2.lua string原理:
参考我的lua数据结构分析文章:
https://blog.csdn.net/qq_17347313/article/details/100698348
3.c# string原理:
参考以下文章:
https://www.cnblogs.com/qingsp/p/6907553.html
4.lua读表,如果有一个字段是数组,怎么优化内存
可以使用符号分割的方式在配置中表示,如“1,2,3,4,5”这样用字符串表示,读取到lua中,是同一个字符串就会只保存一份。
5.unity动态合批,静态合批的区别:
Unity在 Player Setting 里的两个功能选项 Static Batching 与 Dynamic Batching。功能描述如下:
- Static Batching 是将标明为 Static 的静态物件,如果在使用相同材质球的条件下,Unity 会自动帮你把这两个物件合并成一个 Batch,送往 GPU 来处理。这功能对效能上非常的有帮助,所以是需要付费才有的。
- Dynamic Batching 是在物件小于300面的条件下(不论物件是否为静态或动态),在使用相同材质球下,Unity就会自动帮你合合并成一个 Batch 送往 GPU 来处理。
- 动态合批是有一些条件的,如下:
6.渲染管线:
顶点着色器,图元装配,几何着色器,光栅化,片段着色器,深度模板测试与混合。
7.顶点着色器与片段着色器作用:
顶点着色器:
它把一个单独的顶点作为输入。顶点着色器主要的目的是把3D坐标转为另一种3D坐标(后面会解释),同时顶点着色器允许我们对顶点属性进行一些基本处理。
片段着色器:
片段着色器的主要目的是计算一个像素的最终颜色,这也是所有OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色。
8.unity中存在哪些坐标系:
世界坐标
世界坐标按照笛卡尔坐标系定义出来的绝对坐标系,下面的各种坐标系都建立在世界坐标的基础上。我们知道二维平面内任意一个点可以用二维坐标(x,y)来表示,如果将这个概念延伸到三维空间内,那么三维空间内任意一个点都可以用三维坐标(x,y,z)来表示。这就是世界坐标的概念啦,坐标系通常可以分为左手坐标系和右手坐标系,而Unity3D采用的是左手坐标系。在Unity3D中我们可以使用transform.position来获取场景中一个物体的世界坐标,通常情况下编辑器中的Inspector窗口是以世界坐标来描述一个3D物体的位置的,除非当一个3D物体存在父物体的时候,它会以相对坐标来描述其位置。
屏幕坐标
屏幕坐标是以像素来定义的,它的范围是以左下角为(0,0),右上角为(Screen.width,Screen.height)定义的这样一个矩形。屏幕坐标是一个3D坐标,Z轴是以相机的世界单位来衡量的。屏幕坐标和相机之间满足:Screen.width=Camera.pixelWidth和Screen.height=Camera.pixelHeight这两个条件。例如我们将相机正对着场景中的原点(0,0,0),相机的Z轴分量为-10,按照屏幕坐标的定义,假设屏幕为800X640的大小,则此时原点转化为屏幕坐标后应该是(400,320,10)。在Unity3D中我们可以使用WorldToScreenPoint来将一个世界坐标转换为屏幕坐标。
视口坐标
视口坐标是标准化后的屏幕坐标。标准化的概念我们可以引申到向量的标准化中,比如一个向量(x,y)将过标准化后可以得到一个单位向量(x’,y’)。类似地,视口坐标是以0到1间的数字来表示的,它的范围是以左下角为(0,0),右上角为(1,1)定义的这样一个矩形。视口坐标是一个3D坐标,Z轴是以相机的世界单位来衡量的。通过对比可以发现视口坐标和屏幕坐标特别的相似,所以这里大家可以对比着来学习。同样以屏幕坐标中的例子来将这里的转换,例如我们将相机正对着场景中的原点(0,0,0),相机的Z轴分量为-10,按照屏幕坐标的定义,假设屏幕为800X640的大小,则此时原点转化为屏幕坐标后应该是(0.5,0.5,10)。在Unity3D中我们可以使用WorldToViewportPoint来将一个世界坐标转换为视口坐标。
GUI坐标
GUI坐标是指通过OnGUI方法绘制UI时使用的坐标。这个坐标系和屏幕坐标类似,它同样是以像素来定义的,它的范围是以左上角为(0,0),右下角为(Screen.width,Screen.height)定义的这样一个矩形,GUI坐标是一个2D坐标(绝对坐标)。因为GUI在早期的文章中曾有所设计,属于Unity3D中较为基础的内容,此外我们知道使用绝对坐标来进行布局的话是没有办法做自适应的,所以这部分内容我们就不展开讲了,UI自适应的一个主要观点就是不要使用绝对坐标!不要使用绝对坐标!不要使用绝对坐标!重要的事情要说三遍的嘛!这里想特别说说Unity4.6以后推出的全新UI支持:uGUI。在uGUI的Screen Space模式下,Unity3D的编辑器以屏幕坐标来显示UI元素的位置;在World Space模式下,Unity3D的编辑器以世界坐标来显示UI元素的位置。相信这一点大家在使用的时候都没有注意到,最近在看一个论坛帖子的时候发现对uGUI坐标转换的相关知识一片茫然,所以对这部分内容进行了深入的研究,最终得出的结论是:uGUI的坐标本质上是特殊的屏幕坐标,因为uGUI的Anchor决定了该坐标系的原点,pivot决定了元素本身坐标系的原点,正是这两个属性让uGUI的坐标看起来显得扑朔迷离。RectTransform组件继承自Transform,所以它们的position和localPosition是等价的,都是世界坐标;anchoredPosition是UI元素的屏幕坐标,在对UI元素进行操作的时候应该考虑使用这个坐标。
局部坐标系
局部坐标系也称为模型坐标系或物体坐标系。
每个物体都有自身独立的物体坐标系。当物体移动或改变方向时,和该物体相关联的坐标系将随之移动或改变方向。
模型Mesh保存的顶点坐标均为局部坐标系下的坐标。
9.c# gc原理:
参考:
问答方式:https://blog.csdn.net/yonglong8/article/details/9197077
原理分析:https://blog.csdn.net/songshu5555/article/details/54962812
10.C++ RTTI(运行时类型识别)与编译时类型识别:
RTTI:实现多态,虚函数,虚表机制,使得程序可以根据类的类型,调用正确的函数
编译时类型识别:重载
11.数据结构之链表的环检测:
使用快慢指针,循环一次快指针走2个数据,慢指针走一个,如果两个指针在某次相等,则存在环
12.帧同步优化方式:
UDP,冗余帧,TCP重传,逻辑层表现出分离,jitterbuffer抖动优化
13.协程的理解:这里给大家看一副图可解:
总的来说这次面试不是很好,一些东西记不很清楚了,希望大家面试的时候稍微复习一下,失去机会挺可惜的。