软考系统集成项目管理工程师笔试题整理Word格式文档下载.docx
《软考系统集成项目管理工程师笔试题整理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《软考系统集成项目管理工程师笔试题整理Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
得到程序集中所有类的名称
4,Typetype=assembly.GetType("
程序集.类名"
);
获取当前类的类型
5,Activator.CreateInstance(type);
创建此类型实例
6,MethodInfomInfo=type.GetMethod("
方法名"
获取当前方法
7,mInfo.Invoke(null,方法参数);
七:
简述四元数的作用,四元数对欧拉角的优点?
四元数用于表示旋转
相对欧拉角的优点:
1)能进行增量旋转
2)避免万向锁
3)给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)
八:
如何安全的在不同工程间安全地迁移asset数据?
三种方法
1.将Assets目录和Library目录一起迁移
2.导出包
3.用unity自带的assetsServer功能
九:
OnEnable、Awake、Start运行时的发生顺序?
哪些可能在同一个对象周期中反复的发生?
Awake–>
OnEnable->
Start
OnEnable在同一周期中可以反复地发生
十:
MeshRender中material和sharedmaterial的区别?
修改sharedMaterial将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。
不推荐修改由sharedMaterial返回的材质。
如果你想修改渲染器的材质,使用material替代。
十一:
请简述数组ArrayList和List之间的主要区别。
数组的容量是固定的,您只能一次获取或设置一个元素的值,而ArrayList或List<
T>
的容量可根据需要自动扩充、修改、删除或插入数据。
数组可以具有多个维度,而ArrayList或List<
T>
始终只具有一个维度。
但是,您可以轻松创建数组列表或列表的列表。
特定类型(Object除外)的数组的性能优于ArrayList的性能。
这是因为ArrayList的元素属于Object类型;
所以在存储或检索值类型时通常发生装箱和取消装箱操作。
不过,在不需要重新分配时(即最初的容量十分接近列表的最大容量),List<
的性能与同类型的数组十分相近。
在决定使用List<
还是使用ArrayList类(两者具有类似的功能)时,记住List<
类在大多数情况下执行得更好并且是类型安全的。
如果对List<
类的类型T使用引用类型,则两个类的行为是完全相同的。
但是,如果对类型T使用值类型,则需要考虑实现和装箱问题。
十二:
TCP/IP协议栈各个层次及分别的功能
网络接口层:
这是协议栈的最低层,对应OSI的物理层和数据链路层,主要完成数据帧的实际发送和接收。
网络层:
处理分组在网络中的活动,例如路由选择和转发等,这一层主要包括IP协议、ARP、ICMP协议等。
传输层:
主要功能是提供应用程序之间的通信,这一层主要是TCP/UDP协议。
应用层:
用来处理特定的应用,针对不同的应用提供了不同的协议,例如进行文件传输时用到的FTP协议,发送email用到的SMTP等。
十三题:
Unity提供了几种光源,分别是什么
四种。
平行光:
Directional
Light
点光源:
Point
聚光灯:
Spot
区域光源:
Area
十四:
简述一下对象池,你觉得在FPS里哪些东西适合使用对象池?
对象池就存放需要被反复调用资源的一个空间,比如游戏中要常被大量复制的对象,子弹,敌人,以及任何重复出现的对象。
十五:
CharacterController和Rigidbody的区别?
Rigidbody具有完全真实物理的特性,而CharacterController可以说是受限的的Rigidbody,具有一定的物理效果但不是完全真实的。
十六:
移动相机动作在哪个函数里,为什么在这个函数里?
LateUpdate,是在所有的update结束后才调用,比较适合用于命令脚本的执行。
官网上例子是摄像机的跟随,都是所有的update操作完才进行摄像机的跟进,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。
十七:
简述prefab的用处
在游戏运行时实例化,prefab相当于一个模板,对你已经有的素材、脚本、参数做一个默认的配置,以便于以后的修改,同事prefab打包的内容简化了导出的操作,便于团队的交流。
十八:
请简述sealed关键字用在类声明时与函数声明时的作用。
类声明时可防止其他类继承此类,在方法中声明则可防止派生类重写此方法。
十九:
请简述private,public,protected,internal的区别。
public:
对任何类和成员都公开,无限制访问
private:
仅对该类公开
protected:
对该类和其派生类公开
internal:
只能在包含该类的程序集中访问该类
protectedinternal:
protected+internal
二十:
简述SkinnedMesh的实现原理
二十一:
GPU的工作原理
简而言之,GPU的图形(处理)流水线完成如下的工作:
(并不一定是按照如下顺序)
顶点处理:
这阶段GPU读取描述3D图形外观的顶点数据并根据顶点数据确定3D图形的形状及位置关系,建立起3D图形的骨架。
在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Vertex
Shader(定点着色器)完成。
光栅化计算:
显示器实际显示的图像是由像素组成的,我们需要将上面生成的图形上的点和线通过一定的算法转换到相应的像素点。
把一个矢量图形转换为一系列像素点的过程就称为光栅化。
例如,一条数学表示的斜线段,最终被转化成阶梯状的连续像素点。
纹理帖图:
顶点单元生成的多边形只构成了3D物体的轮廓,而纹理映射(texture
mapping)工作完成对多变形表面的帖图,通俗的说,就是将多边形的表面贴上相应的图片,从而生成“真实”的图形。
TMU(Texture
mapping
unit)即是用来完成此项工作。
像素处理:
这阶段(在对每个像素进行光栅化处理期间)GPU完成对像素的计算和处理,从而确定每个像素的最终属性。
在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Pixel
Shader(像素着色器)完成。
最终输出:
由ROP(光栅化引擎)最终完成像素的输出,1帧渲染完毕后,被送到显存帧缓冲区。
总结:
GPU的工作通俗的来说就是完成3D图形的生成,将图形映射到相应的像素点上,对每个像素进行计算确定最终颜色并完成输出。
二十二:
什么是渲染管道?
是指在显示器上为了显示出图像而经过的一系列必要操作。
渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。
主要步骤有:
本地坐标->
视图坐标->
背面裁剪->
光照->
裁剪->
投影->
视图变换->
光栅化。
二十三:
如何优化内存?
有很多种方式,例如
1.压缩自带类库;
2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;
3.释放AssetBundle占用的资源;
4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;
5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。
二十四:
动态加载资源的方式?
(有时候也问区别,具体请XX)
1.Resources.Load();
2.AssetBundle
二十五:
你用过哪些插件?
二十六:
使用Unity3d实现2d游戏,有几种方式?
1.
使用本身的GUI;
2.把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z轴;
3.使用2d插件,如:
2DToolKit;
二十七:
在物体发生碰撞的整个过程中,有几个阶段,分别列出对应的函数
三个阶段
1.OnCollisionEnter
2.OnCollisionStay
3.OnCollisionExit
二十八:
Unity3d的物理引擎中,有几种施加力的方式,分别描述出来
rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函数中。
二十九:
什么叫做链条关节?
Hinge
Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。
三十:
物体自身旋转使用的函数?
Transform.Rotate()
三十一:
Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),请列出保存和读取整形数据的函数
PlayerPrefs.SetInt()
PlayerPrefs.GetInt()
三十二:
Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。
Awake——>
Start——>
Update——>
FixedUpdate——>
LateUpdate——>
OnGUI——>
Reset——>
OnDisable——>
OnDestroy
三十三:
物理更新一般放在哪个系统函数里?
FixedUpdate,每固定帧绘制时执行一次,和Update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。
FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。
Update就比较适合做控制。
三十四:
在场景中放置多个Camera并同时处于活动状态会发生什么?
游戏界面可以看到很多摄像机的混合。
三十五:
如何销毁一个UnityEngine.Object及其子类?
使用Destroy()方法;
三十六:
请描述游戏动画有哪几种,以及其原理?
主要有关节动画、骨骼动画、单一网格模型动画(关键帧动画)。
关节动画:
把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活,Quake2中使用这种动画;
骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,有关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观;
单一网格模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。
三十七:
请描述为什么Unity3d中会发生在组件上出现数据丢失的情况
一般是组件上绑定的物体对象被删除了
三十八:
alpha
blend工作原理
Alpha
Blend
实现透明效果,不过只能针对某块区域进行alpha操作,透明度可设。
三十九:
写出光照计算中的diffuse的计算公式
diffuse
=
Kd
x
colorLight
max(N*L,0);
漫反射系数、colorLight
光的颜色、N
单位法线向量、L
由点指向光源的单位向量、其中N与L点乘,如果结果小于等于0,则漫反射为0。
四十:
LOD是什么,优缺点是什么?
LOD(Level
of
detail)多层次细节,是最常用的游戏优化技术。
它按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
四十一:
两种阴影判断的方法、工作原理。
本影和半影:
本影:
景物表面上那些没有被光源直接照射的区域(全黑的轮廓分明的区域)。
半影:
景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的区域(半明半暗区域)
工作原理:
从光源处向物体的所有可见面投射光线,将这些面投影到场景中得到投影面,再将这些投影面与场景中的其他平面求交得出阴影多边形,保存这些阴影多边形信息,然后再按视点位置对场景进行相应处理得到所要求的视图(利用空间换时间,每次只需依据视点位置进行一次阴影计算即可,省去了一次消隐过程)
四十二:
Vertex
Shader是什么,怎么计算?
顶点着色器是一段执行在GPU上的程序,用来取代fixedpipeline中的transformation和lighting,VertexShader主要操作顶点。
VertexShader对输入顶点完成了从localspace到homogeneousspace(齐次空间)的变换过程,homogeneousspace即projectionspace的下一个space。
在这其间共有worldtransformation,viewtransformation和projectiontransformation及lighting几个过程。
四十三:
MipMap是什么,作用?
MipMapping:
在三维计算机图形的贴图渲染中有常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为MipMap。
四十四:
请描述Interface与抽象类之间的不同
抽象类表示该类中可能已经有一些方法的具体定义,但接口就是公公只能定义各个方法的界面,不能具体的实现代码在成员方法中。
类是子类用来继承的,当父类已经有实际功能的方法时该方法在子类中可以不必实现,直接引用父类的方法,子类也可以重写该父类的方法。
实现接口的时候必须要实现接口中所有的方法,不能遗漏任何一个。
四十五:
下列代码在运行中会产生几个临时对象?
stringa=newstring("
abc"
a=(a.ToUpper()+"
123"
).Substring(0,2);
其实在C#中第一行是会出错的(Java中倒是可行)。
应该这样初始化:
stringb=newstring(newchar[]{'
a'
'
b'
c'
});
四十六:
下列代码在运行中会发生什么问题?
如何避免?
List<
int>
ls=newList<
(newint[]{1,2,3,4,5});
foreach(intiteminls)
Console.WriteLine(item*item);
ls.Remove(item);
}
会产生运行时错误,因为foreach是只读的。
不能一边遍历一边修改。
四十七:
.Net与Mono的关系?
mono是.net的一个开源跨平台工具,就类似java虚拟机,java本身不是跨平台语言,但运行在虚拟机上就能够实现了跨平台。
.net只能在windows下运行,mono可以实现跨平台跑,
可以运行于linux,Unix,MacOS等。
四十八:
简述Unity3D支持的作为脚本的语言的名称
Unity的脚本语言基于Mono的.Net平台上运行,可以使用.NET库,这也为XML、数据库、正则表达式等问题提供了很好的解决方案。
Unity里的脚本都会经过编译,他们的运行速度也很快。
这三种语言实际上的功能和运行速度是一样的,区别主要体现在语言特性上。
JavaScript、C#、Boo
四十九:
Unity3D是否支持写成多线程程序?
如果支持的话需要注意什么?
仅能从主线程中访问Unity3D的组件,对象和Unity3D系统调用
支持:
如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine。
注意:
C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象
五十:
Unity3D的协程和C#线程之间的区别是什么?
多线程程序同时运行多个线程,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。
除主线程之外的线程无法访问Unity3D的对象、组件、方法。
Unity3d没有多线程的概念,不过unity也给我们提供了StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的方法。
StartCoroutine为什么叫协同程序呢,所谓协同,就是当你在StartCoroutine的函数体里处理一段代码时,利用yield语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。
五十一:
U3D中用于记录节点空间几何信息的组件名称,及其父类名称
Transform父类是Component
五十二:
向量的点乘、叉乘以及归一化的意义?
1)点乘描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影
2)叉乘得到的向量垂直于原来的两个向量
3)标准化向量:
用在只关系方向,不关心大小的时候
五十三:
矩阵相乘的意义及注意点
用于表示线性变换:
旋转、缩放、投影、平移、仿射
注意矩阵的蠕变:
误差的积累
五十四:
为何大家都在移动设备上寻求U3D原生GUI的替代方案
不美观,OnGUI很耗费时间,使用不方便
五十五:
请简述如何在不同分辨率下保持UI的一致性
NGUI很好的解决了这一点,屏幕分辨率的自适应性,原理就是计算出屏幕的宽高比跟原来的预设的屏幕分辨率求出一个对比值,然后修改摄像机的size。
五十六:
为什么dynamicfont在unicode环境下优于staticfont
Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
使用动态字体时,Unity将不会预先生成一个与所有字体的字符纹理。
当需要支持亚洲语言或者较大的字体的时候,若使用正常纹理,则字体的纹理将非常大。
五十七:
当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?
穿透(碰撞检测失败)
五十八:
请简述OnBecameVisible及OnBecameInvisible的发生时机,以及这一对回调函数的意义?
当物体是否可见切换之时。
可以用于只需要在物体可见时才进行的计算。
————————我是第一次更新分割线———————
五十九:
什么叫动态合批?
跟静态合批有什么区别?
如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理。
动态批处理操作是自动完成的,并不需要你进行额外的操作。
区别:
动态批处理一切都是自动的,不需要做任何操作,而且物体是可以移动的,但是限制很多。
静态批处理:
自由度很高,限制很少,缺点可能会占用更多的内存,而且经过静态批处理后的所有物体都不可以再移动了。
六十:
简述StringBuilder和String的区别?
答:
String是字符串常量。
StringBuffer是字符串变量,线程安全。
StringBuilder是字符串变量,线程不安全。
String类型是个不可变的对象,当每次对String进行改变时都需要生成一个新的String对象,然后将指针指向一个新的对象,如果在一个循环里面,不断的改变一个对象,就要不断的生成新的对象,所以效率很低,建议在不断更改String对象的地方不要使用String类型。
StringBuilder对象在做字符串连接操作时是在原来的字符串上进行修改,改善了性能。
这一点我们平时使用中也许都知道,连接操作频繁的时候,使用StringBuilder对象。
六十一:
什么是LightMap?
LightMap:
就是指在三维软件里实现打好光,然后渲染把场景各表面的光照输出到贴图上,最后又通过引擎贴到场景上,这样就使物体有了光照的感觉。
六十二:
Unity和cocos2d的区别
1.Unity3D支持C#、javascript等,cocos2d-x支持c++、Html5、Lua等。
2.cocos2d开源并且免费
3.Unity3D支持iOS、Android、Flash、Windows、Mac、Wii等平台的游戏开发,cocos2d-x支持iOS、Android、WP等。
六十三:
C#和C++的区别?
简单的说:
C#
与C++
比较的话,最重要的特性就是C#
是一种完全面向对象的语言,而C++
不是,另外C#
是基于IL
中间语言和.NET
Framework
CLR
的,在可移植性,可维护性和强壮性都比C++
有很大的改进。
的设计目标是用来开发快速稳定可扩展的应用程序,当然也可以通过Interop
和Pinvoke
完成一些底层操作
具体区别:
六十四:
Unity3DShader分哪几种,有什么区别?
表面着色器的抽象层次比较高,它可以轻松地以简洁方式实现复杂着色。
表面着色器可同时在前向渲染及延迟渲染模式下正常工作。
顶点片段着色器可以非常灵活地实现需要的效果,但是需要编写更多的代码,并且很难与Unity的渲染管线完美集成。
固定功能管线着色器可以作为前两种着色器的备用选择,当硬件无法运行那些酷炫Shader的时,还可以通过固定功能管线着色器来绘制出一些基本的内容。
六十五:
题目:
已知strcpy函数的