字节跳动 游戏研发实习生 面经
一面(44min)
C++
- C++常用的stl容器
- vector和list的区别
- vector的扩容
- C++的多态
- 虚表是不是每个对象都有一份
- 虚函数是否能声明为 inline
- 构造函数能否为虚函数
- 智能指针shared_ptr
- 如果让你实现一个shared_ptr, 引用计数会使用什么类型
计算机网络
- 网络模型
- 我们现在进行的视频面试, 描述一下各网络模型各层都做了什么
- TCP和UDP的区别
- 在联机游戏中, 哪些方面使用TCP, 哪些方面使用UDP
- 联机游戏常见的网络同步
- 帧同步和状态同步的区别, 优缺点
操作系统
- 线程与进程
- 游戏一般有哪些线程
- 进程的内存空间
- 虚拟地址和物理地址
项目相关
- 有没有了解NavMesh是如何生成网格的
- A*算法
- 有没有了解过UE中事件驱动的行为树
- 你认为项目中哪个方面做的比较好
其他
- 最近有没有看什么书籍, 学习了什么
- 玩什么游戏
反问
二面(61min)
C++
- C++单继承的对象模型, 多继承呢?
- 介绍一下移动构造函数
- 介绍一下右值引用
- 可执行程序的编译过程
- 链接过程的重定向做了什么
- 动态链接和静态链接
- 可执行文件的结构可执行文件的结构
- 进程的内存空间
- 堆和栈空间的区别
- 移动栈顶指针的系统调用是什么
- 两个进程同时操作一个数据可能会发生什么
- C++的智能指针有几种, 分别有什么作用
- C++有几种类型转换cast, 分别有什么作用
数据结构
- vector和list有什么区别
- 空间局部性原理
- 堆的数据结构完全二叉树
- 描述一下堆排序, 它的时间复杂度是多少
- map和unordered_map的区别
- 哈希表的实现原理
计算机网络
- 网络模型
- 传输层有什么协议
- TCP为什么连接时要进行三次握手
- 介绍一下read和recv系统调用
- IO多路复用
操作系统
- 进程和线程
- 线程的调度算法
- 进程有哪些状态, 这些状态是怎么转换
- 什么情况下线程不会进入Ready状态
linux
- 有没有接触过linux
- 了解linux内核吗
- 知道linux的vfs(虚拟文件系统)吗
python
- pythonGC的作用, 介绍一下python的GC
- python是如何实现动态类型的
算法题
- 给定一个完全二叉树, 判断其结点数量与k的关系(大于/小于)
要求: 时间复杂度
解: 将结点依次编号, 当前结点(假设编号为m)的父节点的编号可以算出为(m/2) 假如这颗完全二叉树有k个结点, 那么k/2可以得出父节点的编号. 再不断除2直到根节点. 此时得到了一条从根节点通往第k个结点的路径, 从根节点沿着该路径寻找. 如果找到编号为k的结点说明树的结点数量大于等于k, 如果没有找到编号为k的结点说明结点数量小于k
项目
- 行为树
反问
二面凉
这种 游戏研发 的岗位一般都是不分客户端和服务端的,计网相关的内容会比较深入。二面的时候比较深入的计网内容和linux内容都不会,python也了解的不是很深。
#面经##游戏客户端##暑期实习##游戏研发实习##字节跳动#