非科班转游戏客户端经验分享

一、前言

本文适用对象为非科班同学,科班大佬理解想必比我深刻,欢迎各位大佬指正!

在今年秋招的过程中,经常逛牛客,刷各位大佬的面经,得到了不小的帮助,因此也想写一些东西回馈一下社区。刚好目前各平台对于非科班转游戏客户端的经验贴也较少,因此写下自己转游戏客户端的一些经历和经验,希望能够给到一些类似背景的同学一点参考。

首先介绍一下本人背景,2本9硕,非科班通信工程专业,技术栈是cpp+UE,简历上一个TPS游戏项目+一段游戏客户端实习,秋招两个offer,一个大厂一个小厂。研二开学前的时候开始转码,确定往游戏方向发展,刚开始学习的时候相比科班基本可以说是啥也不会,CPP只是了解过基础语法的程度,STL是啥都不知道,408更不用说了,只在本科选修过计算机网络,其他的都没学过。

接下来大致总结一下我认为比较好的学习经验,分成算法、八股以及游戏相关技术三个部分进行介绍。

二、算法

首先这肯定是优先考虑的部分,笔试都过不去,面试更别谈了。一提到算法,都知道要刷leetcode,但是对于非科班的同学来说,啥都不知道直接开始刷题肯定是不行的,效率极其低下,也许能看懂答案,但是不知道为什么要这么写,为什么要用这种数据结构来写,刷了和没刷差别不大。因此,在刷题之前首先要有一定的基础,这个一定的基础大概就是CPP基础语法+STL中各种数据结构的特性和区别。各种数据结构的底层实现在刷题前有一个基础的了解就可以,不必过于深入,但是在刷题的过程中一定要对其进行更进一步深入的学习和理解(通常题库是按照各数据结构进行分类的),数据结构的底层实现在面试时也算是八股的一部分,有的面试官会考察的十分深入。

接下来是刷题的内容,刷哪些题,大概要刷到什么程度。首先,在开始刷题前,你已经有了数据结构方面的知识,但是还缺少算法方面的知识啊,有的题在不知道算法基础的情况下是很难靠自己想出来的。因此,首先需要了解各类算法,这方面直接跟着代码随想录刷就行,刷完了代码随想录,基本上百分之6、70的题目都是能够写出来的,接下来就是刷其他题库提高熟练度。我最开始也是刷的leetcode的hot100,之后在找实习的时候发现笔试基本都是采用的ACM模式,因此后续改成了刷牛客的在线题库,有一个面试的题库和一个笔试的题库。这三个题库之间重合度不小,但也有互相补充的部分,最开始刷leetcode,相对来说leetcode刷起来更简单,也不必处理输入输出,能够更加专注于算法。刷完一遍之后就可以刷牛客的两个题库了,面试的题库比较简单,建议直接刷笔试的题库,面试题库到快面试的时候刷刷,保持一下手感就行。刷完代码随想录+hot100+牛客笔面试题库之后,过笔试基本都没问题,最多有一道题写不出来。

虽然通常来说面试的手撕环节会比笔试的题目简单,但是也有可能面试手撕会是场景题,比如写子弹的飞行轨迹和碰撞检测这类的,这部分知识我觉得不算基础算法,应该算是游戏相关知识部分的内容。

注意:上面的题库不是只刷一遍就行,需要针对自己不擅长的部分反复刷,尽量保持每天刷题的习惯,刷多少看个人习惯就好。

三、八股

游戏客户端方向的八股基本都是CPP八股+操作系统八股,涉及一点点计算机网络,主要是TCP/UDP这部分,更多的还是结合具体场景进行提问。同时在笔试时,有的公司也会有选择题,涉及的基本也都是上面的内容。

八股我一般在阿秀的校招笔记这个网站看,面试前看一看加深一下印象。不建议死背八股,最好是自己看一遍书自己理解一遍,再去网站上看八股,结合自己的理解总结,用自己的语言描述答案。在CPP八股这方面,很多需要自己多写写代码运行看看结果,这样理解的会更深刻。

其他的计算机组成原理、编译原理相关的知识,考察到的概率低但并非没有,时间充裕的情况下也可以学一学。

四、游戏相关知识

4.1 图形学

都说GAMES101是必学课程,这当然是没错的,但是对于不同方向来说,学到什么程度是有区别的。对于游戏客户端方向,就没必要说必须要写一个软光栅渲染器之类的项目了,在我的秋招经历里,图形学的问题都是一些比较简单、基础的问题,比如点乘、叉乘的意义以及不同的应用场景之类的。

但不管怎么说,GAMES101我建议是必学的,重点不在于完全掌握所有知识,而是对渲染流程有一个整体的理解和把握,对里面涉及的一些算法的思想有个基本了解,说不定啥时候就能用上。课是肯定要看的,作业也可以做做,都挺有意思的。

4.2 游戏引擎

不管你技术栈UE、Unity还是其他啥,不同引擎虽然有不同的区别,但也有许多公有的部分。了解一个游戏引擎是怎么搭建的、包含哪些模块、不同模块的实现方法也是十分必要的。这部分内容直接看GAMES104就行,当然如果是直接开始看GAMES104,可能会觉得比较抽象,不好下手,建议是先用一个游戏引擎写一个项目之后结合着看,这样会更容易的将理论和实践结合起来,更好理解。整体我建议的顺序是:GAMES101-->项目-->GAMES104。

对于游戏客户端方向,也没必要实现一个小的游戏引擎,理解104里的各类算法就足够了,当然,受限于课时,104里面有些内容没有特别深入,因此还需要自己根据项目里面涉及的内容进行更深一步的学习,比如你项目里对碰撞检测、网络同步这方面涉及较多,那么就需要再去深入学习一下这方面的知识。

整体来说,面试时很多的场景题都能在GAMES104里找到答案,但可能不是最优的答案,因此需要自己深入的探索,多问问AI。

最后是关于引擎使用方面,整体来说大厂不太关心你引擎用得孰不熟练,更关心你是否了解引擎的底层实现也就是GAMES104里面的内容,因此,没必要花时间刻意去熟练使用引擎的各项功能。在做项目的时候用到什么记一下就行。

4.3 项目

对于我们这类游戏小白来说,第一个项目直接自己手搓是比较耗时、性价比较低的,因此可以直接找一个教程跟着做,最好是相对复杂一点的。秋招的时候一个项目也是够用的,就比如我的项目就是跟着教程做的射击游戏项目。

大厂的核心考察逻辑还是在于你的基础,也就是对项目里涉及的内容的理解够不够深刻,而不是调用了什么API,比如我的项目主要涉及碰撞检测、网络同步和延迟补偿,因此我的场景题基本都是围绕着三个反面展开和深入的,用什么算法实现的?为什么用这个算法?与其他算法对比优劣如何?还可以怎么优化?只要在场景题环节体现出你的思考,基本都没有的问题。

4.4 实习

实习这方面没啥好说的,找到实习后做了啥写啥就行,表达清楚自己做的内容,为什么这么做。同时也要多了解不同的实现方法,比如GC优化,就要多了解不同的GC原理以及GC优化方法,基本上实习和项目在面试的时候占比一半一半,只要有能聊的内容就行。

4.5 其他

其他的内容还有什么设计模式之类的,考察较多的就是单例模式,这部分内容在遇到的时候学习就行,比较简单。此外,很多游戏都是CPP+脚本语言开发的流程,比如CPP+lua,CPP+python等,因此有脚本语言基础会更好,没有也问题不大,这部分内容很容易掌握,一般面试官也不会太在意,但是必须要知道为什么需要用脚本语言进行游戏开发,这个问题在实习面试经常被问到。

五、总结

上面提到的内容,只要做到了拿白菜offer应该问题不大,至于sp、ssp要做到什么程度我就不知道了,毕竟贴主也只是一个拿白菜的菜鸟。也许多做一些项目或者多参加一些GameJam之类的比赛?可惜本人当时没机会参加

总之,以上只是一些粗浅的建议,尽早准备,图形学和游戏引擎课的作业能做就做,收获绝对对得上付出。只可惜自己起步太晚,没时间做了,可惜可惜。

全部评论
可以透露一下去了哪个厂吗?薪资如何
点赞 回复 分享
发布于 02-20 15:45 广东
写的超级好
点赞 回复 分享
发布于 02-16 08:43 广东

相关推荐

02-13 10:39
已编辑
蚌埠坦克学院 UE4
11月投的,2月9号面试emm,此时我已经小厂实习了一个月了emm上来三道算法题,前两道lc简单题,一道字符串次数最多字符,一道数组去重,鼠鼠做数组去重的时候看急了,反正有各种原因,但其实就是本质彩笔,导致做完这两个题用了40分钟,面试官也一直提醒,这两道还是我之前做过的emm人怎么能那么笨,第三道random7写random10,鼠鼠没见过,后来一问也是经典题然后就是自己介绍项目,就是udemy的那个联机射击游戏Demo,主要是讲了实现的延迟组件,其中包括客户端预测和服务器倒带,最后总共1h25结束捏,面完后秒挂鼠鼠挂了后还问了面试官,面试官人很好,说一是算法确实做的慢,二是ue引擎没有深入了解,ue自己的移动组件的同步没有去看,也没有思考过100个人的优化问题总结,鼠鼠还是太着急了,其实这是鼠鼠第三次面试,面试经验不多,也是头一回面大厂,有点疾苦,因为之前投的大部分简历就没消息,有消息的一个微派,一个鼠鼠现在在的小厂,微派也是一面挂了,然后就来了现在这个小厂,在这待了1个月了,想说一下这里待的真的挺舒服的emm,之前可能工资太低,但是鼠鼠刚来的这一个月居然刚好给实习生加薪了,也是有当地平均水平力,还蹭到了异地的年会,报销了全程,需求感觉也挺好的,鼠鼠做逻辑的简历的结果被分到了引擎岗emm,不过因为项目很老所以还好鼠鼠没有被分到做gameplay,鼠鼠毕竟实力和bg都不好,所以也不奢求太多力发点牢骚,看到好多大佬的多段大厂实习总会让自己焦虑,觉得我实习晚了,实习段数少了什么的,后来也想了许多安慰自己的话,但觉得最有力度的还是不要让未来的自己懊悔现在的自己还在懊悔过去,最重要的永远是当下,过去已经发生的已经不可能改变,懊悔不仅无意义更是会毁了现在的自己,能做的永远都是现在,哪怕只是上一秒的自己也已经定格在了过去,还有什么这样的人生才是自己的人生啦等等鸡汤,但结果来说还是以悲伤为主嘛,不过一想,人总是要抗压的,那个罗兰怎么说来着?世界上只有一种真正的英雄主义,那就是在认清生活真相之后依然热爱它,规划好现在开始的每一天要完成什么目标,多做少想比较好呢结果鼠鼠的未来也是一片灰暗嘛,因为之前跟导员说实习的事,导员不放(为什么说,一是鼠鼠是学生心理,二是学校有扫脸,之前就有实习被逮的emm),一开始想跳了,觉得鼠鼠怎么那么傻,自断生路,后来跟校领导申请,两周多了还没信息,说是非常重视决定开会,感觉难,鼠鼠下学期一周还有10节课,学校这种体系怎么会因为鼠鼠一个而改变呢,算了,懒得管了,暑期实习也不用想了,唉英雄主义好难鼠鼠现在能做到就是继续做一个新的项目,就是udemy的那个超大的gas项目,鼠鼠本来上一年11月就说要做,结果嘛,到了现在才规划做,鼠鼠前面也懒嘛,又懒又焦虑的emm,现在每天做两个视频内h,看能不能两个月做完emm,鼠鼠的打算就是秋招前两个日常两个udemy的项目外加深入图形学鼠鼠就是因为爱打游戏才来游客的,以前打王者火影吃鸡什么的网游,二游打了崩原铁绝潮粥终(人生完蛋啦,这里面除了bbb我都还在玩,不过很多都是送东西才上号了),bbb我也算陪它到第一部结束力,大学有了电脑后玩了单机,泰拉呀,怪猎世界呀,老头环,空洞骑士,帕鲁什么什么的,最喜欢玩泰拉(我是国服召唤师,300h原版和灾厄大部分全是打的召唤师,现在大版本更新了又可以玩了)和怪猎世界(我是国服太刀侠emm),但不得不说老头环是全方面的好,特别是世界观给的代入感,真的有种异世界的感觉emm,空洞骑士是为了玩丝之歌买的,结果空洞骑士112了,丝之歌和大表哥都还在吃灰emm,空洞骑士我1.30h跑完苦痛,我是天才嘛(叉腰)不过我只打了4门,5门望而生却了emm,有个好朋友这些游戏全都跟我联机通关的,真好其实鼠鼠分享欲很强但因为喜欢二次元有社恐属性(难绷了),鼠鼠也没在整个学生生涯中谈过一次恋爱,其实鼠鼠也尝试过,不过都失败了(鼠鼠也难呐)最最最后,希望不管如何,大家都能快乐的生活,唉,好假大空,海绵宝宝,快乐都去哪了呢,我的话大一大二追新番的时候真的很快乐,我大学最喜欢的就是GBC,nina的性格真的跟以前的我挺像的,不过我没有nina可爱emm,败犬,mygo&母鸡卡(懒得喷),辉夜,狐摇,末日酒店,小城日常等等好多好多,反正看动画太开心了,希望所有人都去看好看的动画,希望大家都能过得开心,实现自己的目标,现在说新年快乐会有种包饺子的感觉嘛()
查看1道真题和解析
点赞 评论 收藏
分享
评论
9
27
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务