游戏工程师面试经历
游戏相关
1、登陆流程校验
①账号验证(HTTP请求);
②与服务器建立连接(Socket);
③校验CDN服是否需要更新;
④加载游戏资源,进入游戏;
2、缓存
缓存的意思就是数据库表的数据会在缓存里存一份。数据表的数据是存在硬盘,缓存的数据是存在内存的。缓存读起来更快。第一次读如果没有的话就会去访问数据库的数据并把数据写入缓存。
游戏开发中,所有被读到的数据都会在内存存一份。当数据发生变化时,先更新缓存的数据,然后标注这个数据被改过,当一定时间过后(定时),统一把标注修改的数据更新到数据库表中。
过程中碰到的问题:游戏宕机,缓存修改的数据未修改到数据表;数据还没到缓存,战斗服挂了;解决方案:补偿;
3、服务器分配
我们的游戏一共有12个服务器,其中2个服为登录服。1个服为缓存服,专门缓存玩家数据,包括角色信息、道具信息、经济等。一个服务器可以容纳2500人,当超过人数时会换服。
专项测试相关
1、性能测试
①CPU:主要与DrawCall相关。
DrawCall定义:每次引擎准备好数据并通知GPU的过程称为一次DrawCall。每渲染一次物体,CPU都会调用一次底层图形接口。
DrawCall优化:使用DrawCall Batching,描绘调用批处理;把纹理打包成图集,减少材质的使用;尽量少的使用反光、阴影;
②GPU:
优化:减少顶点数量,简化计算负责度;压缩图片,以适应显存带宽。
③内存:
内存分配:Unity3D内部需要的内存,包括资源及引擎内部逻辑需要的内存;Mono托管内存;程序自己引入的DLL内存;
内存泄露:用户加载后的资源进行储存,更换场景时,没有被清除。
资源冗余:内存中存在两份甚至多份同样的资源。可能原因:打包问题、实例化问题。
C++相关
1、多态
字面意思“多种形态”,即一个接口,多种实现。
2、static用法
3、虚函数表
Shell相关
Python相关
1、概念问题
tuple(元祖):元祖不可变。
list(列表):处理一组有序项目的数据结构。添加(append)、删除(del)、排序(sort)。
dict(字典):键、值。
set(集合):无序不重复元素集。
数据结构算法相关
1、递归计算1+2+3+...+n的和
1 int sum(int n) { 2 if (n == 1){ 3 return n; 4 } 5 else { 6 return n + sum(n-1); 7 } 8 }
综合相关
1、假设你作为测试主管,怎样进行任务分配
确定工作内容(功能测试+专项测试)——讨论和评估工作内容——制定测试计划——分配工作内容——及时监督把控。