unity实习生面试
北京教育中厂的成都分部 11.5
时长有28分钟
一面二面合并了
面试官人挺好的,也不是特别急,答的不是很好的问题面试官直接跳过了
顺序不是很统一 只写记得的部分
1.问了值类型和引用类型的区别
2. 问了ugui的组件有哪些
ugui有哪些优化方案
答用打图集来减少内存的消耗
Unity有哪些优化方案
答用对象池以及少用全局变量
3.引用类型储存在堆上是怎么储存的 好像是这个记不清了 没答出来
问了两道算法
4一个三角形,一个三角形有三个顶点,然后有一个点如何判断另一个点在这个三角形的内部还是外部?自己答出来的是从内部找一个顶点连线,实际上答案是可以用面积来求以及用向量夹角来求。
5还有一个快排怎么排的?以及怎么优化快排
答:怎么排的想起来了,但是没有说优化方法 查找后:优化:三数取中 随机选基准值 选取首尾元素作为基准值
问了一下,快排怎么实现的?答的凑合
6.了解哪些设计模式
答:了只了解单例模式,然后说了说单例模式怎么用
查找后:单例模式用于保证一个类只有一个实例,并且该实例可以全局访问。在Unity中,这种模式常用于管理游戏系统或资源,例如游戏设置,场景管理,音效管理等。
工厂模式用于创建对象,它将对象的创建过程封装在一个工厂类中,使得客户端程序无需直接调用对象的构造函数来创建对象,而只需要调用工厂类的方法即可。
观察者模式用于对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Unity中,观察者模式常用于事件的处理和UI界面的更新。
7.面向对象的三个特征 和五个原则
实现多态的三个步骤
- 继承(猫和狗继承动物)
- 重写方法(猫和狗重写eat方法)
- 父类引用指向子类对象(Animal animal = new Cat();)
五大原则:单一职责原则 一个类应该只负责一项任务 使代码更容易理解和维护
- 开放-封闭原则 类、模块、函数等)应该对扩展开放,对修改关闭
- 里氏替换原则 所有引用基类(父类)的地方必须能够使用其子类的对象 子类必须能够完全替代其父类
- 接口隔离原则 接口应该尽可能小,只包含客户端需要的方法。
- 依赖倒置原则 高层模块不应该依赖于低层模块,二者都应该依赖于抽象 可以实现低耦合和高内聚的设计
答出来了特征没答出来原则
8协程是怎么实现的? 底层原理是什么?
答用迭代器
9.问了一下字典如何储存值以及字典的存东西的原理
没答上来 看了一下,发现好像是直接add remove就行(不知道是不是) 麻了
10.最后是一道场景题,问,工作时如果遇见了上边发配的任务已经完成不了了,时间特别紧急,要截止,你该怎么做?
答 :先自己憋一会儿,憋1到2个小时,实在想不出来找组长问一问怎么办,
11.问是不是自学的游戏? 答说是自己学的
12.问了问背包系统的制作需要用到哪些ugui组件
没答好,光说了说用图片组件,还有一个能让,图片排列规矩的组件。。。。。这我当时还自己做过,然而实在记不清了都是三四个月之前了
反问环节:问了问,公司是做什么项目的?
回答 公司是做学龄前儿童的绘本小游戏 呃,问实习生需要干什么 得到回答,实习生需要在绘本中一些益智小游戏的整体的游戏逻辑搭建
补:还想起来问了在引用类型堆中如何删除还是怎么着来着 答了个用GC自动删除也不知对不对
总结:基础有一些但是还是不太熟练 得仔细看看那个unity面经 当然算法和数据结构也得常常复习 差点快排怎么排没答上来。。。。汗流浃背了当时
四:几种数据结构的比较
这里比较一下Dictionary、HashSet、Hashtable、List
——如果是通过key去查找,Dictionary和Hashtable的效率是高于List的,如果是通foreash遍历,则List的效率更高(List底层是数组,内存是连续的。Dictionary和Hashtable底层是哈希表,根据Hash算法进行存储内存是不连续的,会产生更多的换页操作)
——HashSet的查找效率要高于List,因为HashSet内部原理是哈希表,只不过与Dictionary和Hashtable不同的是只存了key
——HashSet添加元素时会判断是否已经存在,不会添加重复的元素,可以使用HashSet去