当前位置:   article > 正文

【Unity】面试题整理_unity面试题

unity面试题

第一部分
1. 请简述值类型与引用类型的区别
1.值类型存储在内存栈中,引用类型数据存储在内存堆中,实际存放的是内存堆中对象的地址。
2.值类型存取快,引用类型存取慢。
3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。
4.栈的内存是自动释放的,堆内存是.NET中会由GC来自动释放。
5.值类型继承自System.ValueType(它的父类是System.Object),引用类型继承自System.Object。

2.C#中所有引用类型的基类是什么
引用类型的基类是System.Object 值类型的基类是System.ValueType
同时,值类型也隐式继承自System.Object

3.请简述ArrayList和List的主要区别
ArrayList存在不安全类型(ArrayList会把所有插入其中的数据都当做Object来处理)
装箱拆箱的操作(费时)
IList是接口,AIrrayList和List都是实现了该接口的类,可以被实例化。

4.请简述GC(垃圾回收)产生的原因,并描述如何避免?
GC回收堆上的内存
避免:
1)减少new产生对象的次数
2)使用公用的对象(静态成员),但是静态对象会一直存在,直到退出程序
3)将String换为StringBuilder

5.请描述Interface与抽象类之间的不同
接口中所有的方法都不能有实现,并且不能指定方法的修饰符
    抽象类中可以有方法的实现,也可以指定方法的访问修饰符
    第一个继承接口的类必须实现接口里的所有方法
    而抽象类中抽象方法的实现是由第一个非抽象的派生类来实现的
也就是说,如果抽象类的子类还是派生类那么是可以不实现父类中的抽象方法的

6.下列代码在运行中会产生几个临时对象?

首先,第1行代码的构造函数在C#程序中会出现错误,因为没有字符串类型的构造函数重载,所以严格的说可以说无法创建对象,但是出题者显然是忽略掉了这个问题,因为在Java中是可以创建的,所以回答的时候可以说明情况再进行作答。如果是在Java中,第1行会产生2个对象,分别是a和“abc”,第2行中会产生另外一个新的对象,所以一共会产生3个对象。

7.下列代码在运行中会发生什么问题?如何避免?

会产生运行时的错误,因为foreach是只读的,不能修改被遍历的对象中的数据
  • 1

8.请简述关键字Sealed用在类声明和函数声明时的作用
修饰类时可防止其他类继承此类
修饰方法时则可防止派生类重写此方法

9.请简述private,public,protected,internal的区别
public:对任何类和成员都公开,无限制访问
private:仅对该类公开
protected:对该类和其派生类公开
internal:只能在包含该类的程序集中访问该类
protected internal:protected + internal,表示当前程序集或者其子类可以访问。注意是 protected 和 internal 是或者的关系。

10.反射的实现原理?
反射是审查元数据并收集关于它的类型信息的能力
1.using System.Reflection;
2.Assembly.Load(“程序集”)加载程序集,返回类型是一个Assembly
3. foreach (Type type in assembly.GetTypes())
            {
                string t = type.Name;
            }
   得到程序集中所有类的名称

  1. .Net与Mono的关系?
    Mono是.Net的一个开源跨平台工具,就类似java虚拟机,java本身不是跨平台语言,但运行在虚拟机上就能够实现了跨平台。.Net只能在windows下运行,Mono可以实现跨平台跑,
    可以运行于Linux,Unix,Mac OS等。

12.简述unity3d支持的作为脚本的语言的名称
Unity的脚本语言基于Mono的.Net平台上运行,可以使用.NET库,这也为XML、数据库、正则表达式等问题提供了很好的解决方案。
Unity里的脚本都会经过编译,他们的运行速度也很快。这三种语言实际上的功能和运行速度是一样的,区别主要体现在语言特性上。
(语言1)C#:官方曾经统计C#语言的使用率在80%以上,Boo语言的使用只用0.4%,也是被取消的原因之一
(语言2)JavaScript:和网页中常用的JavaScript不一样,它编译后的运行速度很快,语法方面也会有不少区别。
(语言3)Boo(Unity5.0的时候取消了对该语言的支持):可以看做是Python语言的变种,又糅合了Ruby和C#的特性,它是静态类型语言

13.Unity3D是否支持写成多线程程序?如果支持的话需要注意什么?
仅能从主线程中访问Unity3D的组件,对象和Unity3D系统调用
支持:如果同时你要处理很多事情或者与Unity的对象互动小可以用thread(C#中的,不属于Unity),否则使用协同程序。
注意:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象

14.Unity3D的协程和C#线程之间的区别是什么?
多线程程序同时运行多个线程 ,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。除主线程之外的线程无法访问Unity3D的对象、组件、方法。
Unity3d没有多线程的概念,不过unity也给我们提供了StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的方法。 StartCoroutine为什么叫协同程序呢,所谓协同,就是当你在StartCoroutine的函数体里处理一段代码时,利用yield语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。而LoadLevelAsync则允许你在后台加载新资源和场景,所以再利用协同,你就可以前台用loading条或动画提示玩家游戏未卡死,同时后台协同处理加载的事宜 Asynchronous同步。 

15.U3D中用于记录节点空间几何信息的组件名称,及其父类名称
组件是Transform ,它的父类是 Component

16.简述四元数的作用,四元数对欧拉角的优点?
四元数用于表示旋转
相对欧拉角的优点:
1)能进行增量旋转
2)避免万向锁
3)给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)

17.向量的点乘、叉乘以及归一化的意义

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号