zoukankan      html  css  js  c++  java
  • 丰巢面试小结

      从两点半面试到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的连接情况,端口开放情况。

  • 相关阅读:
    还在使用golang 的map 做Json编码么?
    Golang 性能测试(2) 性能分析
    golang 性能测试 (1) 基准性能测试
    消息队列 NSQ 源码学习笔记 (五)
    消息队列 NSQ 源码学习笔记 (四)
    消息队列 NSQ 源码学习笔记 (三)
    消息队列 NSQ 源码学习笔记 (二)
    消息队列 NSQ 源码学习笔记 (一)
    你不知道的空格
    Supervisor 使用和进阶4 (Event 的使用)
  • 原文地址:https://www.cnblogs.com/snidget/p/6253432.html
Copyright © 2011-2022 走看看