字节朝夕光年-游戏客户端开发实习-一二三面面经
我用过 Unity和 UE4,其中对UE4相对更了解一些。熟悉的语言是 C++。
一面
先做自我介绍,之后依次问了C++、操作系统、网络、游戏引擎相关基础问题。
最后做了一道数学题和一道编程题。
C++:
- 虚函数。
- 构造函数和析构函数是否可以是虚函数。
- 纯虚函数。
- vptr。
- 用过哪些模板类。
- 这些模板类的迭代器有什么区别。
- 右值引用及其使用场景。
- 智能指针有哪些,分别介绍一下。
- weak_ptr的应用场景。
- 智能指针的计数器是放在哪的。
- 用make_shared创建对象和直接定义shared_ptr有什么区别。
- 默认拷贝构造函数的原理。
- 什么情况需要自定义拷贝构造函数。
- 由于13没答出来,面试官提示说如果成员变量中有指针,调用默认拷贝构造函数会产生什么问题。
C#:
- 引用变量和值变量。
- 装箱和拆箱。
面试官发现了我不擅长C#,于是进入了下一part。
操作系统:
- 进程的状态。
- 中断有哪些。
- 内核态和用户态。
- 内核态拥有哪些用户态没有的权限。
网络:
- TCP与UDP。
- TCP的拥塞控制机制。
UE4:
- 你的项目中实现拾枪、换弹时是怎么实现动画切换的。
- 动画蓝图状态机。
数学题:
- 怎么计算空间中的两条异面直线间的距离。
手撕代码:
- LeetCode 239 滑动窗口最大值(https://leetcode-cn.com/problems/sliding-window-maximum/)。用单调队列,复杂度O(n)。
一面结束后的第三天接到电话约了二面。
二面
仍然是先进行自我介绍。这次和一面不同,都是开放题。面试官会抛出一个问题让你考虑,然后再根据你的回答提出进一步的问题。
话题主要是以下四个:
- 如何设计实现UDP的可靠化。
- new的底层实现,堆内存的空间分配和碎片管理。
- 给一个数组,如何公平且随机地对其重新排列。
- 手撕代码。给n件商品的价格(每个商品只有一件),和一个价格阈值m,找到使购买价格大于m且最小的购买方案。
最后是反问环节。结束。
二面结束后二十分钟就接到电话约了三面,效率极高。
三面
自我介绍后,先是问了一些项目的具体细节,然后开始编程和问答。
- 实现一个进程安全的智能指针类。(忘了mutex的用法,所以没有实现进程安全)
- 对一个结构复杂的模型,如何实现碰撞检测。(没答上来)
- 如何实现一个俄罗斯方块游戏。
最后,面试官问了一些轻松的问题。比如平时看什么书,平时学习技术的途径。
反问。
三面比较时间比较短,只面了半个多小时。自我感觉答得不太好,但还是希望能过。
三面结束后的第二天收到消息约了HR面。
HR面已过。
#实习##面经##游戏客户端开发工程师##字节跳动#