找工作,带你实战笔试(二)

每日一荤

某人到商店买点钞机,挑了两台最贵的,同时问了一下老板为什么这种型号的贵一些,老板告诉他因为这是全智能语音型的。付款时他让老板就用这两台点钞机点钞,两台点钞机都报出了准确的数字,他认为语音功能还不错,但没看出什么智能来,老板说你以后用就知道了,他付完款后把点钞机放到车后座,开车回公司。在路上,他突然听到一台点钞机对另一台说话了:“喂,传说中被别人卖了还帮别人数钱的是不是就是咱哥们碍…”

公司一

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座标

数据结构

数据结构有哪些?最熟悉什么?

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.单链表和数组的区别

公司六

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群的交集只能为空或等于该新分组自身。
    选择你熟悉的一门语言或伪代码完成以上功能
公司七

1.怎样引用全局变量
2.局部静态变量和局部一般变量的区别
3.实现一个函数中的构造函数(有两个),析构函数,赋值函数等方法
4.求b的值

#define A(x) x+xb=5*A

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已完—

也许必然要学会坚强,即使有天坚强被现实击破,也要带着坚强的碎片继续狂奔。梦想的路上注定崎岖不定,坎坷萦绕,风雨万阻。而现实的路上注定疲倦不堪,身心伤痕累累,泪眼婆娑。但又能如何,当你生存在这个世界一天,必须学会扛起对未来憧憬的付出。

玩转游戏开发

长按识别

关注“爱上游戏开发

让我知道你在看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章