找回密码
 立即注册
查看: 294|回复: 0

Unity初级面试应该掌握的知识

[复制链接]
发表于 2023-3-29 19:32 | 显示全部楼层 |阅读模式
1.装箱和拆箱

2.常用算法

3.C#高级(特性,反射,泛型等)

4.面向对象三大基础

5.接口和抽象类

6.虚函数和抽象函数

7.委托和事件

8.常用设计模式

9.协程

10.性能优化相关

11.渲染流水线

12.Git使用


更新:
A.修饰符


----------------------------------------------------------------
1.装箱和拆箱:

是指的引用类型和值类型的相互转换操作
值类型有int float double long enum等
引用类型有string object class delegate等
数组是引用类型,但是里面的元素可以是值类型

2.排序算法


3.C#高级:

特性(attribute),是C#的一种机制,可以为程序实体(class, method,字段)提供额外的信息和注释,
使用案例,使用 [Serializable]标记一个类就可以使该类的对象转换为二进制,而不需要自己手动编写代码实现;
使用特性可以保证代码质量:将attribute作为规则附加到代码中,程序编译的时候就会对附加了特性的代码块进行检查,以确保代码符合特定的规定,以确保代码质量
反射:是一种能在程序运行的时候动态获取或者调用程序的信息的方式(类型,成员,方法,属性,特性等)
泛型:可以让类型通过参数传递,运行时指定需要使用的类型,提高代码复用性

4.面向对象三大基础:

封装:隐藏代码内部的实现细节,提供公共的方法或者接口来与对象进行交互,提高代码的安全性
继承:子类可以使用并维护父类提供的方法和属性,有助于减少代码重复,提高复用性和可扩展性
多态:是指可以用同样的方法名对不同类型的对象进行同样的操作,产生不同的结果

5.接口和抽象类

接口可以视作方法的规范,继承接口则必须实现该方法
抽象类不能被直接实例化和使用,看成一种骨架,需要子类来完成实现,子类必须对抽象类里的抽象方法全部实现
区别:抽象类可以包含成员变量,构造方法,非抽象方法,接口只能包含抽象方法和常量
一个类只能继承一个抽象类,但是可以实现多个接口

6.虚函数和抽象函数

虚函数:父类中定义的,可以被重写的方法
抽象函数:抽象类或者接口中定义,没有具体的实现,需要子类具体实现

7.委托和事件

委托:是一种类型,可以定义在任何地方(类的里面或者外面)相当于具有相同参数和返回值的方法的容器,调用委托,就调用了委托内部的所有方法
事件:是一种特殊的委托,是类或者接口里面的成员,由发布者和订阅者组成,当发布者发布信息时,订阅者都会收到消息
委托可以直接调用,事件只能由事件发布者触发
事件的特点是多播和异步,多播是多个对象可以订阅该事件,异步是指支持发布者和订阅者在不同的线程上执行
回调函数:通过委托实现,可以在函数执行完毕的时候调用需要调用的函数

8.设计模式

单例模式
工厂模式
适配器模式
模板方法模式
观察者模式
装饰器模式

9.协程:

协程不是线程,可以视作一种单线程的多任务方式,每个任务都可以被挂起和恢复,从而实现任务之间的并发执行,避免了线程频繁切换的性能开销和同步问题,协程一般用在延迟,异步,动画等操作上,比如说实现一些等待的逻辑,文件读写,资源的加载,通信等
异步加载:Unity的主线程是单线程的,用来处理渲染,输入,逻辑等,但是Unity还有一个工作线程池,里面包含多个线程,用来处理资源加载,解析,回收等操作。在加载资源的时候,会创建一个新的任务,将其添加到线程池内进行处理,当任务执行完成或者出错时,工作线程会通知主线程,并加载返回结果

10.性能优化相关:

一:减少DrawCall,DrawCall是指CPU调用GPU,每一次调用都需要处理CPU和GPU的通信,将多个物体合并成一个Batch,减少DrawCall的调用可以提高性能
静态合批:是在场景加载时处理的,多个静态的物体合成一个网格,降低DrawCall。条件:静态的物体,必须使用相同的材质
动态合批:每次更新都要重新计算可见性,只适合少量的动态物体,需要使用相同的材质球
CPU和GPU是怎么通信的?
1CPU将数据和指令传输到GPU内存中   
2然后CPU发送命令,告诉GPU如何渲染   
3GPU将数据从显存中取出并开始进行计算和渲染
4渲染完成后GPU将渲染结果存储到显存或者系统内存中供CPU使用
注:步骤2的命令实际上是渲染指令,通知GPU如何对数据进行处理,使用什么着色器,设置光照,材质等等
二:优化场景,通过一些手段(LOD, 遮挡剔除)减少不必要的物体和组件,降低渲染的压力
三:动态加载和释放资源,减少内存负载
四:对象池
五:减少分配内存,内存和垃圾回收是Unity GC产生的主要消耗,避免频繁的装箱拆箱(可以用泛型)
六:GPU实例化,使用GPU来渲染大量重复的网格,将网格和材质复制多次,但是保留独立的变换等信息,在GPU上并行处理,需要确保所有实例共享同一个材质和网格(树木草地等)
七:Compute Shader,编写shaderlab语言来实现并行计算,比如大规模数据的排序,统计等处理

11.渲染流水线:


12.Git处理冲突:

在提交代码前,在本地更新代码库,确保是最新的版本,提交是如果发生冲突,打开冲突文件,对文件进行删除,修复,并保存修改,然后提交更新,合并代码

A.修饰符:

public 公开
private 私有
protected 受保护,只有类的内部和子类能访问
internal 内部,只有同一程序集可以访问
sealed 确保类或者方法不能被重写

暂时只想到这些,先写这么多,后面再补充和加新内容
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-4-19 06:27 , Processed in 0.127169 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表