[C#,Unity面试题]C#前三题是字节跳动面试问题 Unity主要是关于Shader的面试题(一)

目录

一、C#面试题

1.当list满了的时候,我再加入一个元素它的效率会比较低啊,它内部大概是一个什么样的执行过程呢?

2.csharp里面有一个常用的接口叫做IDispose,它的作用是? 

3.上一题追问:csharp有垃圾回收机制,把一个对象设置为空的时候,系统会帮我们回收,它和接口IDispose有什么关系吗?为什么会存在两个做析构事情的东西呢? 

 4.Unity中的生命周期函数,为什么设计为反射调用,而不是通过继承重写生命周期函数的形式去实现呢?

二、Unity面试题 

1.CPU和GPU他们分别是什么?他们主要完成什么工作 

2.渲染管线中的几何阶段是由CPU主导还是GPU主导?该阶段主要是在做什么? 

3.是不是所有矩阵都有逆矩阵?如何计算一个矩阵的逆矩阵? 

4.齐次坐标是什么?对于我们有什么作用? 

5.Shader开发中的坐标空间变换,主要是在哪几个空间中进行变换?变换顺序是什么? 


一、C#面试题

1.当list满了的时候,我再加入一个元素它的效率会比较低啊,它内部大概是一个什么样的执行过程呢?

答案:
数组搬家,会讲原数组移动到一个更大容量的新数组中
效率较低,并且会产生内存垃圾

2.csharp里面有一个常用的接口叫做IDispose,它的作用是? 

答案:
IDispose接口是 C# 中用于手动释放资源的机制
通过显式调用 Dispose() 方法来实现资源的释放,避免资源泄漏和浪费
它允许对象在不再需要时显式地释放资源,而不依赖于垃圾回收器的自动内存管理

3.上一题追问:
csharp有垃圾回收机制,把一个对象设置为空的时候,系统会帮我们回收,它和接口IDispose有什么关系吗?为什么会存在两个做析构事情的东西呢? 

答案:
C#中的垃圾回收机制,只会回收托管堆上分配的对象。
对于非托管资源以及其它需要显示释放的资源,垃圾回收是无法自动处理的,因为这些资源不属于托管堆,因此垃圾回收器无法自动识别和回收。这种情况下我们就需要显示的手动释放这些资源了。
而IDispose接口就提供了一种通用的机制来进行资源清理,主要用于释放非托管资源。

非托管资源:
1.文件句柄,在操作系统中打开的文件等
2.数据库链接,与数据库服务器简历的链接
3.网络链接:比如Socket的连接对象
4.unsafe关键词中使用的指针
等等

 4.Unity中的生命周期函数,为什么设计为反射调用,而不是通过继承重写生命周期函数的形式去实现呢?

答案:
可能原因:
1.并非所有继承MonoBehaviour的类都需要使用所有声明周期函数,如果使用继承,就会有大量的空虚函数被调用,而使用反射,有哪些生命周期就调用哪些,并且反射还可以调用私有方法。Unity只需要维护有对应生命周期函数的脚本列表,就可以避免空虚函数的调用了。


2.Unity采用组件式设计,通过使用反射,可以将某些逻辑解耦,将组件的功能模块化,使得逻辑更加灵活和可复用,当触发一个生命周期,需要通知相应GameObject的所有组件,如果使用继承多态来实现,则所有组件都要派生自包含对应生命周期的基类,或者是筛选出派生自此基类的组件逐一通知。这样一来容易带来复杂的继承关系,并且很麻烦,就和组件式倡导的聚合代替继承的设计从理念上相悖了。

3.Unity提供插件和外部脚本支持,这些脚本可能不是在Unity中编写的,而是通过第三方库或外部工具生成的,为了支持这些脚本,可以使用反射机制调用其生命周期函数


等等

二、Unity面试题 

1.CPU和GPU他们分别是什么?他们主要完成什么工作 

答案:
CPU为中央处理器
负责算数运算、逻辑操作、数据传输等通用计算任务,同时还管理和调度计算机的资源
(游戏开发中—游戏逻辑处理),主要处理操作系统管理、程序执行、通用计算等等
CPU一般处理串行任务,即顺序执行的单个任务,适用于大多数常规计算

GPU为图形处理器
是专门用于图形和并行计算的处理器
显卡就是搭载GPU的硬件设备,显卡包含一个或多个GPU芯片,还包含显存(用于存储图像数据)、显示接口、视频解码器等等(游戏开发中—渲染相关处理)
GPU主要处理并行任务,适用于图形渲染、3D游戏、机器学习、科学计算等需要大量并行计算的领域

2.渲染管线中的几何阶段是由CPU主导还是GPU主导?该阶段主要是在做什么? 

答案:
渲染管线中的几何阶段主要由GPU主导
在几何阶段中完成的最主要工作就是
顶点、法线等模型数据的相关处理
对他们进行坐标空间转换,裁剪画面外图元等等
还可以进行顶点着色,为每个顶点计算颜色、纹理坐标、法线等属性,以便在后续阶段用于处理

3.是不是所有矩阵都有逆矩阵?如何计算一个矩阵的逆矩阵? 

答案:
1.并不是所有矩阵都有逆矩阵
2.计算流程
第一步:确定矩阵是否为方阵(即行列数相等)
第二步:计算矩阵的行列式(若行列式为0,则该矩阵没有逆矩阵)
第三步:计算矩阵的代数余子式矩阵
第四步:计算标准伴随矩阵(转置代数余子式矩阵)
第五步:计算逆矩阵(标准伴随矩阵 / 行列式)

4.齐次坐标是什么?对于我们有什么作用? 

答案:
是什么?
就是将一个原本是 n 维的向量或矩阵用 n + 1维来表示
是一种扩展的坐标系统,,用于在计算机图形学等学科中进行数学运算
对于我们的作用?
利用齐次坐标,我们可以明确的区分向量和点,能够表示出平移变换

5.Shader开发中的坐标空间变换,主要是在哪几个空间中进行变换?变换顺序是什么? 

答案:
主要是将模型相关数据(顶点、法线、切线等)在
模型空间 —> 世界空间 —> 观察空间 —> 裁剪空间 —> 屏幕空间 
之间进行变换

你可能感兴趣的:(面试,c#,unity,游戏引擎)