Unity⾯试题C#基础知识答案共35(全)
⽆论是不是C#或者Unity开发者,均可⽤以下题型锻炼,⾯试教育你懂的
需要注意的是下⾯都只是个⼈乱答,想看标准答案的可滚动到最后下载
1. 请简述值类型与引⽤类型的区别
我是想简述下为什么第⼀个问题总是这个,因为所有出题的⾯试官都不⾛⼼的,
实际项⽬肯定是引⽤类型+值类型混⽤,难道你没写过? int currLevel =Game.Instance.LevelCount;
值类型包括:数值类型,结构体,bool型,⽤户定义的结构体,枚举,可空类型。
引⽤类型包括:数组,⽤户定义的类、接⼝、委托,object,字符串,null类型,类。
2.C#中所有引⽤类型的基类是什么
C#基类Object 包名System
3.请简述ArrayList和List<Int>的主要区别
Unity3d游戏开发过程中很少见ArrayList,都是⽤的List<>和[]多,
ArrayList这是⽼C#⼈才会⽤的变量,也可能是从JAVA借鉴过来,JAVA有Hashset做数组变量,
哥⼀开始学C#1.0对ArrayList的框架很不能理解,ArrayList继承List觉得很多余的?
还有问这个问题的百度⼀查⼤把,真⼼没⼏个能从历史,当前流⾏项⽬,未来趋势等各个⽅⾯分析出原因,不过分析出来也没什么乱⽤,⾯试官出题的能不能别那么懒?
ArrayList 是⼀个数组,继承实现了List基类,是⽐较传统使⽤的程序数组变量
List<int>是调⽤List<T>,⽤了C#的泛型特性
4.请简述GC(垃圾回收)产⽣的原因,并描述如何避免?
下⾯是标准答案,其实我倒想问问,你写游戏⽤String??还⽤到StringBuilder??
CLR:公共运⾏时环境,管理托管堆。
CTR:设置引⽤类型,值类型。
GC:只负责回收托管对象,不负责回收⾮托管对象。
避免:1)减少new产⽣对象的次数
2)使⽤公⽤的对象(静态成员)
3)将String换为StringBuilder
5.请描述Interface与抽象类之间的不同
抽象类表⽰该类已经有⼀些具体的实现,⽽接⼝只是定义各⽅法,并没有具提实现,⼦类继承抽象⽗类,可以只是继承部分⽅法或直接引⽤⽗类的⽅法。类实现接⼝必须实现该接⼝所有⽅法
6.下列代码在运⾏中会产⽣⼏个临时对象?
先不论代码书写是否有错,或者命名的,每个new都会产⽣临时对象,()括号等同于new,那么应该是6
*假如我问⾯试官,这2年要如何优化,他不看标准答案,能答出来吗?(其实你的思路可能⽐他还清晰,因为他⼯作多年,⼏年来都不会见到这种代码,那他为什么要出这个题?别为难⾯试官,⼈家从百度抄题⽬下来也是不容易的)
7.下列代码在运⾏中会发⽣什么问题?如何避免?
答:会产⽣运⾏时错误,因为foreach是只读的。不能⼀边遍历⼀边修改。
8.请简述关键字Sealed⽤在类声明和函数声明时的作⽤
答:类声明时可防⽌其他类继承此类,在⽅法中声明则可防⽌派⽣类重写此⽅法。
关键字Seal既然可以声明类,也可以声明⽅法
9.请简述private,public,protected,internal的区别
10.反射的实现原理?
(以下英⽂纯⼿打,⽆百度)
Assembly – 程序集
Class – 类(type)
Method –⽅法(methodinfo)
Property – 属性(proinfo)
但是我好像不知道反射原理是什么, 有⼀个⽅法是Invoke(“Function_name”)在Unity3d的部分游戏源码见得⽐较多,作⽤和普通Call ⽅法⼀样,虽然有些炫技,但是却是在⽤反射实现⼀些游戏逻辑,⽽且这个游戏逻辑在Android|IOS等平台也是运⾏正常,反射的作⽤主要是跨程序集调⽤,作为⼀个基本抽象思维的程序员,应该要理解跨当前运⾏时的程序集本⾝当然也⼀个程序集,C#反射能⼴泛应⽤,并且出错⼏乎是0的原因,应该就是C#程序集的开放,格式不变和不加密(微软本⾝反⽽不⽀持开源)
11,.Net与Mono的关系?
有⼈说只能在 windows上⾯跑,Mono能跨平台,是的扩展,这说法肯定是不正确的,C#(.Net)⾃诞⽣那天起就为了超越
JAVA(应该⿊丝2003年,.NET⼀出就硬抄了JAVA所有的特性,还强调所有新特性超越JAVA),C#的GC就是对应JAVA的垃圾回收机制,可惜的是长期以来C# Framework的体积⽐现在2018年的JVM虚拟机jre8还⼤
JVM是⼀次书写代码,所有平台通⽤
那么C# Framework(.Net)肯定也是⽀持跨平台
嗯,MONO是?官⽅⼀⼤段英⽂其实只要看最后2个就知道based on the ECMA standards
ECMA是什么⿁?你现在只要知道来⾃欧洲的标准就可以了
由于微软的不开源,加上.NET的体积⽐较⼤,所以开源程序员都希望到⼀种可以⽤C#或者其他书写,却是极度简化版的.NET,结果当年欧洲某⼩国某程序员秘密组织到了微软的内核CIL(Common Intermediate Language通⽤中间语⾔,也叫做MSIL微软中间语⾔)的⼀种代码指令集,CIL可以在任何⽀持CLI(Common Language Infrastructure,通⽤语⾔基础结构)的环境中运⾏
(微软⼀开始⼼⽐较⼤,⽬标是所有语⾔书写,在所有平台书运⾏,开发web,app等所有应⽤,都通过visual studio,结果被Google和乔布斯打的头低低,Google在语⾔性和跨平台功能⼀直强调领先,乔布斯主张程序即艺术,iphone1,2狠狠打了Bill Gate2下,国内的c#程序员⼀直以来是最低下收⼊的
⼀种程序员)
当时欧洲⼩国的程序员,优化了CLI并做出了MonoDeveloper这个IDE⼯具,后来他们成⽴了⼀个Xamarim公司,现在已经被微软收购,开源的MONO也没有继续下去
Unity现在应该是基于ECMA这个协议才能得以继续使⽤旧版本的开源MONO⽽不需要和微软杠上
最近中兴被美国状告事件,类⽐⼀下MONO和微软的关系你就懂了,政治在这⾥不能多说,我就不提了,但学习程序以外难道你学校就没有政治课?难道你志愿不是考公务员报效国家?你不理政治,政治会来修理你。
我的推论是,mono是⼀种中间语⾔,⽽内核还是的⼀个简化版的虚拟机,能跨平台运⾏,这个虚拟机类似于jvm虚拟机,提供各种框架,API和程序执⾏和调⽤功能,但明显⽀持的最强语⾔还是C#
12.简述Unity3D⽀持的作为脚本的语⾔的名称
C#
JS
Boo – 这个我也不清楚
13.Unity3D是否⽀持写成多线程程序?如果⽀持的话需要注意什么?
Unity仅提供携程,让你可以安⼼订机票
14.Unity3D的协程和C#线程之间的区别是什么?
线程不安全
同⼀个时刻只有⼀个coroutinue运⾏,但线程可以并⾏执⾏,所谓多线程。⽽coroutinue可以让出当前执⾏权限,让其他coroutinue插队执⾏
golang⾥⾯是goroutinue
lua⾥⾯也是携程,可以订机票
Python既提供携程,也提供现成
理论上来说:
携程在服务器开发过程中⽐较合适,golang这种专为服务器开发的语⾔就提供携程让你可以预定景点门票;
线程真的很不稳定,不安全,不同的系统,例如windows vs Mac , windos vs Linux, Linux vs Unix都是实现不同的,程序员甚⾄需要按不同系统平台分别处理和调试;
要是你⽤的好,线程能订机票,⽽携程能做出线程的花样
15.U3D中⽤于记录节点空间⼏何信息的组件名称,及其⽗类名称
Transform, ⽗类Component
16.简述四元数的作⽤,四元数对欧拉⾓的优点?
交通⼤学研究⽣,乐乐的⽂章必须要去看⼀下
1)增量旋转
2)避免万向锁
3)给定⽅位的表达式有2种,互为正负(欧拉⾓有多种)
17.向量的点乘、叉乘以及归⼀化的意义?
1)点乘描述了2个⽅向的相似程度
2)  叉乘得到垂直于这2个的向量的⼀个向量
3)标准化向量,在⼀些⽅向,⾓度求解中应⽤,只关⼼相互间的⽅位,不考虑长度
18.矩阵相乘的意义及注意点
意义在于向量的变换,旋转,投影,平移
左乘和右乘,不满⾜交换律(这个答法⽐较⾼校书本式,缺少经验的说法)
19.为何⼤家都在移动设备上寻求U3D原⽣GUI的替代⽅案
这是Unity3.5的问题?现在Unity2018都快出了,你还问,⾯试官你到底有⼏年Unity经验?
20.请简述如何在不同分辨率下保持UI的⼀致性
UI适配,如果你曾经很长⼀段时间⽤过flex,和cocos2dx,甚⾄需要你⾃⼰去写适配框架
⼀般的⽅法有,布局适配,等宽,等长,这⼏种⽅法
NGUI在UIRoot提供了这3种适配⽅法
21.为什么dynamic font在unicode环境下优于static font
使⽤动态字体时,Unity将不会预先⽣成⼀个与所有字体的字符纹理, 静态字体体积会很⼤
22.Render的作⽤?描述MeshRender和SkinnedMeshRender的关系与不同
Render就是对象在3D世界的绘制
SkinnedMeshRender都提⽰未来可能被放弃了,⾯试官这份题真的很旧了,拜托换⼀下,但SkinnedMeshREnder在换装插件⽐较流⾏,SkinnedMeshRenderer需要⾻骼、材质、Mesh才能发挥作⽤,难道Unity要放弃⾻骼??
23.简述SkinnedMesh的实现原理
根据⾻骼,动态整体实现表层Mesh,相对普通mesh由不同⾯⽚堆砌,根据⾻骼结构,对顶点的变换计算出不同的蒙⽪,最终进⾏模型的渲染
24.在场景中放置多个Camera并同时处于活动状态会发⽣什么?
受Camera覆盖各场景物件均同时实时绘制,主Camera视场⾥有多个Camera的渲染合集
25.Prefab的作⽤?如何在移动环境的设备下恰当地使⽤它?
Prefab在实例化的时候⽤到,主要⽤于经常会⽤到的物体做成⼀个集合⽅便反复使⽤,在移动环境中,由于Prefab⼀般体积⽐较⼤,常需要实例化,拆分成合适⼤⼩的AssetBundle,离线下载⽐较恰当
26.如何销毁⼀个UnityEngine.Object及其⼦类
Destory
如果是Editor⾃定义开发需要⽤DestoryImmediate
27.为什么Unity3D中会发⽣在组件上出现数据丢失的情况?
对象在Editor外部被删除或者移动位置
28.如何安全的在不同⼯程间安全地迁移asset数据?三种⽅法
将Assets⽬录和Library⽬录⼀起迁移
导出包
⽤unity⾃带的assets Server功能
29.MeshCollider和其他Collider的⼀个主要不同点?
答:Meshcollider再快也是基于V3顶点~~ 建议还是⽤boxcollider,boxcollider本⾝是基于算法,没有⾯的概念。
30.当⼀个细⼩的⾼速物体撞向另⼀个较⼤的物体时,会出现什么情况?如何避免?
可能出现碰撞检测失败,解决⽅法⽆外乎3个
增加⾼速物体体积
碰撞检测判断时间缩短(Physics.SimulationStep)
控制速度
31.OnEnable、Awake、Start运⾏时的发⽣顺序?哪些可能在同⼀个对象周期中反复的发⽣?
OnEnable
\
Awake
\
Start
反复发⽣的是Start,这个问题实际意义不⼤,好像只有DontdestoryOnload下⾯的对象会反复调⽤,但实情如何笔者表⽰怀疑
32.请简述OnBecameVisible及OnBecameInvisible的发⽣时机,以及这⼀对回调函数的意义?
答:当物体是否可见切换之时。可以⽤于只需要在物体可见时才进⾏的计算。
33.Unity3D如何获知场景中需要加载的数据?
Resource.Load
AssetBundle
34.MeshRender中material和sharedmaterial的区别?
修改sharedMaterial将改变所有物体使⽤这个材质的外观,并且也改变储存在⼯程⾥的材质设置。
不推荐修改由sharedMaterial返回的材质。如果你想修改渲染器的材质,使⽤material替代。
(在Editor⾃定开发中,只能⽤sharedMaterial,sharedMaterial⾃动等于material)
对于⾯试教育,如果你记性⽐较好还是⽐较有优势的,可当你记住所有标准,⼜有什么⽤呢?
当然记住总⽐记不住要好,记住好像是要有那么点优势,⼈⽣和职业⽣涯其实⼤家都差不了多少,这点笔者就不在这⾥展开说这是电视机电路
这是⼿机电路
unity3d入门
或者⾥⾯每个晶体管,每个放⼤器,电容你都能看懂,但你能做个⼿机吗?就算你能做⼿机,美国会给你CPU你做⼿机吗?所以关键是环境,和你努⼒与否真没什么关系
标准答案下载:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。