前言

持续更新中...

面向阅读者:unity面试者

阅读提示:一般面试中,不会问以下所有类型的问题,例如你选择做ui才需要回答UGUI分类的问题

Unity基础

基础(点我)

Q:Unity的Mono方法执行顺序?
A:事件函数的执行顺序 - Unity 手册

Q:Update和FixedUpdate的区别,timescale和dataltime的使用和对前者的影响
A:【Unity】子弹时间timeScale减少对update,fixupdate,dealtime和碰撞检测的影响_PA_的博客-CSDN博客_dealtime

Q:问看到物体前后的所有影响
A:camera depth → sorting layer → order in layer → shader渲染列队(所有数值越大越后渲染,显示越靠前)→坐标

Q:碰撞的触发条件是什么

Q:协程是如何退出的

Q:物理的消耗一般在哪
A:1.collider 2.rigidbody 3.ray

Q:Mono和il2cpp是什么
A:介绍(点我)   、  详解(点我)

导入格式

Q:meta?
A:记录guid和导入设置

Q:贴图的压缩格式
A:选择格式+配置:unity 贴图格式及压缩后的图片像素比较_进击的鸭嘴兽的博客-CSDN博客  →  现ASTC
      内存大小:https://blog.csdn.net/plaxbsga/article/details/64440848

Q:模型

Q:动画

打包、热更

Q:如何打AB包,如何处理依赖,如何分包?

Q:打AB用什么压缩格式 有什么好处

Q:热更流程是如何

资源加载

Q:加载流程是如何

Q:AssetBundle.unload方法中boolean参数有什么用

Q:Unity如何加载卸载资源
A:【Unity】Asset资源加载详解_PA_的博客-CSDN博客_unity加载asset

Q:加载慢的原因?怎么办?
A:NGUI研究院之为什么打开界面太慢(十三) | 雨松MOMO程序研究院
A:测试消耗、使用预加载、异步加载、分帧加载、拆分加载、分帧/异步实例化。减少挂在上面的GO和Scripts。

UGUI

Q:ui canvas是啥 三种模式区别
A:【Unity3D 教程系列第 13 篇】UGUI 中 Canvas 下三种渲染模式的区别_Allen Su的博客-CSDN博客

Q:NGUI和UGUI中,两个UI间夹着一个粒子特效是怎么实现的
A:NGUI:设置shader的renderQueue UGUI:设置sortingOrder

Q:背包界面如何实现?

移动

Q:物体如何旋转和移动函数?

Q:角色如何移动和旋转

Q:Unity3d中的碰撞器和触发器的区别?

Q:发生碰撞的条件?
A:如果使用Physics.Overlap则只需要Collider,OnTriggerXXX、OnColliderXX和物理碰撞需要其中一个具有RigidBody。

动画

Q:animator和animation区别 
A:1.Animation控制一个动画播放的各类方法和数据(当然也可以代码进行动画切换),debug模式切换为Legacy。
      2.Animator则可以实现控制多个动画的播放,切换,叠加等一级对骨骼动画控制等更复杂的效果,是一个动画状态机。
         除却必要的动画文件,还会生成一个.controller结尾的文件,也因此占内存比Animation更大

Q:Animator Layers
A:分层,高层覆盖下层(例如:边走边打)

Q:Blend Tree
A:混合,多状态可以处于中间状态(例如:方向移动) BlendTree

Q:子集动画Sub-State
A:处理多个相同进出条件的动画(例如:技能)

Q:IK
A: IK  反向动力学。是根据骨骼的终节点来推算其他父节点的位置的一种方法 (例如:瞄准、人朝着镜头看)

Q:融合消耗高如何处理

AI

Q:行为树是什么,状态机是什么,优劣?行为树优化?
A:【Unity】行为树与状态机,技能系统做法_PA_的博客-CSDN博客_unity状态机和行为树

Q:Unity导航使用流程?
A:【Unity】Unity导航Navigation和NavMeshComponents使用_PA_的博客-CSDN博客

Q:导航方式有几种,算法原理分别是什么,Unity导航是怎样。
A:waypoint、A*、网格导航; unity也许使用了网格导航+A*

Q:导航看过源码吗?
A:没看过

Q:A*是啥?结果是最优的吗?如何优化?

Q:怪物放服务器如何计算、如何导航?

战斗

Q:伤害弹出数字的制作
A:1.sprite(最优,会多对象需配合池和空间转换使用)   2.UI Text原理不清楚 3.mesh(单对象,有计算消耗) 4.Texture Get/SetPixel虽然减少对象 但是增加很大计算)

Q:技能、子弹检测碰撞
A:Physics.各种形状; Physics.Overlap

Q:Timeline有哪些坑

Unity优化

性能

Q:游戏卡顿怎么办

Q:发热怎么办
A:(来自Unity官方)把帧数降到30帧应该会好很多,一般是CPU和GPU占用都太高。60帧一般用不到,但是也要看你的游戏类型,比如动作类的游戏60帧会效果好很多。
还有一种可能性是发生了垃圾回收,可以用UnityPofiler诊断是否有内存一直分配的情况。如果有,最好采用对象池等机制避免内存一直分配导致垃圾回收。
另外手机发热问题的原因很多,主要就是把CPU和GPU的使用率降下来。比如CPU查看一下热点函数,进行相应优化。GPU方面可以,可以检查Draw call,填充率,顶点数是否过多、overdraw等
A:代码效率   使用UWA查看耗时高的函数
A:渲染效率   共同-ui刷新率降低、降低DC  低端机处理:后效和光照直接不要,特效做低配,分配率降低,帧数上限降低,

Q:脚本如何优化
A:(来自Unity官方)这里简单列举几条:

  • addComponent会造成gc alloc
  • physics.raycast会造成gc alloc,建议使用无gc alloc的版本
  • SetParent尽量少调用,对于有mesh collider的物体,更是不建议调用
  • 使用数组的数组,而不是多维数组
  • 对于transform的修改尽量减少
  • 对于有大批量物体的游戏,注意从native层调用mono脚本的开销,比如update的开销

Q:物理碰撞如何优化
A: 物理系统,一般的2d碰撞检测不会有太大性能问题。
       可以检查下Layer Collision Matrix的设置, 把不同的的碰撞体分类, 避免多余的碰撞检测。
      如果要自己实现Box , Circle等形状的碰撞检测,也是可以的。
       

Q:粒子特效
A:1.粒子特效如果太多,可以适当减少。2.尽量减少粒子的面积,面积越大就会越卡。 3.最好不要使用Alfa Test 4.检查拖尾、SkinMeshRenderer、超过300面

Q:什么是MipMap、LOD
A:MipMap:Mipmap 纹理使 GPU 能够为较小的三角形使用较低分辨率的纹理。这一点类似于纹理压缩可以帮助限制 GPU 渲染时传输的纹理数据量。
      LOD 
      甚至相机剔除距离和Camera.layerCullDistances

图形与优化

Q:渲染瓶颈
A:(来看自官方) Graphics performance fundamentals - Unity 手册

Q:优化方式
A:关于Unity中渲染的优化 关于Unity中渲染的优化_zebintang的博客-CSDN博客

Q:什么是DrawCall?DrawCall是CPU消耗还是GPU高了有什么影响?DrawCall和batches有什么区别?
A:顾名思义Draw绘制,call,即调用cpu调用底层图形渲染接口命令gpu进行一次渲染操作
A:drawcall高了cpu会把大量的时间花费在搜集发送给gpu的信息上,造成cpu过载。
A:区别 -  Batch, Draw Call, Setpass Call - 知乎    https://blog.csdn.net/Wei_Yuan_2012/article/details/88677172

Q:场景如何降低DrawCall?
A:降低drawcall一般是通过批处理的方法,unity提供了

  • Static Batching 静态合批的原理即化整为零,将多个场景物体预先合成一个大的物体进行绘制,unity5的实现就是整合成一个大的vbo,而不整合IBO,一次性提交vbo给gpu,然后并不是把整个vbo都绘制,而是每次需要绘制其中某个某些物体时改变IBO,选择大vbo上的某一段进行绘制。静态合批可以将多个小物体的绘制合并成一个大物体的绘制,减少对渲染状态的改变,它一次并行绘制多个物体,理论上是最快的绘制方法,不过最大的缺点是因为合成新的大vbo需要耗费额外的大量内存,同时不能渲染动态物体,因为合并vbo的时候已经确定顶点数据了,顶点数据不能更改(例如unity5对LOD合批的实现也是讲所有层次的lod都预先合并进去),另外一个vbo的大小是有限制的,如果物体数量过多,也会被拆成多个绘制。(tzy那我觉得静态合批对比动态合批的优点就是vbo的合并是提前计算好的 不过也增加了磁盘和内存的占用 多材质依然会多次dc 2018测试的时候不能很好的几个材质就几个dc 换2019就又好了)
  • Dynamic Batching 动态批处理   可以解决对顶点数据有变化的物体的合批,它动态的合并vbo进行提交,组建vbo的时间有消耗,为了减少这个消耗,unity对动态合批的vbo大小有限制,以致于很小顶点数的物体才有可能被动态合批注意顶点面数,缩放,shaderpass,光照问题(这个是Unity做的 相对静态合批可以把动态物体也进行CPU计算合批 但也会增加CPU消耗)
  • GPU instancing(在材质上勾选,合并相同材质的模型)(和动态区别?)这是最新渲染api提供的一种技术,如果绘制1000个物体,它将一个模型的vbo提交给一次给显卡,至于1000个物体不同的位置,状态,颜色等等将他们整合成一个per instance attribute的buffer给gpu,在显卡上区别绘制,它大大减少提交次数,它在不同平台的实现有差异,例如gles是将per instance attribute也当成一个vbo提交,然后gles3.0支持一种per instance步进读取的vbo特性,来实现不同的instance得到不同的顶点数据,这种技术对于绘制大量的相同模型的物体由于有硬件实现,所以效率最高,最为灵活,避免合批的内存浪费,并且原则上可以做gpu skinning来实现骨骼动画的instancing。
    这种方式相比static和dynamic节约显存,又相比dynamic节约CPU开销。但是相比这两种批次合并方案,会略微给GPU带来一定的计算压力。但这种压力通常可以忽略不计。限制是必须相同材质相同物体,但是不同物体的材质上的参数可以不同。

Q:为什么可以动态合批 为什么不能动态合批
A:Unity做的?不能合批的情况

Q:有哪些剔除?发生在什么阶段
A:
CPU - camera视椎体剔除
CPU - 遮挡剔除OcclusionCulling 静态
GPU - 裁剪Clipping
GPU - 背面剔除(shader Cull指令开启关闭)
GPU - 深度剔除 
不同几种剔除(Culling)在渲染流程中的使用总结_鹅厂程序小哥的博客-CSDN博客

Q:静态合批是否会剔除,为什么可以
A:连续内存Index决定

Q:UGUI如何降低DrawCall和优化?
A:使用frame debug查看打断合批的问题;查看drawcall,顶点数(一般字体不多没问题),三角面,合批   
      UGUI的优化请将重点放在drawcall合批和顶点重建上,比较常用的方法有:动静分离
      有很多ui不需要输入事件时,可以关闭事件检测;
      注意ui顺序与图集,尽量不使用Mask(因为2个材质 这是mask实现原理)会打断合批

Q:Shader会吗?
A:不会

Q:有蒙皮怎么合成网格
A:【游戏系统】(一)Unity换装实现 - 知乎

Q:CommandBuffer是什么
A:CommandBuffer携带一系列的渲染命令,依赖相机,用来拓展渲染管线的渲染效果。Unity 的CommandBuffer基础_漫漫之间n的博客-CSDN博客_commandbuffer

Q:shader预加载是什么?如何收集?收集会有什么问题?如何减少shader大小?
A:转一篇 ShaderVariantCollection介绍的比较详细的文章 感谢作者 - rexzhao - 博客园

Q:Unity提供了几种光源,分别是什么

Q:LightMap?
A:就是指在三维软件里实现打好光,然后渲染把场景各表面的光照输出到贴图上,最后又通过引擎贴到场景上,这样就使物体有了光照的感觉。

Q:Forward Rendering(正向渲染/前向渲染)与 Deferred Rendering(延迟渲染)
A:正向渲染和延迟渲染彼此之间有什么不同_Lion.Kuo的博客-CSDN博客

Q:SRP?URP?HDRP?

Q:AlfaTest?

Q:半透明为何耗时
A:因为渲染顺序

Q:前向渲染与延迟渲染
A:前向渲染和延迟渲染的区别

Q:渲染消耗点
A:灯光、阴影、抗锯齿、drawcall

Q:TextureStream
A:纹理串流系统可以控制 Unity 加载到内存中的 Mipmap 级别。该系统可减少 Unity 对于纹理所需的内存总量,因为它只加载 Unity 在场景中渲染当前摄像机位置时所需的 Mipmap,而不是默认加载所有 Mipmap。该系统通过消耗少量 CPU 资源来节省潜在的大量 GPU 内存。纹理串流 (Texture Streaming) - Unity 手册

Q:CommandBuffer

Q:为什么阴影会增加消耗
A:https://docs.unity3d.com/cn/current/Manual/LightPerformance.html   Shadow Map 原理和改进_ronintao的博客-CSDN博客_shadowmap 
     首先会对模型进行深度计算,会让材质检测接受阴影(不需要接受阴影可以在mesh的component选项那关掉也能优化性能),接受到阴影的材质会多一个pass,。。

Q:草(一种植物)的合批怎么做

Q:渲染流程
A:应用阶段→几何阶段→光栅化  
Unity Shader渲染流程详解-腾讯游戏学堂
程序员 - 一篇文章搞懂到底什么是渲染流水线_个人文章 - SegmentFault 思否
绿色表示完全可编程控制,黄色表示可配置,蓝色表示由GPU固定实现,不可修改

资源内存

Q:如何查内存泄漏

Q:如何真正的销毁asset
A:使其引用数为0时调用Resources.UnloadUnusedAssets(),Resources.UnloadUnusedAssets()会真正释放内存及显存,但此接口尽量不要频繁调用,因为会有较大的性能开销。

Q:贴图Read/Write的影响?是哪里的内存多了?

内存回收

Q:垃圾回收如何判断存活
A:1.引用计数  2.根搜索算法  GC回收之一:判断对象存活算法、四种引用、回收方法区_稳重的二哈的博客-CSDN博客_方法区中类静态属性引用的对象

Q:Unity GC
A:【性能优化】内存管理和GC优化 - 知乎

Q:知道贝母垃圾收集器吗
A:Unity使用贝母垃圾收集器  解读MONO内存管理和回收 - 知乎 看完觉得还是标记清除法。。

Q:标记清除法是怎样
A:标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。
在标记阶段首先通过根节点(GC Roots),标记所有从根节点开始的对象,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。
你似乎来到了没有知识存在的荒原 - 知乎

Q:知道垃圾回收代吗
A:4种垃圾收集算法及7种垃圾收集器:GC回收之二:4种垃圾收集算法及7种垃圾收集器_稳重的二哈的博客-CSDN博客_垃圾回收算法

Q:GC卡顿怎么办
A:(1)寻找GC时机   (2)2019.1增量式GC(支持大部分平台 需要.NET 4x或更高版本)

Q:增量式回收
A:译文Unity 2019.1 Alpha新功能:增量式垃圾回收 | Imagination中文技术社区   原文Feature Preview: Incremental Garbage Collection | Unity Blog

检测方法

Q:性能消耗测试
A:耗时测试:C# - StopWatch  |  Unity - Profiler.BeginSample/EndSample 
      unity性能工具:UWA、UPR
      代码内存:UWA

Q:查看DC
A:frame debug

Q:查看资源内存
A:UWA快照/UPR快照

Q:如何查代码内存泄漏
A:UWA付费功能

Q:移动开发的优化工具除了unity profiler和xcode上的instruments, 还有什么其他工具吗?有没有代码级别的优化工具?
A:除了常规的Unity profiler 和 instrument,还有以下一些工具推荐: Memory profiler - 查看内存 ;NSight - 查看GPU ;Unity Engine Analyzer - 代码静态分析工具

Q:在移动端的性能调试过程中,怎么确定是cpu负载过高还是gpu负载过高?因为在Profile中是看不到gpu的耗时的
A:xcode可以查看cpu的gpu的占用,gpu还可以看出vs和ps占用比,请使用xcode调试。UWA可以出详细报告。

C#基础

Q:类型
A:值类型(简单类型、枚举类型、结构类型)引用类型(Class、Interface 、Array 、Delegate )

Q:什么是值类型,什么是引用类型?区别?
A:值类型和引用类型区别 - 好好學習 - 博客园
分配在堆栈、值一般小引用可大可小、值默认0引用默认null需要new、值类型进行复制/引用类型引用地址、回收、GetType.IsValueType

Q:什么是栈、堆?
A:【C#】C#值类型与引用类型、内存区域_PA_的博客-CSDN博客

Q:装箱与拆箱
A:int x = 1023;
object o = x; //装箱     装箱会分配内存
int y = (int) o; //拆箱
.NET基础知识-装箱与拆箱 - hypo106 - 博客园

Q:GC是什么?具体机制是怎样?它是怎么知道哪些对象可以被回收的?
A:https://www.jianshu.com/p/53439af1eb00

Q:什么是垃圾回收代?
A:垃圾回收可以选择回收第几代。
内存最开始分配在第0代,每次回收会把有引用的放到1代,相当于顽固内存,然后每次gc只会检查第0代,这样效率高一些,
等到1代也满了,就会去回收第1代,还存活就会放到第2代(下一代),终极顽固内存
代也满了之后,会把代扩大。

Q:类和结构区别
A:1)struct是值类型,class是对象类型  2)struct不能被继承,class可以被继承  3)struct默认访问权限是public,而class默认是private  5) struct不能由程序员申明构造函数,有编辑器自动生成,用于描述轻量级对象,执行效率高,例如:Line,Point等  6)struct的new和class的new是不同的,struct的new就是执行一下构造函数创建一个实例,再对所有字段进行复制。  而class则是在堆上分配一块内存再执行构造函数,struct内存并不是在new的时候分配的,而是是定义的时候分配。  7)struct 可以不用new来实例化,而类却要,如果struct不用new来实例化,那么结构的所有字段处于未分配状态。
.NET中类和结构的区别 - 君莫笑·秋 - 博客园

Q:构造函数和析构函数是什么
A:c#学习笔记——构造函数和析构函数 - XueWJ - 博客园

Q:A a=new B()的意义

Q:接口interface、抽象函数abstract和虚函数virtual
A:[c#] 虚函数(Virtual),抽象函数(abstract)和接口的区别 - Staid - 博客园      【C#】什么时候使用virtual什么时候使用abstract - Doc.stu - 博客园

Q:重载与重写
A:重载就是在同一个类中,方法名相同,参数列表不同。参数列表不同包括:参数的个数不同,参数类型不同等。
      重写就是子类重写父类的方法,在调用的时候,子类的方法会覆盖父类的方法,也就是会调用子类的方法。在父类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。

Q:修饰符有哪些?
A:【C#】修饰符_PA_的博客-CSDN博客

Q:static
A:C# static的用法详解 - 遥远的Ta - 博客园

Q:params
A:C# params 用法简介_Bird鸟人的博客-CSDN博客_params

Q:string 和 StringBuilder异同
A: string   区别:C#中String和StringBuilder的区别 - .net&new - 博客园

Q:"",string.Empty和null三者的区别
A:“”和empty一样 都会指向string类定义的static readonly String Empty;这个在开始就已经分配好了 C#中string.Empty、""和null 之间的区别_米刀文的博客-CSDN博客_.net string.empty

Q:C# == 与 Equal区别
A:C#中Equals和= =(等于号)的比较) - wlchen - 博客园

Q:可选参数和命名参数(C# 7.2)
A:microsoft

Q:什么是反射;C#如何调用外部动态链接库
A:反射提供描述程序集、模块和类型的对象(Type 类型)。 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问器字段和属性。 如果代码中使用了特性,可以利用反射来访问它们。C#反射实现 - 矜持先森么么哒 - 博客园

Q:线程、进程、协程
A:https://blog.csdn.net/fadbgfnbxb/article/details/88787361
A:线程、进程

Q:协程是什么,如何一帧后执行,如何跳出,如何停止,与C#线程区别? 协程会阻塞吗
A:区别   会,通过一些消耗判断而决定进行多少处理

Q:ref out异同
A:out 和 ref 相同点:它们都是传址的,执行方法后,原来的值都改变了。
      out 和 ref 不同点:1、ref须初始化;out不用初始化。2、退出方法时,所有out参数都必须赋值。

Q:委托是什么,事件是委托吗
A:委托(Delegate) 可以把一个方法作为参数带入另一个方法。委托可以理解为只想函数的指针。
      事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式。 任何其他组件都可以订阅事件,并在事件引发时得到通知。解耦合
      C#中的委托是什么?事件是不是一种委托?_哔哩哔哩_bilibili   
Q:Func,Action,delegate区别
A:C#委托的介绍(delegate、Action、Func、predicate) - @大龙哥 - 博客园

Q:用lambda表达式对List<T>进行排序
A:List<Student> stuList= stu.OrderBy(s=> s.stuNO).ToList<Student>();

Q:dynamic和var
A:dynamic是一种静态类型,类型为 dynamic 的对象会跳过静态类型检查。 var是编译器确定类型

Q: "<<" 和 ">>" 是什么 value << index,并列举‘位运算’在日常开发中的使用场景。
A:位运算计算方式与实例_PA_的博客-CSDN博客_位运算怎么计算

Q:异常处理机制?
A:try - 程序代码块;catch异常处理代码块;finally 无论是否发生异常,均要执行的代码块;

Q:using?
A:using 语句允许程序员指定使用资源的对象应当何时释放资源。为 using 语句提供的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。
        可以在到达 using 语句的末尾时,或者在该语句结束之前引发了异常并且控制权离开语句块时,退出 using 语句。

Q:泛型
A:泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。

Q:多线程的栈
A: 栈一般都是独立的所以线程安全,一般用户不会去手动访问栈,都是操作系统自己管理,堆是线程之间共用的,不然多线程没办法交互就那就没什么意义了
比如有个公共数据比如是所有玩家数据,是个map,new出来就是放在堆里,多线程可以访问它,加个互斥锁就可以线程安全了
 多线程中 堆和栈的区别 - youxin - 博客园

Q:什么是并行、并发,协程和线程可以并行吗?
A:https://www.cnblogs.com/xc-chejj/p/10813692.htm

数据结构和算法

数据结构

Q:C#容器有哪些,底层实现原理,描述使用场景,异同优缺点;
A:优缺点:C#中Array、arrayList、List的优缺点_大牛的征程的博客-CSDN博客

  • 数组:表示一组数据的集合,在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单;数据量长度明确的时候性能比List好。
  • ArrayList:类型不安全,装拆箱性能损耗。
  • List  :最常用的泛型容器,自动扩容的,没有类型安全问题的arraylist,不用装箱拆箱,遍历非常方便;
    如何扩容:先开辟一定空间(默认4),每次添加元素,空间不足则加长长度,然后转移。所以如果清楚长度,最好可以预先开辟好。
    用于:知道容器内放置多少物品,并且需要频繁遍历,更新对象生命周期等时候,比如存放角色对象,子弹对象
  • Dictionary(泛型):Dictionary实现,底层维护2个数组,一个哈希桶(因为会多次取余来寻找 所以叫做hash桶),一个Entry结构数组(里面有hashcode key value count),通过key转hash然后取余对应到entries的index,看里面的hashcode是否对应,不对应再去取余寻找,直到找到结果或者返回null;
    hash算法是补全,然后多次计算,是为了防冲突。拉链法解决冲突,链太长就再hash。
    适用于经常查找的地方,其查询时间复杂度几乎为o(1) ,比如角色内部的某些数据,需要频繁的变化,我们可以根据key vlae的结构获取
  • Queue(泛型):遵循先进先出的队列
  • Stack(泛型):遵循后进先出的栈
  • LinkedList(泛型):链表类型(反序)

Q:排序有哪些 复杂程度 以及算法是否稳定?

A:数据结构常见的八大排序算法(详细整理) - 竹雨听闲 - 博客园

Q:List和Dictionary,增加,插入,删除的时间复杂度
A:常用数据结构及复杂度 - sangmado - 博客园

Q:遍历删除的方式有几种
A:1.for循环遍历Remove  2.RemoveAll  3.Linq

Q:List直接foreach遍历remove可以吗,该怎么做
A:不可以 https://www.cnblogs.com/luyu1993/p/7148765.html ;  Foreach循环中为什么不要进行remove/add操作_OxYGC的博客-CSDN博客_为什么foreach中不能使用remove  for倒叙remove或者continue 或者  Linq

Q:设计一张哈希表,如何解决哈希冲突

Q:一个无序数组,获得第K大的数
A:如何寻找无序数组中的第K大元素? - murphy_gb - 博客园

Q:排行榜如何快速查前1000名
A:跳表 红黑树

Q:什么是动态规划

Q:两个有序数组合一个 怎么排序
A:双指针

Q:用3种方法数组求和

算法题(提示:大佬推荐看《算法导论》,算法题无穷无尽,面算法建议多刷题)

Q:判断线段相交,射线和四边形碰撞是否相交

A:计算几何——快速排斥实验和跨立实验 - TangMoon - 博客园

Q:两个四边形是否相交(给四边形中间点和长宽)
A:如何判断两个矩形相交_wangicter的博客-CSDN博客_两个矩形相交

Q:目标是否在视野范围内
A:1.与目标距离适合 2.目标向量与自身方向法向量的夹角适合

Q:点是否在扇形内,线段是否与椎体相交
A:https://www.geometrictools.com/Documentation/IntersectionLineCone.pdf

Q:怎样判断平面上一个矩形和一个圆形是否有重叠?

Q:任意一条曲线,如何知道两点间曲线长度

Q:移动相关公式,运动给一段线路,初速度为0,然后匀速运动,然后停止,求加速度路程时间;匀速路程时间;和减速路程时间;
A:加速度   a=v/t        路程 ①s=vt  ②s=v0t + ½at^        自由落体  h = ½gt^

Q:问如果碰撞的运动判断超过了碰撞体
A:射线长度和运动下个位置挂钩

Q:当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?
A:隧道效应,物理碰撞可能检测不到。
      建议修改速度或者大小,或者提前发射线检测距离,或者提前算好下一帧位置,手动去检测等

Q:如何判断两个凸多边形是否相交?

Q:判断在前在后?判断在左在右?
A:点乘;叉乘  Unity3D中目标相对自身的前后左右方位判断_Season的博客-CSDN博客
Q:在平面上已知三个点 A(x1, y1) , B(x2, y2) , C(x3, y3) ,如何判断点 C 在向量 AB 的左侧还是右侧?
A:B点-A点=向量AB   C点-A点=向量AC
      通过两向量叉乘得到,ABC所在平面的法向量,判断法向量向上还是向下,判定左侧和右侧

Q:曲线知道哪些

Q:祖玛的球回旋运动公式

Q:斐波那契数列曲线

Q:暗黑二背包算法

框架和设计模式

Q:设计模式有哪些? 说一下应用场景?
A:C#设计模式23    菜鸟教程设计模式

  • 单例模式(略)(所有系统都基本是)
  • 工厂模式 (子弹)工厂模式 | 菜鸟教程
  • 观察者模式:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面 向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。(例如子弹时间?)

Q:MVC、MVP、MVVM框架 区别 
A:MVC  MVP(清晰理解+应用实例)   区别

Q:ECS框架,优点
A:entity component system ①解耦 ②内存cache友好

Q:继承与组合

Q:通用与特殊

Lua

基础(大佬推荐看...)

Q:变量有哪些?
A:nil bool string number function thread table

Q:pairs和ipair区别 for i=1,n do和for ipairs区别?
A:浅析Lua中table的遍历_菜鸟浮出水的技术博客_51CTO博客
 for k,v in pairs(tbtest) do  -----  key的hash值排列的顺序来遍历
 ipairs      ---------   从1开始,ipairs只会从1开始按连续的key顺序遍历到key不连续为止。
 for i=1, #(tbtest) do  --------   从1开始,获取table的长度

Q:元表

Q:newindex

Q:闭包是什么
A:闭包就是能够读取其他函数内部变量的函数。 闭包_百度百科

Q:table是怎么实现既有List特性又有Dictionary特性的?
A:写代码

Q:C#和lua通讯原理
A:压栈进行数据交互 【Lua与C#交互①】Lua中的栈_水曜日鸡的博客-CSDN博客

Q:如果key是string,怎么存进table里
A:直接散列找到桶地址然后遍历桶,找到就修改,找不到就添加

Q:xlua和其他slua,tolua有啥区别,如何选择
A:xLua

Q:Lua会吗,看过源码吗
A:不会,没看过

性能优化

lua:部分常用操作的效率对比及代码优化建议(附测试代码)_Azure丶的博客-CSDN博客_lua 执行效率
Lua性能优化_此处有码的博客-CSDN博客_lua性能优化

网络

Q:帧同步与状态同步的优劣对比
A:【Unity】网络同步方案 帧同步与状态同步_PA_的博客-CSDN博客_unity状态同步

Q:网络层
A:网络层(互联网中的网络层)_百度百科

Q:讲TCP、UDP和HTTP关系和区别
A:TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。

Q:网络信息的信息池

Q:可靠UDP传输原理
A:可靠UDP传输协议总结 - 知乎

Q:TCP的三次握手和四次挥手
A:TCP的三次握手与四次挥手理解及面试题(很全面) - 李卓航 - 博客园

Q:UDP如何保证消息送达?在网络较差时如何处理?UDP如何重传的,如何保证有序的

Q:TCP滑动窗口

Q:scoket链接直接发
A:需要自定义二进制数据的格式和加密、黏包(字节流是无界限的 要去识别有多少个包)、拆包(包太大拆开发,在缓存池等待下个包)那些

Q:Protobuf的结构是怎样的?怎么实现高压缩率(TODO:表述有问题,待修正)
A:Protobuf结构是Tag-Length-Value

Q:MTU
A:IP层的限制

系统

Q:SDK接过吗,是什么?如何使用?

Q:IOS签证和证书了解吗?

Q:安卓与IOS生命周期?

Q:回调方法描述?

Q:Android平台防止反编译。有什么好的解决方案?
A:资源商量里面有这种解决方案

Q:计算机原理是什么
A:百科

-----------------------------------------------------------------------------------------------

总结

对于求职,最好有专研某个方向,能突出自己能力的亮点,但也要有相应的基础。
有工作经验的,只需要把自己做的东西说出来,不一定要求很高的技术深度,但起码要做好、讲清楚。
对于刚毕业的同学,只需要搞好基础,强烈建议多做准备进入一家好点的大点的公司(有免费现磨咖啡下午茶^.^ 开玩笑的,学到东西才是最重要),会让你的学习和工作顺风顺水。

比较好的面试官有一步步的引导解题和给予一定反馈。
面试也是一次试炼,面试完可以多做总结。

面试流程
先简短的自我介绍,
大公司基本上都是问简历上的工作内容实现方案,看有没搞懂,然后看高度和深度,
也会问一下unity基础、C#基础、算法,
有些公司可能会先给笔试甚至机试。

面试的题外话
为什么离职
工作中遇到的困难且如何解决的
看过什么源码
看过什么书
以前担当的角色和业绩
你还有什么问题要问吗
平时如何提升自己的技术和知识水平
是否有关注一些技术网站?比如?
有什么情趣爱好
有什么特长   --   (上个公司游戏联盟比赛冠军,MVP之一,最强adc之一,擅长金克斯,小炮,女枪等爆发型adc,喜欢发育,对线一般,需要有保护的辅助,抗压能力强,即使对面出动一个师的兵力来gank,后期也依然能裤裆掏钱发育起来,可打出成吨输出,收割战场。以上都不行。要说正常的)
为什么选择这里,有在这里长期发展的打算吗
对自己未来职业生涯如何规划

问问题(看自己情况而问)
对自己面试打个分
公司做一些什么技术性的东西
进入做什么项目
进入可以获得什么培养
团队氛围,上班时间,福利情况
给点意见

--------------------end---------------------

【Unity】Unity、C#面试题目记录和解答相关推荐

  1. 【面试题目】2019年中心面试题目记录

    网络上能找到流传出来的中心面试题目记录 大数据是什么? 云计算的理解? 单位涉密应该怎么做? 对于一些名词的解释:拒绝服务攻击.网络冒仿.网络蠕虫.网页恶意代码.木马主机.网络篡改 什么是物联网? 你 ...

  2. 【面试题记录】2020前端秋招笔试面试题目记录

    笔试题记录 1. 空元素 Empty Element (滴滴笔试) 空元素是HTML/SVG里的不可能存在子节点的元素. 个人理解就是:自闭和标签 HTML中的空元素: <br/> < ...

  3. 美团客户端面试题目记录_20210901

    Java: 1. Java三大基本特性理解 1. 封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据 ...

  4. 关于前端开发我所遇到的面试题目记录

    1.var  const let(定义.理解,要会读代码)(一定要明白var a = 10 ;a = 10 之类的代码问题 ,主要是变量作用域和变量提升问题) 2. 箭头函数与普通函数的区别在于: ( ...

  5. Unity客户端开发面试题记录

    Unity客户端开发面试题记录 1.如何理解面向对象思想 A:面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节.面向对象的特征是:封装,继承,多态.多态就是接口的多种不同 ...

  6. Unity发布Android平台错误记录

    Unity发布Android平台错误记录 (1)Cannot parse project property android.enableR8='' of type 'class java.lang.S ...

  7. Unity GPU Instance踩坑记录

    Unity GPU Instance踩坑记录 Unity中GPUInstance主要有两种:一种是unity自动进行的,或者调用Graphics.DrawMeshInstancedIndirect等A ...

  8. POPTEST学员就业面试题目!!!!!

    POPTEST学员就业面试题目!!!!! 下面的题目是神州数码的一位测试总监问过我的学员的面试题目,下面是题目的答案. 题目: 写出一条Sql语句: 取出表A中第31到第40记录(SQLServer, ...

  9. C语言经典面试题目(转的,不过写的的确好!)

    第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一 ...

最新文章

  1. ajax传递参数与controller接收参数映射关系
  2. android 定时打电话教程
  3. 制造业物料清单BOM、智能文档阅读、科学文献影响因子、Celebrated Italian mathematician ZepartzatT Gozinto 与 高津托图...
  4. 结对编程 - 马尔科夫链
  5. 前台JS事件与服务器事件的执行顺序
  6. 矩池云上如何安装nvcc
  7. mysql客户端不支持_MySQL 8.0 - 客户端不支持服务器请求的身份验证协议; 考虑升级MySQL客户端...
  8. SPSS 的安装与概貌-第一章
  9. java mp3剪切_mp3剪切器如何剪切mp3音频文件
  10. Apache的管理优化
  11. [K8S] PV动态供给
  12. Zencart完美程序来了,首个Zencart模板引擎来了
  13. Settings sync 配置与使用
  14. 京东深圳手Q微信事业部测试工程师面试总结
  15. 微信公众号如何分享课件PPT?
  16. 中软国际赴黔参加大数据国际年会,规划产业布局
  17. JDK8-十大新特性-附demo
  18. Compilation error 未完待续
  19. Ubuntu系统安装微信(解决高分辨率屏幕问题及图标显示问题)
  20. Ext Ajax实现的RSS阅读器

热门文章

  1. python3.7和python2.7_Python 2.7 有什么新变化
  2. 任正非的用人之道,这3种人要优先重用,第3种人与常人不同
  3. 陷波滤波器(Notch filter)
  4. 武未转变服务器tp,未转变者怎么tp到别的地方 | 手游网游页游攻略大全
  5. 离开互联网上岸1年后,我后悔了!。。。
  6. mysql密码找回(非常实用)
  7. 专业之旅——GitHub 热点速览 Vol.45
  8. kibana sentinl插件安装使用
  9. 中兴linux下载软件,国产操作系统中兴新支点使用WPS For Linux办公软件的体验报告...
  10. mac电脑的wifi图标不见了怎么调出来?