IEG LightSpeed Game Client Development Daily Internship First Round Failure
光子工作室群-游戏客户端开发日常实习一面凉经
问题
Q:先简单介绍一下自己好吗
A:面试官您好,我是来自深圳大学 27 届的某某,我的专业是电子信息工程,我目前是大二在读,然后在一家主营业务是海外网文平台的公司做后端开发的实习生,然后我自己也参加了清华大学人机交互实验室的远程实习项目,在里面主要是做心理学和游戏开发相关的东西,然后我自己目前的话也有一个独立游戏正在早期开发阶段,大概情况就是这样
Q:你刚刚讲的这些简历上没有看到啊,你现在是在另外一家公司实习是吗?
A:对的
Q:具体做的工作内容是什么?
A:是后端开发相关的,因为这个岗位是游戏客户端开发嘛,所以没有在简历上面写
Q:后端开发是吧?可以给我描述一下你的具体工作内容吗,后端开发是做哪些内容,游戏相关的吗也是?
A:额不是的,公司那边主要的业务的海外网文平台,然后主要业务是用 php 来开发的,我主要的工作是维护公司的一个是后台管理的一个系统,另一个就是这个网文平台的主系统,日常主要是修改接口写新接口,然后跟前端的同事去对接或者是做数据库相关的一些工作
Q:嗯,那你做这份工作,你觉得对你做游戏开发有什么帮助吗?
A:主要还是让我能获得后端开发的一些企业级的经验吧,因为其实游戏开发也会涉及到,就是如果做网络或联机相关的,也会涉及到后端的一些东西嘛,然后这个实习能让我获得企业级开发的这种经验,然后能让我在,比如后续我想开发自己的项目,我想做联机的话,那可能能够给我提供一些经验
Q:实习多久了?
A:实习到现在应该是有两个月,是二月底入职的
Q:你刚刚说的清华大学人机交互实验室的那个项目是做什么的呢?
A:是做心理学和游戏开发相关的,他们主要是跟地方的这种,比如说共青团或者党的这种,去做一个心理学的早期干预,是以游戏的形式来呈现的,因为像心理它,因为我们比较常规的测量方式可能是做一些量表,做一些测试,那可能比如一些初中生或者小学生,他对这种形式感到陌生或者这个量表对他的效果不是很好,他们目前考虑的就是来把这个量表游戏化,来实现这个早期的心理干预什么的,或者是这种智力检测之类的
Q:那你目前已经有一份实习工作了,这个又是线上实习的,那你的时间是怎么分配的呢?
A:我目前是周一周二周五是去线下实习,所以这个远程实习也是有充足的时间让我去做相关工作的,然后我目前主要是周三周四以及周末的时间,因为他这个远程实习并没有严格的比如说打卡或者是时间限制,基本上是以工作量来判断的,只要你工作量做好了然后对接完了就基本上时间是比较自由的,所以时间分配这方面我目前还是没什么问题的
Q:那咱们这边是日常实习生,对时间的要求可能会多一些
A:这个的话因为日常实习嘛,我肯定先把后端的那个辞了,然后远程实习那边我就自己用实习后的时间去跟那边对接就好了,或者是看这边咱们日常实习确实是时间比较紧然后工作任务比较多的话,那我可能也会考虑把那边的辞掉,因为那边他们目前就是毕竟是涉及到跟共青团对接方面的嘛,进度可能不会像企业这种推的非常快
Q:如果你可以过来这边实习的话,什么时候可以开始,然后实习的时间是多久
A:如果我能去实习的话我是可以尽快入职的,只要我把我那边后端实习的给辞掉嘛,然后我是能够实习三个月及以上的,因为后面马上就要大三了嘛,时间也是比较充裕的
Q:那你现在没有什么课吗?
A:因为我是在一个那种特色班里面,我们的课是一方面你可以去跟老师说我想要提前去实习,想要往就业方向走,老师也会理解,然后可以走一些免听的渠道,只用交一些作业然后期末去考试这种,或者是可以协调时间到晚上再去上课这种
Q:ok,那跟我具体讲一下你这上面写的两个项目吧,一个是逆时巫师,一个是月华
A:嗯嗯,逆时巫师主要是我在高中阶段我是我们学校桌游社的社长,所以我们是做了一款桌游出来,它并没有涉及到技术相关的,它可能更多的还是游戏策划相关以及桌游方面的实现,如果您感兴趣我可以再多介绍
然后月华的话是我目前自己在独立开发的一款卡牌游戏,我主要是把它分成单机版和联机版,目前是处于早期开发阶段,我是以这个月相变化为基础灵感,像月亮它会有阴晴圆缺嘛,然后就以它的一个月相的变化作为核心的机制,来通过一套规则来实现某种计分上面的,就是通过打出不同组合的月相,可以获取一定的分数,然后这个分数呢可以用来竞速也可以用来跑分,就是我把联机版和单机版做了区分
然后联机版这边呢主要是用 go 来写的后端服务器,然后前端是用 react 那一套来写的,然后单机版目前是在用虚幻五开发,但是进度可能还是没有那么快
稍微有点嘴瓢口齿不清👉👈
Q:你做的这个游戏它有目前市面上现有游戏的一个模板吗,就是你是照着什么来做的?
A:嗯我没有照着,因为目前市面上有一些比较经典的卡牌游戏嘛,比如说杀戮尖塔,这种比较经典的肉鸽卡牌游戏,它的一些游戏机制我可能会借鉴融合到我目前的游戏项目里面,或者说像比较经典的一些桌游机制,就是像牌组构建去管理自己的牌库这种玩法,可能我会借鉴一些比较经典的桌游比如说冲向黄金城,以及我自己做的逆时巫师其实也是,就是通过融合目前市面上比较多的经典的玩法,把它融到一起,但它并没有说我完全去照搬某一款游戏,我不会只用某个游戏的某一个机制
感觉其实应该往技术方面回答而不是策略方面
Q:ok,这款游戏的 UI 是用什么开发的?
A:UI 目前就是用虚幻五以及前端的 react 框架来开发的
Q:嗯,你在做这个游戏的时候,中间会遇到什么技术上的难题吗?然后是怎么把它去攻克掉的?
A:技术难题我觉得目前最主要是前段时间有一个那个做同步相关的,就是因为这个是用 go 编写的嘛,因为我本身是从 C++ 出身的,所以我一开始有考虑去用 C++ 写这个后端网络,然后也有看到虚幻五它本身这个引擎有一些后端网络联机相关的支持嘛,但是后面看到因为 C++ 它本身可能对于后端的服务器来说还是相对重一些,然后部署起来也没有那么方便吧,所以说就用 go 的 websocket 还有它的 protobuf 自己去实现了一套基于状态同步的同步机制
其他的话因为像虚幻五它本身的学习成本会比较大,我自己又主要是自学,所以可能对于一开始的蓝图以及 C++ 对蓝图暴露的一些接口这种的,可能早期我会感觉到比较,就是不知道该如何下手吧,不知道该怎么学,虽然说这个问题目前也稍微有一些,但我目前主要是通过看他们的官方文档然后以及看一些视频来解决的,所以说目前虚幻五也还是在边用边学的过程中
感觉有点跑偏了,应该重点说同步是如何实现的,以及为什么同步是技术难题,并且也没有重点回答是如何攻克的
Q:嗯,你刚刚说你这个还没有实现联机是吗?
A:嗯也不能说还没有实现吧,就是还没有实际部署,只是我自己有写然后我自己在本地有跑过
Q:我刚刚听你说是用的状态同步是吧,那状态同步,就比较一下状态同步和帧同步这两种同步机制的优劣点
A:状态同步它本身是客户端只用把玩家的操作,就是比如说键盘啊鼠标这种的操作给传到服务器端,是有服务器端本身去做游戏逻辑的处理,然后再通过 websocket,比如说我用 redis,然后把它给分发到各个客户端
然后帧同步的话是强调比如说我一个客户端做出的操作,我先把这个操作共享到所有端上面,然后我要求在某一帧,就是在这一帧内我所有的客户端都要同步执行,所以说帧同步对于实时性要求比较高的像 fps 游戏,可能会比较适合一些,然后状态同步相当于实时性没有那么高,同时它的编写逻辑也不会那么的复杂,并且在后续的维护方面,或者说我想要做一些优化的话,也会更加方便一些,可能成本也不会像帧同步那么高
然后由于我的这个游戏是一款卡牌游戏嘛,所以它对于实时性的要求可能就没有 fps 游戏那么高,我只需要把关键的事件,就比如说玩家打了一张牌,然后要计分什么的,我就要把这个事件触发到我的主服务器,然后通过主服务器处理游戏逻辑然后再下发给客户端,来实现这样一个低延迟的长连接,它并没有像帧同步那样可能要求那么的苛刻
Q:你在开发这款游戏的过程中有没有遇到性能上的一些问题?
A:嗯性能问题,因为我目前主要是本地跑嘛,可能遇到最多的性能问题就是,因为我是笔记本嘛,所以说可能有时候跑起来可能渲染画面会有一些卡这种的,然后实际测下来可能 UI 交互的流畅程度稍微卡一些,但是像那种部署之后的比如说高并发相关的性能问题可能我目前还没有遇到过,但是我也有去了解一些
又被问到了这个问题,可能性能方面确实无论在哪个领域都是比较值得聊的话题吧,但感觉还是要实际部署之后才更能聊一些,要不然就只能瞎扯
Q:C++ 这边掌握得怎么样?
A:C++ 我目前还可以吧,因为是我一开始就是学 C++ 的,后面才接触 go 的
第一次被问 C++ 的八股啊啊啊啊啊紧张死了,还好答上来了,虽然只问了一题而且语言组织有点混乱
Q:ok,C++ 它的智能指针有哪几种然后区别是什么?
A:智能指针的话就是有 shared 然后 weak 还有一个 unique 嘛,主要是这三种,然后 shared 就是你可以去拷贝它,或者是你可以去传递它,但是 unique 就是你只能有单独一个变量,你不能去传递它,然后 weak 主要是来看 shared 它这个指针目前是有没有被,就是它(shared)本身有一个引用计数嘛,它主要是用来看这个指针目前还有没有人在用它,就是还有没有变量在引用它,然后去判断它的一个生命周期
Q:假如现在让你来做一款多人在线射击的游戏,你觉得比如说我要同步玩家位置和技能施放,那么它们会适用于哪种网络同步的协议,TCP 或者 UDP?
A:如果是多人联机的话,同时还是 fps 游戏,那肯定优先考虑 UDP 嘛,因为它本身就是为了能够低延迟然后能更高效地去传递数据而诞生的一种协议,它相对于 TCP 来说开销也会小一些,速度也会快一些,同时虽然说 UDP 它本身没有可靠性的保障嘛,但是其实如果我用应用层的一些东西,比如说好像有一个 QUIC,它也可以提供像 TCP 一样的这种 ack 机制,就是比如说如果丢包了可以重传这种
Q:假如你可以过来实习的话,那么你希望未来三个月,你在实习之中能得到哪方面能力上的一个提升或者想在团队之中承担一个什么样的开发上的角色
A:我觉得最主要还是能够精进我对于客户端开发这个岗位的一些理解吧,因为可能我目前并没有这方面相关的企业实习的经验,然后我自己也,虽然说我有去了解,但毕竟不在那个环境里面嘛,所以我日常开发可能对于引擎的使用也好或者是开发规范也好,可能都很难去评判是否真正符合这种开发规范,所以我个人是希望能够在稳步推进我们项目业务的同时,完成任务的同时,去提升我自己实际的开发技能,然后在此之上可以再去多理解一下业务相关的东西
Q:假如在最近半年这样的一个周期之内,你去做一些技术上的研究的话,会有哪些技术上的兴奋点,比如你解决了一个什么样的技术上的点会让你兴奋或者你看到一个技术上的发展让你很兴奋,有没有这样的例子,可以给我讲一下
A:有的,因为我个人的学习方法是以兴趣和需求为导向的,比如说我想去实现某一个东西,可能我就会对它比较有热情比较有兴趣,像最近的话我最感到激动的就是有一个大模型相关的 MCP 协议吧好像是还是什么协议,反正它就是一个新的协议嘛,然后可以让大模型在,就相当于我们现在对大模型的使用是需要我们为它去设置很多的 prompt,然后给它提供很多资料材料,传进去之后它才能更好地为我们提供服务,但这个协议的目的就是让大模型能够在我们对它不做任何提前的预设的情况下,能够为我们直接在某个环境中提供服务
就像现在其实也不是现在吧,就是近几年比较火的 cursor 和 copilot 它本身也是这种应用下的一个产物嘛,然后 MCP 就是它会把这个场景不只是局限于编程方面,而是集成到比如说我可能日常生活,或者是我,就最简单的它可以采集到我游戏目前画面是什么样,拿玩游戏举例的话,我游戏实时画面是什么样,然后它可以告诉我目前玩游戏的策略最佳的一个是什么样的,然后它可以为我提供我下一步行动的具体的指导,这方面的,所以我目前最兴奋的还是 MCP 这个协议方面的
其他的话其实跟虚幻引擎是比较相关的,因为它,前段时间也有看到比较火的实时渲染的视频嘛,它可以非常大程度的去拟真现实,就是这一点是让我非常震撼的,因为可能很多时候我甚至都分辨不出来是游戏画面还是现实画面,所以我对于如果有机会能做这种游戏的话,我是感到非常兴奋的
Q:自己平时在做一些东西的时候有没有去用到一些 ai 东西去提升自己的效率?
A:嗯有,我主要是用 copilot 和 chatgpt,但我主要是用它们来提升我自己检索信息的效率,就我会让它们给我提供比如说我要写某个模块,然后我有一定的思路,我可能会先把我的思路发给它,让它给我大概写一个 demo 出来,然后我再去问它企业级的开发规范是什么样的,再按照这种信息去更好地做我自己的编写,而不是就是单纯地把它 copy 过来,对
下面是两道我又没做出来的算法题😭😭
Q:有两道题,你花点时间去做一下,你先写,有问题随时可以提出来
然后我就开始写题了,三题中一道简单两道中等,链表-简单,数组-中等,二叉树-中等
T1. 版本号的比较
leetcode 原题:比较版本号
牛客类似题目:比较版本号
T2. 用最少的球凑成目标值(动态规划)
leetcode 类似题目:最接近目标值的子序列和
原题描述:给定无限个不同重量的金属球和一个总重量,求可以凑成总重量所需最少球的个数,如果凑不成返回 -1,例如:
ball_weights = [1, 2, 5], amount = 11
输入: 第一行:3 (代表接下来会给定三个不同的重量) 第二行: 1 2 5 (三个数值,表示给定的三个不同的重量值) 第三行:11 (代表目标重量值)
输出:3 (解释:11 = 5 + 5 + 1)
第一题我没见过完全没思路,第二题一开始是想用滑动窗口,硬着头皮跟面试官讲了我这两题的思路之后面试官跟我说第二题可以试着写一下,但写着写着发现有点问题,又问了面试官才知道是动态规划一道很经典的题目
下面是反问环节
Q:嗯,我这边的问题差不多了,你有什么想向我了解的吗?
A:我想知道就是我在面试的咱们部门的项目组主要的业务是什么?
Q:英雄联盟手游
A:就相当于是基于现有的进行维护和出新活动这种吗?
Q:额对,它是一个已经上线的项目
A:嗯我自己也有玩过
Q:有玩过是吧,然后会做一些,因为你是实习过来的嘛,可能会做一些基础的比如了解下项目的一些具体的架构是什么样的,然后改下 bug,了解下业务,然后再去做一些工具向的事情,可能没有那么大块具体事情,因为你们毕竟只实习三个月嘛,对,反正是一个手游的项目
A:那您认为就是假设我有幸能入职的话,您认为我还需要自己额外先学哪些知识呢?
Q:我感觉你现在,毕竟你现在才大二嘛,其实需要掌握的东西还是挺多的,像刚才练了两道算法的题目,你可以下去再好好想一下怎么快速去概况自己的一些思维吧,这方面能力
然后再就是 UE5 和 unity 这样引擎相关的东西,再就是嗯,因为我看你做的都是卡牌向的一些东西,可以更多去了解一下,因为现在游戏的类型还挺多的,不同游戏类型它所需要的一些技术上的一些维度也是不一样的,比如说像 moba 游戏可能在技能设计和技能实现上还是需要去多想想,然后还有一些大地图的游戏,整个地图大地图的一些形成是怎么形成的
特别是我看你上面写的 ai 相关的一些东西,ai 跟游戏开发相结合的一些内容的东西也可以去了解一下,因为现在用的也比较多的,而不仅仅是用 ai 去查一些知识啊,就当百度用了,但它其实有更广阔的一些用途,不只是在游戏开发中,像项目的一些开发,游戏开发和项目开发是不一样的,游戏开发可能更注重于它的一些基础的知识的开发,那像项目中可能涉及到怎么样去做项目管理然后 bug 然后怎么样去做什么分析(听不清,好像是 graph),这都要有 ai 相关的一些知识
A:那这个项目现在主要是用 unity 是吗?
Q:对,但 C# 和 C++ 和 Lua 都有用,特别是 C++ 的内容,整个的逻辑都是用 C++ 去写的
反思总结
面了五十分钟,拼尽全力无法战胜
感觉其实大部分问题我答得都还行(不知道是不是我自己自我感觉良好),像八股什么的也答出来了(可能答得不太完美),所以这次凉感觉最主要就是凉在这两道算法题上😭,我一定要恶补一下算法题了😭
面试前在搜光子面经的时候其实看到了腾讯的 hr 发的 lolm 项目组的招聘,客户端开发和策划什么的都有招,没想到刚好面的就是 lolm,我之前退了王者之后玩得最多的就是 lolm 了啊啊啊,之前还很想进拳头的
挺多想说的,但要结合最近的情况一起说,所以会发一个新帖子讲讲自己中短期的规划和最近发生的事情什么的
继续加油~