Unity客户端面试题集锦

正在求职中&近期准备开始求职的小伙伴们看过来~贴心的我,这次又给大家准备了【面试题大礼包】!!

Unity游戏开发工程师的面试过程中,我们总能接触到许多眼熟的面试题目,这部分的分数如果不小心丢了,那才是最可惜的!大厂的大门只会早早就在你眼前关上... ...

网上各路面试题随便一搜一大堆,里面难免会有一些重复率高、不够精准的、“岁数太老”的题目!考虑到能方便大家随时查漏补缺,本文一共为大家整理出了20道面试题,涵盖面试真题 & C#基础题 & Lua面试题~ 建议同学们速速收藏!

一、Unity面试集锦

unity面试真题

1.MonoBehaviour的脚本生命周期介绍

答:

Awake:对象首次实例化后,仅会被调用一次

OnEnable: 对象每次被激活后调用

Start:仅会在第一次启用实例后的,第一帧更新前调用

FixedUpdate(物理Physics):固定更新频率,执行物理计算和更新。

Update:每帧调用,执行业务逻辑。

Update 函数返回后将执行协程更新。

协程的不同用法:

Yield null 下一帧继续执行当前协程

yield WaitForSeconds 在指定的时间(秒)后继续执行当前协程

yield WaitForFixedUpdate 等待下一次Fixed Update更新后继续当前协程

yield WWW 在 WWW 下载完成后继续当前协程

yield StartCoroutine(MyFunc) 将协程链接起来,并会等待 MyFunc 协程完成后,再执行当前协程。

LateUpdate:每一帧在Update调用完毕后,调用LateUpdate。LateUpdate常用用途是跟随第三人称摄像机,保证角色在Update中的移动和旋转,在LateUpdate中执行所有摄像机的移动和旋转计算。

OnDisable:对象每次被设置为非激活状态时,调用此函数。

OnDestroy:对象存在的最后一帧完成所有帧更新之后,调用此函数

OnApplicationQuit:当应用程序退出时,调用此函数。

2.纹理加载进内存以后占用内存如何计算?

答:

纹理Texture加载进内存后,大小计算公式如下:

纹理内存大小(字节) = 纹理宽度 x 纹理高度 x 像素字节

像素字节 = 像素通道数(R/G/B/A) x 通道大小(1字节/半字节)

举例:比如一个1024 * 1204的RGBA 32bit的纹理占用多大内存?

占用总位数 :allbits = 1024 * 1024 * (4*8bit)

占用总字节数:allbytes = allbits / 8bit

注:1个byte = 8bit

3.装箱和拆箱的区别

答:

装箱:值类型转换成引用类型

装箱操作:托管堆分配内存,值类型拷贝数据,object地址指向托管堆对象。

拆箱;引用类型转换成值类型

拆箱操作:根据object引用地址找到托管堆上的数据,栈上数据拷贝。

避免装箱操作,可以采用重载或泛型来解决。

4.public、private、protected、internal、sealed的区别

答:

public全局、private类内部、protected派生类、internal本程序集
sealed声明类就不能继承,声明方法就是不能被重写

5.请描述interface和抽象类之间的不同

答:

接口是一种行为,抽象类是一种不能实例化的对象。

接口interface可以声明方法

抽象类abstract可以定义字段、静态字段和方法、抽象方法、属性、构造函数

接口可以继承多个接口,抽象类只能继承一个类

继承接口的类,必须实现所有接口;抽象类需要重写override抽象方法

接口和抽象都不能被实例化

抽象类可以派生自另一个抽象类,接口可以多重继承,抽象类只能单一继承。

6.Unity3d提供了几种光源? 分别是什么?

答:

共4种,DirectionalLight、PointLight、SpotLight、AreaLight

7..Net和Mono的关系?

答:

.Net只能运行在windows平台,而Mono的出现就是为了解决.Net无法跨平台的问题。Mono为.Net提供集成开发环境,集成并实现了.NET的编译器和基础类库,使得.Net既可以运行在windows也可以运行于 linux,Unix,Mac OS 等。

8.C#函数Func(string a,string b)用Lambda表达式怎么写?

答:

‍Lambda表达式(任意参数)=> { 表达式} ;=> 读作goesto(a,b)=> { } ;

9.在类的函数构造前加上static会报什么错?为什么?

答:

静态构造函数不允许添加访问修饰符,且必须无参数。

原因:无论创建多少类型的对象,静态构造函数只执行一次。类实例化或者首静态成员调用之前,运行库会先调用静态构造函数,静态构造函数优先级高于任何其它构造函数,也无法使用this和base来调用静态构造函数。一个类只能有一个静态函数,如果有静态变量,系统也会自动生成静态函数。

二、C#基础题

1.介绍一下C#的string和String Builder

答:

string是不可变值,当通过string进行拼接时,将导致生成新的堆内存,从而产生GC;

而StringBuilder,内部维护了一个动态数组,只要不超过该数组大小,可复用。注:降GC的前提是,给定一个合理的容量大小,避免频繁resize。

2.C#中常规容器和泛性容器有什么区别?哪种效率更高?

答:

常规容器有拆箱和装箱操作,速度慢,消耗性能;泛型容器效率更高,因为没有拆装箱的操作。

3.有哪些常见的值类型

答:

数值类型(int/short/float/double等)、布尔、结构体、枚举

4.构造函数是否能被重写?

答:

构构造器Constructor不能被继承,因此不能重写,但可以被重载。

5.C#中委托和接口有什么区别?各用在什么场合?

答:

委托delegate:unity事件与委托密切相关,回调机制,减少对象之间数据交互。

接口interface:多人协作,完全抽象,类单继承。

委托是约束方法的集合,接口是约束类具备的功能集合,解决类单继承问题。

6.C#中unsafe关键字是用来做什么的?什么场合使用?

答:

unsafe 非托管代码,配合fixed一起使用 ,用在需要指针操作的场合。项目背包系统的任务装备栏使用到。

三、Lua面试题

1.简述Lua实现面向对象的原理?

答:

1. 表table就是一个对象,对象具有了标识self,状态等相关操作

2. 使用参数self表示方法的该接受者是对象本身,是面向对象的核心点,冒号操作符可以隐藏该self参数

3. 类(Class):每个对象都有一个原型,原型(lua类体系)可以组织多个对象间共享行为

4. setmetatable(A,{__index=B}) 把B设为A的原型

5. 继承(Inheritance):Lua中类也是对象,可以从其他类(对象)中获取方法和没有的字段

6. 继承特性:可以重新定义(修改实现)在基类继承的任意方法

2.Lua支持的数据类型

答:

nil 表示无效值

number 整数

table 表

string 字符

userdata 用户自定义

function 函数

bool 布尔

thread线程

3.print(string.find(“hello hello”," hel"))的结果?

答:

6 9

4.Lua中__index和__newindex有什么用?

答:

__index主要用于table的查询;

__newindex主要用于table的更新

5.Lua如何调用C#

答:

三种方式
第一种:官方不推荐
第二种:如果Resource文件下的Lua文件,使用Lua的Require函数即可
第三种:如果Lua文件是下载的,使用自定义Loader可满足

机会只会留给有准备的人,认真对待每一次面试,结束后花时间用心复盘,就算最后面试没有通过,我们也能从中学到不少东西~

其实,面试不仅仅是求职中非常重要的一环,更是能让我们的知识&技能&交流&...等多个方面都得到全面锻炼的机会!

当然~面试前,更要先好好看这篇文章,查漏补缺,才能更好的迎接各大游戏公司的面试挑战!

以上20道面试题

你都熟记了吗?!

想要了解【腾讯、网易、米哈游、莉莉丝】等更多游戏大厂面试题的同学~快快扫描下方二维码添加助教老师吧!!!

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>