当前位置: 首页 > 面试经验 >

字节跳动 一、二、三、四面 提前批 凉经

优质
小牛编辑
105浏览
2023-03-28

字节跳动 一、二、三、四面 提前批 凉经

游戏客户端开发工程师-朝夕光年面试复盘

一面 (44 min)

自我介绍

项目提问

  • 讲述项目难点以及实现细节。

大概分为三个部分:

  1. 比如说你攀爬这个边缘,用的是什么方法进行的一个检测。
  2. 检测到了最后是怎么将这些数据和动画进行一个交互以及动画怎么进行一个实现的。
  3. 是使用的movement还是使用的rootmotion来驱动这个动画进行一个移动。
  • 这个项目支持网络同步吗?

项目中动态物体实现部分:

  • 你为什么不使用物理查询来判断人物周边有没有可攀爬的物体呢?

项目演示部分结束后:

  • 介绍一下你对UE4了解的比较深的部分。

C++ 基础问题

  • 介绍一下虚函数的作用和原理。
  • 使用虚函数会产生什么副作用?
  • 有没有什么办法能够解决虚函数表空间浪费的这个问题呢?

(使用奇异递归模板)

  • 你能说一下C++的内存模型吗?
  • 有没有什么方法能够很方便、快速的定位到发生内存错误的地方,比如说野指针、内存泄漏这些问题。

PS:大多数人都会有自己的一套内存管理机制,来防止内存泄漏的一些问题。(差不多就是使用STL的内存管理机制来进行进一步的管理。)

  • 讲讲STL的内存管理机制。

刚刚你讲了很多,其实仔细思考一下就可以解决上面我问的问题,一般来说的话,大多数人都会构建一套自己的内存分配机制,这样的话能够对自己的内存有个合理的利用,不仅仅是内存的一个合理利用,更关键的是能够很好的解决CPU cache miss的一个问题,因为cache miss 的这个问题是非常影响性能的,尤其在一些游戏端的设备上。

其实还有的方法就是用智能指针、使用最新的编译器系统,比如说像GCC这种,就是更加偏向于底层了,事件发生的时候能够第一时间检测到访问错误的地方,而不会让这个崩溃产生第二现场,导致无法找到根本的原因。

  • C++11 有哪些新特性?

反问环节

  • 您可以对我之后如何继续学渲染提一些建议吗?

看虚幻源码,俗话说的好,纸上得来终觉浅。学习编程的话还是需要进行一个实际的落地,而学习虚幻源码就是一个很好的途径,对源码中的东西进行一个反复的思考。像很多东西从0到1写是不太可能的,所以需要先看懂现有的一些东西,然后再对他不合理的地方进行修改,其实工作到了一定年限,就会知道,发现问题比解决问题更重要。发现问题之后,问题就能解决,但是大多情况下就是发现不了问题。为什么发现不了问题呢,就是理论知识有些欠缺,看的东西少了。如果真正的是从0到1开始搞的话,其实就是写论文,意义不大。其实大部分大家都没有这样,更关键的是如何将现有的工程和其他工程的其他模块的东西融合在一起,做一个比较好的贴合。

二面 (83 min)

自我介绍

项目提问

  • 说一下ALS系统的架构吧。
  • Mesh Space 和 Local Space 之间的区别。
  • 讲讲 speed warping 、distance matching。
  • UE 的网络同步有哪些方式?

[值同步、RPC]

  • 骨骼IK 具体实现原理
  • 有了解过IK RIG吗?
  • 遇到了哪些 IK 方面的问题?怎么去解决的?

[比如说运行过程中骨骼链拉伸过长,导致IK 出现问题]

  • 脚步IK 中脚抬多高,你是怎么计算的?(比如说爬楼梯,右脚应该抬多高?)

算法题

234. 回文链表

PS : 写题目的时候不能直接就开始做,就算遇到了之前做过的题目,也要从零开始分析,和面试官进行沟通,然后一步一步的向自己心中的那个最优解推进。

C++ 基础问题

  • 虚函数的实现原理
  • 虚函数表里面会记录哪些函数地址?

普通函数会在虚表里面吗?

  • 虚表指针是所有实例共用的还是每个实例各自有的?
  • 构造函数和析构函数里面可不可以调用虚函数?
  • 如果在析构函数中调用delete this 会有什么结果?

会爆栈。

  • new delete malloc free 之间有什么区别?

PS : 在面试官换问题的时候,需要想想他为什么会切换到这个问题来,目的是什么,只有考虑到了这个因素,才能更好的去回答面试官的问题。

  • delete 和 delete[] 的区别?
  • 堆和自由存储区的区别是什么?在物理地址上是一样的吗?什么时候不一样。
  • 如何在main 函数之前执行一段代码,并且在main 函数之后再执行一次这个代码。

反问环节

  • ……

三面 (40 min)

自我介绍

人生价值观方面

  • 我看你简历上写了很多方面,有前端、动画程序、TA、引擎这些,你有没有想过你到底是想做什么?
  • 能告诉我你为什么要走游戏开发道路吗?(抛开专业方面的东西。)

是为了满足自己的虚荣心吗?

做游戏是要带一些虚荣心的,像那些日本的游戏设计师,他们的虚荣心都很强,比如说像宫崎英高的魂系列游戏,他做魂的时候基本上不考虑别人的感受,他是完全表达自己的想法的,让玩家按照他的想法去玩,玩完之后还说他做的游戏好,这就是一种虚荣心的表现。

反问环节

  • ……

很多时候天赋还需要锻炼、不断学习,什么东西是天赋呢,就是你对游戏的理解。

  • 面试官:在这个世界上,做任何事情都不带目的吗? 还是说在这个世界上做任何事情都是带目的的?

面试官:其实在大部分的情况下,人都是带目的的,你不带目的做的事情,基本上做的都不会很好。目的有反向的有正向的,只不过很多的时候一些目的变成潜意识了,就好比你今天为什么要和我面试,你的目的是为了得到一份工作,或者说是在毕业之后我要怎么交流。再简单点,人为什么要吃饭,因为你要摄取能量,能量就是你的目的,所以做事情大部分时候都是带目的的。

其实很多时候,你在做这个职业的时候需要喜欢这个职业,这是第一个,第二个就是你玩动作游戏的目的是为了让你的职业技能或者让你游戏技能变的更好,这个目的是正向的,我觉得正向的目的都是有价值的,因为他没有让你去害别人。

你选择的这个方向其实挺辛苦的,做程序员其实没有他们想的那么简单,坐在那里码一天代码你就能一直做下去,其实不是的。
对于一个好的程序来说,他首先是一个程序热爱者,他喜欢玩游戏,他才去做,他有自己的表达欲,想把自己的想法表达出来,所以他必须要在技术上有磨练,他需要和别人有合作,所以他必须要花时间来玩游戏。

哈哈哈,上学的时候你们可能不觉得,上班之后就会觉得挺苦的,因为你要抽时间玩游戏,抽时间学技术。

四面 (大概一个小时)

聊了一些生活方面的东西。

结尾

回答问题不是你想怎么回答就怎么回答,你需要对面试官提出的问题进行一个分析。
首先想清楚他为什么要这么问;
然后对该知识点进行一个概括性的回答(不要太着急,语速放慢);
接下来对自己的讲的内容进行一个详略的解释。(注意是详略,需要时刻知道问题是什么,对一些地方进行详细的讲解,对一些地方简单的说一下。)

二面就感觉寄了,没有答好,但是字节还是给了我体验后面两面的机会,非常开心。字节面试体验非常的好,就是享受!!!!学到了很多东西!
对于这次面试我也针对性的深入理解了一些知识点,希望能帮到大家:
C++ 实现shared_ptr 智能指针
C++ 虚函数

目前还是没有找到工作,害,希望有朋友能够帮忙推荐一下,游戏客户端开发方向。

有没有和我同一个方向的同学呀!私聊加个联系方式沟通沟通呗,找工作找了好久了,希望能有大佬带带路。(●'◡'●)。

#字节跳动##朝夕光年##字节跳动秋招提前批##游戏客户端开发工程师##2023秋招#
 类似资料: