挥一挥衣袖,开始一段新的旅程

悄悄的我走了,正如我悄悄的来;我挥一挥衣袖,不带走一片云彩。

前言

钱钟书老先生在《围城》中说道:“天下只有两种人。比如一串葡萄到手,一种人挑最好的先吃,另一种人把最好的留到最后吃。照例第一种人应该乐观,因为他每吃一颗都是吃剩的葡萄里最好的;第二种人应该悲观,因为他每吃一颗都是吃剩的葡萄里最坏的。不过事实却适得其反,缘故是第二种人还有希望,第一种人只有回忆”。

而我在反思自己时却发现,无法将自身完全归于这两种人的一类,如果非要选一种,我更像是老先生提到的第二种人,总喜欢把最好的留到最后。按理说这样的人应该总是向前充满希望的,但是我却热衷于收集回忆,记录生活中的点点滴滴,认真记下生活中的每一笔支出,写下人生中一次次感动…

其实一开始我并没有这方面的爱好,不知从何时起,儿时的记忆渐渐和梦境中的画面杂糅在了一起,有些事情已经分不清是之前确实发生的,还是曾经在梦境中悄悄的来到过,所以慢慢地我养成了这样的习惯,记录生活中一切想要被回忆的事情,期待着有一天能与对此感兴趣的人一起分享这些点点滴滴。

缘由

技术博客中很少写自己的生活,这一次其实也和技术有关,在一个工作岗位上勤勤恳恳工作六年之后,今年终于鼓足勇气决定出来找找新的机会,确定了新的目标之后回头看看这六年收获了很多,同时在这段找工作的经历中也学会了不少东西,新的工作基本定下来了,现在总结一下工作以来的经历以及面试中遇到的问题,方便后续复盘时能有个参照。

懵懵懂懂的6年前

走出校门

从大四学期便开始走出校门,一切按照教学大纲进行着,大四这年是企业实训,我们被安排到一家机构进行学习,学习结束已经13年的深冬,我们一群小伙伴作为花朵开始走出曾经的温室。

其实从实训的后半段我们已经开始在北京各大高校“流窜”,参加了很多不请自来的校招,进行了一轮轮的笔试,但很少有人从中得到满意的工作机会,我也尝试过几次,但是感觉自己真的很渺小,经过努力得到了一个大厂的面试邀请,我怀着激动的心情前去面试,走的时候还换上了自己都觉得怪异的正装,好在面试官并不在意我的这份不自然,完全投入身心开始进行面试。

很幸运我通过了一面,但是在去参加二面的路上我才发现后背已经被汗水浸湿了,之前也参加过几次面试,但是这一次确实是让我身心俱疲,从中也渐渐体会到了不同公司之间的技术差距,我一心想加入这个团体,但是二面的结果又把我拉回了现实,二面的过程很糟糕,有一道题我至今还记得,那就是关于数据库的连接,但是回答的很模糊,由于自己的知识储备不足,我怀疑自己当时连题目都没有弄懂。

走进社会

大厂失利后,开始寻找其他的机会,毕竟工作是现在的第一要务,放弃了保研机会一心想着早点参加工作,如果连工作都找不到岂不是让人笑话了,时间不久便通过了几家面试,其中有意向可以试试的有两家,一家是做偏硬件的软件,另一家就是做游戏开发的,工资待遇差不多,相比较而言第一家要高一些,但是当时沉迷于Dota的我经过“深思熟虑”之后,委婉的谢绝了第一家的邀请,进入了这家游戏公司,也就是后来我工作了6年的公司。

开始工作

我的人生很幸运,我一直这样觉得,在这里我碰到了我工作的中的第一位导师,都说师傅领进门,修行在个人,那么他就是我进入社会环境的那个师傅,但是他比我也大不了几岁,我更愿意称呼他为兄长。

时光荏苒,岁月如梭,即便转眼已经过去了6年多,但是工作第一天他让我修改的第一个BUG我至今还记得,那是一把“罪恶坑的钥匙”,BUG具体的细节并不重要,而是他处理的方式让我记忆犹新。

开发环境配置好之后,兄长便指给我一个BUG,让我尝试修改,便是那个“罪恶坑的钥匙”,第二天他就过来询问BUG的修改情况,我告诉他我的修改思路A,他说可以这样改,但是这种修改方式可能会给后面带来一些不利于扩展的问题,然后在他的电脑上给我看了他建议的修改思路B,然后让我按照这个思路去修改,我比较之后确实思路B更好一些。问题的关键是这个BUG他已经想好了修改方案,并且尝试修改过,他指定让我修改完全是为了帮我熟悉问题的处理方式而非完成工作。

之后也和一些其他领导沟通过工作,但是能这样带我入门的兄长就只此一个,其他人大多是就是完成工作即可,很少有人再想教我的什么东西了。我是幸运的,在我懵懂的年纪碰上了这样一位领路人,之后我们在项目组之间分分合合,但始终工作在同一个屋檐下。

勤勤恳恳的6年

初入职场

刚刚参见工作,一切都显得那么新鲜,经常会有这样的感叹:原来游戏中的这个功能是这样实现的!开始的时候对于工作的状态还是有点不适应,印象最深的就是下午的时候总是昏昏沉沉的,当时可以用“熬”这个字来形容,但是随着后面工作内容的铺开,大脑在紧张的处理这些问题时,犯困的毛病就改掉了。

工作之前写的项目很多是个人完成的,就是几个人合伙做一个项目,基本上也不太大,所有的代码也都很了解,但是刚接触这个游戏项目时感觉它太大了,所有的代码只能不断的搜索才能找到,仿照已有的功能开发了两个新功能之后,渐渐的找到了感觉。

很长一段时间之后再回过头来看自己的代码时会发出这样的感叹:这段代码是我写的吗?现在整个流程我已经清楚了,但是当时写这段代码的时候是怎么找到这里的。其实一开始写代码完全是照葫芦画瓢,很多语句不知道什么意思,但是功能类似,这样写完就可以用了。

当时还有一个情况就是开发环境是没有网络的,有问题不能上网去查,好在分配给我的没有太复杂的功能,依照原来的系统都可以完成,并且我喜欢做笔记,常用的那些代码实现都让我记在了本子里,有些还记了不止一遍,这些笔记我至今还留着,现在看起来显得过于幼稚,但却是我工作以来的痕迹。

渐入佳境

工作一年以后,对整个游戏已经比较熟悉了,可以独自完成很多功能,稳定下来的游戏也逐渐对接多个平台开始蓬勃发展,那时的我真的是干劲十足,每天像打了鸡血一样,作为服务器开发的我开始偶尔“插手”客户端的开发工作。

期间还养成了每天读书的习惯,其实这个习惯的养成是被动的,原因是分配给我的电脑比较卡,我提过几次但是一直没有换的机会,每天早上开机至少得10分钟左右才能正常顺畅的工作,所以后来我一般会早来一会,开机这期间我就会把旁边同事的书拿过来看看,后来同事的书看完了,我就买一些相同类型的技术书籍来看,再后来开始扩展知识面,买一些流行技术的书,这个习惯就一直保留了下来,一直到现在每年都会看几本技术书籍,有些是不朽的经典,有些是新进的技术。

其实很多书的内容我只是有大概的印象,具体的内容早就忘记了,偶有几本书感觉有意思会回过头来再次翻看,每次看都会有不同的感受,我喜欢在纸质书上做笔记,想到什么就写什么,有些章节会被我划的很乱。在我看书的时候总有同事问我,你看那么多书都记得吗?都学会了吗?这时我常常会自嘲一般的回答:“看着玩而已,早都不记得了”。

实际上记不记得重要吗?今天吃了有营养的东西,明天依旧会饿,你会因为明天还会吃饭就放弃今天的美食吗?我想不会的吧,我感觉看书也是一样,我今天看了明白了一些事情,或者读到一个故事感动了很久,明天忘了就忘了,毕竟我曾经学会过,曾经也感动过。这些东西会消失的无影无踪吗?我想也不会的吧,吃过的美食总会有一部分营养进入了我们的细胞,成为了肉体的一部分,而曾经读过的书会忘得一干二净吗?当然不会,那些使我们印象深刻的文字总会在未来的某个深刻,在我们的脑子中再次迸发出来。

再入蛮荒

天下没有不散的筵席,参加工作时就参与开发的这个项目终于到了最后的维护阶段,这个阶段距离我刚进公司时已经过去了2年半的时间,此时原项目不再进行新的开发只进行必要的维护,原项目组的人也被分成了两部分,现在的有两个新项目,一个是相同技术栈不同玩法的端游项目,一个是紧追潮流的手游项目。我当时想去做手游,最终也确实分到了手游组,就是从这时起,我与之前的兄长分到了不同的项目。

事实证明这个公司向手游进军的项目确实是一条蛮荒的道路,整个技术链遇到了前所未有的挑战,我们一步步探索着前进的道路,试图越过一个个技术的深坑,而真实情况却是多少次我都陷在了里面。

在这个项目组我遇到了很多新的伙伴,有的乐观、有的开放、有的乐于奉献、有的精益求精,在这我看到了相同而又不同的服务器程序,之前的程序被改的面目全非,我又得重新适应,面对全新的客户端也有太多的新知识需要学习,每天必须打起十二分精神来应对工作。

一次次的否定自我,一次次的推到重建,在项目的紧要关头,升级引擎、重建UI、优化逻辑,最终还是把这款游戏送上了线,但事实却如昙花一般,一闪而过,失败了,我们没有做出成功的产品,仅仅是做了一次失败的尝试,此时距离进入这个项目组过了1年半的时间。

并入源头

手游组的失败尝试使我有了到外面大世界看看的想法,就在这时,和我们一同开始的另一个项目组已经完成了一次轮回,很明显他们成功了,作为同时开始的两个项目,一成一败的比较对于我们的打击很大,而那个成功的项目组也进入维护阶段,领导决定合并两个项目组继续完成手游的开发,这使我又打消了出门找工作的念头。

两个项目虽然一成一败,但是各有优势,因为最终做的是手游,所以原来的手游组有技术优势,而另一个成功的项目有成功的游戏内容,两者一合并应该很快就能出一个产品,更重要的是,这两拨人有很多都是曾经的好友,好友联手打造一个游戏也是很有意思的事情。

可是理想很丰满,现实很骨感,事实证明做出一款游戏是多么的不容易,虽然两部分好友合并到一起没有什么磨合的问题,但是游戏内容的一次次修改不断冲击着之前制定的开发计划,整个开发计划不断修改,时间节点在不断修改的需求面前显得那么渺小,常常被无情的践踏。

终于看到胜利的曙光了,在不断调整了2年之后,游戏迎来了上线的的一天,之后开始根据线上反馈进行调整,在我看来游戏开发到这已经基本完成,虽然达不到爆款的要求,但终究是一款中规中矩的游戏,没有大的问题,也没有太闪光的点,我在这的修行也要告一段落了。

离开这里的一个导火索是游戏内容一次大的调整,本来现阶段不可能大面积修改功能了,可是在计划中还是出现了太多看不懂的修改内容,因为之前有了完成游戏就离开的想法,看到这里仿佛又要开启一个新游戏了,我也就没有再留下的必要了,是时候到外面的世界去看看了。

信心满满的6年后

外出求索

19年底,在第一家也是唯一一家公司呆了6年之后,我开始外出面试了,从一开始的信心满满到后面的发奋图强,我逐渐认识到了,我必须出来闯闯了,我在一个安逸的地方待了太久,虽然每天都在学习,但事实上优秀的人比你还要努力,以下简单介绍下面试过程,对于需要掌握的知识进行一个梳理,便于日常复习警醒自己,大概面了几家,以下按一面时间先后排列以下T、D、Y、W、Z、H:,全部以字母代替就不列出公司名了,有兴趣的可以进一步交流下。

T公司

很抱歉一开始把公司名看错了,当时还在想一家旅游公司怎么还做游戏,但是毕竟是第一家在招聘APP上给我发面试邀请的公司,怎么也要去看看,后来了解了一下这是一家主营棋牌类的公司,面试当天早早就来到了这家公司,顺便再楼下吃个了饭,面试开始先填个表格,内容跟查户口一样,我只填了其中的必要信息,接着做笔试题,包括后面几家面试,这是我唯一做的一套笔试题,内容不难,可能就是一个简单了解。

我还没写完面试官就来了,我看他特别像我初中的化学老师,整个过程很轻松,聊聊笔试题、曾经的项目,面试官还介绍了他们公司的情况,他表示了对我的肯定,问我有没有兴趣转Golang语言,我内心是拒绝的,其实嘴上也拒绝了,因为我一直使用C++,之后又是其他一个组的负责人来面试,他们使用的Python,整个过程依旧轻松加愉悦,还向他请教了分布式服务器的知识,最终因为我不想放弃C++而结束,他问原因是什么?我开玩笑说:可能是情怀吧!

涉及到笔试面试部分内容,列举在此主要为了重温复盘,如果你想做游戏开发也可以看看这些知识:

  • 不同类型数据内存占用大小
  • 估算PC机上1秒钟可能执行的空的for循环次数
  • linux下常用搜索文件命令
  • 常用的设计模式
  • 字符串翻转
  • 扑克牌中挑最长顺子
  • 回旋排列矩阵
  • 分布式服务器设计
  • linux中的lvs
  • 服务器横向扩展
  • 从头实现一个服务期
  • websocket
  • 玩家背包怎样设计

D公司

这个公司完全是抱着学习的心态去的,因为公司本身很大并且不是做游戏的,来这家公司完全是因为他们的技术总监在招聘APP给我发了面试邀请,我本来觉得不合适,人家说可以来试试,抱着学习的态度我就去了,为了这次面试还看了好几个调度算法,最终也没用上。

本来10点半的面试,7点多我就出发了,期间地铁还坐反了,还好出门早,来到西二旗发现手机都没有信号,出门都骑不了自行车,走了很久才找到一辆,开锁出发一气呵成,9点多就到公司楼下了,旁边便利店买了个菜团子,对于干吃的我来说太大了,10点左右进入公司,大公司就是不一样,进门登记后还要贴一个签,这是怕我乱跑啊。

面试不久后进行,来了一个小哥哥,年纪应该不大,很沉稳的样子,带了一台笔记本电脑,这个好像是标配,提倡无纸化办公吧,我的一切反馈他都会记录在上面,整个过程对于他来说应该是轻松的,但是对于我来说有些窘迫,整个过程对我的评价就是,很多东西用的很熟,但是对于原理掌握的还不够,算是没有达到他们的要求,这也在我的意料之中,毕竟就是来学习的。涉及到的面试内容大概有如下问题:

  • 开源项目源码的阅读情况
  • 动态库加载路径
  • 编译的过程
  • 线程崩溃为什么会导致进程挂掉?一定会挂掉吗?
  • 加权最短路径
  • 打印过程中出现中断
  • 中断信号怎么处理
  • 怎么理解多态
  • 编译时多态和运行时多态
  • 模板和基础类型的效率比较
  • gdb调试
  • 为什么先构造基类
  • 析构函数的调用顺序
  • 非阻塞的write什么时候返回
  • 如果连不上服务器会有那些情况
  • 注意wireshark的使用
  • listen的backlog参数

Y公司

这个公司有自己成熟的产品线,涉及到卡牌、MMORPG等等,同样是在招聘APP上收到面试邀请,但这次招人的是一个SLG游戏组,整个给人的感觉无论是公司的氛围还是项目的情况与我当前公司很像,一共来公司面了两次,第一次两个技术Leader分别进行面试,然后又和HR聊了一下,技术面主要围绕曾经的项目,后来第二次面试跟游戏制作人聊了一下,感觉和之前的公司更像了,当时就打了退堂鼓,最终婉言谢绝了这家公司的Offer,面试主要技术内容:

  • 技能设计
  • redis缓存
  • 指针用法
  • 二分法思想
  • 项目熟练度

W公司

这个公司是游戏开发中的大厂了,首先是在招聘APP上,HR和我沟通之后要去了简历想要看看,后来收到了面试电话确定了面试时间,面试当天也是早早的来到了公司,这天在周围没有找到吃饭的地方,要饿着肚子了,等待了一会被HR小姐姐带去二楼等了半小时,后来她跑过来告诉我位置错了,确实有点尴尬。

之后我被带去了正确的位置,然后开始了面试过程,面试官是一个小哥哥,整个面试的过程感觉表现的不是很好,有些问题回答的不太完整,但是却从中学习到了很多东西,临走时问了几个面试问题的正解,并且冒昧的问了小哥哥的工作年限,得知才比我大两岁就已经在游戏大厂当主程之后,深感我们之间的差距还很大,同时也激起了我努力学习的意志。

面试后好几天也没有消息,本来我感觉这次面试可能失败了,但是几天后我又收到了该公司的二面邀请,收到邀请时挺高兴的,当时还有另外几家面试,之前已经约好了时间,所以这次二面不得不向后推了几天,因为是第二次去,路线熟悉了很多,又是早早来到公司,本来以为还是技术面,但是交流几个问题之后发现问的都是之前的项目,和人员之间的沟通的问题,后来对方主动说明他是项目负责人,整个聊天过程比较轻松,谈过之后让回去等消息。

第二天收到HR视频面试的邀请,本来想约晚一点回家好好面试,但是因为HR小姐姐还有其他安排,我只得将面试时间提前,在公司旁边找了个安静的地方进行视频面试,主要聊了一下目前的薪资待遇以及项目情况,能够入职的时间等等,整个过程很愉快,并且得知其实是一个工作室在招聘,我问了一些相关的问题,面试结束回到家我仔细考虑了这个机会,第二天又找该项目的负责人了解了项目的详细情况,觉得这是一个很好的学习机会,与目前的工作内容有很强的互补性,可以试一试。

  • Gitflow使用方法
  • gcc编译过程
  • extern和static的作用
  • 多态、虚函数、多继承虚函数
  • 大根堆创建和插入
  • 排序找出接近当前数的较大数
  • 迭代器的理解、迭代器都是指针吗?
  • 字符编码、unicode、utf8
  • 指针数组、数组指针、函数指针
  • 引用和指针的区别
  • 网络4次挥手、为什么要4次?
  • 函数阻塞是否占用资源–挂起不占用

Z公司

这个公司不是游戏公司,近两年异常火爆,有专门的游戏部门,但是我面试的职位不是游戏岗位,而是时下非常火的中台岗位,其实是在尝试新的领域。起初是猎头在招聘APP上要了我的简历,然后接到了公司HR小姐姐的电话,约定了面试时间,相互加了微信,面试之前和HR小姐姐交流了不少,知道公司技术面大概有3面,因为心里没底,抱着学习的态度考虑能过两面就行,如果实在太难能过一面也行,作为一个求知者,知道各个公司都需要哪些知识也就有了学习的目标。

可现实总是太残酷,这个面试我算通过了半面,什么叫半面,由于我的“出色”表现,我感觉正常的一轮面试并没有结束就被礼貌的请出来了,因为几个问题之后我也感觉出来了,我之前学的技术和他们开发思想差的有点多,所以出于礼貌,面试官也没说什么,还给出了一些建议,人真的不错,大公司的涵养还是有的。

  • 你开发的最满意的系统 –道具系统
  • map和hashmap的区别
  • stl的使用
  • vector的扩容,是不是线程安全的?
  • 遍历删除vector元素,迭代器失效
  • 有没有用过redis的有序集合
  • redis中hash插入的时间复杂度
  • 设计一个红包系统 –评价为原始的面向对象方式,有些过时
  • 给出建议这个红包系统必须要考虑redis、分布式、容灾、备份
  • 建议如果想转向互联网需要准备的很多,可以先看下现有的解决方案

H公司

这个公司的面试机会是猎头推荐的,主要做战争题材的游戏比较多,现在也有卡牌和休闲,本来约的面试时间比较早,但是由于个人原因回了次老家,结果这个面试不得不向后推了,面试当天来到公司,前台居然一个人都没有,之后电话联系到面试官,首先表达了之前改约的歉意开始了面试过程。

面试主要围绕之前的项目进行,对具体的系统实现问的很详细,通过对细节的了解,对我之前的工作内容有很多不理解,感觉有很多内容不符合他的认知,整个过程倒还轻松,没有太多的技术问题,总体感觉不是一路人,很可能走不到一起。

聊了大概一小时,换HR继续聊,还是问了之前项目、期望薪资以及入职时间等等,确定了是卡牌组再招人,问了一些当前公司情况之后,按照流程回去等消息,但个人觉得可能不太合适。

  • 面向对象要求比较高,C+Class的方式不被认可
  • 着重问了一个游戏系统的实现方式(押镖)
  • 面相对象设计技能系统
  • 强调游戏充值实现的重要性,以及可能出现的多种情况
  • 认为只有DBA才有权利修改数据库结构

准备离开

出去面试一圈基本确定了新的工作,是时候离开了,先跟带自己入门的兄长道个别,我们两个聊了很久,对于我离开去学习新知识,兄长表示支持,他不仅是我工作上的领路人,同时脾气特别好,平时处理问题也很妥当,一直是我学习的榜样。

紧接着便向老大提出了离职,准备年前离职后去新公司入职,而老大的意思是再等等,年前太仓促了,先看看现在公司的情况,年后回来如果还想走再办离职吧,考虑到还有一段时间的就要放假了,为了更好的完成了交接工作,我答应了老大的请求。

即将离开

过年期间考虑了好久,还是准备出去闯一闯,今年春节的新型冠状病毒疫情非常严重,很多公司都推迟了上班时间,虽然2号之后就回来上班了,但是很多同事由于封路的原因都还没回来,离职手续也一直没有办成,年后又找老大聊了一次,毕竟工作了6年,虽然不舍,但是确实该离开了,期待下周的情况能好一些,能顺利办完手续开始新的旅程。

挥挥手再出发

更新于2020年2月15日22:45:51

挥手告别

事情办得比较顺利,经过前期的准备,周一便完成了工作交接,上传了交接文档,周二开始办理离职手续,由于新型冠状病毒疫情的原因,公司依旧没有什么人,好在办理离职的人员都在,签字、签字、再签字,成功在下午拿到离职证明,不过唯一遗憾的是,工牌和门禁卡同时上交了,不能给我留个纪念了,毕竟是在身上装了6年的工牌,6年了几乎没有离开过……

因为很多同事也没来,加之疫情的严重性,散伙饭并没有吃成,前一天下班的时候专门去旁边的簋街转了一圈,发现除了几家仅有的外卖之外,都是黑着灯的,这可是簋街啊,是让人们可以排队等到凌晨2点的簋街,现在居然这样冷冷清清的,找不到吃饭的地方,散伙饭只能作罢。

下班前跟仅有的几个来上班的好友道了别,当然其中还有我那位可敬的兄长,当所有人都在关心你飞的高不高时,只有朋友关心你累不累,兄长就是这样的朋友,临走了还关心地问我社保能不能接上,只因为我之前和他提过一次担心社保断缴的问题。因为很多人还没来上班,剩下的关系好的小伙伴,在我晚上回家后,通过微信开始了与他们的远程云分别。

还看今朝

告别了过去的工作,自然要步入新的旅程,为尽量避免人员接触,新的公司在周五为我在线办理了入职手续,两位帮忙办理入职的新同事真的非常友好,整个流程遇到不懂的都会及时解答,这让我非常期待下周一正式工作后的生活,新的旅程即将开始,又要在一个地方生根发芽了~

Albert Shi wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客