unity c#面试_spring面试题及答案

2022-09-27 15:49:44 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

无论是不是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的关系? 有人说.net只能在 windows上面跑,Mono能跨平台,是.net的扩展,这说法肯定是不正确的,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是一种中间语言,而内核还是.net的一个简化版的虚拟机,能跨平台运行,这个虚拟机类似于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下面的对象会反复调用,但实情如何笔者表示怀疑

谢谢评论区指正,

反复发生的应该是:OnEnable,尽量不要在Update()写代码,所以我现在OnEnable也用的少,毕竟会多次触发的,代码最好还是一次写成,少调试,少踩坑(当然,OnEnable 一般写初始化代码,机会没在这上面踩坑过就是了)

代码语言:javascript复制
gameObject.SetActive(true);//运行时可反复设置

而Awake()是在实例化时触发,不可能实例化多次

代码语言:javascript复制
GameObject.Instatiate()

而Start()在场景运行时,场景内的每个对象都只会触发一次

代码语言:javascript复制
SceeneManager.Start()

32.请简述OnBecameVisible及OnBecameInvisible的发生时机,以及这一对回调函数的意义? 答:当物体是否可见切换之时。可以用于只需要在物体可见时才进行的计算。 33.Unity3D如何获知场景中需要加载的数据? Resource.Load AssetBundle 34.MeshRender中material和sharedmaterial的区别? 修改sharedMaterial将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。 不推荐修改由sharedMaterial返回的材质。如果你想修改渲染器的材质,使用material替代。

(在Editor自定开发中,只能用sharedMaterial,sharedMaterial自动等于material)

最近机缘巧合,居然在看Unity Editor的旧版本的源码

内核用了c 的智能指针,里面的一个share指针,shared_ptr<>,所以有sharedMaterial一说

还有sharedMesh,sharedShader

指针不就是内存,指向同一内存的还不是一同修改,shared_ptr<>又有什么用?又一世纪难题

对于面试教育,如果你记性比较好还是比较有优势的,可当你记住所有标准,又有什么用呢?

当然记住总比记不住要好,记住好像是要有那么点优势,人生和职业生涯其实大家都差不了多少,这点笔者就不在这里展开说

这是电视机电路

这是手机电路

或者里面每个晶体管,每个放大器,电容你都能看懂,但你能做个手机吗?就算你能做手机,美国会给你CPU你做手机吗?所以关键是环境,和你努力与否真没什么关系

标准答案下载:

Unity面试题30题含答案——C#基础._unity面试题,unity试题-Unity3D文档类资源-CSDN下载

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/174519.html原文链接:https://javaforall.cn

0 人点赞