【学习日志】2022.10.19 Unity基础

一、C#编程

1-1. 以下代码意图是什么?有没有什么问题?如果有问题,应该怎么写?

for (int i=0; i<list.Count; i++)

{

    if (list[i] == 9)

        list.RemoveAt(i);

}

1-2. LinkedList是什么?它的优缺点是什么?举例说明它的用途。

数组和List、ArrayList集合都有一个重大的缺陷,就是从数组的中间位置删除或插入一个元素需要付出很大的代价,其原因是数组中处于被删除元素之后的所有元素都要向数组的前端移动。
LinkedList(底层是由链表实现的)基于链表的数据结构,很好的解决了数组删除插入效率低的问题,且不用动态的扩充数组的长度。
LinkedList的优点:插入、删除元素效率比较高;缺点:访问效率比较低。

 

1-3. private, public, protected, internal 四种修饰符分别是什么含义?

1-4. 反射是什么,举例说明它的用途。

1-5. ref关键字有什么用途?它和out关键字有什么区别?

1-6. 阅读代码回答问题:

void Print(string str)

{

Debug.Log(str);

}

Action a;

a += () => Print(“A”);

Action b = a;

b += () => Print(“B”);

  1. 请写出a()的打印结果。
  2. 请写出b()的打印结果。

1-7. 类和结构有什么区别?它们和堆、栈有什么联系吗?请举例常用的引用类型和值类型。

  1. 1-8. 描述接口(Interface)的用途。接口和抽象类(Abstract class)有什么相似和区别?

接口类型的变量,可以指向任意实现了该接口的类的对象。

1-9.  Stack,Array,List,Hashset,Dictionary,Queue,分别说明它们的特点(区别)和应用场景。

附加题:说明通用object容器与泛型容器的优劣。(知识点:装箱和拆箱)

1-10. 举例说明lambda表达式的用途。

1-11. GC是什么意思?在代码设计中为什么要考虑它?

1-12. (上机题)要从字典中删除一个指定的元素,实现这个函数:

void RemoveItem(Dictionary<int, Item> dict, string itemName)

其中Item是道具类,道具具有名称Item.name。

1-13. 某个类定义为:

class Student {

string name;

int score;

}

有一个列表List<Student> students,请分别针对name和score进行排序。

1-14. 说明值类型和引用类型赋值的区别。

1-15. 位运算有哪些?举例说明它的用途。

&  |  ^  ~      <<   >>

1-16. 简述C#源文件编译过程

C#源码  >  CIL   >  在虚拟机上运行

IL2CPP:C#源码 > CIL > C++源码 > 编译,以原生(Native)方式运行

  • 算法

2-1. 在你将要开发的手游中,要求体力每5分钟增加1点。我们可以通过int GetTimestamp()函数获得当前的时间戳,请问如何实现此需求。具体来说,要保存什么数据,用什么样的方法刷新体力?

2-2. 在上述问题的基础上,有一个限制参加活动次数的需求,玩家可以如何实现每天0点刷新活动次数?活动次数为一天2次。

如何实现每天5点刷新活动次数?

2-3. (上机题)用深度优先搜索算法在Unity的场景树中查找名称为xxx的物体,该物体当前是隐藏状态。提示:得到所有根节点物体写法——

UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects()

2-4. 以下程序的输出是什么?

Class Program

{

Static void Main(string[] args)

{

    Console.WriteLine(func(99));

}

Public static int func(int x)

{

   int countx = 0;

        while (x>0)

{

    x = x & (x-1);

    countx++;

}

return countx;

}

}

2-5. 用两个Stack实现一个Queue,将代码写在下面。

2-6. 一个列表,其中只有一个元素出现了奇数次,其它元素都出现了偶数次。找出这个奇数次的元素并输出。

例如:[1,1,3,3,4,5,4]

2-7. 描述快速排序的流程。另外,它的时间复杂度是多少(可以给出范围)?它是稳定排序还是不稳定排序?

2-8. 使用快排时,何时会达到最快的情况,或最慢的情况?

2-9. 有一个二叉树,其节点定义为:

class BinNode

{

  int value;

  BinNode left;

  BinNode Right;

}

给你某个二叉树的头节点BinNode head;遍历它的所有节点并打印value。

2-10. 有一个自定义的单链表节点,结构为:

class LinkedNode

{

int value;

LinkedNode next;

}

给定你一个链表的头部:LinkedNode head。完成以下两个函数:

// 在node之前插入一个节点,值为v

static void AddNode(LinkedNode head, LinkedNode node, int v);

// 删除这个节点node

static void RemoveNode(LinkedNode head, LinkedNode node);

2-11. 生成一个指定长度的随机字符串,要求它只包含大小写字母和数字。

2-12. 你在实践中用过哪些数据结构?用在什么场景下?

2-13. 二叉树的高度为H,求最多节点数?二叉树的节点个数为N,求最小高度。

2-14. 描述字典的内部实现原理。

  • Unity实践

3-1. 有一个继承自MonoBehaviour的类A,请用c#属性get写出它的单例模式,要求任何时候调用都非空。

3-2. 举例说明对象池的 作用。如果让你设计一个对象池类,它应当有哪些主要字段和方法?

3-3. 举例说明状态机在游戏中的使用。行为树和状态机的区别和联系。

3-4. 举例Unity的四个特殊文件夹,它们分别是做什么用的?

3-5. Unity协程和线程的区别?

3-6. 描述AssetBundle的用法。

3-7. 描述Unity中资源热更新的原理和流程。

3-8. 举一个例子,说明如何用射线检测来实现碰撞。

3-9. unity资源中每个文件、文件夹会对应一个meta文件,请问meta文件作用是什么?如果你和同事电脑中某个文件的meta文件不一致,会有什么影响?

3-10. Unity里面Vector3为什么要设计成值类型

  • 图形学基础与Unity优化

4-1. Unity中,sharedmaterial和material有什么区别。

meshRenderer.sharedmaterial = xxxx;

meshRenderer.material =xxx; // 有新建材质球的含义

4-2. mipmap是什么?它如何使用,有什么作用?

4-3. DrawCall是什么,如何降低DrawCall?

推荐图书:《Unity游戏优化(第2版)》

4-4. 三阶矩阵(3x3矩阵)乘以向量,能否实现三维向量位移操作?

  • 智力测试

5-1. 小王、小张、小赵三个人是好朋友,他们中间一个人下海经商,一个人考上重点大学,一个人参军了。此外他们还知道以下条件:小赵的年龄比士兵大;大学生年龄比小张小;小王的年龄和大学生年龄不一样。

请推出这三个人的身份。

5-2. 有三十六头猪赛跑、但是赛道一次只能跑六只,问最少要跑几次能选出跑的最快的三只

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值