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

一、前言

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

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

首先介绍一下本人背景,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之类的比赛?可惜本人当时没机会参加

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

全部评论

相关推荐

昨天 16:14
武汉大学 Java
1. 问一下本科经历2. 介绍一下你第一个项目3. DDD分层架构比传统的MVC有哪些好处?4. 你设计的业务分配的算法介绍一下?5. 算法有哪些优化思路?6. 动态标签列设计怎么思考的?7. 数据量有多大?8. 数据量很大的话,数据存储怎么优化?9. 如何保证缓存和数据库之间的数据一致性?10. 相对于你这个项目用哪种方案?11. 项目中遇到的最大的困难是什么?12. 介绍一下第二个项目13. 模型分析diff的上下文怎么考虑?14. 如果diff的关联的上下文很长超过token,你会怎么办?15. 你想的这种方案,最后输入给模型的prompt是什么?16. 对于大模型的其他组件如RAG和skills有了解吗?17. 那你有想过把代码拆分成一些知识库放在rag里面吗?18. 有对比过其他模型的分析效果吗?19. golang有了解吗?20. HashMap的底层结构21. 为什么要用红黑树?22. 红黑树增删的时间复杂度?23. MySQL事务隔离级别24. MVCC实现原理25. 手撕算法:lc402 移掉k位数字 -> 没想到单调栈,暴力枚举了QAQ反问面试官之后,感觉我的缺点主要在于项目太过于玩具了,对于高并发什么的思考处于比较浅的地步,还有就是code-review对于call graph还有一些成熟的方案不怎么了解过,相当于纯demo,面过几场才知道QAQ,估计是没啥希望了,继续沉淀了噶人们
查看25道真题和解析
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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