10.10 tap4fun 游戏客户端 一面70min
  1.自我介绍 
   2.上来直接问项目,自己做的游戏demo(UE4),要详细说明 
   答: 
   Character类 
       摄像机
 
           弹簧臂,相机
 
           遇到的问题:移动摄像机中bUseControllerRotaionYaw
 
       输入控制(移动,攻击)
 
           PlayerInputComponent->BindAxis 
           PlayerInputComponent->BindAction
 
   子弹Base类 
       移动组件、碰撞体/碰撞逻辑、音效、粒子效果
 
       与Character是组合的关系,Character要发射子弹
 
       爆炸、碰撞逻辑(OnBeginOverlap) 
   游戏AI 
       UE中的AI行为树,selector、sequence、EQS、Decorater,举了一个生活中的例子来说明。 
   子弹是怎么生成的? 
   1.PlayerInputComponent->BindAction("PrimaryAttack", IE_Pressed, this, &ASCharacter::PrimaryAttack); 
   2.void ASCharacter::PrimaryAttack() 
   3.void ASCharacter::PrimaryAttack_TimeElapsed() 
   4.void ASCharacter::SpawnProjectile(TSubclassOf<AActor> ClassToSpawn);在这个函数中:
 
       设置子弹发射的Socket位置;
 
       设置子弹碰撞体大小;
 
       设置子弹发射的飞行距离(起始位置+单位方向×5000),如果碰撞到了某物体则重点就是碰撞点
 
       调用GetWorld()->SpawnActor<AActor> 
   子弹会一直存在吗?有没有做缓存? 
   1.这里只答了子弹在碰撞后的触发事件后,会调用Destroy,至于缓存,不了解。。 
   那如果子弹没有碰撞呢,会不会不会销毁? 
   你刚才关于摄像机说了挺多,那你能说一下怎样去把一个3D场景中的元素投影到2D屏幕中的?(渲染管线) 
   简单说一说你做的光线追踪渲染器?概念了解多深?与其他渲染方法的区别?这个光追概念提出了很久了,为什么近几年才开始使用?(硬核。。) 
   1.首先答了光追原理 
   2.然后答了Ray Tracing的如何受限于硬件(其实是瞎答的) 
   3.然后答了Path Tracing,从算法上的提高(也是瞎答的) 
   4.最后总结说受限于硬件和软件算法层面,最近几年才得以广泛应用(。。。) 
   继续回到你做的游戏,CS玩过没?FPS游戏子弹穿墙的bug是什么原因?(不知道) 
   1.答了碰撞体大小,可能大于墙的厚度,然后碰到墙后面的玩家(应该是不对的,毕竟敌人可以离墙很远) 
   问:那你怎么去解决? 
   答:可以调整一下墙的碰撞体积 
   问:那这样会不会使得墙碰撞体积过于厚了 
   答:那从碰撞顺序入手,只进行第一次碰撞逻辑,就停止执行碰撞逻辑。 
   问:那你这样的话,有很多情况下是没有第一次碰撞逻辑的,这下怎么办? 
   答:。。。一般在地图里,子弹射程肯定是在地图范围内的,除非向天上打一枪。。或者从射线检测方法入手,比如从枪口发一个射线,碰到墙体就结束,这种思路。 
   数学建模说一说?做了什么题目,什么思路?(这我是真没想到的,,,都4年过去了,早忘了,当年保研面试都没老师问过这个。。。) 
   3.C++ 
   除了C++用过别的语言吗?C++STL数据结构的底层实现原理,功能对比。 
   vector、list、deque、map和set、unordered_map和unordered_set、stack、queue。能说的都说了。 
   那平时哪个数据结构用的多一些?为什么? 
   C++11的新特性? 
   能说的都说了。 
   C++的try和catch的怎么实现的? 
   不知道,可能是底层是if-else这种吧,后来面试官说是顺便问一嘴。 
   讲讲C++内存管理 
   说了new/delete,答了operator new、placement new、malloc、brk/mmap,构造函数,最后返回指针。 
   说了C++内存分区 
   怎么知道需要释放多少内存?free的时候。 
   C++11的智能指针说一说。并且设计到内存管理这块现在很多语言比如Java和C#,都GC机制,针对这些你有没有研究过。 
   1.答了各种指针,还有shared_ptr机制和循环引用问题 
   2.答了UE的GC(标记-清扫算法) 
   做过网络编程吗?游戏中有用网络的功能吗(没有,只了解基础知识) 
   设计模式用过哪些? 
   答了单例(懒汉式、饿汉式)、工厂(NewObject)、观察者(MVC,UE4中的多播委托),举了UE中的实际应用。(其实只说了大概,因为自己没有手动实现过) 
   算法题:大数相乘。 
   答了A*b这种形式,就是手动模拟竖式的方法。但是问的是均超过long long的范围。 
   问:那你这样会有很多开销啊,有没有其他的思路 
   答:(想了半天,记得有个中国剩余定理,但是细节也忘记了)其他的不知道了。 
   在学习和生活中有没有遇到比较困难的问题?怎么去解决的? 
   反问环节。 
   十一前因为受伤推迟到了十一后。 
   总体感觉稍微难一些,但问的都是简历上的东西。比较奇怪的是竟然问了本科水的不能再水的数学建模。。。而且也米有问实习经历。而且场景题问了好多。 
   具体自己可能做的游戏demo扣的不深,有很多地方说的有些牵强,还是需要打磨一些。 
   希望能有后续吧。。 
 
