2016Unity面试题参考
2016-12-06 13:36
106 查看
A:
值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
值类型存取速度快,引用类型存取速度慢
值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
值类型继承自System.ValueType,引用类型继承自System.Object
栈的内存分配是自动释放;而堆在.NET中会有GC来释放
值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。
二. C#中的协程和并发的区别?
A:
协程在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程是在每帧结束之后去检测yield的条件是否满足。
并发是多线程的,逻辑同时运行。
三. 面向组件编程和面向对象的Java的区别?
A:
面向对象与面向组件的区别在于,面向对象编程着眼于程序集或模块中类之间的关系,而面向组件着眼于独立工作的可替换的程序集或模块,并且无需了解其内部工作原理。面向组件的开发人员大部分时间花在设计接口上,而不是花力气设计复杂的类层次结构。
因为面向组件技术是对面向对象技术的进一步发展,所以面向对象的设计原则也适用于面向组件。参考文章
四. Unity中如何减少GC?
A:
字符串连接的处理。因为将两个字符串连接的过程,其实是生成一个新的字符串的过程。而之前的旧的字符串自然而然就成为了垃圾。而作为引用类型的字符串,其空间是在堆上分配的,被弃置的旧的字符串的空间会被GC当做垃圾回收。
尽量不要使用foreach,而是使用for。foreach其实会涉及到迭代器的使用,而据传说每一次循环所产生的迭代器会带来24 Bytes的垃圾。那么循环10次就是240Bytes。
不要直接访问gameobject的tag属性。比如if (go.tag == “human”)最好换成if (go.CompareTag (“human”))。因为访问物体的tag属性会在堆上额外的分配空间。如果在循环中这么处理,留下的垃圾就可想而知了。
使用“池”,以实现空间的重复利用。
最好不用LINQ的命令,因为它们会分配临时的空间,同样也是GC收集的目标。而且我很讨厌LINQ的一点就是它有可能在某些情况下无法很好的进行AOT编译。比如“OrderBy”会生成内部的泛型类“OrderedEnumerable”。这在AOT编译时是无法进行的,因为它只是在OrderBy的方法中才使用。所以如果你使用了OrderBy,那么在IOS平台上也许会报错。(p.s.
AoTtype.cs解决iOS编译的问题,这里又看到了相关内容..)
相关文章推荐
- 系统运维工程师面试题及参考答案
- 《招聘一个靠谱的iOS》面试题参考答案(上)
- 整理 《招聘一个靠谱的iOS》面试题部分参考答案
- 《招聘一个靠谱的iOS》|| 文章 || 面试题 || 参考答案
- 看“老赵面试题参考答案(一)"评论有感而发
- 老赵面试题参考答案(二)《转》
- 老赵面试题参考答案(四)
- 《招聘一个靠谱的iOS》面试题及参考答案(上)--转
- 老赵面试题参考答案(五)
- 面试题参考
- unity3d最新面试题与参考答案汇总
- 中国电信市场类职位面试题和笔试题库及参考答案(内部竞聘和社招用)
- 我遇到的面试题,供大家参考
- 《招聘一个靠谱的iOS》面试题参考答案(上)
- 《招聘一个靠谱的iOS》面试题参考答案(上)
- 一道淘汰85%面试者的百度开发者面试题——解题、参考答案和优化思路
- .NET 面试题总结 (附有参考答案) 第1部分
- C++面试题(有我做的答案,参考)
- 面试题参考
- java中高级面试题整理及参考答案