程序猿没有什么高大上(二)

十月份来到帝都,十一月十一号才正式拿到OFFER,期间楼主面试了约十多家公司,当然不包括一些培训机构的面试。从而也总结了,一听就知道是否是培训机构的邀请。一般的公司就会直接说“我是XXX公司的人事.....邀请你什么时间来面试。”然后简单核对下你的信息。而一般的培训机构就会说“你是一个人来的北京吗?你住在什么地方呢?你之前有过工作经历吗等等,无关的话题。”有的也会假装问你几个“专业的”问题。

言归正传,看源代码确实很不容易,但是在老表的讲解源代码框架的帮助下,也能了解简单的框架原理。对于我来说,最难的就是不知道自己该看什么,该学什么?分不清哪些是源码,哪些是业务代码。还好他们的框架还比较成熟,所以学起来也不是很费劲。首先我看的是前后端是怎么通信的就去找Handler类(一般成熟的框架都是以英文作为类名),还可以了解到怎么去定义协议。再看玩家之前是怎么通信的,一般牵扯到多线程,没有人指导的话,看起来不是很容易。其次就是玩家数据是怎么保存的,怎么和数据库建立连接的。然后就看登录协议,玩家怎么进入游戏的。这个很重要,一般面试都会问到。其实能看的懂他们是怎么调用的就好,对新手而言不必去理解底层到底是怎么实现的。

自己了解之后,老表就开始给我讲解框架的原理,他们是采用分布式的,根据需求会开启多个进程,按进程处理的业务逻辑不同命名为PlayfromNode:负责平台验证,充值;GameNode:负责游戏的一些业务逻辑;DbNode:负责数据保存,与数据库建立联系,还会有接SDK的Node等等。它们都是相互相连接,通过ZMQ传输信息。还会有一个与之相连的Node会记录所有的Node的信息。这样可以查询任意进程Node的信息。(以上的Node只是一个类名而已,意为节点,不是Node.js,面试的时候既然有面试官问我是不是Node.js。)每一个进程下都会开启多个线程Port。注意这里也是类名port。线程只负责消息的传递,每一个Port下会有多个Game,Game才是真正业务逻辑的代码。那么该线程PortA下的玩家是怎么和别的线程PortB玩家交流的呢?首先PortA线程下的玩家会发起一个Call();Call()也是一个类。同时会定义一个returnCall()——回调原理;Call()里面会传入一些参数,比如:本线程Id,本玩家Id,干什么事的参数等。call()会传入到上级Port,Port不会做任何判断,它只负责消息的传递。Port会传入到所属的Node,Node此时会判断线程PortB下的玩家是否在自己所属下的线程,若是,直接传给他所属的线程,若不是,会通过ZMQ传给别的Node,同样做出相应的判断,直到找到对应的玩家,把参数传入执行完后,回调到发起call()的returnCall()中,执行完,玩家通信才算结束。

可以发现玩家交流都是在自己本线程下操作自己的数据,不会去改变别人的数据,所以整个框架是不加锁的。ZMQ是基于块传输的,所以Node之间交流也不用担心流切割问题了。大致的通信原理就是这样。当然,面试期间不会单纯的问这些,不一样的公司,问的侧重点也不一样。由于我也是敷衍一下面试而已,所以学习的不是很深刻,理解的也可能有偏差,但是能拿到一份一般公司的实习工作,还是可以的。当然,好公司要求会更高,光知道这些还是不够的。假如你真的是一点项目经验也没有,那么语言基础一定要很好,我去完美面试的时候,就败在基础上。大公司笔试考的都会很全面,比喻有这样的一个填空题:重写父类方法的关键词是___;不留心的同学很容易失分。

十月中旬到十一月十一号,我投递了上千份简历,收到了十几份面试机会,第一次面试我答非所问,只有短短几分钟就结束了。第二次时间延长了十分钟,第三次,第四次.....最后成功面试了一家公司,面试时间持续了三个多小时。hr,主程,经理,都聊的很欢。也成功收到了他们的入职邀请。很开心!!最后我成功拿到了三家公司的入职邀请。由于我也只是一个普通的二本院校,而且不是科班出身,所以不管什么样的公司,先工作看看,在工作中学习成长。

目前已经工作两个月了,做了一个小功能,第一次去写业务代码,犯了很多傻*型的错误,我心里只有一个概念就是,我确实是个傻*,我有很强的求知欲,只要能给我学习的机会,怎么样都行。其实我的业务上也没有什么技术而言,说白点无非就是调个接口写个IF_ElSE,我一直以为程序是一种很高大上的东西,看了业务才发现,我是被电影里面的黑客误导了。没有几个程序猿能做到黑客那个地位。但程序也有他的学问所在,打个比方就像英语的语法一样,掌握了规则,就OK了。我们每天干着无非是“码农”的活,真正工作上用到技术的地方很少。

嗯,就说到这。。。

猜你喜欢

转载自blog.csdn.net/qq_39742510/article/details/79025289