您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 综合/其它 > 软考系统集成项目管理工程师笔试题整理
一:什么是协同程序?答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。二:Unity3d中的碰撞器和触发器的区别?答:碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。当IsTrigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;当IsTrigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器三:物体发生碰撞的必要条件答:两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。四:请简述ArrayList和ListInt的主要区别答:ArrayList存在不安全类型(ArrayList会把所有插入其中的数据都当做Object来处理)装箱拆箱的操作(费时)List是接口,ArrayList是一个实现了该接口的类,可以被实例化五:请简述GC(垃圾回收)产生的原因,并描述如何避免?答:GC回收堆上的内存避免:1)减少new产生对象的次数2)使用公用的对象(静态成员)3)将String换为StringBuilder六:反射的实现原理?答:审查元数据并收集关于它的类型信息的能力。实现步骤:1,导入usingSystem.Reflection;2,Assembly.Load(程序集)加载程序集,返回类型是一个Assembly3,foreach(Typetypeinassembly.GetTypes()){stringt=type.Name;}得到程序集中所有类的名称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-StartOnEnable在同一周期中可以反复地发生十:MeshRender中material和sharedmaterial的区别?答:修改sharedMaterial将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。不推荐修改由sharedMaterial返回的材质。如果你想修改渲染器的材质,使用material替代。十一:请简述数组ArrayList和List之间的主要区别。答:数组的容量是固定的,您只能一次获取或设置一个元素的值,而ArrayList或ListT的容量可根据需要自动扩充、修改、删除或插入数据。数组可以具有多个维度,而ArrayList或ListT始终只具有一个维度。但是,您可以轻松创建数组列表或列表的列表。特定类型(Object除外)的数组的性能优于ArrayList的性能。这是因为ArrayList的元素属于Object类型;所以在存储或检索值类型时通常发生装箱和取消装箱操作。不过,在不需要重新分配时(即最初的容量十分接近列表的最大容量),ListT的性能与同类型的数组十分相近。在决定使用ListT还是使用ArrayList类(两者具有类似的功能)时,记住ListT类在大多数情况下执行得更好并且是类型安全的。如果对ListT类的类型T使用引用类型,则两个类的行为是完全相同的。但是,如果对类型T使用值类型,则需要考虑实现和装箱问题。十二:TCP/IP协议栈各个层次及分别的功能答:网络接口层:这是协议栈的最低层,对应OSI的物理层和数据链路层,主要完成数据帧的实际发送和接收。网络层:处理分组在网络中的活动,例如路由选择和转发等,这一层主要包括IP协议、ARP、ICMP协议等。传输层:主要功能是提供应用程序之间的通信,这一层主要是TCP/UDP协议。应用层:用来处理特定的应用,针对不同的应用提供了不同的协议,例如进行文件传输时用到的FTP协议,发送email用到的SMTP等。十三题:Unity提供了几种光源,分别是什么答:四种。平行光:DirectionalLight点光源:PointLight聚光灯:SpotLight区域光源:AreaLight十四:简述一下对象池,你觉得在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中,这些工作由硬件实现的VertexShader(定点着色器)完成。光栅化计算:显示器实际显示的图像是由像素组成的,我们需要将上面生成的图形上的点和线通过一定的算法转换到相应的像素点。把一个矢量图形转换为一系列像素点的过程就称为光栅化。例如,一条数学表示的斜线段,最终被转化成阶梯状的连续像素点。纹理帖图:顶点单元生成的多边形只构成了3D物体的轮廓,而纹理映射(texturemapping)工作完成对多变形表面的帖图,通俗的说,就是将多边形的表面贴上相应的图片,从而生成“真实”的图形。TMU(Texturemappingunit)即是用来完成此项工作。像素处理:这阶段(在对每个像素进行光栅化处理期间)GPU完成对像素的计算和处理,从而确定每个像素的最终属性。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的PixelShader(像素着色器)完成。最终输出:由ROP(光栅化引擎)最终完成像素的输出,1帧渲染完毕后,被送到显存帧缓冲区。总结:GPU的工作通俗的来说就是完成3D图形的生成,将图形映射到相应的像素点上,对每个像素进行计算确定最终颜色并完成输出。二十二:什么是渲染管道?答:是指在显示器上为了显示出图像而经过的一系列必要操作。渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。主要步骤有:本地坐标-视图坐标-背面裁剪-光照-裁剪-投影-视图变换-光栅化。二十三:如何优化内存?答:有很多种方式,例如1.压缩自带类库;2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;3.释放AssetBundle占用的资源;4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。二十四:动态加载资源的方式?(有时候也问区别,具体请百度)1.Resources.Load();2.AssetBundle二十五:你用过哪些插件?二十六:使用Unity3d实现2d游戏,有几种方式?答:1.使用本身的GUI;2.把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z轴;3.使用2d插件,如:2DToolKit;二十七:在物体发生碰撞的整个过程中,有几个阶段,分别列出对应的函数三个阶段答:1.OnCollisionEnter2.OnCollisionStay3.OnCollisionExit二十八:Unity3d的物理引擎中,有几种施加力的方式,分别描述出来答:rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函数中。二十九:什么叫做链条关节?答:HingeJoint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。三十:物体自身旋转使用的函数?答: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中会发生在组件上出现数据丢失的情况答:一般是组件上绑定的物体对
本文标题:软考系统集成项目管理工程师笔试题整理
链接地址:https://www.777doc.com/doc-1992596 .html