北京光合起源unity面试题

2021-07-06 11:24发布


选择题

1    c

2    d

3    ac

4    a

5    b

6    a

填空题

1.    继承,封装,多态

2.    单例,工厂方法,装饰模式,职责链模式

3.    ArrayList,Hashtable

4.      X=1; y=0

  当程序实例化B时,因为继承关系,会先执行它的父类中的构造方法,而在A类中的构造方法调用了PrintFields这个虚函数,而在B中重写了A中的虚函数,所以在程序输出时构造方法B还未执行,xy的值不会受到影响,所以输出结果为X=1; y=0

5.      实现冒泡排序就可以了

问答题:

1.      简述GC产生的原因

   当用new创建一个对象的时候,可分配的内存不足时GC就会去回收还未使用的对象,但是GC的操作比较复杂,会占用较多的CPU计算时间,会严重影响到性能

   如何避免?

   1.尽量少的用new来创建对象,使用公用的对象,但是需要考虑到实际情况,不能乱用

   2.使用对象池。

 

2.      U3D生命周期

   1.Awake  2.Start 3.FixedUpdate  4.Update  5.LateUpdate

   6.OnDestroy

 

3.      prefab的作用及在移动环境下使用

   1.减少内存占用,不使用不会占内存

   2.在实例化的时候用,主要会用于经常使用的物体,属性便于修改设置

 

4       什么是协同程序?

   在主线程运行的同时开启另一段逻辑处理来协助当前程序的执行

   C#线程的区别

   协同程序避免了无意义的调动,可以提高性能,但是协程也失去了标准线程使用多CPU的能力

   主要用于管理额外开启的线程

using UnityEngine;

using System.Collections;

class hahah:MonoBehaviour

{

    private void Start()

    {

        Debug.Log("1");

        StartCoroutine(Do());

        Debug.Log("4");

    }

    IEnumerator Do()

    {

        Debug.Log("2");

        yield return StartCoroutine(newDo());

        Debug.Log("6");

    }

    IEnumerator newDo()

    {

        Debug.Log("3");

        yield return new WaitForSeconds(2);

        Debug.Log("5");

    }

}

 

 

6  5

7       List是泛型集合需要限定类型参数

foreach遍历集合时,修改集合,会出现错误,不能进行枚举操作。

避免这个问题,可以重新生成一个集合遍历

foreach (int item in Is.ToList <int>())

     {

           if (item % 2 == 0 )

          {

                    Is.Remove(item);

          }

}