当前位置: 首页 > article >正文

C# Unity 唐老狮 No.4 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要:

全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho

        如果你发现了文章内特殊的字体格式,那是AI补充的知识,我发现原网站下面有答案,我将会把答案以不同样式穿插在回答之中

目录

C#

1. 请说明字符串中    string str = null    string str = ""    string str = string.Empty    三者的区别

2. C#重载运算符,重载 == 和 != 以及 万物之父Object基类中的虚方法 virtual bool Equals(Object obj)对于我们的意义是什么?

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

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

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

Unity

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

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

核心矛盾

1. if (!go) → A

2. if (go is null) → 不执行

3. if (go == null) → C

4. if ((object)go == null) → 不执行

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

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

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


C#

1. 请说明字符串中
    string str = null
    string str = ""
    string str = string.Empty
    三者的区别

=null 说明其没有占用内存

="" 说明其有值 但为空,指向了堆内存

=empty 同上,但是为静态只读变量

2. C#重载运算符,重载 == 和 != 以及 万物之父Object基类中的虚方法 virtual bool Equals(Object obj)对于我们的意义是什么?

        此问题是对C# &Unity 唐老狮 No.2 模拟面试题-CSDN博客 之中 C#第一题的补充 我将其总结成了表格

操作不进行操作时的情况进行操作后的效果意义总结
重载 == 和 != 运算符
值类型:比较的是值是否相等。
引用类型:比较的是两个引用是否指向同一个对象实例,即判断是否为同一内存地址
例如对于自定义类对象,即使它们的属性值完全相同,但只要不是同一个实例,== 判断结果就是 false

- 可以根据对象的内容判断它们是否相等,而不仅仅依据引用
- 代码更符合自然语言习惯,增强了代码的可读性,比如对于自定的 Person 类,可通过比较 Name 和 Age 属性来判断两个 Person 对象是否相等

- 提高代码可读性,使代码更符合开发者的直觉和自然语言表达
- 满足业务上根据对象内容判断相等性的需求,而不是局限于引用相等
重写 Equals 方法
默认继承自 Object 基类的 Equals 方法,对于引用类型同样是比较引用是否相等
在集合类(如 List<T>Dictionary<TKey, TValue>)中使用时,默认行为可能无法满足根据对象内容判断相等的业务场景

- 实现基于对象内容的相等性比较
- 让集合类在判断元素是否相等时能按照自定义的内容比较逻辑进行处理
- 结合重写 GetHashCode 方法,确保对象在哈希表等数据结构中能正确工作

- 使对象在集合类中的相等性判断符合业务逻辑
- 遵循最佳实践,保证对象在使用哈希表等数据结构时能正常存储和查找

 重写举例:

        是指,原来不能比较p1 p2内的字段(只能看他俩是不是指向同一个对象),重写后可以比较了

public class Person
{public string Name { get; set; }public int Age { get; set; }public Person(string name, int age){Name = name;Age = age;}// 重载 == 运算符public static bool operator ==(Person p1, Person p2){if (ReferenceEquals(p1, p2)){return true;}if (ReferenceEquals(p1, null) || ReferenceEquals(p2, null)){return false;}return p1.Name == p2.Name && p1.Age == p2.Age;}// 重载 != 运算符public static bool operator !=(Person p1, Person p2){return !(p1 == p2);}
}class Program
{static void Main(){Person p1 = new Person("Alice", 25);Person p2 = new Person("Alice", 25);// 使用重载的 == 运算符bool areEqual = p1 == p2;Console.WriteLine($"Are p1 and p2 equal? {areEqual}"); }
}

        实现同上

public class Person
{public string Name { get; set; }public int Age { get; set; }public Person(string name, int age){Name = name;Age = age;}// 重写 Equals 方法public override bool Equals(object obj){if (obj == null || GetType() != obj.GetType()){return false;}Person other = (Person)obj;return Name == other.Name && Age == other.Age;}// 重写 GetHashCode 方法public override int GetHashCode(){return Name.GetHashCode() ^ Age.GetHashCode();}
}class Program
{static void Main(){Person p1 = new Person("Alice", 25);Person p2 = new Person("Alice", 25);// 使用重写的 Equals 方法bool areEqual = p1.Equals(p2);Console.WriteLine($"Are p1 and p2 equal? {areEqual}"); }
}

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

        记住,StringBuilder 专门用来处理字符串拼接,这个功能上强于string(string拼接会产生垃圾,会将每一次的拼接都单开一个内存地址)

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

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

        知识加油站: 尽量通俗易懂地概述.Net && U nity跨语言/跨平台相关知识-CSDN博客

         4和5 一起回答了

         跨语言是因为有一个规则CLI,相当于.NET下支持语言与设备之间的翻译(中间码)

        CLI(Common Language Infrastructure):包含了 .NET 框架的所有基础设施

        跨平台就是将翻译来的CLI 加上其他基类库 作为一个程序集 给到CLR

CLR (Common Language Runtime,公共语言运行时) 将 CIL 代码通过 JIT 编译器编译成机器代码,然后在具体的硬件上执行 可以说代码就是在CLR上面运行的

         

Unity

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

        最快下一帧销毁和这一帧销毁

2.

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

    说实话 这道题我不清楚 所以问了Ai

核心矛盾

  1. Unity 对象的生命周期
    当一个 GameObjectDestroyDestroyImmediate 销毁后:

    • 它不再存在于场景中(视觉和物理消失)
    • 但它的 C# 引用变量(比如 go依然保存着原来的内存地址,并未被自动置为 null
    • Unity 通过重载运算符和底层标记,将其标识为“已被销毁”的伪 null
  2. 两种判空机制的冲突

    • Unity 侧逻辑:提供运算符重载(==!=和 bool 转换),检查对象是否已被销毁
    • C# 原生逻辑:检查引用地址是否 0x0(是否为原生 null
1. if (!go) → A
  • Unity 的 GameObject 继承自 UnityEngine.Object,其重载了 bool 运算符。
  • 当对象被销毁(DestroyImmediate)时,Unity 会将它标记为 "null",此时 !go 返回 true
2. if (go is null) → 不执行
  • is null 是 C# 原生的 null 检查,直接比较内存地址是否为 0x0
  • 关键点go 变量的引用地址未被 Unity 修改(仍指向原始地址),仅被 Unity 内部标记为 "destroyed",因此此条件为 false
3. if (go == null) → C
  • 调用 Unity 重载的 == 运算符,此时会返回 true,因为 Unity 明确告知对象已销毁。
4. if ((object)go == null) → 不执行

  • 强制将 go 转换为 System.Object 后,其引用地址依旧非空(与第二条同理)。

        最后一句话总结,unity在做销毁后 做了伪Null处理,但是被c#原生的api 去测内存就露馅了,让我测测你的小内存里 是不是真的😋

        "Unity 的伪Null 是给对象画了个墓碑(写着 '我死了,别用我'),而 C# 原生判空是去摸摸尸体——然而这个尸体还躺着原来的坟头地址呢! "

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

        代码上:别用GameObject.Instantiate 而是 配合协程做异步加载

        源头上:把资源做处理 比如减少网格,减少特效 等等 只要不是一瞬间大量占用内存都好说

        

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

        不会Lua喵

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

        尽量通俗易懂地概述.Net && U nity跨语言/跨平台相关知识-CSDN博客

        IL2CPP不能在运行时动态生成代码和类型(AOT提前编译的错),所以一切都要提前在编译器里面做好,就比如热更了一个C类,但是之前的代码没有使用过喵,所以会报错

        但是只需要在某一个不重要的地方 显示调用一下c 哪怕没有任何逻辑 也可以解决报错了

        答案似乎不一样呢 问了DP 他说上面的答案是下面的一部分

        核心原则:确保所有可能被动态调用的代码在编译时被显式引用或配置保留 

相关文章:

C# Unity 唐老狮 No.4 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…...

集群、分布式与微服务架构 区别

集群、分布式与微服务架构&#xff1a;概念解析与核心差异 在构建现代软件系统时&#xff0c;集群架构、分布式系统和微服务架构是三种常见的技术方案。它们常被混淆&#xff0c;但各自解决的问题、设计理念和应用场景截然不同。本文将从基础概念出发&#xff0c;深入分析三者…...

Protocol Buffers在MCU上的nanopb介绍及使用详解

在嵌入式系统和资源受限的环境中&#xff0c;传统的Protocol Buffers 可能显得过于庞大。因此&#xff0c;nanopb 应运而生&#xff0c;它是一个轻量级的 Protocol Buffers 生成器&#xff0c;专为嵌入式系统设计c语言设计。本文将介绍如何安装和使用 nanopb&#xff0c;以及通…...

【Elasticsearch】自定义内置的索引生命周期管理(ILM)策略。

以下是对 Elasticsearch 官方教程《Customize built-in ILM policies》的详细解读&#xff0c;结合原文内容&#xff0c;帮助您更好地理解如何自定义内置的索引生命周期管理&#xff08;ILM&#xff09;策略。 --- Elasticsearch 教程&#xff1a;自定义内置 ILM 策略 1.背景…...

测试工程师Ai应用实战指南简例prompt

以下是一个真实具体的案例,展示测试工程师如何在不同阶段结合DeepSeek提升效率。案例基于电商平台"订单超时自动关闭"功能测试: 案例背景 项目名称:电商平台订单系统V2.3 测试目标:验证"用户下单后30分钟未支付,订单自动关闭并释放库存"功能 技术栈:…...

(十 二)趣学设计模式 之 享元模式!

目录 一、 啥是享元模式&#xff1f;二、 为什么要用享元模式&#xff1f;三、 享元模式的实现方式四、 享元模式的优缺点五、 享元模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;可以多多支…...

Trae:国内首款AI原生IDE,编程效率大提升

今年一月&#xff0c;在新闻上看到字节跳动面向海外市场推出了一款名为Trae的AI集成开发环境&#xff08;IDE&#xff09;。起初&#xff0c;我并未给予过多关注&#xff0c;因为市面上已有不少IDE集成了AI插件&#xff0c;功能也非常全面&#xff0c;而字节跳动自家的MarsCode…...

深入解析 Vue Router 的 beforeEach:功能、用法与实践指南

什么是 beforeEach&#xff1f;基本语法与参数解析next() 的 4 种调用方式常见使用场景与代码示例动态路由加载的实践技巧常见陷阱与避坑指南总结 1. 什么是 beforeEach&#xff1f; beforeEach 是 Vue Router 提供的 全局前置守卫&#xff08;Global Before Guards&#xff0…...

RocketMQ定时/延时消息实现机制

RocketMQ 的延迟消息是其核心特性之一&#xff0c;允许消息在指定延迟时间后才被消费者消费。 定时消息生命周期 一、延迟消息的核心机制 RocketMQ&#xff08;5.0之前&#xff09; 不支持任意时间精度的延迟&#xff0c;而是通过预定义的 延迟级别&#xff08;Delay Level&a…...

基于SpringBoot的校园二手交易平台(源码+论文+部署教程)

运行环境 校园二手交易平台运行环境如下&#xff1a; • 前端&#xff1a;Vue • 后端&#xff1a;Java • IDE工具&#xff1a;IntelliJ IDEA&#xff08;可自行更换&#xff09; • 技术栈&#xff1a;SpringBoot Vue MySQL 主要功能 校园二手交易平台主要包含前台和…...

如何快速写出国内外现状的内容并且引用对应的参考文献(近三年的论文)

解决方法: 1.首先从知网或者谷歌学术中搜索相关关键字的论文根据时间排列(最新的在前面)。然后多选选中自己想要引用的论文(一般近三年的论文要占2/3),然后导出参考文献 [19] Lu L, Jin P, Karniadakis G E. DeepONet: Learning nonlinear operators for identifying dif…...

SQL的select语句完整的执行顺序

SQL的SELECT语句的执行顺序可以用"做菜流程"来类比理解。虽然我们写SQL时按SELECT…FROM…WHERE…顺序写&#xff0c;但数据库执行顺序完全不同。以下是通俗易懂的讲解&#xff08;附流程图和示例&#xff09;&#xff1a; &#x1f527; 执行顺序流程图&#xff1a…...

开源操作系统纷争:CentOS停服后的新战场

开源操作系统纷争&#xff1a;CentOS停服后的新战场 引言 2020年12月&#xff0c;Red Hat宣布将停止维护CentOS Linux&#xff0c;转而专注于CentOS Stream。这一决策在开源社区掀起轩然大波&#xff0c;尤其是那些依赖CentOS作为生产环境操作系统的企业和开发者们&#xff0…...

【知识】torchrun 与 torch.multiprocessing.spawn 的对比

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 来自ChatGPT、DeepSeek 有点干&#xff0c;可仅做了解。 torchrun 和 torch.multiprocessing.spawn 都是在 PyTorch 中用于并行化和分布式训练的工具&a…...

利用 LangChain 和一个大语言模型(LLM)构建一个链条,自动从用户输入的问题中提取相关的 SQL 表信息,再生成对应的 SQL 查询

示例代码&#xff1a; from langchain_core.runnables import RunnablePassthrough from langchain.chains import create_sql_query_chain from operator import itemgetter from langchain.chains.openai_tools import create_extraction_chain_pydantic# 系统消息&#xff…...

力扣hot 100之矩阵四题解法总结

本期总结hot100 中二维矩阵的题&#xff0c;时空复杂度就不分析了 1.矩阵置零 原地标记&#xff0c;用第一行和第一列作为当前行列是否为0的标记&#xff0c;同时用两个标签分别记录0行、0列的标记空间中原本是否有0 class Solution:def setZeroes(self, matrix: List[List[…...

使用python运行网格世界环境下 TD算法

一、概述 本代码实现了在网格世界环境中使用 TD (0)&#xff08;Temporal Difference (0)&#xff09;算法进行策略评估&#xff0c;并对评估结果进行可视化展示。通过模拟智能体在网格世界中的移动&#xff0c;不断更新状态值函数&#xff0c;最终得到每个状态的价值估计。 二…...

在Linux上使用APT安装Sniffnet的详细步骤

一、引言 Sniffnet 是一款开源的网络流量监控工具&#xff0c;适用于多种Linux发行版。如果你的Linux系统使用APT&#xff08;Advanced Package Tool&#xff09;作为包管理器&#xff0c;以下是如何通过APT安装Sniffnet的详细步骤。 二、系统要求 在开始安装之前&#xff0…...

zookeeper-docker版

Zookeeper-docker版 1 zookeeper概述 1.1 什么是zookeeper Zookeeper是一个分布式的、高性能的、开源的分布式系统的协调&#xff08;Coordination&#xff09;服务&#xff0c;它是一个为分布式应用提供一致性服务的软件。 1.2 zookeeper应用场景 zookeeper是一个经典的分…...

StableDiffusion本地部署 3 整合包猜想

本地部署和整合包制作猜测 文章目录 本地部署和整合包制作猜测官方部署第一种第二种 StabilityMatrix下载整合包制作流程猜测 写了这么多python打包和本地部署的文章&#xff0c;目的是向做一个小整合包出来&#xff0c;不要求有图形界面&#xff0c;只是希望一键就能运行。 但…...

数据结构(初阶)(七)----树和二叉树(前中后序遍历)

实现链式结构的二叉树 实现链式结构的二叉树遍历前序遍历中序遍历后序遍历 节点个数叶子节点个数⼆叉树第k层结点个数⼆叉树的深度/⾼度查找值为X的节点二叉树的销毁 层序遍历判断二叉树是否为完全二叉树 ⽤链表来表⽰⼀棵⼆叉树&#xff0c;即⽤链来指⽰元素的逻辑关系。 通常…...

SOME/IP 教程知识点总结

总结关于SOME/IP的教程,首先通读整个文件,理解各个部分的内容。看起来这个教程从介绍开始,讲到了为什么在车辆中使用以太网,然后详细讲解了SOME/IP的概念、序列化、消息传递、服务发现(SOME/IP-SD)、发布/订阅机制以及支持情况。 首先,我需要确认每个章节的主要知识点。…...

安装 Windows Docker Desktop - WSL问题

一、关联文章: 1、Docker Desktop 安装使用教程 2、家庭版 Windows 安装 Docker 没有 Hyper-V 问题 3、打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题 二、问题解析 打开 Docker Desktop 出现问题,如下: Docker Desktop - WSL update failed An error o…...

科技赋能筑未来 中建海龙MiC建筑技术打造保障房建设新标杆

近日&#xff0c;深圳梅林路6号保障房项目顺利封顶&#xff0c;标志着国内装配式建筑领域又一里程碑式突破。中建海龙科技有限公司&#xff08;以下简称“中建海龙”&#xff09;以模块化集成建筑&#xff08;MiC&#xff09;技术为核心&#xff0c;通过科技创新与工业化建造深…...

json介绍、python数据和json数据的相互转换

目录 一 json介绍 json是什么&#xff1f; 用处 Json 和 XML 对比 各语言对Json的支持情况 Json规范详解 二 python数据和json数据的相互转换 dumps() : 转换成json loads(): 转换成python数据 总结 一 json介绍 json是什么&#xff1f; 实质上是一条字符串 是一种…...

关于学习一门新的编程语言的策略

实践 实践 实践 那么如何实践呢 &#xff0c;very easy&#xff0c;测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测验 测…...

Rust 是什么

Rust 是什么 Rust 是一种由 Mozilla 开发的系统级编程语言,它于 2010 年首次亮相,在 2015 年发布 1.0 版本,此后迅速发展并受到广泛关注。 内存安全:Rust 最大的亮点之一是它在编译阶段就能够避免常见的内存错误,如空指针引用、数据竞争和内存泄漏等。它通过所有权(Owne…...

C#开发——时间间隔类TimSpan

TimeSpan 是 C# 中的一个结构&#xff08; struct &#xff09;&#xff0c;用于表示时间间隔或持续时间。它位于 System 命名空间中&#xff0c;是处理时间相关操作时非常重要的工具&#xff0c;尤其是在计算两个日期或时间之间的差值、表示时间段或执行时间相关的运算…...

计算机毕设JAVA——某高校宿舍管理系统(基于SpringBoot+Vue前后端分离的项目)

文章目录 概要项目演示图片系统架构技术运行环境系统功能简介 概要 网络上许多计算机毕设项目开发前端界面设计复杂、不美观&#xff0c;而且功能结构十分单一&#xff0c;存在很多雷同的项目&#xff1a;不同的项目基本上就是套用固定模板&#xff0c;换个颜色、改个文字&…...

[随手笔记]C#保留小数防止四舍五入有效解决办法

private decimal 截断小数(decimal 原小数值, int 保留小数个数) { string 原小数转字符串值 原小数值.ToString(); try { if (原小数转字符串值.Contains(".")) { int 原小数总长度 原小数转字符串值.Length; …...