Unity 课时 4 : No.4 模拟面试题

2023-09-13 16:57:25

课时 4 : No.4 模拟面试题

C#

1. 请说明字符串中

string str = null
string str = “”
string str = string.Empty
三者的区别

第一个未作初始化没有值,

第二个为空字符串,

答案:
str = null 在堆中没有分配内存地址
str = ""string.Empty 一样都是在堆内存中分配了空间,里面存储的是空字符串
而string.Empty是一个静态只读变量

2. C#重载运算符,重载 == 和 != 以及万物之父Object基类中的虚方法 virtual bool Equals(Object obj)

对于我们的意义是什么?

==比较值类型的时候比较地址是否相同,Equals用于比较具体的内容是否相同;

可以重载运算符使得 == 与 Equal 有同样效果。

答案:
为了判断两个对象的非引用地址相等
我们可以选择 使用 重载运算符 ==!= 或者
重写Equals方法,来自定义判断两个对象是否相等
如果想保留原有的引用地址相等判断,那么一般我们选择重写Equals方法

3. 在开发时,对string和StringBuilder我们应该如何选择

stringbuilder多用于字符串拼接时使用

答案:
string在每次拼接时都会产生垃圾
而StringBuilder在拼接时,是在原空间中进行修改,不会产生垃圾,会自动帮助我们扩容
所以当字符串需要频繁修改拼接时,我们使用StringBuilder

4. 请简要说明.Net跨语言原理

答案:
.Net制定了了CLI公共语言基础结构的规则
只要是按照该规则设计的语言在进行.Net相关开发时
编译器会将源代码(C#、VB等等)编译为CIL通用中间代码。
也就是说不管什么语言进行开发,最终都会统一规范变为中间代码
最终通过CLR(公共语言运行时或者称为.Net虚拟)将中间代码翻译为对应操作系统的原生代码(机器码)
在操作系统(Windows)上运行

5. 请简要说明.Net跨平台原理

答案:
由于.Net Framework中利用CLI和CLR实现了跨语言,CLR主要起到一个翻译、运行、管理中间代码的作用
.Net Core和Mono就是利用了CLR的这一特点,为不同操作系统实现对应CLR(公共语言运行时或.Net虚拟机)
那么不同操作系统对应的CLR就会将IL中间代码翻译为对应系统可以执行的原生代码(机器码)
达到跨平台的目的

Unity

1. Unity中的Destroy和DestroyImmediate的区别是什么?

Destroy不可以在编辑器模式下使用

答案:
Destroy方法
可以指定删除的延迟时间,如果第二个参数不填写,最快也会在下一帧前完成删除。也就是如果Destroy对象后马上判空,该对象不会为空。
实际的对象销毁操作始终延迟到当前更新循环结束,但始终在渲染前完成

DestroyImmediate方法
会立即销毁删除对象

2.外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请问最终打印的 s 的结果为?

答案:
AC
主要考点
1.DestroyImmediate方法会立即将GameObject对象从场景上删除
2.UnityEngine.Object中对 ==!=! 进行了重载,如果用  !go 和 go == null 去判断对象是否为空,由于重载了,所以能够返回正确的结果 ture 和 false
但是本质上此时的 go 还不是真正意义上的的null,所以如果用 go is null
或者 将其转换为 万物之父 Object  (System.Object)go == null 去判断时 并不会为true
因此只会进入AC的if语句

这里的重点内容就是UnityEngine.Object 中重载了 逻辑非!== != 运算符,因为使用他们来判断null 是可以的,但是此时的GameObject在内部并不是真正意义的null
我们在使用时最好手动置空

3. 第一次执行GameObject.Instantiate时可能出现明显的卡顿如何解决该问题?

答案:
我们可以通过Unity自带的性能分析工具Profiler分析实例化时造成卡顿的原因
程序上,一般我们可以从以下3个方面去优化它
1.相关资源加载:如果是由于资源加载带来的卡顿,我们可以在进入场景时进行资源预加载,总体思路就是将较大资源提前或者分帧加载

2.脚本初始化:实例化对象时,会同步执行它身上挂载所有脚本的初始化工作,我们可以策略性的改变一些初始化逻辑,尽量不要再Awake和Start中做较复杂的逻辑,或者将复杂逻辑提前或者分帧处理

3.对于会频繁使用的对象,我们可以使用缓存池

美术上
不能只追求好的美术效果,而不考虑资源的消耗,要根据项目的实际情况,来设定模型的骨骼数、面数以及贴图的数量和大小上限。
在制作粒子特效时,粒子数、粒子面积、贴图等都要尽量少和小。
美术上要遵循:用最少的资源做出做好的效果,不能一味的用性能去换效果,最终会得不偿失

4. Lua如何实现面向对象的三大特性?

答案:
面向对象三大特性
封装:利用table进行封装
继承:利用元表和__index模拟继承关系
          设置子类的元表为父类,父类的__index为父类自己
          当子类身上找不到对应属性和方法时
          会查找元表的__index中的内容,也就是会查找父类中的内容
          通过这种方式来模拟继承
多态:子类自己去实现带:的同名方法即可

5. Unity使用IL2CPP打包时,我们应该注意什么?如何避免(可以举例说明)

答案:
使用IL2CPP打包时,最可能出现的问题就是代码裁剪,IL2CPP会自动将它认为不会使用的代码裁剪掉,比如我们在使用Lua开发时,其实会用到很多UnityEngine或者我们自己写的C#代码,但是这些代码并不会在引擎中直接使用,都是在Lua中使用的,此时最容易出现的问题就是代码裁剪,导致打包后出现异常和报错。

要避免IL2CPP的裁剪有3种方式,我们可以组合使用
1.设置打包时的裁剪等级
2.通过xml文件配置明确规定哪些内容不裁剪
3.在静态方法中显示调用不想被裁剪的内容
更多推荐

关于安卓SVGA浅尝(二)加载数据

关于安卓SVGA浅尝(二)加载数据相关链接SVGA官网SVGA-github说明文档背景项目开发,都会和动画打交道,动画的方案选取,就有很多选择。如Json动画,svga动画,gif等等。各有各的优势。目前项目中用到了svga的动画,因此,就有了这一系列的文章。实现对于svga的加载方法,有以下几种:(1)decode

VR全景智慧文旅解决方案,助力文旅产业转型升级

引言:随着科技的不断发展,虚拟现实(VR)技术正逐渐展露其影响力,改变着旅游业。VR全景智慧文旅解决方案也应运而生,将传统旅游的体验形式从线下扩展到了线上,带来了不一般的文旅体验。一.VR全景技术的基础VR全景技术是通过结合虚拟现实和全景摄影技术来模拟现实世界的方法。通过智能设备,游客可以在任何时间,任何地点进入逼真的

5个超实用的Python代码片段

迷途小书童读完需要7分钟速读仅需3分钟本篇收集了5个常用的Python代码片段,非常实用,可以帮助我们更高效的编写代码,实现我们想要实现的功能。1密码生成器importrandomimportstringtotal=string.ascii_letters+string.digits+string.punctuatio

内网横向移动

内网横向移动当攻击者在拿下一台内网主机后,通常会利用当前拿下的机器当作跳板,进一步攻击内网其他主机,扩大攻击影响范围。攻击机:KaliLinux靶机:Windowsserver2008WEB10.10.10.20\192.168.XX.XX(跳板机)Windowsserver2012DC10.10.10.10\192.

RS485总线浪涌解决方案!|深圳比创达EMC

在各种通讯方式当中,RS485总线是较为常见的一种,因其接口简单、系统运行稳定和通讯速率高等特点被广泛应用。但由于RS485总线一般传输距离较长,且经常暴露在外,所以非常容易受到电磁干扰,而浪涌干扰已经成为485通信使用中最常遇到的问题。下面通过一个实际案例,来说明RS485总线在防浪涌实验过程中,常遇到的问题以及需要

shell中[[]]与[],=、==和-eq的辨析

1、==、=和-eq在shell中,=和==运算符都可以用于判断两个字符串、两个字符串变量是否相同,==支持模式匹配,而=不支持模式匹配。使用-eq来判断两个整数是否相等。#字符串比较#给变量赋值时,等号前后没有空格,有空格时是条件判断string1=abcstring2=bcd#["$string1"="$strin

基座向量施密特正交化

最近再次细细的阅读了向量施密特正交化,重新系统梳理一下一、正交基地与向量的正交分解二、基化成标准正交基,是什么意思将一个向量空间中的基向量通过某种方式转化为一组标准正交基,是指将原有的基向量进行调整,使得它们满足两个条件:彼此之间两两正交(即内积为零);归一化(长度为1)。这样的转换可以用来简化向量空间中的运算,使得向

Linux 本地Yearning SQL 审核平台远程访问

文章目录前言1.Linux部署Yearning2.本地访问Yearning3.Linux安装cpolar4.配置Yearning公网访问地址5.公网远程访问Yearning管理界面6.固定Yearning公网地址前言Yearning简单,高效的MYSQL审计平台一款MYSQLSQL语句/查询审计工具,为DBA与开发人员

Redis的主从复制,哨兵和Cluster集群

一、Redis的高可用1.1redis高可用的概念在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。高可用的计算公式是1-(宕机时间)/(宕机时间+运行时间)有点类似与网络传输的参数误码率,我们用9的个数表示可用性:2个9:9

Learn Prompt-ChatGPT 精选案例:代码助理

你可以使用ChatGPT进行代码生成、生成测试用例、注释、审查和漏洞检测。代码生成​我们可以让ChatGPT自动生成一个排序算法中的快速排序的Python代码。简单的代码生成对于ChatGPT来说小事一桩。测试用例​用例来源出自StuGRua在待测函数函数定义清晰的情况下,单元测试可以通过ChatGPT来生成。写下列代

C语言学习:16、C语言指针

指针是C语言的精髓,很多人都觉得指针难学,是因为内心对指针有所恐惧,把自己吓退了。一种应用语言能有多难,只要了解了指针的本质,学习起来就超级简单。一、什么是指针1.1、指针就是一种变量,一种特殊的变量,就这么简单。这个特殊体现在,指针中保存的值是内存中的地址。前面了解过int型变量,char型变量,float型变量,它

热文推荐