丰巢面试小结

  从两点半面试到4点半,大概两个小时的面试时间。跟两位丰巢的技术进行了简单的交流。做个小结。

  第一面,梁Sir, 大致讲了一下以前做的一个游戏平台,使用笔记本进行了简单的演示。

  我现在再做一个比较清楚的陈述:手机游戏平台是连接玩家和游戏的一个站点,从玩家这边出发,最先看到的是一个手游平台里的游戏中心中心模块,在里面可以找到喜欢玩的游戏,打开http://h5.3333.cn 比如这个页面;

团队的主要负责推广,跟其它的媒体合作,比如百度,分众等把大量的用户引入到手机游戏平台,这里会跟一个广告模块进行关联,方便进行广告效果统计;

点开游戏之后,会有一个用户登录页面,这个就是手游平台的用户模块,负责用户信息的维护,登录,注册,修改密码,绑定手机号等等;

登录之后,调用平台的进入游戏接口,完成了游戏的跳转,这个进入游戏的接口或者说过程,如果是H5游戏,使用的是服务端跳转,如果是手机端app游戏,使用的是客户端跳转;

进入游戏之后,点开游戏的商城,就进入了手游平台的充值模块,接入了各种主流的支付渠道,比如支付宝,银联,微信等,玩家完成付款之后,支付渠道会给手游平台一个成功的通知,这里会有一个异步通知模块,对生成的任务进行异步通知到游戏服务器端,对玩家进行游戏道具的发放。这个是玩家使用的服务程序;

  此外,还有一个运营分析后台系统,给到运营人员或者老板看到相对实时的数据,这个采用的是sqlserver数据,主要收集两类数据,用户行为数据,订单数据,第一层做了一个读写分离,因为用户行为日志数据量庞大。写的数据库服务器采用的一台配置比较高的服务器,会做一个定期的数据清理,只保留3个月的数据,基本是没有索引;读的数据库采用的是一台配置比较低,容量比较大的SQLServer数据库,用来做查询和归档,为常见的查询建立了索引;第二层,数据清洗层,依次对行为数据做了一个小时去重,天去重处理;第三层,从去重的数据中得到用户新增表,角色新增表,设备新增表,账号新增表;第四层按照统计模型使用第二层,第三层是中间表进行统计计算,固话得到最后查询的结果;  最后一层就是BI展示了,使用HighChart进行展示。

  第二面应该是个技术总监,未知姓氏。

  一上来就问了一个ELk的知识,详细了问了下里面的Logstash的竞品有哪些?以及ElsticSearch碰到过哪些问题,以及怎么解决的?

  然后还有Jstack,Jmap,但是我只用过JVisualvm

  还有就是netstat, telnet,curl等基础命令,看来丰巢的线上系统应该不是很稳定,jstack是查看线程的命令,jmap是查看内存的命令,详细我后续会查看,并把这个缺的知识点进行补充;

  最后我跟他说了之前做的数据分析系统的思路,他直接否决了,提了一个阿里的一个数据库同步工具,总之各种高大上的东西,我确实没有用到过,当然答不上来。

  我从跟他的交谈中,它说了一个团队规模比较大,不可能去看所有的代码,我跟他提了一个小建议,边界代码封装好,很多的跟业务无关的代码可以使用工具化生成,只让开发人员写业务逻辑代码,不知道他有没有听进去。

丢掉二面的原因可能更多是因为以下几点:     

1,后面提到了一个跟技术无关的话题,他说比较认可一个诚实,可以静下心来做研究的,而我不是;

姑且不论对错,这个都值得我反思一下。

  这个问题我确实是存在的,不太精通的问题,也聊了起来。但是,开源工具千千万万,不可能每个都专研到源码和设计原理级别的,更多的是基于使用场景。

给我一个场景,我通过查文档和资料,熟练使用和精通原理不过是时间的问题。

 

2,设计理念的差异

  我跟他提了一个简单心得,一个项目的性能瓶颈,10%在代码层面,90%在数据库层面,高级和普通的开发人员写出来的代码性能不会相差10倍,而在数据里面,架构,库,表,索引的设计良好的话,性能可能很轻松的相差1000倍。推荐采用存储过程,如果相关的表操作在一个数据库中,这样可以减少很多的请求。

  而对方不这么认为,他比较注重代码层面,比如他让团队把所有的存储过程都去掉了,全部使用sql语句,说数据库只是一个存储的作用,说一个简单的改动,把以前业务线上的同步处理全部改成异步处理,性能和响应时间提升了很多。

3,说的是不要轻易的推测丰巢的内部实现,除非有实际的了解。

  我说了我的做法,根据业务,很自然的会设计出自己的系统;然后如果有机会加入,结合实际的项目代码和设计方案,进行论证和比较,找出不按照我这么设计的原因,并且发现一些我觉得存在的问题。

 

他面试的最终结果就是我不符合高级开发工程师的标准,跟他设计理念相差太大,可能由于环境的限制,没有面对过大数据的经验,设计出来的系统架构比较古老,然后简历中列出来的很多开源的工具只是使用层次,没有深入理解。

 

从失败中总结,我觉的我第一步要做的是进行知识的学习,把问到的没有答上来的知识点先通过互联网进行熟悉。

第二步,思考下沟通的方式,不要给人一种不诚实,不专业的,专研不够深入的感觉;

第三步,在自我管理,系统设计方面,寻找一些在大数量范围的解决方案,串联成面,解决隐藏在方案背后的难点很问题。

第四步,管理的理论形成,为转型成管理型的技术人才做准备。  

 

开源离线数据同步工具DataX

 

-----------------------------------------分割线----------------------------------

早上找运维同学讨论了下,

首先,局域网内部ping  响应时间一般是2ms之内,超过10毫秒,表示局域网搭建存在问题;

不同机房之间的服务器互 ping,响应时间一般是在30ms之内,超过则表示存在问题;

阿里的那个离线数据库同步工具,需要使用共享存储,使用到阵列柜这种很费钱的设备,一般公司没有财力去使用; 

 

 

单个tomcat的服务器并发最多300  按照8核心,16G配置,不过暂时没有测试过;只做简单的交互,不涉及到数据库操作;

并发量太大了,数据库会出现瓶颈,超过500的并发访问就可以考虑数据库的负载均衡了;

 

jdk自带的几个小工具的使用;

jmap,jstack,jstat,jconsole,jvisualvm

jmap查看内存情况;

jstack查看线程的堆栈情况;

jstat查看gc的情况;

jconsole,jvisualvm综合查看内存,cpu,线程,类的信息;

 

简单的使用都是搜的文章,然后在本地实验过了。

 

netstat 主要是查看服务器的网络状态,tcp的连接情况,端口开放情况。

 

posted @ 2017-01-05 18:04  李福春  阅读(3877)  评论(2编辑  收藏  举报