面试问题
Apr 02, 2022C#
-
List 怎么排序
List.Sort
-
自定义数据的 List 能排序吗,怎么排序
实现 IComparable 接口
-
动态数组如何添加数据,如何移除数据,例如删掉所有 5
添加数据直接 Add 即刻,但是 remove 要从尾部往前遍历删除,因为顺序执行会再删除元素后,index改变。
-
能不能详细说下添加元素是内部会进行过什么操作
首先会判断容器容量是否足够,不足够会重新申请内存空间,大小为原来的两倍,并将原元素存储到新空间后,再添加新元素。
-
移除能怎么优化吗
和批一起移除
-
-
as 和 is 的区别
as 会尝试进行类型转换,is 只是类型判断
-
arrayList 和 list 的区别,使用上有什么区别
arrayList 是以 Object 存储数据的,所以存储数据方便。但是存取就有装箱拆箱操作,比较消耗性能。List 则指定一种类型,没有装拆箱操作。
-
delegate 和 event 有什么区别
event 是对 delegate 再深一层封装,对delegate进行 = 号操作是允许的,并且会覆盖所有delegate的内容,event 则只允许加减,相对安全很多
-
结构体 和 Class 有什么区别
结构体值类型,class 引用类型
-
引用类型和值类型有什么区别
值类型存储再程序被分配的栈,所在的函数声明周期结束后就会回收,引用类型则分配在堆区,程序关闭才会回收。
-
如果结构体的构造函数是传递一个类对象,对两个结构体传递同一个类对象,通过其中一个结构体改变类对象的值,会影响另一个吗?
会,因为引用是同一个。
-
-
如何判断回文字,abccba 这种?怎么简单怎么来
C# 中用 string.reverse 反转字符串,比较一下就好了。
-
如果不能用自带函数,怎么处理
双指针,左一个右一个,在相交前都一样则是回文
-
数据结构
-
说一下你知道的数据结构,都有什么特点
- 数组:结构简单,访问速度快,占用内存小,但是查找较慢,增删影响偏大(需要重构数组)
- 链表:增删简单,占用内存偏大一点,访问速度一般。
- 队列:有先进先出的特性,适合做消息处理
- 栈:先进后出
- 堆:非严格的大小关系,对于求前n大的问题消耗较少,维护也快,
- 树:天然二分,具有查找属性,快,维护也相对相对简单。
- 哈希表:字典,查找最快
-
用过哪些
数组:无
链表:删除节点,先找到要出节点的前一个结点,将前一个结点的 next ,指向删除节点的next。
哈希表:哈希表大致是如何工作的,冲突怎么处理。构建哈希函数,通过元素直接得到 index,如果没冲突,可以直接返回元素,若有冲突,可以再冲突位置建立链表或数组,链地址冲突解决法。对发生冲突的位置在进行一个个匹配。
堆:大顶堆,怎么增加一个节点。在尾添加节点,然后判断当前的堆属性,如果节点比父节点大,则交换位置后,对新位置继续判断堆属性。无需和同级节点判断,因为堆的属性,父节点是大的即可。
算法
-
冒泡
对比相邻的元素,如果大小反向,就交换位置,一直匹配到最后 能优化吗?每次匹配,记一个是否交换过的标记,如果一轮下来,没有改过,说明已经有序,直接返回
n平方级别
-
选择排序
每次遍历选出最值,和当前的替换位置。
n平方级别
-
桶排序
复杂度n+c,c为 N * (logN - logM)
-
快排
去第一为基准值,设置左右两指针i,j,j从右往左找,找到第一个小于基准值的,将当前值复制到i上,还i从左往右找,找到第一个大于基准值的,将值复制到j上,如此往复,知道 i == j 时,将基准值放到 a[i] 上
log(n)级别
Unity
- 说一下你知道的 Unity 脚本生命周期
- Awake
- OnEnable
- Start
- FixedUpdate 固定间隔帧
- OnTriggerXXX 当触发器发生碰撞
- OnCollisionXXX 当碰撞体发生碰撞
- OnMouseXXX 鼠标事件
- Update 渲染帧
- LateUpdate
- OnGUI Unity前GUI系统回调,现多用于调试
- Yield WaitForEndOfFrame
- OnDisable
- OnDestroy
-
UGUI 熟悉吗
-
按钮怎么添加监听事件
addlistener
-
能不能自己写个按钮
能实现 IpointerClick 接口就行了
-
-
Unity布局组建用过吗
horizontalLayout,verticalLayout,gridLayout
-
知道 Draw call 吗,为什么会出现要清 Dc 的情况,大致怎样清
-
如果要显示一个倒计时30分钟的秒表,精确到秒,怎么实现。
-
你知道有哪些控制 2D 元素的层级方法
-
有没有用过对象池,怎么理解对象池,如果你设计会怎么做。
-
你有什么办法寻找一个对象。
1、物理更新一般在哪个系统函数里 FixUpdate 2、String StringBuilder有什么区别 String是字符串常量。StringBuilder是字符串变量。String类型是个不可变的对象,连接操作频繁的时候,使用StringBuilder对象。StringBuilder的优势在于拼接,string的优势在于对字符串做一些处理 3、MonoBehaviour的生命周期几个常见函数 4、值类型和引用类型的区别 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中 值类型表示实际数据;引用类型表示指向存储在内存堆中的数据的指针或引用 值类型继承自System.ValueType;引用类型继承自System.Object 5、设计模式 单例模式 6、物体发生碰撞时,有几个阶段,分别对应的函数 进入碰撞OnCollisionEnter 停留碰撞OnCollisionStay 退出碰撞OnCollisionExit 7、如何让GameObject在LoadLevel后不被卸载掉 8、Unity3D的协程和C#线程之间的区别 多线程程序同时运行多个线程,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。 除主线程之外的线程无法访问Unity3D的对象、组件、方法。 Unity3D没有多线程的概念,不过Unity也给我们提供了StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的方法。 StartCoroutine为什么叫协同程序,所谓协同,就是当在StartCoroutine的函数体里处理一段代码时,利用yield语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。 9、OnEnable、Awake、Start运行时的发生顺序 【Awake()】=>【OnEnable()】=>【Start()】
Comments