Unity客户端笔试题
2015-05-12 18:03
155 查看
1. 简述shell排序,快速排序,堆排序三种算法的原理? 并写出冒泡排序的算法?
2.三点15分,时针与分针夹角是多少度?
3.画出D3D9可编程渲染管线渲染流程示意图?
4.String/StringBuilder 区别?
5.说static,const,virtual,abstract,override,这几个关键字在C#中是什么意思?
const 是常量, 也就是只读的,
static:当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被调用。
Virtual:当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在类的继承中非常常用,用来提供类方法的多态性支持。
overrride:表示重写。例如:这个类是继承于Shape类。public override double Area 这个属性在shape中肯定存在,但是这里我们不想用shape中的,所以要重写,virtual,abstract是告诉其它想继承于他的类,你可以重写我的这个方法或属性,否则不允许重写。 一个生动的例子:老爸表示基类(被继承的类),儿子表示子类(继承的类) 老爸用virtual告诉儿子:“孩子,你要继承我的事业,在这块上面可以自己继续发展你自己的事业。”
儿子用override告诉全世界:“这个我可不是直接拿我爸的,他只是指个路给我,是我自己奋斗出来的!”
abstract:抽象方法声明时使用,是必须被派生类重写的方法,抽象类就是用来被继承的。可以看成是没有实现体的虚方法。如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。抽象类不能有实体的。
interface:用来声明接口。
6.写出三种设计模式,并说说在哪些情况下适用?
7.如何使用www加载资源并使用该资源?并分析这一过程的内存开销?
8.N个元素取出最大(小)的K个元素,请说明思路及算法?
注:每个方法都有其适用范围,比如有的在N数目很大的情况下适用。每个方法都有其适用范围,比如有的在N数目很大的情况下适用。
《方法一》:
首先对元素进行排序,然后去除最大的K个元素即可。可以用基本的直接插入排序、冒泡排序,也可以用快速排序和堆排序等方法来解决。一般来说都会要求快速排序,因为该
方法综合来说是最好的。
快速排序版本1:该方法是算法导论上提出的,比较的思想是:从最开始的元素来与我们选定的元素(最右边元素)来比较,如果大于选定的元素,则不处理,如果小于选定的元素,就会往前替换。
快速排序版本2:一般的方法,从两边开始比较。
方法3:利用hash保存数组中元素Si出现的次数,利用计数排序的思想,线性从大到小扫描过程中,前面k个数则为所求,平均情况下时间复杂度O(n)
方法4:编程之美上的思路
首先找到最大的第K个数。这个时间复杂度可以做到O(N),具体做法如下:
从N个数中随机选择一个数,扫描一遍,比n大的放在右边,r个元素,比n小的放左边,l个元素
如果: a:l = K-1 返回n
b:l > K-1 在l个元素中继续执行前面的操作。
c:l < K-1 在r个元素中继续执行前面的操作。
9.给定一个十进制正整数N,计算转换成2进制后该数含有1的个数的总和(写出代码)?
10.加入让你设计一个连连看游戏的算法,你会怎么说,要求说明:
1.怎样用简单的计算机模型来描述这个问题?
2.怎么判断俩个图形能否取消?
3. 怎么样求出相同图形之间最短路径(转弯数最少,路径经过的格子数目最少)
2.三点15分,时针与分针夹角是多少度?
3.画出D3D9可编程渲染管线渲染流程示意图?
4.String/StringBuilder 区别?
5.说static,const,virtual,abstract,override,这几个关键字在C#中是什么意思?
const 是常量, 也就是只读的,
static:当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被调用。
Virtual:当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在类的继承中非常常用,用来提供类方法的多态性支持。
overrride:表示重写。例如:这个类是继承于Shape类。public override double Area 这个属性在shape中肯定存在,但是这里我们不想用shape中的,所以要重写,virtual,abstract是告诉其它想继承于他的类,你可以重写我的这个方法或属性,否则不允许重写。 一个生动的例子:老爸表示基类(被继承的类),儿子表示子类(继承的类) 老爸用virtual告诉儿子:“孩子,你要继承我的事业,在这块上面可以自己继续发展你自己的事业。”
儿子用override告诉全世界:“这个我可不是直接拿我爸的,他只是指个路给我,是我自己奋斗出来的!”
abstract:抽象方法声明时使用,是必须被派生类重写的方法,抽象类就是用来被继承的。可以看成是没有实现体的虚方法。如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。抽象类不能有实体的。
interface:用来声明接口。
6.写出三种设计模式,并说说在哪些情况下适用?
7.如何使用www加载资源并使用该资源?并分析这一过程的内存开销?
8.N个元素取出最大(小)的K个元素,请说明思路及算法?
注:每个方法都有其适用范围,比如有的在N数目很大的情况下适用。每个方法都有其适用范围,比如有的在N数目很大的情况下适用。
《方法一》:
首先对元素进行排序,然后去除最大的K个元素即可。可以用基本的直接插入排序、冒泡排序,也可以用快速排序和堆排序等方法来解决。一般来说都会要求快速排序,因为该
方法综合来说是最好的。
快速排序版本1:该方法是算法导论上提出的,比较的思想是:从最开始的元素来与我们选定的元素(最右边元素)来比较,如果大于选定的元素,则不处理,如果小于选定的元素,就会往前替换。
int Partition(int A[],int p,int r) //非递减排序方法 { int x = A[r]; int i = p-1,mid; for(int j=p;j<r;j++) { if(A[j] <= x) //寻找小于x的数据,找到以后会往前交换 { i=i+1; if(i!=j) //不相等的才需要交换,算法导论上直接交换了,这里感觉可以优化 { swap(&A[i],&A[j]); } } } swap(&A[i+1],&A[r]); return i+1; } void QuickSort(int A[],int p,int r) { int q; if(p<r) { q = Partition(A,p,r); //得到q以后递归调用 QuickSort(A,p,q-1); QuickSort(A,q+1,r); } }
快速排序版本2:一般的方法,从两边开始比较。
int Partition1(int a[],int low,int high) { int pivotkey; pivotkey = a[low]; //枢纽记录关键字 while(low < high) //从表的两端交替地想中间扫描 { while(low < high&& a[high] >=pivotkey) --high; a[low] = a[high]; //将比枢纽小的移到低位 while(low<high&& a[low] <=pivotkey) ++low; a[high] = a[low]; //将比枢纽大的移到高位 } a[high] = pivotkey; //枢纽记录到位 return high; //返回枢纽位置 } void QuickSort(int A[],int p,int r) { int q; if(p<r) { q = Partition1(A,p,r); //得到q以后递归调用 QuickSort(A,p,q-1); QuickSort(A,q+1,r); } }方法2:用一个最小堆来保存K个数,然后从第K+1个开始依次遍历数组,如果大于堆顶元素,则替换堆顶元素,重新调整堆。最后保留下的就是最大的K个元素。
方法3:利用hash保存数组中元素Si出现的次数,利用计数排序的思想,线性从大到小扫描过程中,前面k个数则为所求,平均情况下时间复杂度O(n)
方法4:编程之美上的思路
首先找到最大的第K个数。这个时间复杂度可以做到O(N),具体做法如下:
从N个数中随机选择一个数,扫描一遍,比n大的放在右边,r个元素,比n小的放左边,l个元素
如果: a:l = K-1 返回n
b:l > K-1 在l个元素中继续执行前面的操作。
c:l < K-1 在r个元素中继续执行前面的操作。
9.给定一个十进制正整数N,计算转换成2进制后该数含有1的个数的总和(写出代码)?
10.加入让你设计一个连连看游戏的算法,你会怎么说,要求说明:
1.怎样用简单的计算机模型来描述这个问题?
2.怎么判断俩个图形能否取消?
3. 怎么样求出相同图形之间最短路径(转弯数最少,路径经过的格子数目最少)
相关文章推荐
- unity客户端程序笔试后有感(一)
- unity客户端程序笔试后有感(二)
- unity客户端程序笔试后有感(三)
- Unity 中服务端与客户端的的代码Demo
- Unity客户端架构-GlobalGenerator
- unity内存优化和客户端表格读取方法内存比较
- Unity客户端框架笔记(状态模式和策略模式在游戏中的应用)转
- 腾讯笔试--移动客户端软件开发工程师
- WeaveSocket框架-Unity太空大战游戏-客户端-3
- Unity客户端框架
- Unity的一些笔试题
- 重构Pomelo游戏框架的Unity客户端
- Unity客户端通信测试问题处理(一)
- Unity客户端框架笔记二(组件实体开发模式的思考)转
- Unity 客户端框架(六):UI框架
- 2014年UC客户端方向笔试问答题及详细解答(一)
- 《Unity 3D游戏客户端基础框架》系统设计
- (第三季)604-unity聊天室-创建unity客户端,开发建立连接的代码
- Unity笔试题面试题汇总
- Unity中防止多个客户端同时打开