2025秋招友塔游戏游戏开发工程师2025秋招-上海友塔网络科技有限公司-游戏开发工程师。2024-09-13 投递简历。2024-09-19 技术笔试。考试时间:120分钟,考试内容:4道编程题。第1题,15分,难度简单。我们可以使用正多边形的周长除以对角顶点长度来近似求π,假设中心点到正多边形顶点的距离为r,正多边形的周长为L,则近似的π=L/(2*r)。请根据输入的正多边形边数(2的正整数次幂,如8,16),输出对应正多边形计算后的π值。注意:不可使用sin,cos等三角函数。解法:使用数学几何方法。第2题,25分,难度中等。游戏中玩家可以抓捕宠物,宠物有三个属性,攻击、防御和生命,且每个宠物有一个评分(三个属性和评分均为整数,且各项资质均不会低于1)。若已知评分=攻击*攻击评分系数+防御*防御评分系数+生命*生命评分系数。我们无法获知这几个系数的值,但我们知道同一种宠物的各系数都是相同的,且我们有2只此种宠物的攻防生命属性和评分信息,请根据这2只宠物的信息计算并输出此种类特定攻防生命属性的宠物的评分应该是多少,若无法确定,请输出0。(输入输出数据均为整数)。解法:使用数学线性代数方法。第3题,25分,难度中等。假设N*N的地图上有一片连续的特殊地形(比如水面),在A[N][N]的二维数组中,每个坐标(i, j)表示地图上的一个小格子,整张大地图由大量的小格子拼成,A[i][j]值为-1表示坐标(i, j)对应的小格是水面的组成部分(可以是与陆地的交接处,即格子的一部分为水面),现在要求特殊地形每个格子以如下图的编号来表示其拼图素材:地形中间没有与其他地形有边界的纯水部分用编号0表示,上、右、下、左与陆地的边界分别以编号1、2、3、4表示,四种凸角(水面占据的角度为90度的转角)分别以编号5、6、7、8表示,四种凹角(水面占据的角度为270度的转角)分别以9、10、11、12表示,输入数组A,将A中值为-1的部分全部替换为实际的图形编号(即0-12)并输出(A中的陆地值假设为-2)。解法:遍历地图,根据周围地形的情况确定编号。第4题,35分,难度困难。某游戏中每个玩家有一个战斗力(玩家不可见),且有多个服务器,服务器间的玩家只能通过部分跨服活动才能与其他服务器的玩家战斗。由于随机分组等原因,并不是所有服务器的玩家都能相互见过。已知玩家间战斗结果仅与战斗力相关,且玩家能从战斗结果中得知双方战力的准确差值。玩家通过交流汇总了部分玩家间的战斗结果,需要根据已有的战斗结果来判断一些对玩家战力差值的猜测是否正确,输出正确猜测的数量即可。若无法判断则当做不正确。由于玩家间交流难免出现错误,如果出现了和已有条件冲突的记录,则以更早出现的为准。设记录和预测涉及的玩家总数为 N。N小于等于10000。解法:利用战斗结果构建图,利用并查集合并图,使用DFS计算路径边权和。2024-09-26 面试邀约,邮件面试邀请2024-09-29 14:00,填写应聘登记表。2024-09-29 技术一面,友塔游戏,游戏开发工程师,面试时长60分钟。1.自我介绍。2.你是怎么想到投软件开发岗位的?3.介绍岗位,游戏开发三个方向:客户端(UE,Unity)、服务端(Linux,SQL)、渲染(Shader)。4.你玩过哪些类型的游戏?5.已知三个点组成一个三角形,现在有一个新的点,如何判断新的点是否在三角形里面?设已知ABC,新点为P,向量AP分别叉乘AB,AC,如果叉乘后的向量方向相反,说明点P在角A内部,同样的可以验证P在角B和角C内部。6.向量叉乘的含义是什么?a和b作叉乘得到c,c的方向垂直于a和b所在的平面,c的模等于a和b构成平行四边形的面积。7.有n个点依次构成一个可能是凹的多边形,如何判断任意点是否在多边形内部?射线法:从测试点向任意方向发射一条射线,并计算射线与多边形边的交点数量。如果交点数量为奇数,则测试点在多边形内部;如果为偶数,则在多边形外部。8.你是怎么想到这个方法的?无穷远处肯定在图形外,交点就代表要么进入图形,要么走出图形,所以奇数次代表在图形内,偶数次代表在图形外。9.再重复一下你玩过的游戏。10.在回合制卡牌游戏中,设计一个对局回放功能系统。记录每回合的初始状态,记录玩家操作,记录随机结果,回放时再渲染。11.有没有可以不记录随机结果的方法。可以直接记录随机种子,计算出的随机结果是一致的。12.如何利用数据库存储会过期的游戏道具?每个道具对应一个主键,并维护一个过期时间,每次更新数据时,检查是否过期,如果过期则删除这条数据。13.设定为100人对局,如果已经匹配了99人,此时有10人进入匹配,如何确保对局人数不超过100人?维护一个匹配池,记录匹配中玩家的数量,如果数量超过100,则根据优先级选择玩家进入对局。14.你有参加过acm、oi训练吗?开始手撕算法。15.有一列n个数字a[1]到a[n],衰减常数c取值为0~1,可以在数列中选取任意数字,但顺序不能变,组成新的数列b[1]到b[k],求b[1]+b[2]*c+b[3]*c^2+...+b[k]*c^(k-1)的最大值。首先a[n]必选,然后考虑a[n-1]+a[n]*c和a[n]哪个大,决定是否选取a[n-1],同样的方式考虑a[n-2]+(...)*c和(...)哪个大,决定是否选取a[n-2],以此类推。开始反问。16.您刚才说的客户端、服务器和渲染三个方向,公司会如何安排新人定岗?面试官:客户端岗位属于游戏开发的核心岗位,可以和服务端和渲染对接。公司会根据新人的学习和兴趣情况决定。2024-10-10 邮件邀约,技术终面,面试时间:2024-10-12 15:00-16:00,远程面试。2024-10-12 技术终面,友塔游戏,游戏开发工程师,面试时长:60分钟。1.为什么选择游戏开发岗位?2.喜欢玩什么类型的游戏?最近在玩哪些游戏?喜欢二次元吗?开始复盘笔试编程题目。3.三个未知数,两个方程,可能有解吗?可以尝试将两个未知数合并成一个未知数。4.记录玩家战力差值,并预测战斗结果。使用并查集构建玩家战力图。5.学过计算机相关课程吗?常见的数据结构有哪些?数组、链表、栈、队列、哈希表、树、图、集合等。6.浮点数编码方式是什么?最大能表示的数字是多少?指数(阶码)+尾数,最大2的127次方。7.计算机中为什么除法比乘法慢?商是试出来的。8.从按下开机键到系统启动有哪些步骤?电源供应,BIOS/UEFI初始化(硬件自检),加载引导程序(Bootloader MBR/GPT),加载操作系统内核,启动系统服务,进入用户界面。9.操作系统是不是一个进程?操作系统不是一个进程,它负责管理和调度进程。10.进程和线程有什么区别?进程是操作系统分配资源的基本单位,线程是CPU调度的基本单位。11.Linux里面当内存不足时,系统会触发什么操作?默认杀死内存占用最大的进程。12.有什么情况能触发内存不足?进程占用,进程过多,内存泄露,恶意病毒,内存碎片化。13.系统内存剩余2G,申请200M内存报出内存不足,为什么?内存碎片化。14.Linux系统管理内存的核心思想是什么?虚拟内存(地址映射,页面置换),内存管理(页表,回收,压缩)等。15.如何利用C++中的socket库实现客户端和服务端的连接?有哪些过程?函数需要哪些参数?创建套接字、绑定地址(仅服务端)、监听连接请求(仅服务端)、接受连接(仅服务端)、连接到服务器(仅客户端)、发送和接收数据,以及关闭连接。套接字:连接协议、本机/远程的IP/进程端口号。函数参数:地址族、套接字类型、网络字节序、连接请求队列的最大长度、数据通信缓冲区等。16.如何与数据库建立连接?数据库URL、用户名、密码等。17.udp的使用场景。视频直播、语音通话、在线游戏,实时性要求较高。18.udp比tcp快多少?可以量化吗?为什么会快?udp不需要建立连接,tcp需要三次握手建立连接。udp无确认和重传机制,tcp有序列号,确认应答和重传机制。19.tcp和udp的传输次数上有什么区别?tcp数据包较小,传输次数多,udp数据包较大,传输次数少。开始手撕算法。20.有一个4*4*4的立方区域,共有64个位置可以放置小立方体,小立方体组成三维结构,已知三维结构的三视图,求满足三视图的三维结构最少需要多少个小立方体。例:如果三视图为全满,每个都是16个,则需要16个小立方体。如果三视图为16、16、15,则需要17个小立方体。解法:遍历空间每个位置,若在三视图中均存在,且对应投影线上没有放置小立方体,则放置小立方体。开始反问。1.游戏开发团队的规模如何?一个卡牌游戏有30-40人开发,一个开放世界游戏有更多开发人员。