游戏客户端面试(Unity)

Posted 爱上游戏开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了游戏客户端面试(Unity)相关的知识,希望对你有一定的参考价值。

推荐阅读:

一。最开始的两家公司笔试面试题目

      一家公司是学校聘请研究教育方面VR课件的公司,面试没几天,就收到了面试通过的消息,后面因为通过了另一家游戏公司而拒绝了。
      另一家公司是一家游戏外企,在春熙路,当时笔试还可以,面试被问及到很多图形学的知识,不行被刷

C#知识
1.值类型,引用类型;装箱和拆箱:
2.接口和类的继承。
3.String , StringBuilder区别。
4.C#与C++结构体的区别
5.sealed,const 和onlyread的区别; ""与null的区别
6.委托,delate :三种泛型委托
7.协程和多线程的区别?结构体和类的区别?
8.命名空间?unity 的命名空间-unityEngne
9.实现计时器的方法? Time deltatime:协程
计算机图形学
1.期末成绩,学了什么。
2.光照模型有哪些,公式?兰伯特 半兰伯特等
3.3维模型组成? Mesh
4.如向将文理贴在模型上? uv坐标
5. 图片向格式有那些?
数据结构
数据结构有哪些?最熟悉什么?
Unity
1.碰撞器,触发器的区别。物体发生碰撞的几个过程?
2.Mesh下面有哪些字段(熟悉组件不的字段)顶点坐标,法线,纹理坐标,三角形绘制序列等
3.如何实现资源复用? 对象池
4.U3D脚本的生命周期? Awake一Start—— Update- FixedUpdate一LateUpdate -0nGUI一Reset一OnDisable一OnDestoy
5.如何实现UI界面的层级?图集的创建?图集的作用?
6.坐标空间有哪些?顺序?世界坐标系一屏幕坐标系— GUI界面一视口…

二。天府四街某科技有限公司

    公司主要是做棋牌类的带有赌博性质的游戏,当时公司成立没多久,很幸运的进去了。
当时笔试主要是针对lua和shader方面,大概记得几个:
1.lua实现类的继承
2.lua遍历查找某个数
3.shader实现半透明效果
4.优化
反正全是编程题和简答题。当时优化写了有对象池,面试就被问到了对象池

三。簇桥附近某科技有限公司

    一家修马路的公司,公司很大,环境很好。当时面试感觉还可以,就是很多优化方面的不太懂,所以没过。
1.向量的加减
2.ngui和ugui的区别
3.用过的数据结构有哪些,优缺点
4.优化
5.字典和List的区别
还有一些想不起来了。。。

四。东郊记忆附近某科技有限公司

    这个公司主要是做休闲小游戏的,据说两三个星期就能完成一款小游戏。当时谈得挺好的,说后面联系我,就再也没有联系了。
1.当时主要问了下为什么想跳槽
2.在原来公司的主要工作
3.当一款游戏改动后,如何做升级工作,用什么方法。

五。高新附近某科技有限公司

目前有三个项目组,有一个是二次元偏女性的。
1.UI用的是什么框架?UGUI
2.代码用的是什么框架?MVC
3.说说你在公司做的项目
4.代码:单链表的增删查
5.只需要说出思路:有一条一次可跑6只小猪的赛道,现在有38只,用最少的次数测出跑得最快的前三只
6.申请内存的方式:new
7.canvas的作用:
Canvas画布负责UI组件的布局以及渲染,所有的UI组建元素必须作为Canvas的子节点。
8.单链表和数组的区别

六。环球中心某科技有限公司

    这个公司主要是做格斗,RPG类型的游戏,地点在环球中心,地理位置是真的不错,高大上,环境也很好。去应聘的时候公司正在招H5微信小游戏的。当时端午快到了,看到公司每个人都发了一盒粽子,一桶菜籽油,一袋米,恩,感觉福利不错,上班时间9:30-18:30.
基础
1.面向对象和面向过程的区别及其优缺点?
    区别:面向过程就是分析出解决问题的步骤,然后一步一步实现,在使用的时候分步调用即可;
              面向对象就是把问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是描述某个事物在整个解决问题步骤中的行为。
面向过程
    优点:性能高
    缺点:没有面向对象易维护、易复用、易扩展
面向对象
    优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 。
    缺点:性能低,类调用时需要实例化,开销比较大,比较消耗资源。
2.面向对象程序有何特点,如何实现?
(1)封装:C#对方法的封装只需要改变方法的访问级别,比如设为public,private等。
(2)继承:使用符号“:”实现继承,继承可以使子类或者说派生类获得父类或者说基类的所有可被继承的内容。
(3)多态:体现在函数重载和虚方法使用上,编译时多态利用函数重载实现,运行时多态通过覆写虚方法实现。
3.解释时间复杂度和空间复杂度,并指出在评估算法质量是应选择哪个指标?
时间复杂度:程序运行过程中所用的时间,与算法中语句的执行次数成正比例。
空间复杂度:算法需要消耗的内存空间
在评估算法质量是应选择时间复杂度作为主要标准。
4.求下面二叉树的前序遍历,中序遍历的输出结果。

前序遍历:根左右6423517
中序遍历:左根右3246157
后序遍历:左右根3241756

5.选着你熟悉的一种排序算法编写代码实现方法Sort(int[])对一个数组进行排序。
    当时做题选择的是最简单的排序:冒泡法。还有更过的排序方法请见:十大经典排序算法
6.编写一个函数,当已知一个三角形边长a,b,c时,求其对应的三个夹角。
    这个题应该算是很简单的,只要你了解三角形边与角之间的公式,直接变换公式就能写成程序。此题还需要调用反函数

C++部分
*7.const int a和const int a,const int const a有何区别?
    后面那一块很懵逼,看不懂。C++里面的指针什么的真的很烦人,当时也没怎么学懂,需要了解的自己百度吧,推荐一个答案:const int *a与int *const a,const int *const a的区别

8.假设x=9999,以下函数的输出是多少?

int fun(int x)

    int count=0;
    while(x)
    
        ++count;
        x=x&(x-1);
    

    恩,这个题也是醉了,没有输出语句,我怎么知道输出的是什么变量,恩,但是呢,又不能直接那样写,于是当时写的答案“输出语句呢,如果要输出count的值,输出结果应该是8”,while的作用是在每一次循环减去一个二进制的1,9999有八个1。
9.编写一个函数模板,实现将输入的数组逆序,并存储到目标数组中,函数输入参数src,原函数组dst,目标数组int len数组长度。
    大致说下思路:将原数组逆序取出,顺序存入目标数组

for(int i=len;i>=0;i--)

  for (int j=0;j<len;j++)
  
      dst[j]=src[i];
  


C#部分
10.ref和out有何区别?

(1)ref传进去的参数必须在调用前初始化,out不必,即:

1 int i;
2 SomeMethod( ref i );//语法错误
3 SomeMethod( out i );//通过

(2)ref传进去的参数在函数内部可以直接使用,而out不可:

public void SomeMethod(ref int i)

   int j=i;//通过
   //...

public void SomeMethod(out int i)

   int j=i;//语法错误

(3)ref传进去的参数在函数内部可以不被修改,但out必须在离开函数体前进行赋值。
    ref在参数传递之前必须初始化;而out则在传递前不必初始化,且在 … 值类型与引用类型之间的转换过程称为装箱与拆箱。
11.阅读以下代码,程序输出是什么?

	private class A
    
        private int m_a;
        public A(int _a)  m_a = _a;
        public virtual int GetA()
        
            return m_a;
        
        public int GetAA()
        
            return m_a;
        
    
    public class B : A
    
        private int m_a;
        public B(int _a) : base(_a)  m_a+=_a-1;
        public override int GetA()
        
            return m_a;
        
    
    var b = new B(12);
    var a = b as A;
    Console.WriteLine("GetA=0,GetAA=1",b.GetAA(),a.GetA());


输出:GetA=12,GetAA=11
12.编写一个函数,输入指定长度,输出一个包含数字,大写字母,小写字母的随机字符串。要求:字符串的内容可选,即可以选择是否包含数字/大写字母/小写字母,且可选内容是否重复

扩展
    这两个扩展题,真的是,我的能力有限,没有思路。第一个题还能看懂题,后面一个题越看越懵逼,忘大佬解答。
13.选择你熟悉的一门语言,或者使用伪代码,实现以下功能:
    一个矩形Rectangle包含左上角坐标(x1,y1),右下角坐标(x2,y2),width,height(宽,高)四个属性

bool intersect(Rectangle b) 判断是否与矩形B相交

bool contain(Rectangle b) 判断矩形b是否被包含在当前矩形中

可选:Rectangle Rotate(p,angle) 将矩形按照点p旋转angle角度,并返回旋转后的矩形。

14.假设现有M个人,分散在N各QQ群中,任何人可以属于一个或多个群,现在需要将M个人按照以下要求重新分成K个组:
重新分组后:
(1)每组成员是互斥的,即任意两个新组之间的交集是空的
(2)任意两组组成的冰机不是分组钱任意QQ群的子集。
(3)任意一组成员至少是1个分组的QQ群的子集。
(4)任意一组成员与任意其他QQ群的交集只能为空或等于该新分组自身。
选择你熟悉的一门语言或伪代码完成以上功能

七。软件园E5某公司

1.怎样引用全局变量
2.局部静态变量和局部一般变量的区别
3.实现一个函数中的构造函数(有两个),析构函数,赋值函数等方法
4.#define A(x) x+x
b=5*A,问b的值
5.分别使用bool,int,float,指针与"零"做比较
6.写出下面程序的输出结果,并说出有什么问题

A()
    A()
        print("a");
    
    ~A()
        print("~a");
    

B():A
    B()
        print("b");
    
    ~B()
        print("~b");
    

main()
    A *pa=new B();
    delete(*pa);

7.矩阵运算
8.说你玩过的5个游戏及心得
9.说出你最熟悉的设计模式,并举例说明
10.写一个函数,实现在字符串n中查找子串M,并返回查找到的第一个下标
11.人,羊,菜,狼过河问题
12.写一个函数,查找任意一个数n,的连续几个数之和也为n.
笔试题暂时只记得这些了,下面说说面试吧
面试
面试几乎全考的简历上的内容
1.说说你数学建模担任的角色,怎么建的模等
2.C++学了那些,针对你说的考
3.计算机图形学学了那些?,怎么画直线,裁剪算法有哪些,并说明怎么实现,渲染管道,矩阵的逆运算,在图形学中的意义
4.数据结构学了那些,队列和栈的区别,如何实现用两个栈实现队列的功能。
5.如何洗牌?
6.说说在原来公司的项目,好友列表怎么实现,无尽列表怎么实现?
7.编辑器扩展怎么实现?
8.lua怎么实现继承?
9.shader的光照模型知道那些
10.人工智能学过什么,说一说蚁群算法,蚁群算法怎么实现信息传递。蚁群算法在游戏中的应用:加入屏幕上有成千上万的子弹,如何判断子弹是否与玩家相撞(你不可能循环每个子弹判断)

以上是关于游戏客户端面试(Unity)的主要内容,如果未能解决你的问题,请参考以下文章

Unity游戏客户端面试(2019)

[Unity3D]上海某大型游戏公司的基础面试题

unity3d面试题大全

游戏开发题库使用Unity制作Unity题库,支持题目录入和刷题(面试 | 笔试 | 自制题库 | 从基础到高级)

游戏开发题库使用Unity制作Unity题库,支持题目录入和刷题(面试 | 笔试 | 自制题库 | 从基础到高级)

启灵网络(广州)|聘后端开发/U3D手游客户端/ 游戏测试/次世代场景模型等