C# & 面向对象 #
重载和重写的区别
只读集合类型的写法 (Example : 写
geter方法 / 写GetDevice封装 / 写ReadOnlyDictionary只读)非公开构造函数可以防止外部new出类的实例(常用于单例模式中对类的实例化保护)
接口显式调用可以杜绝接口的随意实现(常用于某些接口中的方法,需要特定逻辑/情况下才能实现)
不要给常见类型写扩展方法(int string double这类,会污染命名空间下的调用),或者将扩展方法放入不常见的命名空间中
属性 vs 索引器
手动属性和自动属性的区别
CallBackvsActionvsFunc<>vsDelegatevsEventvsUnityEventvsPredicate(实际上就是delegate的不同表现形式各自有什么不同,应用场景有哪些)在注册函数方法时,
+= = -=的区别委托的协变和逆变
策略函数
匿名函数
访问修饰符
internalsealed容器类
ListDictionaryHashsetStackQueue``LinkLIst``ArrayListListvs 数组readonlyvs{ get; private set; }typeofvsGetType()forvsfoeachconstvsreadonlyi++vs++iint?vsintEqualsvs==CompareTagvsother.tagrefvsoutIListvsList强类型 vs 弱类型
outvar??空值合并运算符?:三目运算符?.非空判断FindObjectOfType<T>()vsFindObjectsOfType<T>()is/as类型转换nameof运算符default(T)与default表达式record类型(不可变数据结构)switch表达式(C# 8+)Span<T>/ReadOnlySpan<T>(高性能内存访问)泛型约束(
where T : class等)异常处理机制(
try-catch-finally、throw)IDisposable与using语句块yield return/IEnumerable迭代器Nullable<T>与?类型声明ref/in/readonly ref参数传递方式initsetter(初始化后只读属性)特性(Attribute)
C# 也有自己的 Union
值元组 (ValueTuple)
枚举类型
事件的监听、注册、注销与触发
this反射
值类型 vs 引用类型
类型安全
装箱拆箱问题
堆 vs 栈
配置表
闭包
深拷贝浅拷贝
链式调用
static 类是否算单例
回调
Extension Method
依赖关系
控制反转 / 依赖注入
继承
组合优于继承
多态
多态与虚方法(
virtual/override/new)封装
开闭原则
单一职责原则
接口
interface抽象类
abstract抽象类 vs 接口
部分类
Partial重载
构造函数 / 析构函数
Helper 类
Async 异步处理
为什么要写嵌套类
类和结构体有什么区别
静态成员和非静态成员的区别
函数内多次使用 string += 会产生大量内存垃圾,该怎么处理
接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实现类?
结构体是否可以实现接口?
Dictionary底层原理
Unity 应用 #
Cinemachine
Shader
AssetBundle (AB包) https://github.com/Unity-Technologies/AssetBundles-Browser
AB包的加载流程是什么?
CC
HybridCLR
Animacer
Behavior Designer
UGUI
ScriptableObject(数据驱动架构)
Addressables(资源管理)
Timeline(可视化动画控制)
Input System(新输入系统)
DOTS
Mirror (网络同步)
SubScene (DOTS)
FairyGUI
Odin
Unity相关 #
- Unity的生命周期
- 在
rigidbody中,关于阻尼的变量值可以直接写Infinity来暂停物理运动 LocalToWorld( unity.Transform库中 )- Unity协程
RectTransformvsTransform- 物体发生碰撞的必要条件?
- 如何安全的在不同工程中迁移 asset
MeshRender vsmaterialvssharematerial- Gizmos(调试辅助图形)
- Physics(碰撞、射线检测等)
- 图集
- UI动静分离原理
positionvsPosition- Curve曲线做动画处理
- WorldSpace / ScreenSpace
- Animation Override
- GPU的工作原理
- 什么是渲染管道
- 如何动态加载资源
MipMap- .
net和mono之间的关系
性能优化 #
- LOD Group(距离渲染)
- Occlusion Culling(遮挡剔除)
- Job System
- Compute Shader
- Burst
- Entity Component System(ECS)
- Profiler 使用技巧
- 内存池与GC优化
- 渲染管线(URP / HDRP)
- DrawCall UGUI优化 (合并 UI 元素到同一 Canvas , 使用图集合并 Sprite , 避免使用 Mask(可改用 RectMask2D), 控制层级深度,避免打断合批)
- IL2CPP
- Unity Profiler监控性能
- PostProcessing
- Unity大型场景性能优化全攻略:PC与安卓端深度实践 - 场景管理、渲染优化、资源调度 C#_unity 大世界性能优化-CSDN博客
- VSync垂直同步
- GPU Instance 的视锥剔对象池
- 对象池 LRU LFU
- 多对象池
架构设计 #
- 工厂模式
- 单例模式(懒汉式,饿汉式,如何保证饿汉式的线程安全?)
- 适配器模式
- 状态模式
- 策略模式
- 观察者模式
- 装饰器模式
- 中介者模式(Mediator Pattern)
- 事件中心(观察者模式Plus)
- 事件总线(Event Bus)
- 泛型
- 泛型对象池
- 状态机 / 分层状态机 / 状态模式状态机
- MVC
- MVVM
- 单一 GameLoop 统一驱动
- State Machine + Controller 中枢架构
- Entity-Component-System(ECS)架构
- Service Locator + Facade 架构
- 模块驱动 + 事件总线架构(Event Bus)
- Actor - Component架构
- buff 系统怎么设计
- skill 系统怎么设计
- 领域驱动设计(DDD)基础
- 响应式编程(UniRx / Reactive Extensions)
数据处理 #
- Json(LitJSON、Newtonsoft.Json)
- 二进制序列化(BinaryFormatter / MessagePack)
- 数据持久化方案(本地 / 云端)
- List
+ MonoBehavior - SQLite / MySQL 数据库
- ScriptableObjects
- PlayerPrefs
- xml
小工具类 #
Helper类
Timer类
逻辑与数据分离(Param类)
数学 #
- 四元数(Lerp Slerp rotation)
- 欧拉角
- 插值
- Lerp vs SmoothDamp vs MoveTowards vs Easing / 曲线处理
- 曲线插值 (动画曲线curve)
- Matrix
- float vs float2 vs float3 vs float4
- A*算法,Dijkstra算法
经典问题 #
- 什么是线程安全?
- 怎么保证单例模式中饿汉式的线程安全?
- GC是怎样运作的?(三代处理以及GC算法)
- 并发(Concurrency)
- 并行(Parallelism)
- 线程(Thread)
- 协程(Coroutine)
- 进程(Process)
- 同步 (Synchronous)
- 异步 (Asynchronous)
- 多线程
- 单线程异步
- 什么是io(I/O密集型任务)?一般用什么模型进行调度?
- 什么是CPU密集型任务?一般用什么模型进行调度?
- 帧同步和状态同步
- 寻路算法的优化 从基础A*到JPS到RVO到KD-tree
- 其他优化,ui中的一些视野剔除,相机剔除和组件对象池复用
- AOI视野优化
- write do undo的实现
- IOC容器
- ORCA群体避障
其他 #
- 图形学
- OpenGL
- php
- 分布式系统的设计
- 多线程开发
- cocos2d-x
框架 #
zenject依赖注入框架
assets bundle打包后按需加载
优化draw call
Lua热更新,xLua插件
DoTween动画表现
ATC游戏的招式可以用timeline制作
Ecs架构
Unity DOTS
playfab sdk 后端
ik系统
rewired输入系统
Entity Framework Core