平时的积累
首先要知道的一点是,要想拿到满意的offer需要的是长期坚持的努力。首先,平常工作中要经常总结自己遇到的问题并记录。
当然只专注自己的工作内容范围是肯定不够的,因为每个人的分工不同,如果只做自己擅长的事情长久以往你掌握的技术会越来越窄。所以接下来要做的就是看同事的代码。不仅能学到他们的技术,还能知道他们写的好或者写的不好的地方,有助于帮助你了解整个项目,日后改bug或者添加新功能也能更加得心应手。
看了一段时间以后,可以尝试帮同事改bug或者做他们的活。在一些小公司里,程序之间并没有特别明确的分工,如果有机会能够帮到其他同事一定要尽力去帮,可以“偷”学不少技术。像我刚来公司那会,做的都是玩法相关的业务逻辑。后来渐渐地做了一些物理、动画、AI、音频、编辑器扩展等很多方面的工作。
看同事代码会持续很长时间,直到你对整个项目的架构了然于胸,对项目的核心技术点完全掌握。
掌握的程度分三个境界:
知道怎么做?
知道为什么这么做?
知道为什么不那么做?
这也是面试官考察项目经验的主要思路。必须保证能够完美回答这三个问题。如果这三个问题答不上来的,可以去请教你的领导或者当时写代码的人。
面试官可能会问的问题会有:
如何实现帧同步?
为什么使用帧同步?优点?缺点?难点?
为什么使用p2p不用cs架构?
预测回滚是怎么做的?为什么要用预测回滚?除了预测回滚外还有什么方式可以实现不卡顿的同步?
为什么用ECS?
网络波动时怎么处理?掉线又怎么处理?
也许有人可能会说,这些问题都是主程考虑的,我就是个搬砖的,想这些干嘛。没错,想这些问题对你目前的工作内容可能并没有什么帮助。但是,如果你想往上走,想升职加薪,你就要从比你目前的职位更高的角度去看待问题。应付面试我倒是觉得反而是顺带的。
如果项目处在比较早期的阶段或者项目没有什么可以学习的技术亮点,一定要利用下班时间自己找学习资料学习,图形学、引擎底层、性能优化等都是不错的方向。
基础的巩固
经过上面的阶段后,面试时问到项目相关经验可以说已经没有问题了。剩下的需要准备对基础知识的考察。对于这部分知识,有些工作几年的人反而比应届生还答不上来。这部分包括:
语言基础
计算机组成原理
算法数据结构
图形学基础
网络协议
基础知识的考察很多都是固定题目,上网能搜到很多,这部分最好都背下来。
总结一些知识点:
语言基础:引用类型和值类型,GC算法,字典的实现原理,Lua和C#交互原理(《Lua程序设计》第24章到第28章),为什么要拆箱装箱,堆和栈。
计算机组成原理:虚拟内存和物理内存,动态链接库和静态链接库,内存对齐,浮点数表示,多线程。(这些基础的东西大厂比较爱考)
算法数据结构:topk问题,排序,红黑树和B树(这个很偏了,不会也没有关系,但是二叉搜索树还是得会的),数组和链表复杂度分析,用栈实现队列
图形学:渲染管线,空间变换矩阵,shader优化
网络协议:比较TCP和UDP,为什么TCP要三次握手及为什么四次挥手,如何实现可靠有序UDP(TCP和UDP几乎是必考的)。
答案我就不分享了网上都能搜到,要全部写完的话太多了,如果这系列文章看的人比较多的话我后面再单开一篇文章回答这些问题。
这里我再提一下算法和数据结构这东西,很多人喜欢去leetcode上刷大量的算法题。我的建议是针对社招来说,完全没有必要刷题。对于有工作经验的人来说,项目经验的考察比算法数据结构重要的多,有些面试官甚至只考察项目经验。
简历的撰写
简历内容控制在1到2页,使用pdf格式,注意排版美观。要有条理分12345,不要挤在一块很难看,有博客或者开源项目的话要放上去,没用的东西不要写,没人关心你的兴趣爱好和自我评价,对于你的工作内容,需要言简意赅。完全由你负责的写“负责”,只参与一部分工作写“参与”(这样就算问得特别细你也可以说这部分不是你做的),简历上最好要有你的技术亮点,比如使用了xxx算法、xxx数据结构、xxx设计模式、xxx架构,实现了xxx,带来了xxx好处或者解决了xxx问题。