码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [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开发中的坐标空间变换,主要是在哪几个空间中进行变换?变换顺序是什么? 

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

  • 相关阅读:
    golang常用库之-操作redis go-redis/redis库、 go-redsync/redsync库(redis分布式锁)
    threejs(2)-Geometry进阶详解
    uwsgi的一些课外知识:uwsgi、uWSGI、WSGI、web服务器、应用服务器、socket
    Spring cloud—Netflix
    Springboot垃圾分类回收系统的设计与实现8t69x计算机毕业设计-课程设计-期末作业-毕设程序代做
    快应用接入帐号服务指导
    基于Arrow的轻量线程池
    sklearn机器学习——day03
    T、Class<T>以及Class<?>的理解
    Flink从入门到放弃—Stream API—常用算子(reduce)
  • 原文地址:https://blog.csdn.net/QF887777/article/details/132629037
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号