Unity客户端开发面试题记录
1.如何理解面向对象思想
A:面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节。面向对象的特征是:封装,继承,多态。多态就是接口的多种不同的实现方式。
2.默认构造方法可以重写吗
A:不能。
3.Sealed在声明类和函数方法时代表什么
A:在类声明中使用sealed可防止其它类继承此类;在方法声明中使用sealed修饰符可防止扩充类重写此方法。
4.什么是装箱和拆箱
A:
5.ref参数和out参数是什么,有什么区别
A:ref
out
ref和out都是通过关键字找到定义在主函数里面的变量的内存地址,并通过方法体内的语法改变它的大小。
ref将参数的参数值和引用都传入方法中,所以ref的参数的初始化必须在方法外部,否则程序报错,ref参数是引用。
out不会将参数的参数值传入方法中,只会将参数的引用传入方法中,所以out的参数的初始化必须在方法中进行,否则报错,out参数为输出参数。
6.请简述private,public,protected,internal的区别
A:
public:对任何类和成员都公开,无限制访问
private:仅对该类公开
protected:对该类和其派生类公开
internal:只能在包含该类的程序集中访问该类
7.物理更新一般放在哪个系统函数里
A:FixedUpdate,每固定帧绘制时执行一次,和Update不同的是FixedUpdate是渲染帧执行,FixedUpdate比较适用于物理引擎的计算。
8.结构体和类有何区别
A:结构体是一种值类型,而类是引用类型。
9.移动相机动作在哪个函数里,为什么在这个函数里
A:在LateUpdate,是在所有的update结束后才调用,比较适合用于命令脚本的执行。
10.如下函数方法最后输出结果是什么
A:运行顺序为1,3,4,5,6,无论try或者catch是否return,finally必然执行,输出为3。
11.override和overload的区别
A:
override表示重写,用于继承类对基类中虚成员的实现
overload表示重载,用于同一个类中同名方法不同参数(包括类型不同或个数不同)的实现
12.如何优化内存
A:
1.压缩自带类库
2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉
3.释放AssetBundle占用的资源
4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小
5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)
6。代码中少产生临时变量
13.简述prefab的用处
A:在游戏运行实例化,perfab相当于一个模板,对你已经有的素材,脚本,参数做一个默认的配置,以便于以后的修改,同时prefab打包的内容简化了导出的操作,便于团队的交流。
14.如何降低包的体积
A:
1.替换jpg,使用psd,减少重复资源
2.剔除不必要的资源
3.打包时查看log记录,由此判断需要减少的文件类型
4.压缩图片,减少图片大小
5.压缩网格和动画,减少文件大小
6.剔除system.dll和system.xml.dll
15.不使用第三方变量交换a和b
A:
16.编程求两个数的最小公倍数和最大公约数
A:
17.用递归和非递归求斐波那契数列第30项的值
A:递归算法:
一般算法:
18.i++和++i命令的区别
A:赋值顺序不同,++i是先加后赋值;i++是先赋值后加。
19.列举熟悉的数据结构
A:数组,栈,队列,链表,树,图,堆。
20.简述值类型和引用类型有什么区别
A:
1.值类型存储在内存栈中,引用类型存储在内