我的腾讯技术面试经历(3)

梦想与她 提交于 2019-12-25 14:20:24

  9月19号下午,腾讯游戏的hr就打电话过来约定好下周一下午去深圳面试了。面试者的往返交通、住宿费用全部可以报销,不禁感叹大公司果然是有钱啊!
  其实在投简历之前没想太多,但在过了两轮电面后,终于开始重视起来,进腾讯的机会很大了!
  整整周六日两天时间,都在面试做准备。刚开始担心面试是否会考察计算机原理,汇编,计算机网络,数据库方面的东西,因为这些基本忘光了。最后只是简单回顾了一下,把准备重心放在简历上提到的点。还是看专业能力说话!
  于是把LeetCode之前刷过的题过了一遍;数据结构过了一遍,专门看了July几篇经典文章:海量数据处理、各种b树和红黑树;把做过的几个项目的底层又研究了一遍,重看了下pureMVC,robotlegs框架;学习prtocol buffer;连搭和谐号回深圳都拿着macbook重温23个设计模式的思想和实现例子。奋斗了两天,一度有回到高考的感觉,不禁感叹考试永远是逼人学习的最有效方式啊!

 

—————————————————————————————————————————


  事实证明,这两天做的准备用处还是很大的。整个下午连续进行了4面:其中3轮技术面。

  腾讯游戏不在腾讯大厦总部,而是在附近的科兴科学园。2点多提前到腾讯,来接了我的人是一面面试官,简单聊了下,他做了3,4年as3,3年前来腾讯,然后竟然也是从我现在的公司跳过去的(3,4年前还是个初创小公司),泪牛满面,猿粪啊!聊着过了一会,3面面试官就过来了。

 

3面:
  这是整轮面试下来最有压力的一面了,面试官看起来30岁出头,坐下来后不多寒暄,一言不发拿着我的简历翻呀翻呀翻,仿佛我简历上没有一处引起他的兴趣,顿时心里七上八下...
  沉默许久之后,他终于问了我自己写的as3框架里面包括了些什么东西,由于之前心情被搅得挺忐忑,介绍这部分时显得不是很有底气,简单介绍了框架里ui,网络传输方面的东西,就被打断了,问了我协议数据格式是怎么实现的。回答说是自定义格式写进bytearray的。然后略有“不屑”地问我为何不用protocol buffers?(看来他们一定是长期用protocol buffers!)
还好上轮面试后就去补了相关的东西,说了公司项目一开始做就没有用protocol buffers;而protocal buffers只支持java,c++,python,公司项目后端是erlang实现的,技术受限了。(再后来才了解到,现在开源社区已经支持生成as3、erlang了)
  接着又让我讲了arpg的战斗是怎么实现的,没做过arpg的核心战斗,转而讲了我比较了解的播报制战斗,讲了个大概,面试官貌似听得不太感兴趣,心情复杂。。
  整个面试过程到这不顺利,感觉面试官没认可我。不过后面问到跑酷游戏设计的问题答得不错:

  一、玩过天天酷跑吧,说说游戏地图滚动是怎么做的?
  跑酷类游戏,实际没做过,但了解基本原理。就讲了地图是分块处理的,所有地图块都向左边同速移动,移出屏幕左边的部分图片会被即时清理,右边则设置好图片从屏幕右边移入,从而制造地图滚动的效果。

  二、然后又问了地图障碍是如何生成的?
  这也是跑酷类的核心技术点。一个跑酷游戏可能有多种不同地形:平地,悬崖,立柱等等,完全随机地去生成跑酷路径是有问题的:
  1.可能会出现不合理的路径:例如连续生成了10格悬崖地形,这么大的一个空隙玩家是不可能跳过去的;
  2.跑酷游戏是技巧性游戏,玩家通过训练提高自己技巧获取更高分数,从而产生快感,路径生成的过于杂乱无章,就无技巧可言,没有可玩性;
  3.完全随机生成地形,就无法把控难度。

  总之,要做到既保证路径随机性,又保证路径可调控。
  解决思路是,不做成每个格子都随机生成,而是地图样式随机生成,地图样式是指一段预设计好的路径样式;比如地图样式1是连续3格距离悬崖,4格之后有一格立柱,其余为平地;地图样式2则是有两段悬崖...随机生成一连串的地图样式,一局游戏的路径就生成了。在此为基础,还可以再为不同样式的生成概率做不同权重,样式序列预设...

  因为在此前有看过跑酷小游戏的教程,半加入自己的理解跟面试官分析了。听完答案,面试官就没再挑毛病了,面试也顺利结束。

 

4面:
  4面面试官是一中年男子,年纪估计近40了,人很nice了,过来就主动跟我握手,面试过程中知道他是手游项目的技术总监。面试很轻松,可能跟他不是直接做as3开发的缘故,侧重问了我手游项目的经验,问了对c++的了解,让我讲出c++跟as3的区别,于是举函数调用为例,讲了c++的传值,传引用,传指针三种传参方式;而在as3中则只有传值,传引用。讲了stl容器,然后问了红黑树,于是详细讲了b,b-,b+,红黑树的定义、区别。面试官还是挺意外我能讲出这么多,最后试探性地问我stl那种数据结构用了红黑树,乱蒙回答说map,蒙对了,哈哈!

 

5面:
  从4面开始,与其说是在面试,不如说实在做技术交流了。到这个阶段,面试者的技术能力已经考核完了,基本上被刷的几率已经很低,但也曾听到过被刷的例子,人没有自信,没有想法,对技术不敏感等等非技术因素,还是有可能让你被刷掉的。
  5面是工作室的技术总监,感觉对各种技术都挺了解,对行业动态也非常熟悉。聊了许多,从各类游戏认识,到对市面游戏的关注看法,主要聊了墨麟的风云无双的成功,除了得源ip优势,技术上也很强,用了stage3d,很多资源采用动态加载、地图加载流畅、战斗效果华丽,粒子特效很玄;聊了纸娃娃系统,骨骼动画,这点上他很感兴趣,以为我接触过骨骼动画,其实我只知道刀塔传奇里用了骨骼动画,原本并不为人熟知,随着刀塔传奇的成功,带火了骨骼动画。我在年前也参与过一款手游开发,就是想山寨刀塔传奇,但数值、技术都不如原作,没有技术做骨骼动画,很搓逼地用帧动画做人物战斗。然后这个项目做了不久就被毙掉了。

  后面聊开了,总监直接让我用白板给他讲技术,于是边画边讲,从介绍自己的as3框架类库,讲到mvc框架,比较了pureMVC,robotlegs的优劣;聊网络协议格式定义,讲了protocol buffers的大概用法;讲对设计模式的理解,经典应用;到最后讲解自己目前正在做的box2d物理引擎游戏,总监颇有兴趣的听着,时不时问些细节,结果越聊越high。
  这是一段蛮开心蛮难忘的过程,一些学的时候觉得很难很复杂的技术,消化理解了之后,用浅显的语言去讲解给别人听,这种感觉蛮爽的。深入浅出,不过如此吧!~

 

6面:
  最后一面是工作室总监面,终于不谈技术了。简单谈了薪酬待遇,跳槽初衷,未来职业规划,对他提到了一点很有印象:做出成功的项目比去大公司的意义更大。
  这点是对的,但我认为只有让自己的实力更强、分量更重了,才有更多机会选择去做成功的项目。需要看实力、人脉和运气。而前两者都需要积累。所以选择去大公司的意义在于此,不仅为了更好的薪酬待遇,也为了认识更优秀的行业人才,提升水平。


  最后一面面试官送我出了腾讯大厦,已经6点多了,感觉终于轻松了。事实上,从开始准备面试这几天来,就处于亢奋紧张的状态,一心想的都是如何能准备得更充分些。

  几轮面试下来,对4,5面面试官的印象很深,同样都大气稳重,有很多技术沉淀,我正是期待的未来职业状态。貌似看到了我的方向,以后成为技术总监,即使年长了,退居编程一线,还是可以不断学习关注技术,在宏观上把控项目技术架构,技术选型。挺好的。

 

——————————————————————————————————————————

  两天之后,hr打电话过来,确定给offer,一切终于尘埃落定。一年前我与腾讯擦肩而过,今天终于牵手成功!

  当然,这不是终点,只是新的起点,目标要更长远,还是要不断沉淀自己,加油!~

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!