admin 管理员组文章数量: 1087581
登录排队服务器QueueServer
最近得到了一个某趣Plus公司面试的机会,面试过程应该属于他们认可能接收的程度,工作经验也对口
面试完之后,他们说公司是有个惯例,出一个编程题,然后要求自己回去完成把代码发给他们
题目如下:
在面试后请候选人用GoLang完成编程作业: * 问题描述:新游戏在开服后往往会有瞬时大量用户登录涌入的高峰流量,对服务器产生压力。* 解决方案:开发开服排队系统,对到达服务器的大量用户进行队列缓冲,名为QueueService,根据服务器压力情况,逐步让队列中的用户拿到登录服务器的令牌(token),代表该用户请求可以被处理了,从而缓解登录高峰,排队中用户要能够“实时”知道自己在队伍中的位置变更。* 开发要求:线下,无时间限制
* 交付:* 服务器QueueService:要求使用GoLang编写, 使用channel, 使用tcp长连接通信. 要求按照工业级代码标准开发, 比如高并发下吞吐瓶颈是否合理, 各种边界处理是否完备, 在系统发生错误时进程是否健壮* 客户端:对QueueService发起请求, 并对队列进行实时监控。要求使用GoLang编写, 使用tcp长连接通信* 文档:说明怎样部署和运行, 如何进行压测, 最好有完整压测数据(QPS, RTT, CPU, Mem等)
我花费了三天的时间,完成了这个项目,这中间还一度失眠没睡好
发给他们后一直没反馈,我主动问了才给了反馈
面试官反馈是觉得golang你不是很熟悉,参考的go代码库选的不对,整体行文没有做到分层和结构化, 同时tcp连接用的别人写的库,题目里我们是强调自己管理tcp连接的。
看到这个结果对我还是有点受打击和气愤的
- golang不熟悉:之前工作中主要是用C++,但对golang深入学习过(源代码层),用golang只写过小项目,面试的时候我透露了这一点,目前这个小项目上能体现出好不好,我也不好判断
- 代码库选的不对:这个… 我无法接受,选用的gnet开源库是经过测试验证的,接口易使用易理解,且内置了ants协程池,官方甚至还附带了使用gnet作为底层网络服务的公司(腾讯、小米、百度、360)
- 整体行文没有做到分层和结构化:这个就抽象了,怎么说都有理,项目中功能基本都封装成模块了(msg,sequence,queue,conn,client),相互耦合度的并不高,不知道这样一个小的项目还能做出什么高度的分层和结构化
- 那个tcp连接要求自己管理:在题目要求中,我是真心的没找到这么一条
辛苦了两天多,就用这几句没有所以然的话打发了,挺操蛋的,这也是我气愤的地方
当然工作都是双向选择的,人家不选择你也没有必要灰心,小小的总结下:人在江湖飘,岂能不挨刀,万事顺其道,所以不要太计较,今日记录到此,此事翻篇
这里就把项目原封不动的上传下,以便以后自己重新评估下
代码中没有加入过多的概念,尽量保持足够的简洁高效,但使用了一些已封装的goroute池子的概念,并以此封装了一个sequence来顺序执行,保证数据多协程安全访问
代码下载地址
CSDN下载地址
github下载地址
本文标签: 登录排队服务器QueueServer
版权声明:本文标题:登录排队服务器QueueServer 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1700324446a397214.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论