多益一面
09.07 多益一面
自我介绍;
介绍一下你最得意的项目
那你为什么想投游戏开发岗位?
你说说为什么这么关注《黑神话·悟空》这个游戏?
你自己平常喜欢什么类型的游戏?
玩过多益什么游戏吗?
说说面向对象思想
平时有了解过什么数据结构吗?
那你说说数组和链表的区别是什么?
知道递归吗?说说递归的优缺点和使用场景?
如果不用递归的话有什么其他的方法呢?
现在让你设计一个扫雷游戏,你会怎么设计?
这里我说先划定n*n区域的大小和边界,然后每点开一个格子会出现一个数字,表示这个数组周围8个内有多少个炸弹,然后就被打断了,说不用考虑这么多。
然后我继续说,简单实现的话就用随机数生成m个坐标,表示地雷的位置。
那如何保证随机生成的不会重复呢?
这里我说可以用HashSet来实现去重,避免生成重复的地雷位置。
如果用Set来做的话生成的那就不是真随机了,概率肯定就不一样,要保证随机的概率一样
我说可以把n*n大小的区域划分为m个区域,然后每个区域再生成一个随机位置,这样也相当于是生成了随机地雷。然后面试官说用这种方法的话其实也不是真随机,会导致炸弹分布的很均匀。
你知道洗牌算法吗?
我说我没有了解过,他说其实就是用洗牌算法来实现的。
洗牌算法是用来打乱一个有序序列的算法,常用于随机排序数组或集合中的元素。
以下是洗牌算法的一种常见思路,通常称为 Fisher-Yates 洗牌算法:
- 从要打乱的序列中选择最后一个元素,即最后一个位置的元素。
- 随机生成一个介于 0 和当前位置(包括当前位置)之间的随机数,可以使用随机数生成函数来实现。
- 将当前位置的元素与随机选择的位置的元素进行交换。
- 接着从当前位置的前一个位置开始,重复步骤 2 和 3,直到第一个位置。
- 然后从未被选择的元素中随机选择一个元素,将其与第一个位置的元素进行交换。
- 重复步骤 2 到 5,直到所有位置都被处理完毕。
- 这个算法确保了每个元素在最后的洗牌结果中具有相等的概率,并且生成的排列是随机的。
你平时日常的时间是怎么分配的呢?
手撕代码:二分查找;
手撕代码:非递归方法生成斐波那契数列;
反问环节。