Unity2024面试总结(适用3-5年经验以上)

文章目录

  • 前言
  • 一、基础芝士
    • 1、说下你对面向对象的理解
    • 2、说下协程和线程的区别
    • 3、说下内存优化这块内容
    • 4、说下GPU优化这块内容
    • 5、说下对DrawCall的理解
    • 6、向量的点乘、叉乘
    • 7、数据结构、算法
  • 二、进阶芝士
    • 1、框架与核心模块
    • 2、说下你在项目中使用过的设计模式
    • 3、架构思想
    • 4、如何查BUG,复现,录像系统
    • 5、如果让你管理团队,你会怎么做
    • 6、说下你遇到的困难,如何克服
    • 7、你作为面试者有什么问题想问的、想了解的
  • 三、额外芝士
  • 四、面试准备
  • 五、坚持与理念
  • 总结


前言

最近进行了几次面试,发现如今的Unity市场变得不太一样了,不再只是看重解决问题的能力,而是更注重面试表现,竞争也更加激烈。因此,在面试前应当互相明确以下几点:
1、面试岗位需求:确保了解岗位的具体要求和职责。
2、面试流程:确认面试有几轮,每一轮的侧重点是什么,特别是哪一轮是技术面试。(不然遇到非技术人员各自瞎问,后面面完才知道是跨服聊天,浪费双方时间)
以下是我的总结,希望对大家有所帮助:


一、基础芝士

基础类型的问题主要是一些概念性的问题,通常被称为经典八股文。一般来说,工作3到5年的人不会被问太多这类问题。不过,有时你可能会遇到一些非技术面试官,他们虽然不懂技术,但会质疑你的回答是否与网上标准答案一致。为了应对这种情况,可以提前总结和准备一些标准答案。
以下答案并不是标准答案,经供参考。

1、说下你对面向对象的理解

面向对象是对事物的抽象,在C#中处处是类,可以说处处都是(看做)对象。特点是继承、封装、多态。
继承是为了提高代码的复用性和扩展性,具体方法就是将子类相同的东西提取出来作为父类。
封装是为了保护代码不被轻易破坏,增强代码的安全性,同时也方便其她人使用,而在其她人使用的时候也不用去关心其内部逻辑是如何实现的。
多态放到最后说明其重要程度,继承和封装其实也是为多态准备。多态的定义是指同一接口、方法在不同的环境下有不同的表现(实现)。具体的体现是重写和重载,重写是指子类重写父类方法,就比如动物作为父类,其中都有一个声音的方法,小猫、小狗为子类重写父类的虚方法。

//该代码为AI生成
public class Animal
{public virtual void MakeSound(){Debug.Log("Animal sound");}
}public class Dog : Animal
{public override void MakeSound(){Debug.Log("Bark");}
}public class Cat : Animal
{public override void MakeSound(){Debug.Log("Meow");}
}

重载是指同个方法名有不同参数,如果说重写是运行时的多态,那么重载就属于编译时的多态。

//该代码为AI生成
public class MathOperations
{public int Add(int a, int b){return a + b;}public double Add(double a, double b){return a + b;}public int Add(int a, int b, int c){return a + b + c;}
}

当然,接口也能实现多态。

2、说下协程和线程的区别

协程就是在unity主线程运行时开启另外一段逻辑来协助运行,来模拟多线程。使用场景多用于异步、动画、等待等操作,最常见的就是进度条异步加载。原理是利用了像list、Dictionary内部使用的迭代器,但是使用方法不同,不是迭代元素,而是分帧执行代码。每一帧调用迭代器的方法(MoveNext),其中unity利用关键字yield return快速实现了迭代器,两个yield return之间就是MoveNext方法执行的内容。
线程是操作系统调度的基本单位,一个程序至少会有一个线程。unity本身没有多线程,但是支持多线程的使用(不这样说,不懂的就查到网上很多文章说unity没有多线程的概念来质疑你)。unity中使用多线程是无法直接调用unity的api,需要访问unity的GameObject、Transform这些对象的时候可以搞容器去在主线程(比如在update)中处理。一般来说,多线程用在处理网络、数据计算、资源加载此类的场景。
List底层代码剖析
Dictionary底层代码剖析

3、说下内存优化这块内容

首先是资源的加载、卸载,加载三部曲——按需加载、异步加载、及时卸载。
对象池的使用,大量物体重复创建、销毁会导致内存碎片和性能下降,使用对象池可以有效减少内存分配和GC。某些经常使用的游戏对象可以利用隐藏、显示的方式管理,不要随意使用创建和销毁。
减少内存废品,使用合适的数据结构,避免频繁分配以及释放内存,并进行初始化,避免不必要的内存浪费。
使用Profiler工具,查询并定位内存泄漏(会造成游戏卡顿,unity有一个Mono堆内存,可以想象成一个内存池,分配内存都从这里取用,释放也是归还给该池子,不够了就扩展池子,也就是池子只会不断变大)问题。

4、说下GPU优化这块内容

使用光照贴图、多层次细节(LOD)、静态合批和动态合批、减少模型面数和贴图大小等。

5、说下对DrawCall的理解

DrawCall是引擎或者说CPU(准备数据)通知GPU进行渲染的过程,一次通知就是1DrawCall。DrawCall过多会对显卡造成很大压力,我们需要适当降低她,方法一般为静态合批和动态合批,少用实时光照和阴影,UI同一层使用图集进行优化。

6、向量的点乘、叉乘

点乘 a b = |a||b|cos<a,b> 判断前后方位
叉乘 a b = |a||b|sin<a,b> 判断左右

7、数据结构、算法

二、进阶芝士

1、框架与核心模块

在设计项目时,遵循SOLID原则,将核心功能分离成独立模块,每个模块负责单一功能,减少耦合。利用接口和抽象规范和约束各个模块,方便扩展和替换。利用各种设计模式,更高效的实现功能模块。
比如为了xx项目做了一个UI框架,包含UI的加载、打开、关闭等基础功能,为了项目还加入了反向切换、UI日志、多语言化等功能,简化开发流程,提高了开发效率。

2、说下你在项目中使用过的设计模式

单例模式:用于管理全局唯一实例,如游戏管理器(GameManager)。通过单例模式确保全局只有一个游戏管理器实例,方便管理游戏状态和全局资源。
观察者模式:观察者模式是一对多的依赖关系,一个对象发生改变,其他依赖者就会收到通知,通常用在消息推送、任务系统。有解耦。
工厂模式:用于创建复杂对象,如在武器系统中,根据不同类型生成相应的武器对象。通过工厂模式,简化了对象创建的逻辑,并提高了代码的扩展性。
命令模式:系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作,也可以考虑使用命令模式,在工业软件中常见,撤销和反撤销操作使用居多。
状态模式:其实就是FSM有限状态机的使用。
Unity状态机

3、架构思想

分层、分治、演化思维。
分层是指将项目分为多个不同的层级,比较笼统的说就是UI框架层、资源管理层、数据层、网络层以及核心逻辑层。其中核心逻辑层按照项目进行规划,可能有地图场景和寻路、AI、工具层、着色器和特效、编辑器工具等。
分治是指把复杂的问题变成小的问题解决再组合起来。以Unity工作流举例,除了逻辑代码编辑、打包发布、版本控制、项目管理都能变成小的问题,将其解决,开发将会更加顺利。比如用gitlab+sourcetree进行版本控制,用Jenkins来进行打包发布,用Python或命令处理Excel数据等等。
演化思维是指设计项目时瞻前顾后,一个项目想长期经营下去需要不断的迭代更新,刚开始可能只有一两人的团队慢慢扩大,业务扩张,项目也随之进行迭代。像阿里就随着扩张渐进式的将单块架构(功能集中、易于开发、部署)转为微服务架构(分布式服务架构,将业务进行解耦)。
Unity读书系列《Unity高级编程:主程手记》——架构

4、如何查BUG,复现,录像系统

做日志系统,分等级划分;
将玩家的操作和其他变化打上时间戳,变为数据;

5、如果让你管理团队,你会怎么做

定期和团队进行沟通,确保项目进度。根据团队成员的能力和兴趣分配工作,鼓励团队分享和学习知识,共同解决问题,提升凝聚力。

6、说下你遇到的困难,如何克服

制作网络内容时,物联网部分,自己实现协议,出现粘包等问题。多学习相关知识,粘包问题有两种解决方法,一是将消息的首尾进行规定,二是在发送时就规定包长。
内存和性能优化,使用Profiler工具分析原因,使用对象池,UI的无限循环,优化资源加载策略等解决问题。

7、你作为面试者有什么问题想问的、想了解的

我想知道你作为面试官想让我问什么问题,如果回答不出来,我会很失望。此为绝杀,轻易勿用,觉得面的不行可以说,顺便向面试官了解一下自己(在对方眼中)的不足。

三、额外芝士

属于加分项,能说多少是多少吧。

  1. 网络
  2. 热更:xlua、hybrid
  3. shader
  4. AI、寻路
  5. BIM、GIS
  6. VR、AR、MR

四、面试准备

面试前:

  1. 了解岗位职责、公司业务背景、产品
  2. 准备一些经典问题,流畅的答出
  3. 模拟面试
  4. 知识扩充(多看书、博客)

面试中:

  1. 逻辑清晰、保持自信
  2. 举例说明,用实际的经验结合理论知识回答问题
  3. 坦诚待人,不懂的问题诚实回答
  4. 提出一些具有深度的问题,表达自己对公司的兴趣

五、坚持与理念

我也是有自己的坚持的:理念不合的不去,不坦诚相待的不去,加班严重的不去。找到一家理念相符、尊重个人的公司很是重要。
回到北京几个月,发现非初级岗位少了不少。深圳、上海那边的视频面试结果还不错,机会也多,只是需要远途跋涉。目前我打算先在北京找找,如果实在不行再考虑其他地方。
最后,希望能找到一家理念合适,能长期合作进步的公司吧。


总结

面试不是单纯的考试,而是一个双向选择的过程,是展示自我的机会,同时也是让公司了解你认同你的方式。在开始的几次面试中,我也是不断吸取经验,优化简历和自我调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二进制部署k8s集群 部署高可用master节点

目录 本次部署的环境 一、master02 节点部署 二、负载均衡部署 安装nginx服务 部署keepalive服务 修改node节点上的配置文件 在master节点上创建pod 三、部署 Dashboard 二进制部署k8s集群部署的步骤总结 &#xff08;1&#xff09;k8s的数据存储中中心的搭建 etcd &…

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

漏洞复现环境搭建请参考 http://t.csdnimg.cn/MxmId 漏洞版本 Apache Log4j 2.8.2之前的2.x版本 漏洞验证 &#xff08;1&#xff09;开放端口4712 漏洞利用 &#xff08;1&#xff09;ysoserial工具获取 wget https://github.com/frohoff/ysoserial/releases/download/v0…

Flink DataStream API 基础算子(一)

一、介绍 官网 DataStream API 得名于特殊的 DataStream 类&#xff0c;该类用于表示 Flink 程序中的数据集合。你可以认为 它们是可以包含重复项的不可变数据集合。这些数据可以是有界&#xff08;有限&#xff09;的&#xff0c;也可以是无界&#xff08;无限&#xff09;的…

spring启动后自动退出了

在项目中启动spring框架的application&#xff0c;但是还未等到接口访问它就自己退出了&#xff0c;运行截图如下所示&#xff1a; 解决办法&#xff1a; 将build.gradle文件里的依赖修改一下。我原先的依赖是&#xff1a; org.springframework:spring-web:5.3.10 现修改为 …

2024 电工杯高校数学建模竞赛(B题)| 平衡膳食食谱 |建模秘籍文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍团队独辟蹊径&#xff0c;运用负载均衡&#xff0c;多目标规划等强大工具&#xff0c;构建了这一题的详细解答哦&#xff01; 为大家量身打造创新解决方案。小秘籍团队&#xff0c;始终引领着建模问题求解的风潮。 抓紧小秘籍&am…

2024-05-20 问AI:介绍一下大语言模型的in-context learning

文心一言 大语言模型的in-context learning&#xff08;ICL&#xff09;是指模型在不进行参数更新的情况下&#xff0c;仅通过少量示例或指令&#xff0c;快速适应新的任务和领域的能力。 传统的机器学习方法通常需要大量的标注数据来训练模型&#xff0c;而ICL的出现为我们提…

肯尼亚大坝决堤反思:强化大坝安全监测的必要性

一、背景介绍 近日&#xff0c;肯尼亚发生了一起严重的大坝决堤事件。当地时间4月29日&#xff0c;肯尼亚内罗毕以北的一座大坝决堤&#xff0c;冲毁房屋和车辆。当地官员称&#xff0c;事故遇难人数已升至71人。这起事件再次提醒我们&#xff0c;大坝安全无小事&#xff0c;监…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-23.1,2 讲 I2C驱动

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

C#一些高级语法

目录 C# 特性&#xff08;Attribute&#xff09; 规定特性&#xff08;Attribute&#xff09; 预定义特性&#xff08;Attribute&#xff09; AttributeUsage Obsolete 创建自定义特性&#xff08;Attribute&#xff09; 声明自定义特性 构建自定义特性 C# 反射&#…

【AI】如何用非Docker方法安装类GPT WebUI

【背景】 本地LLM通信的能力需要做成局域网SAAS服务才能方便所有人使用。所以需要安装WebUI&#xff0c;这样既有了用户界面&#xff0c;又做成了SAAS服务&#xff0c;很理想。 【问题】 文档基本首推都是Docker安装&#xff0c;虽然很多人都觉得容器多么多么方便&#xff0…

了解区块链基础设施,共同构建安全且强大的Sui网络

区块链基础设施的范畴很广&#xff0c;但其核心是那些直接与网络互动的计算机。这些实体通常被称为节点&#xff0c;分为不同的类型&#xff0c;例如维护完整区块链副本的全节点&#xff0c;以及作为共识决定者的验证节点。除了这两种类型之外&#xff0c;还有其他类型的节点&a…

【oracle的安装记录】

oracle安装记录 一、下载以后&#xff0c;解压到同一路径下面 二、双击可执行安装文件&#xff0c;等待文件加载 三、双击以后&#xff0c;弹出信息 四、提示该窗口&#xff0c;点击【是】即可 五、未填写配置安全更新信息 六、弹出小窗口&#xff0c;选择【是】 七、安装选项…

golang一键打包macos, linux, windows 应用程序 shell脚本

golang一键打包各个平台可执行应用程序shell脚本&#xff0c; 可自定义输出文件名&#xff0c;自动一键打包3大平台可执行应用程序。废话不多说&#xff0c;直接上代码&#xff1a; #!/bin/sh ################################## # 生成各个平台下的可执行程序 golang一键打包…

SQLI-labs-第二十四关

目录 1、登录界面 2、注册界面 3、修改密码界面 知识点&#xff1a;二次注入 思路&#xff1a; 这一关有几个页面可以给我们输入&#xff0c;一个登录界面&#xff0c;一个注册页面&#xff0c;一个修改密码界面 1、登录界面 首先我们登录界面看看 登录后出现一个修改密码…

对字符串的处理:比较是否相同,copy对象属性,copy列表list

系列文章目录 //1.copy list对象 List<User> usersnew ArrayList<>(); List<Person> persons BeanUtil.copyToList(users, Person.class);//2.比较两个listpublic static void main(String[] args) {List<Person> list1 Arrays.asList(new Person(&qu…

【MySQL精通之路】InnoDB配置(8)-缓存池配置

本节提供InnoDB缓冲池的配置和调优信息。 1 配置InnoDB缓冲池大小 当增加或减少innodb_buffer_pool_size时&#xff0c;操作是分块执行的 区块大小由innodb_buffer_pool_chunk_size 配置选项定义&#xff0c;默认值为128M。 缓冲池大小必须始终等于或等于&#xff08;n倍于 …

最近情况说明

最近转入了Django开发工作&#xff0c;所以主要方向在Python开发。大大

Ubuntu 搭建SRT协议 环境

1.官网clone源码 GitHub - Haivision/srt: Secure, Reliable, Transport 打不开的话国内gitee 不是最新的 https://gitee.com/smartavs/srt.git 下下来之后 cd 到srt目录 需要安装cmake openssl等依赖 我的环境已经有了 mkdir build && cd build cmake .. -…

Docker Update 用法详解

Docker 是一个开源的应用容器引擎&#xff0c;它让开发者可以打包应用及其依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上。docker update命令则是用于在容器运行时动态更新其配置&#xff0c;如资源限制、CPU权重等&#xff0c;而无需重启容器。本…

最有效的企业数据防泄漏手段 | 数据泄漏防护系统推荐

随意信息安全意识不断提高&#xff0c;企业纷纷寻求高效的数据防泄漏手段。在众多解决方案中&#xff0c;这五款软件各具特色&#xff0c;但它们的共同目标都是确保企业数据的安全性和保密性。 接下来&#xff0c;我们将逐一介绍这五款软件的特点和优势。 1、Ping 32 Ping32…