unity算法面试_Unity笔试面试题目分享

本文整理了Unity算法面试的相关题目,涵盖点乘与叉乘、代码问题、数据结构、时间处理、对象池、反射、访问修饰符等多个方面。通过这些问题,旨在帮助求职者更好地理解和准备Unity开发的面试,同时也提供了对一些关键概念的解释和应用场景的讨论。
摘要由CSDN通过智能技术生成

这几天在准备找工作,拿出了以前的一些资料,整理了一下分享出来看看,一是方便自己查漏补缺,二来其中的大部分问题是自己理解概括的,有大佬如果看到有错误的地方能够评论交流一下自然是最好的啦!希望早点找到一个工作可以不用在家躺尸了......

以下开始归纳题目——第一部分

1.点乘与叉乘,几何意义及公式

点乘:计算投影和两个向量之间的夹角 |a||b|cos

叉乘:计算两个向量组成平面的法线方向,计算法线,可以计算出a向量与b向量组成的平行四边形的面积 |a||b|sin

2.以下代码的意图是什么?有没有什么问题?应该怎么写?

for(int i=0;i<10;i++)

{

if(list[i]==9)

{

list.RemoveAt(i);

}

}

超出索引值,因为在移除指定下标的元素后会丢失元素,所以索引最多只能到8,而不能到9,并且在遍历的时候不应该删除元素。

3.数组,List,ArrayList的区别

数组:在内存中是连续存储的,有下标,访问迅速,便于赋值以及修改数据,但是需要预先向内存申请指定的空间。

ArrayList:在ArrayList中插入不同类型的数据是允许的,将所有数据都转化为Object来使用,可能出现不匹配的问题,类型是属于不安全的数据结构类型,而且装箱和拆箱操作会导致性能受到很大的损耗。

因此导致了List诞生,也因此衍生了泛型的概念。

List:可以使用泛型来动态的指定对象的类型,减少了类型转换和运行时出错的可能性,动态地根据加入或减少的元素数量进行空间的删减,存储不是连续的,移除某个元素之后会导致后面的元素移动到前面。

4.有一个需求,要求体力每5分钟增加1点,可以通过int GetTimeStamp()函数获取当前时间戳,如何实现该需求,要保存什么数据,或者应当用什么方式来刷新体力。

时间戳:从1970年1月1日00点00分00秒开始至今的总毫秒数。

方法:通过记录上一次保存的时间戳,使用当前的时间戳与上次保存时的时间戳相减,得到的时间除以5分钟换算而成的毫秒数,得到中途经过了多少个5分钟,再增加体力值。

PS:如果需求改为在每天的0点更新(增加2点),则将此时的时间戳减去上次更新的时间戳,并且除以86400秒,则可以得到距离上次更新的时间戳的间隔时间为多少天,多一天则增加2点。

PPS:如果改为在每天的凌晨5点更新,则应该将此时的时间戳以及上次的时间戳都移除去5小时*86400秒,整体偏移5个小时的差别,则可以得到应该更新的次数,并且作出更新。

5.举例说明对象池的作用,设计一个对象池,应该具有哪些重要字段以及方法

对象池的作用:对象池能够节省创建和初始化所耗费的时间,简化对象获取和使用的过程,对于那些被系统频繁请求和使用的对象,使用这种机制可以使性能达到很大提高,是以空间来换时间的操作。

在C#中为了避免GC机制,对象池可以较好地节省消耗的资源。

重要字段有:对象池所使用的对象,能用来判断当前对象是否在使用的flag标签

重要方法有:保存方法,对象池中所使用的保存当前对象的方法,取出对象并且使用对象的方法,都是需要有的。

6.LinkedList是什么?优缺点是什么?用途是什么?

LinkedList是链表࿰

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值