当前位置:   article > 正文

java物联网第二天 感悟下_java 物联网项目经历

java 物联网项目经历

我的物联网项目(十八) 城市合伙人战略

img

做城市合伙人是在公司自营摇摇车投放进入一个鼎盛时期开始的战略目标,这个时候决定做主要原因有二。

1.经过4,5个月时间摇摇车投放的运营,已经验证过这种模式所带来的利润,用老板自己的话来说“你们所关心的是平台本身,我要做的事情是快速复制,不断复制成功”。

2.经过2,3次的融资公司有一定的资金,可以多一条腿走路始终是个好事,公司除了做自营投放摇摇车,另外拿出一大半的人员,财力物力来做城市合伙人,也许是另外一片蓝天也说不好。

关于城市合伙人的做法,公司前期用了不少时间和精力来规划合作战略,最初核心层骨干开会讨论的招商政策是全国各地的对公司平台这种模式感兴趣的人士都可以加入,加入的条件是公司出摇摇车,每辆摇摇车要缴纳保证金2000元(具体多少记不太清楚,后面好像也一直在微调价格),一般都是20万起步,即100辆摇摇车为最低加入的门槛。这个方案初步制定完毕后,就开始各种渠道招商,包括线下举办过一次全国招商大会,当时全国各地到场的也有20,30个左右,那次招商大会办理的很成功(本人没有现场参加),但是到后面貌似没有人来加入,具体原因也就不太清楚了。这个关于城市合伙人前期的策略方针这个阶段算过去了。

接下来的策略也在不断的调整改变,最后决定做存量市场,何谓存量市场?中国在摇摇车投放这个舞台已经有10多年的历史了,全国各地的传统投放商也有N多了,他们这批人几乎占据着全国绝大多数有利的区域位置,别看一块钱的生意,有的大的投放商下面有几千几万甚至几十万的摇摇车每天都在为他们赚钱,可谓赚得钵满盆满。这些传统投放商最大的痛点有三。

1.摇摇车本身无法管理,数量越多,管理越难。

2.金钱帐目不透明,全靠线下人工收币统计。

3.请大量的工人来帮忙管理摇摇车投放的区域,成本很高。

城市合伙人的策略可以转向这些痛点,城市合伙人的平台毫无疑问的确可以解决以上问题,接下来的事情就是找一些大的投放商开始合作对接。这个里面有些事情先阐述清楚:

1.传统投放商已经有了摇摇车,公司只需少量的投入提供盒子(盒子本身成本也就几十块钱),安装在摇摇车即可。

2.关于公司盈利这块,前期是免费提供盒子,每笔订单流水不抽成,等于公司盒子和平台都是无偿免费提供,当时为了加大加快盒子在全国投放商安装的进度和力度,采取的是外面的合伙人下面只要安装一个盒子就补偿50块钱(具体不太清楚了)。

3.对于公司来说不盈利,但是大批的数据走平台,始终是个好事。另外就是合伙人要是依赖上这个平台,平台后面收取一定的软件服务费用,也是合理的,当然这个是后话。

4.这里先埋个伏笔,后面的文章会说到,城市合伙人下面摇摇车接盒子,无论是平台产生的大量数据,还是使用微信扫码大量的用户,都可以做线上业务,一旦线上业务开展起来,所盈利也可抵消合伙人的线下投入,甚至赚的会更多。

城市合伙人的战略就算落地了,按照预期,风风火火的开干了,很长一段时间里面,耳边听得最多的字眼就是:“xxx城市合伙人给开一个账号”,"xxx城市快递发100个盒子"等等,感觉整个世界都是城市合伙人(公司招了一批商务,在外面帮忙给城市合伙人装盒子,据说外面合伙人每安装一个盒子,这部人也有提成)。

关于城市合伙人这块有太多的东西要写了,后面会继续描述。

我的物联网项目(十九) 城市合伙人产品设计

1.0平台没有城市合伙人一说,毕竟是自己运营投放,所以基本也就是运营平台在运维后台的所有数据,包括相关的流程跟踪也是在运营平台。当初1.0前期的整个系统功能如下:

在这里插入图片描述

当初在设计城市合伙人这个平台时,也曾经想过干脆在现在的运营平台上改造,其实除超级管理员外,城市合伙人和现有的运营平台所有账号都是平级的,只是角色权限不同而已,当初的运营平台已经具备功能权限和业务权限,其实改造起来也不是太麻烦,后面经过大家的慎重考虑后,还是决定将城市合伙人平台独立出来,专门供合伙人使用,同时,运营平台自营的账号和数据也切换到城市合伙人平台,毕竟自己也是一个合伙人嘛!

当初将城市合伙人单独出来,有如下原因:

1.2.0整体的平台架构已经不兼容,由传统的MVC单体应用,单数据库转变成了前后端分离,微服务分库的模式。

2.城市合伙人本身的产品需求和原先自营的产品需求完全不一样(虽然可以在运营平台上改,但会改的面目全非,自己自营产品流程和界面体验可以忍,再慢慢改进,甚至游戏规则都可以自己定义,但是城市合伙人大多都是一些文化层次不高的人,如果用这种系统几乎很难入门,所以针对这种用户群体,城市合伙人的产品设计和界面都是需要重新去定义的。

城市合伙人一部分系统设计:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我的物联网项目(二十) 合伙人羊毛党

城市合伙人平台上线后,对于系统监控最关心的两个事情就是用户和订单,其中以订单最为重心。原因很简单,因为外面很多城市合伙人陆续加入进来,摇摇车的流量入口越来越大,新注册的app用户和启动摇摇车产生的订单越来越多,1.0平台那个时候外面摇摇车大概1000两左右,一天内最大订单数2W左右,2.0平台城市合伙人上线一段时间,摇摇车数量达到5000量左右,一天内最大订单数有7,8W左右。数据非常好,感谢合伙人平台,大家都很兴奋,因为全国各地的合伙人还在不断的加入,数据会更加好。

突然有那么1,2天,订单数据好的奇怪,比平时多了好多万,在查看订单记录时发现一个很巧合的现象,同一个合伙人名下相同的摇摇车一段时间里面连续产生几千几万个订单,这个里面用屁股都算的出,摇摇车每次启动摇五分钟,就算你生意再好,排着队去坐摇摇车,1个小时也最多摇二十次吧,但是订单记录显示1分钟都有几百个几千甚至更多订单,这里面肯定有问题,仔细一查,这些订单都属于app扫码消费订单,再看消费用户,吓了一大跳,基本都属于新注册手机用户,没有充值,消费的全是注册免费玩三次的新人劵(当时平台为了推广app,新注册用户都可以免费玩三次)。

我们大概已经清楚了,有合伙人利用新注册玩三次在刷单,在薅羊毛。可能很多人都会纳闷问,从哪里弄来这么多手机号码,毕竟手机号码注册要短信验证码的。其实这个里面就要用到一个羊毛党专用神器了-猫池卡,关于这个神器不多做阐述,自己可以去网上查询。

在这里插入图片描述

这里先提醒下,城市合伙人加入平台。公司是不做任何盈利的,注册免费送三次玩摇摇车,也是原来为了推广app,公司在输血补偿的(这种刷单模式按理来说,原先公司做自营也是存在的,那个时候公司和商家是55分成或者46分成的,商家也可以这样刷,但是利润没那么高,毕竟每单都要让出一部分利润给公司平台),只能说传统的投放商是专门吃这个饭的,1块钱的生意的老板就是精,就是不一样,典型的羊毛党,薅羊毛。

前面二天时间里面,技术这边还在研究怎么从技术层面上防止狂新注册用户,比如同一个手机app一天只允许注册5个新用户,具体实现还在测试中,结果又出来一档次配合大量新用户注册更高刷单境界的事情,有城市合伙人把名下原先1块钱玩一次摇摇车调成5元一次,这下就彻底牛逼了,原先1块钱一次,一个新用户刷三次,公司平台要被撸三块钱补贴,调成5元一次,公司平台要被撸十五块钱补贴,这个简直逆天啊。当然,合伙人要是够狠的话,也可以调成摇摇车100元一次,当然这其实就是在抢钱了。针对这档事,技术这边结合业务又得商量对策,最后决定是将新用户注册免费送三次改成送三元劵,虽然稍微解决了那些城市合伙人将摇摇车调成高价来狂撸的问题,但是利用大量新用户注册刷单的问题依然还是存在的,对于有的合伙人来说羊毛还是值得继续撸的,对于平台来说,每天都在输血。最后,平台这边除了警告合伙人的不良做法,明确告之他们如果继续利用新用户注册刷单是可以被系统监测查的出来的,这部分订单无效,公司不会买单,屡教不改者,停止合作。

嗯,事情并没有结束,我前面讲过,一块钱生意的老板就是精明,道高一尺魔高一丈,紧接着另外一档薅羊毛的事情又发生了,平台监测到城市合伙人下面有商家大量的app充值,有的10分钟内冲几千块甚至更多,都是100块的冲(要是换做之前公司做自营投放,简直会笑爆,紧接着群里面会发红包)。这里又要提醒下,公司平台当初为了推广app,是有冲送规则的,比如冲100送30元,说到这里大家都懂了吧,合伙人利用冲送规则在薅羊毛,相当于合伙人自己冲了钱,自己立马消费掉,公司补贴的是送的钱,这样照样输血下去。

公司被接二连三的合伙人羊毛党在薅羊毛,其实平台本身不变,本身的规则也是当初打算用来复制的,毕竟是从自营走下来的模式,但是到了合伙人这里有了本质上的改变,那就是合伙人赚到钱公司不做任何盈利,零分成,也就因为这样,薅羊毛变成了顺理成章。真是头痛,打羊毛党单纯从技术角度来上说效果不是特别好,除非是业务到了无可改变的地步,但是目前的平台还没到这个地步,所以坚决干掉羊毛党的利益,公司最后决策是低调发展app用户(隐藏app下载入口,最好放弃app,因为app用户目前线上运营不起来,推广成本又高),取消一切冲送规则,重点推广微信扫码,今后将线上运营放到微信和小程序。

终于,世界安静了!

最后科普下,什么是羊毛党?

在这里插入图片描述

羊毛党对企业的危害?

在这里插入图片描述

我的物联网项目(二十一) 摇摇车三种消费模式和城市合伙人

img

我们的摇摇车支持三种消费模式:

1.投币

和传统摇摇车一样,通过一元的硬币来启动摇摇车,公司其实在做这个平台当时的初衷是不做投币的,只做app扫码,一来方便用户,毕竟这几年来流行各种扫码。二来做线上运营,毕竟通过系统和用户的粘度增强。但是在当初摇摇车实际投放中,发现一大部分人群,包括老年人带小孩,以及这部分人群使用的手机(老年机),网络等原因导致使用app的门槛很高,所以后面又加上投币这个功能。

2.微信扫码

微信扫码也不是公司一开始的初衷,因为当初的平台布局是app用户,在app上做运营,从某种意义上来讲,用户一旦养成习惯,app上的用户忠诚度,粘度会更高,当然,这部分用户前期需要花很多成本去引导,去教育,去培养。微信用户群体就不一样,天生的优势,几乎每个人手机都默认安装有微信,而且微信使用已经深入到互联网社交群体里面,微信本身就是一个巨大的流量池,如果在这个流量池里面做线上运营成本会低很多,而且空间也巨大,现在不都是流行在微信流量池里面做各种营销嘛。

3.app扫码

作为公司的初期扛把子,也是前期摇摇车消费的唯一途径,的确光芒万丈,被寄于厚望,全力投入,全力开发,在实际线下运营中,发现和预想的效果不太一样,虽然有注册免费玩三次和冲送规则的强力护航,每天app注册用户还是有不少的,但是正如前面讲到,摇摇车使用群体覆盖不全面,和传统只投硬币摇摇车竞争少了个武器,继续在保留app扫码的前提下,继续开发了微信扫码和投币两个武器。

上面三种摇摇车消费模式,投币消费虽然可以增加线下使用人群,增加订单数量,但其实对于平台来说,危险有二:

1.投币消费用户已脱离线上平台,等于是离线版的用户,对于做线上运营来说毫无用途。

2.投币消费订单资金流完全不走线上,在商家手里面已经被截流。

对于第2点,公司平台做自营投放摇摇车的时候,这个还没有那么明显,马马虎虎可以容忍。毕竟平台和商家55分成,一个硬币投下去,商家线下将硬币收走,另外5毛会在线上由商家账户里面扣,允许负数,后面商家再通过线上充值平账即可。

以上说了这么多,终于可以说说城市合伙人相关的事了。

城市合伙人平台上线不久,三种消费模式让大部分传统投放商很不适应。

首先,app扫码,将注册免费玩3次和冲送规则利用的淋漓尽致,刷单刷的不亦乐乎。

其次,微信扫码,合伙人要求每一次扫码消费,每笔订单,要求不走平台提现的方式,要直接钱打到他们的微信钱包或者卡里面,说白了,线上资金不想走平台,用户每次1块钱消费要直接秒入到他们的口袋里面。

再次,平台是零盈利,不收合伙人任何费用,大部分合伙人干脆放弃线上支付,全走线下投币订单,比如摇摇车机身上不贴二维码,用户只通过投币,平台订单数量虽多,但绝大部分是投币订单,从某种意义上来讲,城市合伙人平台对于合伙人来的价值只是一个查看账目,统计数据,盈利分析的一个工具而已。

城市合伙人平台下一步应该怎么做?做哪些业务功能?怎么样才能让平台去绑住外面的合伙人,让他们一旦使用上就无法脱离并依赖,这个是我们一直在思考并要去解决的问题。与其说平台战略,还不如说合伙人心思也挺那个,对于他们来说,他们自己也清楚,平台不收取任何费用,无论是软件还是硬件都是无偿提供,他们自己也要留下一步可撤方针,其实他们现在已经在做这种事情,一旦有稍微不顺心之事,就扬言要卸载盒子,停止接入平台。我只能说呵呵了,其实对于公司平台来说,合伙人的流量入口那么不健康(绝大部分投币),他们对公司平台的贡献已经不大,心里清楚就行。不过话又说回来,城市合伙人平台我们会一直持续升级,维护和改进下去,也许下一步的城市合伙人战略又不一样呢 ? 到那个时候,真正的能做到了双赢,大家都开诚布公,用心经营和合作下去,那个时候是我所期望的。

我的物联网项目(二十二) 微服务分库查询优化

查询优化主要涉及到两块。

1.订单表数据查询优化

订单数据库是单独出来的,每一条记录记录显示都涉及到用户名称(微信号,昵称,app昵称),商家名称(商家名称,电话),设备名称(设备编号,车牌号)等。

在这里插入图片描述

按照目前的表设计,订单库和用户库,商家库,设备库都独立,表都是通过主键ID进行关联,订单表存放的是userId,merchantId,deviceId等。这种设计方式带来一个瓶颈,就是订单记录显示的时候要通过ID关联查询显示出用户,商家,设备的信息并展示在前端页面。当初在开发过程中,由于时间比较赶,没有做过多的细节优化,都是通过后台订单微服务通过ID去循环查询去用户,商家以及设备的信息再到前端展示,刚开始还好,毕竟每页只显示10条数据,打开页面过程中3秒左右。后面页面调整到显示20条,结果打开这个页面订单微服务偶尔报超时现象。为了解决超时这个问题,将数据组装放到前端,由前端根据ID再请求具体的用户,商家,设备微服务展示相关信息,虽然解决了微服务超时问题,但是前端每次访问页面出现了大量的ajax请求,对前端性能造成非常大的体验影响。也曾经和业务有沟通过,就是这个订单页面显示的时候能不能不显示用户,商家,设备的信息,只显示订单记录相关,然后通过点订单详情进入详情页面再显示用户,商家,设备信息,但是业务这块产品体验又不太好,所以还是得想办法解决这个问题。其实这块订单表当初设计的时候太过于追求数据库的设计范式,导致查询起来关联的太多,其实订单表设计要考虑到第一时间的呈现方式,经过后面优化,其实最简单的方案就是在订单表冗余几个相关字段,用户名称,商家名称,设备名称即可。可能还涉及到一个数据更新的问题,一般的业务场景主键ID不可修改这个是肯定的,但是有些可以修改用户名称什么的,这个时候可能需要同步更新到订单表的那些冗余字段信息,注意这点就可以。

2.大数据单表多条件查询优化

在这里插入图片描述

订单是按月物理分表的,如t_orderhistory201801,t_orderhistory201802,t_orderhistory201803等,查询条件上的查询时间也是控制了只能选择当月的第1天到当月最后一天,随着平台的业务量越来越大,现在又出现一个问题,当选择的查询条件过多,然后选择的时间区间较大比如选择1号到30号,结果查询速度巨慢等很久才出来结果,甚至也会出现查询异常超时现象。问题引起原因我们也清楚,是一个月的订单数据量太大,查询条件过多,区间过大,然后表又做全局扫描,所以导致慢和超时现象,这块要继续优化方案目前有二种。第一种是将月份表继续分表,比如按周,甚至按天尽量压缩查询的仓库。第二种是限制查询的时间区间,比如每次只能查三天的数据或者更小。另外查询条件较多的情况下要做联合索引(组合索引)。目前我们用最快的时间的时间解决暂时先限制查询的时间区间。

另外提下,数据库架构表设计其实和产品设计都密不可分,双方一定要结合起来做设计,有时候产品细节设计要倾向于数据库表设计。

我的物联网项目(二十三) 统计数据优化

在这里插入图片描述

在这里插入图片描述

平台无论是城市合伙人,还是商家,都有大量的统计数据的需求,比如统计商家一个月的总金额收入,投币消费总金额,微信扫码消费总金额等。这块的优化也一直在做,大概分为这么几个阶段。

1.实时count统计订单表

1.0平台当初2个月的时间开发完毕并上线用的就是这种方式统计数据。当时的订单量并不大,所有涉及到统计相关的数据都是实时的通过SQL去订单表COUNT或者SUM出来,前面1,2个月基本没碰到什么问题,也一直没怎么去管它。

2.每天定时任务统计

在2.0平台上线不久,问题立马就暴露出来了,经常反应说有统计数据的页面反应都很慢甚至异常超时,当时讨论业务场景可以给做一个统计表,每天凌晨通过定时任务去统计所有城市合伙人和商家的相关数据,对于合伙人和商家来说,当天查看的都是前一天的数据,当天的统计数据要第二天才可以更新。后面随着人数的增加,订单数据量的增加,每天凌晨统计数据由原来的10几分钟到1个多小时,后面还在增加,另外外面合伙人和商家的需求也越来越明确就是要实时看数据,不能容忍隔一天再看。

3.通过MQ异步实时统计

MQ是个好东西,很多异步场景业务都可以用它来解决。用户下单,涉及到用户扣费,城市合伙人和商家的劈帐分成,都是通过MQ异步解决。详情见 我的物联网项目(十四) 分布式事务,同样的道理,统计数据也可以通过MQ去实时更新,到目前为此,用这种方案平台依然是稳定的,数据都正常。

以上的都是业务统计数据,还有些场景不是实时性很强,而且需求也是千奇百怪,而且不是刚需,可能统计一次下次不需要的,像这些情况,平台都是通过人工将各数据库的表比如用户表,商家表,订单表,设备表等导出来,一起放到一个新的统计数据库,然后再通过SQL去做查询,去做分析,一般很多数据分析场景通过这种方式的比较多。

我的物联网项目(二十四) 订单编号生成规则

这一章其实应该在前面就要写到,顺便说下,我写这些文章只是随意写写,并没有太强的先后顺序,可能在写到后面的时候突然想起来,还有些东西前面应该交代的,所以我就补上来,但是整体的先后顺序是没有问题的,后面有时间再重新整理。

订单的编号生成规则1.0的时候,平台用到是UUID32位,简单粗暴,但是2.0平台的时候订单流水号要赋予更多的价值意义,比如通过订单可以知道所在区域,当天订单所在的数目等等,所以订单编号规则重新设计。
在这里插入图片描述

订单编号规则必须按照业务和区域进行设计

在这里插入图片描述

在这里插入图片描述

从技术上实现,利用的是redis的increment, 订单的生成服务器比较重要,平台用到是redis的集群版,保证redis不会有问题。

在这里插入图片描述

我的物联网项目(二十五) 平账难题分析

平账一词是在开发摇摇车投币功能出现的,当初目的就是解决,用户一块钱硬币投进去,商家掌管摇摇车钥匙,有随时收取硬币的权限,平台怎么分账?当初的设计方案就是用户投进去硬币,商家线上账户上的可提取资金扣掉分给平台的钱,如果这个商家要是线下投币生意大于线上扫码的生意的话,商家线上账户可提现资金就会出现负数,这个属于商家欠平台的钱,这个时候就需要商家通过线上充值,进行平账。

本来整个游戏规则是合理合法,商家主动平账,平台也拿到分成收益,整个环节毫无漏洞,大家互惠互利,共赢。但是这个游戏规则是建立在人的基础上,也就是说如果有些少数一部分人就是不平账,这个里面说明了什么?

首先简单介绍下,针对这部分少数不平账的商家平台的做法可以如下。

1.线上关闭摇摇车的投币口。通过关闭投币口,等于商家摇摇车不能通过投币,只能通过线上扫码,而线上扫码本身是的资金是走线上,平台拥有操作权(如提现的时候发现有欠账,平台可以叫商家先平账),而且可以给平台分成每次抵消一部分商家欠账。

2.平台短信催帐,电话催帐,然后派相关运维人员去商家现场要求平账。

对于第一种关闭投币口的做法,对于一些商家来说,你要是关投币口,那么商家认为是个无用故障摇摇车,直接拖一边,稍微好点的商家可能打客服电话叫公司拖回去,恶劣点的直接拔掉电源,摇摇车拖到一边,再也不会去管,然后换上另外投放商的摇摇车继续做生意。对于第二种是可行的,虽然耗费一些人力成本,但也有极少部分是就算你上面也懒的搭理你,爱咋咋的。

对于商家来说,不平账的理由很多,包括如下。

1.由于欠的帐太多,又加上文化水平也一般,对平台的账面不会算,虽然有运维人员非常清楚的算清楚给商家听,但是商家就是不懂,完全听不懂,如果现在用户投一个硬币,商家收走一个硬币,这个时候商家是知道要给平台5毛钱,他懂,但是用户投了几十个币甚至更多的时候,商家就算不清楚了。

2.平常摇摇车可能偶尔有点有故障,打电话给公司,运营人员可能由于各种原因不能及时赶到,商家的理由很简单,我门口的摇摇车2个小时不能营业或者半天不能做生意,你要赔钱,这么一扯,这个帐也不平了。

3.传统商人一块钱的生意慢慢积累的财富,要是每次拿个几块钱出来倒没什么,但是一次要拿上百,立马觉得舍不得了,反正心里一白个不愿意。

4.我就是赖帐,不想平账,你去报警,你拿我怎么样?

那么怎么这部分商家解决赖账问题,晓之以说,动之以情,光靠这点力度是不够的。

1.重新定义游戏规则,如收取商家一定保证金或者商家提现保留一部分资金,这种方式目前看来是不行的,毕竟现在摇摇车投放行业竞争较大,商家可选择余力很大,除非公司投放的摇摇车档次本身就大于市面上的。

2.后期研究的电子钱箱上线,通过扫码开钱箱,这个时候可以去看是否欠账,如果不平账,不允许开钱箱。

我的物联网项目(二十六) 商家微信充值流程优化

偶尔有反馈说商家充值成功了,但是商家无充值记录和资金账户没有改变,另外也有反馈第三方微信支付在业务高峰期会有不断的回调尝试,更重要的是问题追踪起来比较繁琐,针对这些对设计进行了重新优化,没有太对的细节,具体看图。

在这里插入图片描述

我的物联网项目(二十七) 分布式锁粗心导致大量阻塞

有天项目中某个业务出现了异常,查询相关日志显示如下:

### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

吓了大跳,居然还有锁时间过长导致后面的业务等待时间较长断开连接抛异常,看了下数据库控制台基本全黄,都是些执行时间较长正在执行的进程。
在这里插入图片描述

里面详细的SQL,继续点进去看看执行计划
在这里插入图片描述

从执行计划上看,扫码行数其实并不多的,所以还要从具体的业务场景去分析问题。

找到执行这条SQL的业务代码,了解当时的业务场景:

t_affairsevent事件表

在这里插入图片描述

简单描述下,这个事件表是用来做分布式事务,利用分布式调度来轮询,然后处理相关业务,具体可以看前面写过 我的物联网项目(八) 简单分布式调度,前面有讲到过利用setNX()来实现分布式锁,每次通过setNX()同一个标识,比如id来抢占锁,前面的业务场景没有问题,但是在这个业务场景里面问题来了,因为同时3个调度来分别执行id为1,2,3的3条记录都可以抢的到,然后都去执行如下SQL:

update t_partner_bymonth set … where partnerId=10001 ,这样的话会导致多个SQL线程同时在执行同一记录,而且本身update就带锁行,所以导致执行速度巨慢甚至阻塞。

高并发update时,最先获得锁的会优先执行,其它几条处于行锁等待状态,等第一个执行完毕,行锁释放,由下一条语句获取锁进行更新,当其它会话等待的时间达到innodb_lock_wait_timeout(默认是50秒),这些update就会断开,不再执行。

像这种业务场景,将锁标识换成partnerId就可以避免刚才那种情况。

我的物联网项目(二十八) springcloud feign超时重试问题

最近平台有人员反应了几个问题:

1.商家充值记录有时候莫名其妙存在充值后的重复数据记录。

2.开发人员无意中提了一次我们的feign负载均衡有时候会负载到两台集群服务器都会执行。

3.定时调度去执行当日表移单要历史表,发现存储过程被调用了两次。

由于这几个问题不是同一时间段出现的,再加上是偶发性的,当初重点排查的是业务本身的代码,毫无头绪,但是随着这些问题经常的出现,需要引起重视并与解决。

在测试环境一次调试中,发现一个奇怪的现象,两台服务器A,B集群,被feign负载均衡分别各执行了一次,为了百分之百命中并重现问题,将里面的方法休眠一段时间,果然不出所料,feign负载均衡百分之百对各实例都分别执行一次。

查阅springcloud feign客户端负载均衡相关资料,springcloud的重试机制是指:负载均衡客户端Ribbon发现远程请求实例不可到达之后,去重试其他实例的过程。那么果然就是这个问题,有些服务在执行过程中由于各种原因导致超时,feign client的重试,导致接口重复执行。

解决这个问题之前也要具体问题具体分析,如果是查询操作,操作失败了进行重试是可行的,但是如果是非幂等性的写操作,如果被调用方某个实例实际中执行了写操作,仅仅是因为网络或其他原因造成了异常,调用方依然进行重试,这就是不允许的。

像上面的业务就属于非幂等性的写操作,所以将其配置成不允许重试机制。

OkToRetryOnAllOperations: false

MaxAutoRetriesNextServer: 0

原理说明:

Feign是通过内置的Ribbon进行负载均衡,并通过HTTP去访问被调用方,所以Feign的重试,其实就是Ribbon的重试。另外,我们在实际工作中使用Feign,用到Hystrix,在这里就顺便说一下Hystrix的原理。举例说明下,假如在没有Hystrix的情况下,用户一个下单操作需要调用订单、支付、物流三个服务,如果其中物流Service因为种种问题不能提供服务,即便另外两个服务都好好的,整个下单操作也会因为物流Service而阻塞住,导致下单服务崩溃。而Hystrix为每个依赖的服务配置独立的线程池并进行隔离,假设下单服务有90个线程,没有Hystrix,则因为物流Service不能提供服务,不停地重试直到90个线程全卡死。而有了Hystrix,三个依赖的服务,每个30个线程,即便物流的30个全部阻塞了,也不影响另外两个服务的线程。

我的物联网项目(二十九) 线上前期运营

说实话,线上运营不是我们的强项,公司的大部分人对线上的运营想法都有一箩筐,谈起线上运营的内容,都是神采奕奕,滔滔不绝,感觉钱就在眼前,触手可及。我自己也一度认为,平台有了用户,有了流量,做线上的任何内容运营都是水到渠成。我们前面做的任何策略,包括对城市合伙人的各种优惠政策(甚至送钱),都是为了平台的用户和流量,那么,现在线上流量应该怎么变现,是目前公司战略的头等大事。

一 微信公众号吸粉

用户通过微信扫码,进入到页面会提示用户微信支付或关注公众号免费玩(关注过后,就不能再关注,取关后也会提示已经关注过)。通过一些个人的线下渠道,前期有那么几家公众号有吸粉的需求,当时按照市场价格是2元一个粉丝,一般的公众号要求是涨到5000个粉丝,给公司平台缴纳1万元,大概三天左右,就可以达到预期目标。这种线上吸粉的业务不太稳定,时而有,时而无,而且涨粉的量基本不大,公司前期接了大概六,七个公众号的业务,这块一起大概赚了好几万块钱,成效不大,后面这块业务就慢慢的淡化了。

现在总结来,这块线上业务没有做起来的原因有如下:

1.公众号吸粉的业务不稳定,没有大量的公众号找上门要求涨粉,全靠线下的几个之前的渠道,人情面子关系,所以做着做着就没了干劲和激情。

2.线上的流量或者粉丝质量与大多的公众号内容不太匹配,这个也是造成线上接单成功率低的原因。

3.公众号吸粉这块业务平台的支撑力也是不够的,公众号吸粉这块业务前期并没有平台化,更多的是功能化,毕竟当初线上运营公众号吸粉业务也是比较仓促,后面虽然在运营过程中梳理一些需求,按照平台化去规划,也在开发,但是开发完毕后发现业务本身又没需求了,所以对士气也有一定的打击,慢慢的就淡化了。

4.吸粉的粉丝价格越来越低,刚开始还是2元一个,后来接到单1.5元一个,再后面1元一个甚至更低,这个时候就没有做到必要了。平台的吸粉都是通过用户关注公众号,免费玩一次摇摇车,等于平台补贴1元钱,如果按照2元一个粉丝来算,平台还是赚1块钱。为什么公众号出的价格越来越低,这个也和平台本身的流量质量有关。(我们的吸粉和乐摇摇的关注公众号抓娃娃不太一样,他们的吸粉可以做到很低的价格,对于它们来说,无非就是让用户拥有一次抓娃娃的机会而已,抓得到抓不到还不一定,而我们属于真金白银要补贴1块钱,毕竟用户去玩一次,合伙人是要线上分成的)。

这个里面多说一句,当初城市合伙人的合作策略直接影响了后面很多线上运营的路线。

二 广告内容

用户通过微信扫码,进入的页面下面会放一些广告内容,如果用户点击进去,就产生一次浏览量,当初和这些广告投放商达成的协议是按点击率收费,用户每次点击,平台这边会有记录,同时广告投放商那边也会记录,按照双方的对账差不多的结算,这块业务运营持续时间很短,一,二个礼拜就宣布结束。可能广告投放商那边感觉转化率不高甚至点击率也没达到预期。后来又来了填写手机号码点提交报名的某某招生广告,一段时间后,也宣布合作结束,原因是很多电话号码不规范和电话大多都无法打通的。

以上两块业务是平台前期线上运营的尝试,总的来说是尝试过,验证过,被教育过,发现做的这些业务流量运营,貌似和想象中的不太一样,所以后面还是要调整线上运营的策略,做其它方式的。

我的物联网项目(三十) 线上账户互通和积分体系

目前平台有app账户和微信账户,对于同一个用户来说,如果能将二者的账户打通,互联消费,这是个好事,如果再加上积分体系,用户对平台的粘度会更大,这样做平台运营就会更加有利。app使用率比较小,微信使用越来越多,所以重点还是在微信端做平台。
在这里插入图片描述

在这里插入图片描述

微信账户怎么关联app账户?它们的流程是怎么样的???

1.用户在微信账户中心,点关联按钮(用户自己有没有app账户,他自己清楚,而且对app账户有操作权),进入页面,输入手机号码,点完成。

2.用户打开app,进入主页,发现有个关联请求,打开请求,点确定关联完成就OK。

一个微信账户是否可以关联多个app账户?

目前不可以,如果一个微信关联一个app账户后,就无法再关联其它app账户,如果关联错了,可以在微信中心点解绑关联功能。

在这里插入图片描述

为什么要增加用户积分体系???

在这里插入图片描述

用户积分的来源和去处(入口和出口)

在这里插入图片描述

积分活动

在这里插入图片描述

积分抽奖活动系统设计

在这里插入图片描述

我的物联网项目(三十一) 分销模式电商平台

当初规划,在商家中间增加我的商城,前期统一由平台提供商品,平台负责发货,商家从平台上架想卖的商品,(后期商家可以上架自己商品)。1.用户在微信支付扫码摇摇车进入的页面会看到商家上架的商品。2.商家可以微信朋友圈分享商品。用户通过以上途径购买商品,商家会有返佣。

按照从理论上的预期分析,现在外面有1万家商家,每家商家平均一周卖一家商品出去,也能赚几十万,随着平台电商模式的使用习惯培养起来的话,后面线上成交率越来越高,线上收入也是一笔可观的收入。

规划需求已经确定,只等平台软件支持,当时我们一直在考虑是自己开发分销平台还是去借助目前市面上已成熟的分销平台。这两者各有利弊,自己开发无疑是开发成本较大和时间较长,好处就是数据毕竟掌握在自己这边有利于将来的扩张,用市面现成的好处就是出点钱立马就可以上线并使用,坏处就是对别人的平台越发依赖,将来想抽出来不容易。

也有人提出买套市面上源码的,然后自己部署,这个方案当时就被我pass了,这个风险更大,还不如自己开发。综上所述,最后决定还是先用市面上的分销平台,快速验证模式再说,我们当时选择的是友赞商城,这个里面可以上架商品,并且带有分销体系。

大概描述下这个分销模式,后台上架一个商品,卖50元,返佣20元,商家将这个商品分销出去,用户购买支付了,立马分账,平台账上30元,商家账上20元,提现都是在友赞去提(这个里面有个7天才能提现的规则)。按照这种模式做,等于全部借助友赞商城,平台不需要开发任何,只需要上架商品和发货就行。

在这里插入图片描述

img

分销平台上线正式运营几周里面,线上下单交易量寥寥无几,这个确实出乎我们意料,我们在反思,这个里面有哪些问题呢?我们开始反思我们上架的商品,最后得出的结论是我们的优势是要做社区电商,这些商品本身不具备优势,不具备社区电商商品优势,我们应该上架一些其它商城没那么容易买到的日常生活的商品,当时讨论的最激烈的是农家土鸡蛋,土蜂蜜,米等商品。还要搞些活动,比如天天特价,甚至搞一元抢购什么的。

做社区电商的想法实施了大概几天时间,也最终终止,我们又开始反思,我们的平台到底具备不具备电商特质?

我的物联网项目(三十二) 社区电商搞起

前面在做线上运营过程中,不断尝试,不断换新思路,开始反思我们的平台应该怎么来做电商,怎么来卖产品?

在经历了前面的分销模式电商平台失败运营后,终于又有了新的想法:我们的平台应该做社区电商。

蓝图是这么规划的:我们的摇摇车有天生地域性优势,服务周边为主,我们现在外面有两万商家,这些商家在我们的平台进货(或者帮忙推销),卖平台的商品,这些商品都是一些居民日常生活所必须的,如大米,农家绿色土货土鸡蛋,土特产什么的,当初的设想是每个商家每天哪怕卖出去1块钱的平台纯利润收入,平台也有2万收入。另外平台可以做更多的活动来促进销售,如拼团,商家利用拼团来赚取更多的差价,如一个鸡蛋1块钱,拼团只要5毛钱,商家来平台拿货只要5毛钱,赚取的更多。

说实话当初在开会的提出这个想法的时候,我直接想到的就是,商品凭什么要帮平台卖货,他自己去进货自己去卖不是赚到更多?但是答复是平台有特别牛逼的进货渠道,这个是商家找不到不知道的。

既然觉得可以做社区电商,下一步就开始规划步骤。首先花2周左右的时间在周边先找一些试点商家,派地推去找几十家商家再说。然后软件技术这边开始规划在商家中心开发新功能让目前的商家接入进来,就是个商城选东西,然后微信朋友圈发广告推广。

想法脑袋一拍立马有了,但是软件开发是需要设计,需要开发的,需要时间的,不能今天提个想法,明天去实现,然后去推广2天,立马撤退放弃,又来新的想法,又开发新的东西,进入一个恶性死循环中,虽然美名其曰把这些叫做创业嘛,就是要不断尝试,试误,话虽没错,但是一个平台大半年提出7,8个决策本身是有问题。

刚才说到,这个想法要立马就实现,开发是需要时间的,也可以考虑借助有赞或者其它的平台,我们现有平台只对接进去就行,看起来这个想法不错,借力嘛,创业也要学会借力。但是新的问题又来了,公司害怕如果将现有的商家都接入到有赞商城,后面就会受限于有赞,后面想自己出来做平台就很难抽出来了。结果这个想法在不断考虑中。

地推在开始找试点了,运维也在张罗商家的商品粮,软件这边目前还在待命,因为公司还在考虑是自己开发呢还是直接接入有赞。再后面,后面,就没了下文。

我的物联网项目(三十三) 2.0平台线上事故

一大早到公司,厕所都来不及上,就被运维同事拉到一边,急促促反馈问题,说外面很多城市合伙人现在在投诉他们的账目数据不对,可提现的资金从昨天到现在一直没大的变化,平时一天可提现几百到几千,但是昨天无现可提取。了解了大概情况后,叫运维同事先安抚外面的城市合伙人,也和客服那边打了招呼,说正在紧急处理中,并和相关开发同事传达了目前的情况,叫他们也先分析下故障原因,我先出去倒杯开始,然后去趟厕所。我知道,这些事情本身处理也许不难,但是找到原因并根除才是需要时间去分析,我得先利用去厕所的时间自己先冷静的想想看看怎么去入手解决。

首先从我们的整个订单系统入手,订单系统设计如下:

在这里插入图片描述

1.订单数据库,用户数据库,商家数据库,城市合伙人数据库,分别都有一张t_eventPublis(待发布事件表)和t_eventProcess(待处理事件表)。

2.订单库的待发布事件表是硬件设备上传订单数据的第一手数据源,后面做业务所涉及到的用户,商家,合伙人等(后面还有更多业务)都是从此源头一 一 下发。

3.简单的描述下整个流程。订单业务层MQ监听到设备上传订单数据,就会在订单库的待发布事件表插入记录,状态为未处理,定时调度会轮询此待发布事件表状态为未处理的记录,将未处理的数据通过MQ发送到用户层,用户业务层MQ监听到订单层发过来的数据,首先去用户库的待处理事件表查询此订单流水号是否存在,如果不存在,将记录插入待处理事件表,状态为未处理,同时回复订单业务层MQ已接收,订单业务层MQ监听到消息,会修改待发布事件表状态已处理。这样的话,订单业务层这块已做完。用户业务层定时调度轮询待处理事件表状态为未处理的记录,将此记录用来做用户相关的业务,如扣费等,同时在待发布事件表插入未处理记录(下一站:商家层),并修改待处理记录状态为已处理,这个扣费+插入待发布事件表+修改待处理记录状态三者是一个数据库层的事务。用户业务层定时调度轮询待发布事件表状态为未处理的记录,发给商家…,后面都是类似出来流程,这个不多重复。

按照此订单流程设计,合伙人账上没分成,首先得先查订单库的待发布事件表,先确定下设备有没有上传数据,要是这个地方没有上传数据,在这一块就丢订单的话,那基本就是无力回天了。从厕所出来,急急忙忙的登录到生产环境数据库,查询订单库的待发布事件表,发现昨天一共有五十几万数据,这个是正常的呀。说明订单数据库上传是正常的,总算放了大半的心了。那接着要查的是,订单库待发布事件表状态为未处理的有多少,查询一看,蒙了,居然有三十多万未处理,不断刷新查看,待发布事件表数据的确在处理,有时候会少1,2条,但是瞬间又多了6,7条,总的趋势是不断上涨的,说明处理的数据跟不上。不应该的,调度平台每台服务器每个业务有6个调度任务在处理,2台(后面有3台)服务器也就是12个调度任务在跑,不应该这么慢,查询了用户库和商家库相关事件表,发现也有一些事件数据在堆积,虽然不多,处理的也是缓慢。问题已经找出来了,结论是:订单数据并没有丢,只是事件堆积,来不及处理。

和开发人员沟通后,大家都去检查下调度任务做业务相关的日志,看看能不能发现什么。一会后,有人反馈,说订单调度日志中发现有大量调度任务经常抢不到分布式redis锁,报锁超时异常。

redisyc123.png

这个里面锁的默认释放时间是10秒,现在几乎有一大半的调度任务拿不到锁,只能靠锁默认时间释放,事件表处理速度肯定是跟不上的,这个里面我们需要去分析,为什么通过redis的setnx去拿锁会报锁超时,我们怀疑代码本身的逻辑有问题,就是拿到锁做完业务后,没有成功释放。查询代码后发现这个里面有两块地方是有问题的(都是低级错误)。

1.释放锁的地方很不规范,按照常规写法应该try{}catch{}finally{},在finally里面去释放,但是很多地方直接在try里面去做,甚至有些代码都忘记写释放了锁的操作,这个错误太低级,就不贴代码了。

2.spring.redis.pool.max-active=8 这个redis连接池最大连接数配置太低,估计当初也是从测试环境copy过来没有修改,线上环境这点连接数肯定不行的,因为现在线上redis就一个高配的,包括线上的常规业务用到也是这个redis,可以想象对redis的操作有多频繁,将此连接数据加到2000即可。

调度任务这块是可以单独发包的(这个也是分段式订单系统设计的优势),将上述问题修改后,发包后观察,事件数据库处理很快,1秒下降40多条,按照这个速度,大概几个小时后堆积的数据会慢慢处理完毕。

针对这次的故障事情,我也在反思,其实这种问题是可以规避的,除了日常项目管理中包括代码走查,审核的工作没有做好外,平台也缺一个监控平台,尤其是针对系统故障的预警(包括这次的事件堆积预警,锁的异常预警可以提前告知相关人员),毕竟做一个好用实在的预警监控平台也不是1,2天的事情,但是通过这些故障可引起警戒,并规划到下一步开发工作中。

我的物联网项目(三十四) 核心开发人员离职现象

刚进公司的时候,公司明确招人只招毕业生,工作经验小于2年的开发人员,按照当初这样招人的原因很简单:工作经验多的,贵。所以这个事情就这么定了,当初java后台招了2个刚毕业的,1个工作经验1年的,我们4个人一起搞后台(还有美工,前端,安卓,苹果,测试差不多10人团队),前面半年里面都是将平台架构,需求,产品,设计全部处理好后,再分配具体模块到3个后台开发人员里面,然后有时候帮忙调试一些问题,讲解一些技术细节,半年后此3人对平台的框架非常熟练,基本不会出现一些低级错误,也能承担一些模块的独立工作,1年后可以放心让他们独立设计需求模块,每个人都能hold住自己的模块,基本不需要操心,1年半后人员陆续开始离职,这个里面到底发生了什么?

人本主义心理学代表人物罗杰斯认为,人类具有天生的学习愿望和潜能,这是一种值得信赖的心理倾向,它们可以在合适的条件下释放出来;当学生了解到学习内容与自身需要相关时,学习的积极性最容易激发;在一种具有心理安全感的环境下可以更好地学习。所以,教师的任务不是教学生知识,也不是教学生如何学习知识,而是要为学生提供学习的手段,说简单就是,提供合适的环境让学生的潜能得到释放。java软件开发这个行业,刚毕业入行他们所面临的一个问题,就是怎么让一家公司接受没有工作经验的自己,他们更多的不会在薪资上去谈判,他们只有一个要求,好的项目,好的团队,可以进公司,学东西,锻炼自己,让自己的学习愿望和潜能得到发挥再说,所以刚进公司前面的日子,个个学习兴趣很浓,目标明确,就是多做事情,多学知识,团队学习气氛非常融洽,我一直认为,一个好的团队一定有一种特质,那就是一个保持学习激情的学习型的团队。随着人在项目中不断的磨练,人的潜能不断的得到释放,人的能力在不断的成长,但是这个时候环境依然没有新的变化,人的潜能在这个环境已经得不到很好的释放了,环境给人带来了阻碍,人开始变得有压力,焦虑,甚至很压抑。人本主义马斯洛提出了人的七层需求理论,1.生理需要。2.安全需要。3.归属和爱的需要。4.尊重需要。5.认知需要。6.审美需要。7.自我实现需要。人的自我发展是在不断的上升,如果外部环境不能满足自我发展的需要,在阻碍个人发展的需要,所以人会出现对抗阻碍,也就是离职现象,重新寻找新的环境。

公司前面半年处于一个快速发展的阶段,但在后面1年时间里面,基本处于停滞不前,甚至出现不断的方向性的调整,但是效果依然不佳,其实公司上面每个人都还在努力,依然坚持不懈,人员的离职现象,公司也在采取行动,最实际的做法就是加薪资,但是发现加完薪资后,这种效果只能维持1,2个月,人员还是不断的有辞职的意愿,这个里面无非就是2个原因:1.薪资加的不够满意,没有达到期望值。2.对公司的发展不抱有希望,自己干的很没意思,已经没有任何斗志,心累。针对这种情况核心员工离职,马上招人工作又在进行了。

我的物联网项目(三十五) 创业阶段性总结

互联网创业从来就不会一帆风顺,只会九死一生,既然选择了一条泥宁的路,就得一步一个脚印稳稳当当的向前走。前几年经常有人说,我有一个好点子,有一个赚钱的项目,只要你来,怎么怎么做就能赚得盆满钵满,实现财富自由,然后像个精明会过日子的家庭女人一样给你算每一天每一个月赚多少钱,和你规划鸡生蛋,蛋变鸡的宏图大志。这个是如果再倒退几十年,干传统实业,一帮人在无任何选择余力下卯了劲使命干,三年,五年,十年的原始资本积累到一定程度,是很有机会能实现当初的目标的,但是现在干的互联网的创业,三个月决定方向,半年决定胜负,一年决定生死,你再回头去想想当初的规划初衷,是不是创业真的这么简单,光有一个好点子,一个好项目,就一定一加一等于二么?

回顾公司这一年半来的历程,大概经历了如下几个阶段。

1创业初期-飞速发展

新的团队,新的项目,第一次目标,第一次尝试,总是能让人兴奋并且在参与感很强的基础上,每个人都有很强的使命感和责任心,这是一个草莽团队,同时这也是一支能打硬仗和攻坚战的好团队。什么是好团队?同甘共苦,不计较利害得失,可以和你谈人生,谈目标,可以和你一起加班,一起参与公司规划,一起承担责任,拧成一股绳,力出一孔一起向前冲的人,俗话说人心齐,泰山移,这个就是好的团队。创业初期前面三个多月的时间里面,公司所有的人,无论是技术,地推,商务等都是围绕着一个领袖去进行工作,领袖会把所有的想法和所有的人去传达和沟通,人越是在比自己地位高的人面前获得尊重,就越容易激发自己的潜能和责任心,这个是情商,我不知道当初有人意识到这点没,反正效果非常佳。这段时间公司的士气满满,可谓万众归心,技术部门通过每天晚上加班和周末单休在二个月内开发出1.0平台,地推部门在二三个月内不断投放新的摇摇车甚至抢占传统投放商的领地,客服部也每天收集并整理了很多有价值的需求,这几个月的时间也无数次验证了当初的想法是对的,从上到下每个人打了鸡血似的,我们在做着类似共享单车的事业,甚至我们的模式比他们更好,前面一片向好,同时一轮轮的融资也陆续进来,都在抢钱抢资源,根本停不下来。

这个阶段公司主要做自营投放摇摇车,重点是app扫码,微信扫码,后面又开发了投币,满足所有用户群体,为了提高线上使用比例,平台经常做活动,比如冲送活动,六一儿童节当天免费玩三次活动等,平台和线下商家是五五分成,四六分成这种模式。

对于当初的核心骨干如果说对公司有深厚的感情,最怀念的时光应该也就是这段时间了。

2创业中期-大肆扩张

公司在前面几个月的时间里面连续融资好几轮,有一定资金,当初在战略上曾经也模糊规划过在直营摇摇车继续发力,比如在摇摇车本身品牌上,和商家的合作模式上,甚至在儿童游乐设备多样化上不断横向发展,但是后面不知道为什么又不了了知了。公司在发展,受关注的程度也在增加,同时各种人员也在不断招聘,尤其是线上运营人才也一直在寻找合适的,我参与的线上运营人才招聘也有好几个,但大多都是线下零售,自媒体方面的,与公司本身的业务不太一样,同时公司内部人员编制也开始划分,三个领袖,ceo管理人事行政财务部门,cto管理技术部门,coo管理运维,地推,商务部门,从这次起,三堵墙开始分别隔离,技术只负责开发,不参与公司运营市场地推相关的会议沟通,每个部门都只参与自己的会议,以前那种大家庭似的会议也很少出现了,我记得以前读书的时候,有次班上说要分组,分成不同的学习组,有位老师说不要分了,会把大家的心给分散了,这席话我现在依稀记得,其实公司在管理方面要是达不到一定程度,这种分离又不处理好内部矛盾,其实后面会有很多问题出现的(后面我想这个问题单独做一章个人看法,这里不多深聊)。这个时候公司决策做了一个非常大的决定,就是做城市合伙人,用公司当初的叫法是叫存量市场,公司免费提供智能盒子和平台,也不分成,只要愿意按装盒子数据走平台,各种补助,比如安装一个盒子补助50元,各种地推只要把盒子推广出去(有没有安装不好说),也是补助一部分钱,这个就是我前面有说过的那段时间各种邮寄盒子出去,这个时候公司运维市场地推人员也在大肆扩展,在最高峰期由6,7人扩张到快50多号人。为了支持全国的业务,平台由原来的传统单体模式正式向微服务架构改变,所以技术部为了支持这一步棋开发了现在的2.0平台。做城市合伙人的目标有二:第一是大量的数据涌入平台,平台不分成,但是数据可以变现甚至赚到更多。第二是互联网以数据说话,数据越多后面的融资会更大价值越高。但是正如前面所说,一加一未必一定等于二,和传统投放商的合作上没有想象的那么顺,具体不展开说,可以看我前面写的一些文章。这个过程我们也做了一些线上运营策略,但基本上二三天就放弃了,不断尝试效果依然不佳。

这个阶段公司主要做城市合伙人,重点是不断的让运维商务去外面找城市合伙人,然后派出去监督安装盒子,公司基本上投入了所有的人力在做这个事情,包括技术在全力支持,毕竟在做城市合伙人这块,需求不断的在调整为了满足传统投放商的使用习惯。

城市合伙人就目前的情况来看,不算成功的,因为没有达到当初的目标,如果说产生的影响仅仅是烧了一部分钱,我倒不这么看,最大影响是这次的战略直接打击了所有人的士气,一部分开始怀疑,甚至人与人之间也开始出现了不信任,这个是在创业过程中最大的忌讳,而且事后对于公司团队建设和士气也没有太多的方式补救,其实公司创业本来就是一波三折,如果没有坚硬的决心和毅力,没有打硬仗的人格和人品,到后面依然还会有问题出现,出现问题不能回避,要敢于亮剑,狭路相逢勇者胜。

3目前状态-静止蛰伏

一个创业公司生存的越久,它的故事就越多,对于很多投资人来说,他们关注的是故事本身的内容,因为从故事本身可以反映这个公司的价值,团队价值,公司在平滑的过程中,怎么应付和怎么挨过这个冬天,任何一个公司的成长都不太可能一帆风顺,有高谷肯定也有低谷,这个是发展的客观规律。有不少人对我们说过,我们现在其实坐在一片金山上,只是不知道如何挖掘而已,其实从整体大局来看,手里的牌面的确是不错的,那么下一步棋我们该如何去下,这个牌如何去打,我们在反思在规划,准备重新出发。

我的物联网项目(三十六) 自己搭建MQTT服务器

MQTT 是轻量的,发布订阅模式的物联网消息协议,做物联网平台基本离不开MQTT,可见它的重要性。公司前期为了快速前进,尽可能的利用现成的成熟的组件,当初服务器选择在阿里云,同样,MQTT也是用阿里云的,除了直接接入方便,它本身提供的可视化后台管理平台也是不错的。随着设备的往上增加,阿里云的MQTT垂直扩展费用越到后面就越高(一个账号下面只能购买一个MQTT),基于成本的控制,决定自己在服务器上搭建MQTT集群,利用廉价的服务器做水平扩展来满足设备的日益增多带来的服务器费用问题。下面这两张图是公司用阿里云MQTT服务器费用的一个走向图:

前期

1539766950479008065.png

后期

abc12.png

所以尽早的准备迁移也势在必行,网上大家都推荐EMQ这款百万级分布式开源MQTT消息服务器,它的官网是:www.emqtt.com,看下里面的资料和介绍

abc13.png决定尝试性使用,搭一个简单的集群先测试下。

1软件准备

NGINX:nginx-1.11.0.tar.gz

EMQ:emqx-centos6.8-v3.0-beta.4.x86_64.rpm

2服务器准备

192.168.1.1:NGINX负载均衡

192.168.1.2:EMQ服务器1

192.168.1.3:EMQ服务器2

3安装EMQ

(1) 安装EMQ:

在192.168.1.2和192.168.1.3两台服务器上分别安装EMQ:

rpm -ivh emqttd-centos7-v2.1.2-1.el7.centos.x86_64.rpm
  • 1

并安装Erlang/OTP R19 依赖 lksctp-tools 库

yum install lksctp-tools
  • 1

安装后的配置文件目录如下:

EMQ 配置文件: /etc/emqx/emqx.conf

插件配置文件: /etc/emqx/plugins/*.conf

日志文件目录: /var/log/emqx

数据文件目录:/var/lib/emqx

(2) EMQ集群配置

分别修改192.168.1.2和192.168.1.3两台服务器上的emqx.conf配置文件,有四个地方需要修改如下:

第一个地方:节点名称

## Default: emqx@127.0.0.1
node.name = emqx1@192.168.1.2
  • 1
  • 2

第二个地方:集群方式采用基于 static 节点列表自动集群

## Default: manual
cluster.discovery = static
  • 1
  • 2

第三个地方:集群节点配置

## Value: String
cluster.static.seeds = emqx1@192.168.1.2,emqx2@192.168.1.3
  • 1
  • 2

注意:这个地方在哪台服务器配置需要把节点写前面,如在192.168.1.3上配置,cluster.static.seeds = emqx2@192.168.1.3,emqx1@192.168.1.2

第四个地方:用户名密码认证,EMQ配置默认是匿名认证,EMQ的提供MySQL,PostgreSQL,Redis,MongoDB,HTTP,LDAP多种认证插件,这里我们用最简单的账号密码认证方式。

## Value: true | false
allow_anonymous = false
  • 1
  • 2

然后再修改/etc/emqx/plugins/emqx_auth_username.conf

auth.user.1.username = admin
auth.user.1.password = admin123
  • 1
  • 2

分别在192.168.1.2和192.168.1.3启动EMQ

service emqx start
  • 1

4安装NGINX

(1) 安装NGINX:

在192.168.1.1安装NGINX:

tar -zxvf nginx-1.11.0.tar.gz
./configure --prefix=/usr/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre --with-stream
make && make install
  • 1
  • 2
  • 3

注意:安装NGINX,编译过程中开启 --with-stream,tcp转发必须模块

(2) 配置NGINX负载均衡:让所有EMQ节点共用一个入口.即使EMQ有节点无法工作,nginx反向代理的地址依然能正常工作

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream test.abc.com
    {
      server 192.168.1.2:18083;
      server 192.168.1.3:18083;
    }
    server {
        listen       80;
        server_name  test.abc.com;
        location / {
           proxy_pass http://test.abc.com;
        }
    }
}

stream{
	upstream emqt_cluster  
	{
              zone tcp_servers 64k;
		hash $remote_addr;
		server 192.168.1.2:1883 max_fails=2 fail_timeout=30s;
		server 192.168.1.3:1883 max_fails=2 fail_timeout=30s;
	}
	server
	{
		listen  1883;
		proxy_pass emqt_cluster;
	}
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

5EMQ管理控制台

控制台地址: http://192.168.1.1:18083(或者用域名访问:test.abc.com:18083),默认用户: admin,密码:public

abc151.png

6EMQ部署架构图

abc19.png

我的物联网项目(三十七) MQTT测试优化

1NGINX连接数

第一次做压力测试,发现192.168.1.2和192.168.1.3两台EMQ最大连接数一直都是255,后面才想起nginx装好后没有去配置优化。

默认配置:

worker_processes  1;
events {
    worker_connections  1024;
}
  • 1
  • 2
  • 3
  • 4

优化NGINX相关进程参数:

worker_processes 2;  #nginx进程数,一般按照cpu数目来指定,小于等于cpu数
events {
    use epoll;  #linux下打开提高性能
    worker_connections  100000; #每个进程允许的最大连接数
}
  • 1
  • 2
  • 3
  • 4
  • 5

2NGINX负载均衡

测试过程中发现有报错,显示负载到192.168.1.3服务器会有超时现象。

[Broker] Failed to forward msg to emqx2@192.168.1.3:timeout

查看原来NGINX配置如下:

upstream emqt_cluster  
{
                
   server 192.168.1.2:1883 max_fails=10 fail_timeout=60s;
   server 192.168.1.3:1883 max_fails=10 fail_timeout=60s;
                
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

max_fails和fail_timeout是nginx在负载均衡功能中,用于判断后端节点状态所用到的两个参数。nginx基于连接探测,如果发现后端异常,在单位周期为fail_timeout设置的时间中达到max_fails次数这个周期次数内,如果后端同一个节点不可用,那么会将此节点标记不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接成功。对于高并发场景来说,建议适当调大是有效的,当然数字越大,对应给nginx压力也会相应增大。这块配置需要不断测试中调试,前期为了测试方便,去掉这两个参数。

配置如下:

upstream emqt_cluster  
{              
   server 192.168.1.2:1883;
   server 192.168.1.3:1883;         
 }
  • 1
  • 2
  • 3
  • 4
  • 5

3EMQ控制台日志

在测试中,需要不断查看数据传输的完整性,找到日志文件目录: /var/log/emqx,发现里面默认只有crash日志,info日志和error日志需要配置,打开 /etc/emqx/emqx.conf,配置如下:

log.dir = /var/log/emqx 
log.error.file = /var/log/emqx/error.log
log.error.size = 10485760
log.error.count = 5

log.info.file = /var/log/emqx/info.log
log.info.size = 10485760
log.info.count = 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

我的物联网项目(三十八) 街机和新零售遐想

很多商店门口除了摇摇外,还有一些游戏机,这些游戏机本身来说基本都是单机的,它和用户产生的连接性只限于整个游戏过程,和商家来说更加没有连接性了,无法就是里面的硬币分账而已。如果这游戏机对于用户来说,每次玩的分数可以游戏机上进行全国排名,玩一次后还能获得对应商品的打折优惠。对于商家来说,他可以促销更多的商品,何乐不为呢。

image.png

微信图片_20181024120029.jpg

我的物联网项目(三十九) 创业公司谈管理

管理本身是个深奥的话题,每个行业每个公司每个团队甚至每个人情况都不一样,这个世界没有放之四海而皆准的道理,具体问题还得具体分析,我大大小小都经历过一些公司,他们都有各自的做法,存在即合理,每个管理都总能适应那么一片人,我发现这里面有一些共同之处,值得借鉴,下面只是单纯的从创业公司前期来说事。

1中央集权

集权意味着专制,很有可能会出现一言堂的情况,从某种角度来说,这个里面要一分为二的看问题,集权要看人,如果掌握大旗的这个人没问题,那么集权对于创业公司前期来说是非常有利的,做事效率高,大家无二心,无帮也无派,大家都聚齐一个焦点,一个中心,其乐融融。那么反过来说,如果创业公司前期过早的权利分散,如三分天下,CEO管理人事行政财务部门,CTO管理技术部门,COO管理运营商务部门,正如我前面文章写到过三堵墙开始分别隔离,事情隔离,人心也开始隔离。很多创业公司前期是这么一种情况,几个人一起凑点钱,然后大家一起成立公司,每个人负责一块,刚开始人员不多,大家还能凑合一起商量些事情,越到后面,人员慢慢增多,各自开始膨胀,内部矛盾接二连三,但是又没能力处理好,然后失败都是由内部分化开始的,很多创业公司项目失败并不是终点,而是大家合伙一起干事业最后连朋友都做不成,这个才是悲剧。

2管理制度

创业前期这个管理制度怎么来制定?制定要什么程度?其实每个人心里有杆秤,与其说制度,不如说情商。我曾经见过有个创业公司的老板从外企出来创业的,公司人员都还没招齐,就完全按照他在外企的那套管理制度完全照抄过来,后果可想而知。我个人认为,可以有基本的日常规则,但是涉及到员工利益的规则,尤其是罚这块,能省则省。对于创业公司团队来讲,最好的激励除了奖励,奖励,再奖励,别无他法。大家跟随的除了项目本身外,更多的是认可你这个人,你这个人的人格是整个团队的一面旗帜,不要说做的不好就要按指标罚这类话,因为他做的不够好,没拿到奖励,你已经在惩罚他了。其实创业前期需要的是兄弟,不是繁琐的制度,是人在带人,以人在管人,当有困难的时候,你在哪里,你做了什么,这个才是根本。

3快速融资

检验一个项目好坏的标准简单的来说,它本身是否带有现金流,很多年前那种靠做用户,做数据,然后来融资变现的方式其实目前来看已经不是主流了,说白了,投资人比你更精明。如果要我现在去创业一个项目,我可能胸无大志,我只想把创业当做一个生意来做,在不融资的情况下能自力更生,能养活这个团队,能给员工发奖金,这个才是我第一步要去解决并要做到的事情。融资需谨慎,自己更生最重要。

4重视团队

创业公司,尤其是互联网创业,你告诉我公司的资产是什么?几台电脑?NO,NO。你个人很牛逼,NO,NO。那么是什么?我很负责的告诉你,是团队,尤其是初创团队,打过硬仗的团队。一个想法,一个点子,你都可以去试误,但是团队你不可以重组,团队破产,从某种程度来说就等于公司破产,你需要花更多的代价去打磨。只要团队在,公司只是个名字,项目也只是个想法,一切皆可有。

我的物联网项目(四十) 科普投资人一票否决权

创业时代,很多企业如雨后春笋般在资本市场遍地开花,好项目永远不愁投资。但投资方与企业合作,作为小股东,很多事项(包括公司经营方针、投资计划、公司被收购等)如果没有一定的话语权,很容易被大股东滥用股东权利而遭受损失。比如公司被上市公司收购,大股东直接把自己股份高价卖掉,因投资方没有决策权和话语权,更没有财力阻止收购,手里小小的股份也无法变现。

有人分享过这样一个案例:某基金投资了一家创业公司,公司发展的不错,投资人也很欣赏创始人团队。当该公司发展到相当规模后,遇到一个上市公司提出收购的机会,收购过程中,创始人仅把自己手中的控股权高价卖给了上市公司,而投资人的少数股权却没有一起卖,上市公司取得了创业公司的控股权,实现了报表合并,而投资人没有“一票否决权”,也没有财力阻止上市公司的收购,这样投资人手中的少数股权就无法变现,结果相当尴尬。

1为何要一票否决权

所谓的一票否决权就是指在投资人进入公司,成为公司股东后,不管持股比例大小,投资人在公司股东会决策时,如果有一票否决权条款,投资人对公司股东会的某些决策事项有单方的否决权。一票否决权通常体现为股东协议中的保护性条款,其目的是保护投资人作为小股东,防止其利益受到大股东侵害,因此要求某些可能损害投资人股东利益的公司行为必须获得投资人的同意方可实施。也就是说,即使其他股东同意,投资人对公司的这些行为仍享有一票否决权。

2一票否决的范围

一票否决权不是针对董事会要决议的所有事项,而是条款中约定好的重大事项,如果不是重大事项,那么不适用一票否决,直接按照公司章程规定的董事会议事规则执行。

首先,创始人需要了解在市场实践中常见的一票否决权所涉及的范围,这些事项都是公司的重大事项,按照国内公司法框架下可以分为:

由股东决策的公司最重大事项:通常涉及公司章程变更,如:注册资本等股权结构的变化;公司的合并、分立、解散;董事以及分红等股东利益分配等等。

由董事决策的公司日常重大事项:终止或变更公司主业;高管任命;预算外交易;非常规借贷或发债;子公司股权或权益处置等等。

如果想要更详细了解一票否决权的具体范围和文字描述,大家可以登陆简法帮网站,免费预览和生成融资的相关法律文件。从整体来看,股东决策的公司事项仅限于投资人股东权益的最重大事项,而由董事决策的公司日常重大事项则将更加深入地介入到公司日常运营中。

如果创始人真有时间和兴趣深入研究,你会发现一票否决权涉及的范围有很多可以谈判的空间,比如:可以限定特定事项一票否决权的条件,甚至可以考虑将一票否决的范围限定在对投资人利益有损害的重大事项上。至于能谈到什么程度以及如何在投资文件中体现,最好还是让专业的律师根据法律和市场实践来争取。

3如何对待一票否决权

一票否决权具有自身的合理逻辑,创始人不必视其为洪水猛兽。聪明的投资人都能够明白,公司的成功依靠的是公司管理团队,投资人过多干涉公司运营层面更可能导致“双输”的局面,如果创始人遇到过于苛刻的一票否决权要求,完全可以跟投资人直接沟通,也很可能发现其实是投资人的律师过于认真,而非投资人的本意。创始人跟投资人双方阐明各自的考虑,有理有据地磋商,其实很容易找到一个双方都能接受的平衡点,因为从整体来看双方的利益更多时候还是一致的。

很多创业者看到一票否决权条款就非常抵触,尤其是那些初次创业起点又高的创业者,他觉得投资人不应干涉公司的经营,影响他的发展规划。所以,为了达成双方的利益平衡点,投资者和创业者会进行双方的谈判,即使你把这项条款强加给创业者,在后期发展中也会感觉很不爽,所以,如何跟创业者谈判对投资者就变得更加重要了。

我是培训出来的我怕谁

引子: 江小峰是我带过的徒弟中跟我最久,也是最聪明的一个。 他一个高中生,没上过大学,高中毕业后在老家卖了三年电脑,天天给人装操作系统,有天他在网上看到某培训机构招生简介,一时冲动揣上三年血汗钱,走上了java这条不归路,最近他给我发消息说我能不能写点关于他的东西,我说可以,我问他哪段时间最刻骨铭心,他说刚出来找工作那段时间,我说就写你参加培训找工作这段经历吧。以下文章由小峰自述,我记录加以整理,最后由小峰审核表示可以发布,在下不才,愿尽绵薄之力将一个高中毕业培训出来的java工程师找工作的经历以正面的形象放在大家面前,与君共勉。最后说句,故事亦真亦假,请勿对号入座。

​ 一 简历包装

常去一个地方,喜欢一个地方,想念一个地方,都是因为那里有你牵挂的人,而不是牵挂那里的风景。一个城市会跟自己联系起来,也是因为那里有和自己感觉相近的人,有和家乡类似的气息,有你难以放下的人。我叫江小峰,今天在就业部王老师那里填了就业城市,北京。我选北京,是因为那里除了有我的梦想外,还有一个人,当然下面我要讲的故事与这个人无关,我只想告诉自己,不管多么平凡,只要真诚付出努力,都能够到达比想象更高的高度。人生没有爬不过的山,重要的是行动,认准目标之后,便脚踏实地向前,这就是我现在正在走的路。

一年前来到这个城市,当下火车的那一刻,我就知道我已经无路可退,既然我选择了,我就一定要做到最好,我当时比大多学员唯一的优势就是我会配电脑,装系统,这个也就是后面很多同学买电脑都叫上我去的原因,除了这个优势外,我知道我内心还有一个更大的优势,就是我很清楚这一年半的培训,如果我学不好,我的钱全部会打水漂,当时我来这里培训是差点和家人闹翻了,家里面认为我应该存点钱然后自己开个店做点小生意,稳的很,这种培训十个有九个都是骗子。说实话,我不甘心当时的现状,我想试试。这种培训学校是随到随学的,反正报名凑满三十个人就开一个班,最鼎盛时期基本都是一周开二个班都是长事,来这里培训的人其实也参差不齐的,年龄最小的刚高中毕业,年龄大点的大学毕业后工作一段时间再来参加培训,我的年龄段介于这二者之间,当时在学C语言作为入门课程的时候,很多人都还是经历一个多月脑袋里面才模糊有编程的概念的时候,我已经穿插在五个班里面各种听课,因为当时报名的时候,老师说过,其它的班上课只要没坐满人你都可以去听,也就是因为这句话,我当时来的第一天就拿了五个班(后面甚至更多)的课程表,这么说吧,同一堂课我可能在五个班都听过一遍,每个班老师不太一样,同样的课程能听到五个不同的老师讲课风格,那段时间基本别的同学在寝室睡觉玩游戏,我基本早上出来晚上才回寝室,一整天都在培训中心各种课堂穿插,混的久了,很多老师和别的班同学就也习惯了不再用异样的眼神看你了,再后来我嫌这种进度太慢,我开始跳班听课,我借来培训班后面的教科书,第一学期已经在听第二学期甚至第三学期的课程了,刚开始听不懂,但是同样的内容课程听的多了,不懂也半懂了,再回到自己班再听一遍,基本全会了。整个一年的时间里面,我就是这么过来的,我每天都在提醒自己,必须每天有进步,我自己选择的路自己走,而且必须一直往前走,绝无退路。

时间是看不见也摸不到的,就在你不注意的时候,它已经悄悄的和你擦肩而过,当你已经意识到时间不多的时候,大多数的人已经开始在焦虑,在不安,还有半个月的时间就要开始出去找工作了。这半个月的时间里面,培训学校还有最后一门课,面试技巧培训。在参加这门课程培训前,先要填就业城市,然后这批出去找工作的所有学员按就业城市的重新编排一个班,由一个老师负责,这个老师也是一个月后带你坐火车去那个城市找工作的就业老师。

我们去北京找工作的就业老师是王老师,第一次见到王老师,总感觉这个人有点怪怪的,长方形脸上戴着一副黑宽边眼镜,两只不大的眼睛在镜片后边闪着亮光,两个嘴角总是紧紧闭着,平时很不爱说话,和这样的人打交道,一个字,闷。当时我们这批人聚集在一个教室,大概有40多个人左右,王老师站在讲课上,用半截粉笔狠狠的在黑板上写了四个大字:穿着仪表。然后开始讲了一堆的关于职场穿着的讲究,说穿着得体,会给面试官留下专业的印象之类的话题,最后要求大家从下次起来上课每个人必须穿黑皮鞋,着西装,打领带。听到这个话,下面立马炸开锅了,议论纷纷,王老师又说了句,没按规定穿着的不准进教室。一个下午我们寝室的人都在逛商场,各种找打折的皮鞋西装领带,这么一套下来少说也要五百吧,还不一定找的到,找了好个小时看到的都买不起,最后去了个超市二楼,这三样东西一起568元每人入手一套,当晚每个人在寝室兴奋的穿起来在镜子面前人模狗样的扭来扭去,现在问题又来了领带没人会系。一堆人在电脑面前按照百度出来的图片步骤在不断的尝试,最后勉勉强强的能在脖子上套稳,最后取下来的时候都是尽量保持系好的原貌,因为怕等下又忘记怎么系了,这样方便下次直接套上去就行。

第二天刚进教室,我差点怀疑自己是不是进传销窝里面了,一个个都西装革履,平时都是穿双拖鞋和牛仔短裤,牛仔短裤两个裤袋里面一个裤袋放了盒烟和手机,另外一个裤袋放了钱包,两个裤袋都撑的老高了,今天穿了皮鞋和西装,我都怀疑这些人是不是钱包也不带了,烟也不抽了,瞬间我都有那么种感觉,我们今天都变成熟了。王老师在讲台上迈着稳健的步伐,腑窝下夹着本资料,往下审视一番,说道,“从今天起你们每天都要保持这份精神,每天在面试一样”。然后还是那半截粉笔狠狠的在黑板上写了四个大字,“简历包装”,转过身来坐下,说道:

“我手上有5份简历模板,每份简历其实要填的内容都差不多,但是简历的排版不一样,你们每个人可以选择其中的一份模块开始来写简历,你们不要都选一样模板,尽量分散,这些模板下课后你们拿U盘来拷,然后共享到你们自己群里面大家一起下载就行”。说完,王老师打开PPT分别演示每一份简历模板,演示完毕后,王老师说道,

“这个简历模板是你们面试的时候打印出来的简历,有的公司是需要你带简历的,你们打印出来的后的简历有些细节要注意好,比如字体的清晰度,纸张的表面不能显得邋遢,像有些同学喜欢把简历揉成一团这些都是不好的,你们可以买个透明的文件袋用来装简历,简历就好比你的个人门面,好的简历会给面试官留下好的印象”。

“你们拿到简历模板,按照模板去填里面的内容,填完后每个人的简历打印出来交给就业部的李老师审核,她通过的简历会在上面打勾,不通过的,她会指出来哪些地方写的不好,你们继续改,一直改到合格为此”,王老师说完就安排我们去机房开始改简历,今天下午就要交简历。

今天的机房是可以上外网的,大家都很兴奋,来这里一年多了,像机房开放外网的时间是屈指可数,大家都很兴奋,开始登录qq,我从群共享里面下载了五个模板,随便选了其中一个,这个模板里面已经有内容的,我将内容统统改成自己的,但是填项目经验确实难住我了,我根本写不出任何经验,我看到周围有些同学写的都是之前每学期做的毕业设计项目,从内心来说,那种项目我不屑,真的太low了,我在网上不断的搜索,看到不少别的人写的简历,我看了不少,选了三个项目稍微改动变成自己的,三个项目分别是ERP,信息发布系统,小型电商平台,我觉得这三个项目还是可以拿出去说说,我需要的是多搜索下这三个项目的业务情节,自己在脑海里面能说的出大概是什么业务,然后自己负责的模块技术实现细节。

下午开始交简历,我在外面打印了二份,一份自己留着,我需要对这份简历非常熟悉,尤其是项目经验,我需要在上面做一些面试官可能会问到问题的笔记,然后拿了另外一份简历去就业部找王老师,说实话谁是王老师我也不清楚,我来到就业部,一看里面至少有5个女老师,每个人的电脑前堆了一大截简历,她们正在一份一份的查阅着,我问了下里面的老师谁是王老师,一个卷发带眼镜的女老师叫我把简历放到桌上,明天来拿简历就是。放完简历后,下午还有一堂公开课,是所有的就业区域的学员都在一个大教室上课,我来到教室的时候人差不多都坐满了,估计这次出去找工作的少说有300多人吧。上课的老师怎么看都像是个搞销售的,因为说话的神情和语速就和我回寝室路边上的老找我办信用卡的那些人差不多,今天上课的主题是:怎么和hr谈期望工资。

“首先你们都是包装过的,简历上至少都写了一年以上的工作经验的人,有的hr可能会问你上一份薪资是多少,像这个上一份薪资应该怎么去算”,老师边说边在黑板上列出一个类似公式的条框。

“假如你月薪税前5千,一年12个月就是6万,公司去年有个年终奖给你大概2万,还有一两次季度奖和绩效奖大概1万,这样你的过去12个月的全部总收入就是9万,用9万除以12,得到一个税前7500元的月薪,这就是你的平均工资,这才是你应该写在简历上的目前薪资或者答复hr上一份的薪资,而不是傻傻地报给对方一个我上家月薪5000”。

“那如果我只有基本工资,没有任何绩效奖和年终奖怎么办?“,下面一个学员傻傻的问道。

“如果你对自己的能力有信心,又期望拿到更多的工资,你具体有没有绩效奖和年终奖谁又清楚呢?”,老师嘿嘿的笑道。

老师又接着说道。

“有的公司是需要提供你们上家的薪资流水,银行记录的,这种公司如果你真碰到了,建议你就不要再扯下去了,准备再去找下家吧,因为这种公司摆明是要查你的,不要给自己找不自在了“。

“hr要是砍价怎么办”,一个学员问道。

“砍价是正常的,你们就是出去卖的,不过你们卖的是技术而已,只要是卖的东西都会有砍价”,老师笑道,接着说。

“首先你们对每个城市针对不同工作年限的java开发这个岗位要清楚大概的行情价,比如在一线城市工作一年的java一般都在8,9K左右,但是在三线城市确只有5,6K,这个回头我会给你们有个表格,针对不同的城市不同的年限的行情价”。

“在正常行情价的基础上hr如果砍价,你们又不想吃亏,就要继续谈判,谈判就的有理由,比如说你现在在外面租房,水电费,吃喝,交通等等每个月要多少钱,自己还要存点钱想成家,甚至赡养父母等等,尽量往正常的路线上去掰,而且事实上这些也都是人之常情,如果还是不让步,那你自己去把捏,觉得自己有信心有把握,那就继续去面试看机会”,老师说的话很在理。

然后老师说了很多怎么和hr打交道的技巧,甚至有些已经上升到哲学层面了,我一个下午在想我自己写了个工作两年经验,应该开多少合适,按照老师提供的表格在北京是12K左右,我现在的硬伤是文凭,这个头疼,估计很多公司在这一轮就要把我刷下来,哪里还有机会谈工资,哎,懒的去想了,出去面个试还真讲究……….

第三天上午跑到就业部拿简历,还没说话,就被李老师狠狠的批了一顿,指出简历上的八大罪状。1.字体用宋体,小四。2.简历上有照片一览,拍个正装一寸免冠照片放上来。3.自我评价写的罗哩叭嗦,没有突出做软件方面的优势,词语要简洁。4.技能特长有两项写了精通,切记写精通,要改成熟悉或者熟练。5.简历上邮箱名字不规范,写的是afdgk…@163.com这种不好看的名字,实在不行换qq邮箱。6.项目经验写少了,两年工作经验至少要写四个项目。7.学历和教育经历怎么还是高中没有改过来。8.职业目标怎么还是做软件工程师,要写以后向管理层次发展。整个简历感觉被红色圆珠笔画了个大花脸,简直面目全非,我真没想到一份简历突然让我有种很严重的挫折感,怎么办,还得继续拿回去按照老师的方式改。拿回简历后,在楼下碰到了王老师,说了简历的大概情况后,他说没关系按照指示改就是了,然后叫我去教室有事情要说,我到了教室,发现有10个人左右,王老师说其它的人已经通知好了,就等我们这些人了,然后关好门,说我们的这些人的学历都是需要包装的,说白了就是我们需要这两天去办个假的文凭,关于包装文凭说到了三个点:1.办的文凭是本科的。2.选的学校尽量是不知名的,偏一点的小院校。3.准备好一个离职证明给办证的人盖章。4.找某某同学他有办证人的电话。说完我们就散了。

下午找到那位同学,我们约好一起去找那位办证人,按照约定的地点见面,我们每个人将要办理的学校名称写到一张纸张,然后将照片,离职证明和八十元大洋夹在纸里面事先准备好,我们到了指定地点后,那位同学打电话联系,大概不到5分钟,有个带墨镜人骑摩托就过来,没熄火,到了我们身边,直接将所有的纸收了去,然后叫我们明天下午这个时间在这个地方拿,说完就嗡嗡的走了,我突然感觉到我们好像刚经历了一桩惊心动魄的交易,想起来都刺激。

这份简历当天下午改完了,我又去了一次就业部,结果李老师又指出简历上的不足:1.项目经验的所属公司尽量不要在网上能查询到,而且要和就业的城市隔的越远越好,最好是一些小公司。2.每个项目之间的时间间隔不要隔的太长,最好是无缝对接。

真累,没想到辛辛苦苦一年多的努力学习,最终还是要凭简历包装说话。

这一周偶尔上午有点公开课,都是讲电话面试技巧关于称呼,礼貌用语相关的培训,其它的就是改简历和没办证的赶紧办证,下周正式进入面试演练了。

​ 二 面试演练

对于没有任何面试经验的培训生来说,面试演练是一个可以快速提升面试表现的有效途径,通过不断的面试演练,让我们提前感受到面试的氛围,了解到面试中可能被问到哪些问题,然后经过不断的演练,可以让不自然的东西变成自然,说白了,面试演练就是练胆练说话的技巧。

第二周的第一天上课,王老师就宣布,从现在起,你们所有的人都是求职者,我是面试官,前面二天每天上午一次,下午一次都统一在这个教室一个一个来我这里模拟面试,其它的人在下面看从中吸取经验。每个上来面试的人做一个4,5分钟左右的自我介绍,有什么问题当场就点评。然后王老师按照花名册一个个点名上来面试。

“江小峰”,王老师叫到我的名字。

没想到我居然是第一个,可能我的成绩在培训中心老师们是清楚的,所以想叫我先来给大家示范下。于是我跑到讲台上准备开始自我介绍。

“我叫江小峰,我来自……”,

“稍等”,王老师打断了我的话。

“你来面试,见到面试官首先要微笑打招呼,并礼貌的说道:面试官,你好,这个时候面试官叫你做自我介绍你再开始”,王老师一本正经的指出我刚才的不足,并叫我下去,重来。

我走下讲台后重新开始。

“面试官,你好”,我微笑的说道。

“你好,江小峰,下面请你做个自我介绍”,王老师看着我说道。

于是我脑袋一蒙,开始随意发挥。

“我叫江小峰,来自湖北宜昌,我今年26岁,我以前是给人配电脑,装操作系统的,因为这种生活我觉得不是我想要的,所以我来到了培训机构参加java培训”,

突然我意识到我自己讲错话了,果然王老师一脸严肃的看着我,说道,

“你是一个拥有两年开发经验的java工程师,你一定要自己沉入到这个角色里面,你来我们这里培训之前的事情不需要介绍,还有最好不要说你参加培训这个事,你应该按照这个模板来做自我介绍“,王老师拿起那半截粉笔在黑板上写了三个大纲。

“1.个人情况,个人情况只需要介绍你叫什么,来自哪里,哪里毕业,什么时候参加工作“,

“2.工作经历,之前从事的软件开发公司名称,做的项目,负责模块,用到的技术“,

“3.面试公司,你来面试的这家公司什么岗位,通过网上了解到公司的情况”。

我心里就知道,王老师拿我做反面教材呢,为什么一开始不列出这些大纲,早列出来不就好了吗?我心里愤愤不平。王老师好像看穿了我的心思,叫我下去,然后说道,现在给你们每个人十分钟时间,将自我介绍按照这个大纲在纸张写出来,然后记在心里,等下重来。

下来后,我拿出纸来,开始按照大纲一个个组装成语言段落,感觉一气呵成问题不大。

十分钟后我再次上台。

“面试官,你好”,我微笑的说道。

“你好,江小峰,下面请你做个自我介绍”,王老师看着我说道。

“我叫江小峰,来自湖北宜昌,武汉xx大学毕业,2014年开始参加工作从java开发,我上家公司叫xx科技有限公司,在这个公司里面做过四个项目,第一个项目是ERP管理系统,我在里面负责入库申请管理模块,这个项目用到的技术是ssh,第二个项目是信息发布系统,我在里面负责档案管理模块,”用到的技术也是ssh,第三个项目是小型电商平台,我在里面负责购物车模块,用到的技术是springmvc,第四个项目是电影票平台,我在里面负责电影票的入库管理模块,用到的技术也是springmvc,我看到贵公司在招java软件开发工程师这个职位,对技术的要求我觉得也挺匹配,所以我就过来面试看看适不适合“,因为我刚才在纸上已经写过一篇了,所以我脑袋里面对这些段落非常熟练,用最快的速度一字不差的背完,然后我看着王老师,表示我已经完全按照大纲来讲的,不知道还有什么问题没。

王老师指出二点我需要反复练习。

1.语速过快。感觉在背书,再说北方人更加不习惯这么快的语速,需要吐词清晰保持自然,顺便练下普通话。

2.眼睛没有看面试官。整个自我介绍过程,大半的时间没有看面试官的眼睛,不够自信,自我介绍,是求职者推销自己的空间,要注意与面试官的眼神互动。

于是我下去后,另外一位接着上。

“面试官,你好”,那位同学低头哈腰的微笑说道。

王老师笑着说道,你不需要这么恭敬,就按平时打招呼那样就行,下面同学都乐了。

“我叫杨松,我是江西南昌人,我是广西xx大学毕业的,2016年开始参加工作做java软件开发,我上家公司名称叫….叫….什么来着的了”,那位同学很明显对简历不熟啊,悲剧。

王老师严肃的瞪着他,

“你先回去等通知吧”。哈哈,大家面过试的就知道这个话的弦外之音了,就是你没戏了,聊都不想和你聊了。

王老师再次强调说道,

“你们要对自己的简历非常熟悉,尤其是你们的项目经验所负责的模块,面试官很有可能会问到你做的这些模块的功能点”。

然后接着下一位继续上来面试。

………

这两天整个过程大家都很轻松,越到后面愈发自然,说实话,现在回想起来,如果当初没有这些面试演练。出去找工作面试当中肯定会有很多坑要趟,甚至会影响到自己的信心。

第二天下午自我介绍环节接近尾声,每个人都到讲台上领一份资料,领到资料后翻开一看,里面有很多面试题目,下面都配有答案,王老师叫我们背熟这份资料,明天起开始进入下一轮的面试演练,每个上台面试者会被随机问到这份资料里面的五个问题,如果都能答上,就算过了,答不上就自己想办法花时间背熟再来找王老师过关。一回到寝室,我们所有的人都在背这份资料,这份资料一共有五十个题目,有一半的题目我是知道的,另外一半的题目是需要去熟悉并记下来的,后面我才知道,这些资料就是来自传说中的java面试宝典。

第三天我们都轮流去过java面试宝典,我被问到以下五个问题,我基本都答上来了,事实上这五个问题,在我后面的面试当中基本都涉及到。

1.HashMap 与 HashTable 的区别。

2.抽象类与接口的异同。

\3. final,finally和finalize 区别。

4.单例模式是实现的方式。

\5. servlet的生命周期。

当我们都过了面试宝典这一关后,我明显看到了很多人的信心比之前高了很多,这是一个好的开始,很多人甚至把面试宝典都随身携带在身,吃饭看两眼,走路看两眼,每天早上起床第一件事就是先看宝典再说。

这一周的周五,还有一个面试演练环节,就是和HR谈薪资。培训中心给我们分配的一个面试老师是位女老师,据说是从某公司请来的资深HR。

我上台和她面试演练起来。

“你能告诉我你凭什么要12K工资吗”,她阴沉沉的问道,一来就要给我个下马威。

“对于一个工作经验2年的java开发工程师,在北京拿12K是行情价”,我按照前面上课老师教的说道。

“行情价是针对有价值的人来说的,那你告诉我你能为公司带来什么价值”,她依然不依不饶的在问道。

“我是一位java软件开发工程师,你说我能带来什么价值,你们招这个职位具体是想做什么难道不清楚吗’,我机灵的把球往回抛。

“你还是没说你能为公司带来什么价值”,她继续问道。

“我是做技术的,我本身爱好技术,爱好这个岗位,在工作中我会尽忠职守,做好公司安排的我任务,同时我也会不断的努力来提升自己,让自己能在公司发挥更多的价值,承担更多的职能”,我有点不耐烦的说道。

这个时候她微笑的笑道,然后对大家说,有些HR可能会问些非常刁难的问题故意试探你们,你们需要的是保持镇定,如果你还想给自己争取这个机会,你就得耐心的实事求是回答这个问题。比如她们还可能问道你觉得你的缺点是什么?你为什么愿意来我们公司工作?甚至针对年龄大点的单身男孩子可能也会问到为什么不找女朋友这些问题,她问的这些问题本身不是对答案特别感兴趣,而且你对这些问题的反应是什么以及是什么样的态度去回答。

今天的课程里面,这位HR和我们分享了很多经典案例,甚至有些我个人觉得接近于用变态两个字去形容了,与其说是问题,还不如说是心理,我不知道我后面去面试的这些公司会不会都是这样的HR,想起来都觉得有点不可思议。

​ 三 北京我来了

春暖花开,万物复苏,北京的天空到处飞扬着体态轻盈,白色晶莹絮状物,稍微不小心,它们就会迎面袭来。我们来北京正好赶上到处飘着柳絮的时间,下午四点我们到达北京西站,没有休息,王老师直接带着我们上了公交,大概半个小时后到底目的,北京职达青年旅社。

我们每个人都在前台登记,前台小姐很热情,给人有一种宾至如归的感觉,服务态度非常好,尤其对王老师应该比较熟悉,这个地方估计是每次带学生来北京找工作的常住地点,登记完后我们每个人交了200元,前台小姐告诉我们这里住宿每天30元,到时候退房的时候多退少补,然后我们每个人拿到了一个房间号的卡,叫我们自己去找房间,我按照卡上的号码到了二楼,走进去一看房间整体设计很简单,床位分二排,每排两个上下铺的床,一共八个床,

中间是过道,过道里面有个大桌子,上面有台电视,我的床位在进房间的左边第一个上铺,我把包放上面后然后出去熟悉下环境,问了下服务人员,知道卫生间在走廊边上,是公共的,洗澡也是在卫生间里面,走廊另外一边有开水房,最里面有间小房子,里面就一排,桌子有点像网吧的布局,有八个位置,但是上面没电脑,网线外漏在桌子上,这个房间是公共上网的地方,但是需要自己自备笔记本电脑。熟悉的差不多了,大概十分钟后王老师叫我们去一个房间集合,然后说了四件事情。1.等下所有的人去楼下不远的移动营业厅办个北京当地的手机号码。2.晚上有电脑的在公共上网区,没电脑的去附近网吧在智联,51job, 中华英才网三个网站上更新自己的手机号码,然后从今天起开始投北京地区的简历,采取海投的方式,每次至少投2000份,每天都要去投一次,直到找到工作为此。3.从明天起,我们会陆续收到面试电话,每个人自备一个小本子,将要面试的公司每天安排至少三个,有计划的合理安排。4.从明天起,每天晚上八点在这里集合开会,把每个人当天面试的公司情况汇报,包括公司名称,面试题目,薪资情况等。宣布完了后,王老师最后说了声,前面三天大家先找找面试感觉,先面试七八家公司再说,最后宣布解散。

我和几个同学在移动营业厅办完手机号码,已经五点了,大家肚子饿了,一起在附近找了个地方吃饭,说实话,我们点了五个菜,但基本每个菜都带甜味,我们几个人都吃不习惯,后面我们学乖了每次去吃饭的时候喊道,老板不要放糖我们吃辣的。吃完饭后直接找了个网吧,按照王老师的要求,我们把手机号码换了,然后选择北京地区开始投简历,我在搜索框里面输入java关键字,点搜索,出来了将近300页,每页至少60条记录,我也管三七二十一了,从第一页全选,投简历,一直投到二百多页,估计当时至少投了上万个简历,手实在太累了,要不然会一直到底。北京的超市在九点会全部关门,我们上了两个多小时后,在超市买了毛巾和牙刷就回旅馆了。

…………

第二天早上大概9点半,我刚在楼下吃完北京杂酱面,一个电话打来,

“请问是江小峰江先生吗?我这边是xx技术有限公司,今天有看到你这边投的一份简历,请问你下午两点有时间过来面试吗?”,对方问道。

“好的,有时间,麻烦你把你公司的具体地点发到我邮箱,我等下查下路线看怎么过来“,我内心一阵窃喜,毕竟这个是我的第一个面试电话。

“好的,我等下会发你简历上的那个邮箱,你注意查收”,说完对方就挂了。

我匆匆忙忙的回到旅馆,用手机连接上wifi,刷新了邮箱,吓了我跳,里面有10多封面试邀请函,我一个个打开看,基本每个区域的都有一些,我拿起小本子将刚才打电话给我的那公司名称记在上面,在公司名称下面列了面试时间,面试地点,然后按照之前培训的时候老师教的去北京公交网查询乘车路线,也在本子上记录下来。记录完毕这个后,我突然陷入了不知所措,这么多公司我大多数面试时间都是同一天的很多,也有些是后面的,我稍微理顺了下思路,将今天下午需要面试先找出来再说,于是我找出来有5家,我将5家公司地点的乘车路线全部以刚才电话给我下午要去的公司地点为起点,一个个搜索,看哪家最近,我就选哪家,然后又以第2家的公司地点为起点,去找最近的第3家,就这样我将这3家公司全部在本子上列好,另外的也先不管了,就这样了。我长长的舒了口气,准备稍微躺一下就出发。这个时候手机又响了。

“请问是江小峰江先生吗?我这边是xx技术有限公司,请问你今天下午有时间过来面试吗?”,对方问道。

“哦,不好意思,我今天下午可能没时间,能安排在明天吗,明天一天的时间都可以”,从现在起,我只要接到面试电话,我尽量把时间往后推。

“那好的,我们约明天上午10点,我等下把面试地点发你手机上”,对方应道。

“可以发我邮箱一份吗,我方便查收”,我问道。

“嗯,可以,我会发你邮箱和手机都发一份,请问你的邮箱是简历上那个xx邮箱吗”,

“嗯,是的”,我答道。

“好的,请注意查收”,对方说完就挂了。

我感觉这个公司还挺好说话的,我心想明天一定会先去这家公司的。

就在我休息的这个1个多小时,我陆续接到有6,7个电话,说实话,我都是往后推,但大多都是推到明天,因为我推到后天甚至大后天我感觉不太好意思,不管怎么样,晚上回来再刷选,按照乘车地点找3,4家公司面试,现在我也懒的去用本子记录明天的面试计划了,晚上回来再说吧。

1个小时后全身梳理完,我背了个包出发了,顺便说下,这个包也是花了100多块钱买的,配合我这身西装革履的行头的,走在外面我立马感觉脖子很难受,尤其是衬衫塞到裤子里面,我总感觉到下面有点透不过气来,北京这个时候的天气非常闷热,我能感觉到我的后背等下就会出汗,但是我又不敢乱动这身行头,生怕弄乱了。

上公交后,我找了个里面的位置坐了下来,我怎么老是隐约感觉到周围总是有人在有意无意的用异样的眼神在看我似的,我将西装上的扣子松了两粒,让自己坐起来稍微舒服些。这个时候电话又来了。

“请问是江先生吗?我们这边是xx公司的,有收到你网上投的一份简历,现在想和你稍微聊下,你现在方便说话吗?”,对方是个女的,说话很干脆,夹着地道的北方口音。

“方便,你请说”,我答道。

“你以前的项目中用到数据库吗”,对方问道。

我心里真想骂人,这不是废话吗。

“用过”,我心里鄙视但态度还是要客气的。

“哦,好的,那html用过吗”,对方又问道。

这个有点过了啊,我心想招技术人才也要找个稍微懂点的人来吧。

“用过”,我答道。

“好的,那s-p-r-i-n-g-m-v-c用过吗”,对方接着问道。

刚开始有那么几秒钟没反应过来,对方是一个一个字母在念的,一会我反应过来,尼玛,极品啊。

“你说的是springmvc吧”,我心里想笑。

“是的,是的,就是它”,对方好像突然获得前所未有的认同感一样,很感激。

“用过”,我依然淡淡的回答道。

“嗯,嗯,挺好的,我没什么问题了,你今天下午有时间过来面试吗“,对方问道。

“我这几天可能没时间,我在外地,要下周才到北京,方便下周等我回北京了再来面试吗”,我真想推到下个月,但是想了下不能这么过份,就随便找个理由先这样。

“哦,这样啊,那我先给你发个邮件,你什么时候回来了再邮件上回复我就是”,

“好的,可以的”,说完就挂了。

无语。

坐了将近一个小时的车,下车后看了时间才1点不到,我先找到这个公司的地点,发现就在隔壁不远,于是我在外面找了个安静的地方,坐下来从包里拿出水喝了口水,感觉时间很充足,又拿起java面试宝典过了两遍,实在无聊。这个中途又接了三个电话,都是面试的,我尽量推到了后天,我打开手机刷新了下邮箱,突然发现里面有二十多封未读面试邀请函,我拿起手指就一顿猛点,有些邮件内容我看都没看,就点完了。起身看来下时间差不多了,我走向第一家面试的公司,这家公司在一个超市上面,总共二楼,我上了二楼,看到门上写了xx技术有限公司,门是开的,我看到里面有2个小女孩坐在办公桌上整理着资料,房间的还有几个男的坐在长凳子上,低头在玩着手机,我敲了下门,说我是xxx,约好来面试的。其中一个扎着小辫子脸上有点痘痘的女孩抬头微笑着说,就等你了,说完她带着我和里面的几个男的往外面走。

“面试就在隔壁大厦,走路过去大概10分钟”,那小女孩说道。

反正我觉得怪怪的,但是又说不出什么来。于是跟着这波人一直往前走,来到一个xx大厦,进大堂我们每个人都登记了下,然后直接坐电梯上了10楼,到了一个写着xx公司的前台,前台小妹领着我们去了一个房间,说道,等下叫名字你们一个个出来会有人来面试的。心里在咕噜着什么情况,其它几个男的貌似很淡定,因为都不熟,谁也没搭理谁。

一会轮到我了,一个胖胖的男的拿着我的简历叫我出来,去了另外一个房间,然后直接一步到位,开始问我问题。

“项目中如果要连接两个不同的数据库,一个连接mysql,一个连接oracle,这个怎么实现“,他问道。

我当时有点懵比的问道,

“为什么一个项目要连接两个不同的数据库呢“。

对方很鄙视的看着我。

“因为业务需求呗”。

这个题目在java面试宝典中貌似没出现过,我脑袋里面不断的搜索着我之前的知识,我突然想起spring配置是可以配置多个数据源的,于是我答道,

“可以用spring的配置文件配置多个数据源“。

“我们的项目中没有用到spring”,对方都没抬头看我,在翻着我的简历,不知道在找什么。

“存储过程有什么不好的”,对方接着问道。

“存储过程比较难以维护”,我答道。

“java怎么调用c语言写的函数”,对方又闷头一阵乱问。

“不知道”,我老老实实回答。

然后对方叫我先出去等消息,于是我又回到了那个房间,一会带我们来这里面试的扎着小辫子那个女孩叫我出来,我们就在走廊一个安静的地方聊了起来。

“面试官说你的基础知识不扎实,给你这边开的价是5000一个月“,她说道。

“嗯“,我一脸蒙比,说实话我都不知道怎么回事聊了不到五分钟就完蛋了。

“工资我这边还可以给你再加点,给你加到6000一个月,但是不会缴纳五险一金”,她看到我没怎么说话,就接着说道。

我这边确定有点搞不懂什么情况,于是我问她,

“我邮件上面试的公司和这家公司不一样,你们是一家的吗“,

“不是,你是属于我们的公司员工,我们发工资给你,但是你上班是在这个里面上班,刚才面试你的就是你项目上的项目经理”,她微笑的答道。

毕竟我这个是第一家面试,我不急着马上决定,我脑袋里面还想着要早点去下家公司,要不然下午还有两家面试不完,于是我说道,

“我先考虑下,再给你们答复“。

“好的,如果工资方面有疑问,我们可以再谈的”,说完我连看她的表情都没时间看,直接坐电梯下去,一路狂奔到公交站点,正好来下个公司路线的那趟公交,直接坐上去,舒了口气。

整个过程我还沉浸在刚才那些面试题中,我先记下来,晚上有时间了我再查阅资料,后面反正还有大把的面试机会,于是我拿出小本子一个个记录下来。

大概15分钟左右,我到达了第二家面试地点。这家公司也是在一个大厦里面,进大堂也是需要先登记,然后我直接上了6楼,一间间的房子找去,找到后我直接到前台说明我是xxx,约好来面试java的,前台的妹子很客气,叫我先坐一下,然后给我倒了杯水,我坐下稍微休息,我看了下这个公司里面少说也坐了50多个人,大半的电脑屏幕上是很熟悉的eclipse,在敲着代码不亦乐乎。一会前台妹子带我去了一个会议室房间,给我一份面试题,叫我先做题,做完题后来叫她。终于我感觉到了面试常规化了,这个才是面试的套路嘛,像刚才,那个算什么,简直是坑爹啊。题目都很简单,基本都是java面试宝典上的,我顿时对宝典又重新敬仰起来,唰唰唰不到10分钟,2页的试题全部写完,我得抓紧时间去下家啊,于是我出来把试题给了前台小妹,她叫我先进去稍等,我进去后,一会来了三个人,二男一女,二个男的是技术,女的是人事,看场面是一起上了。首先人事叫我做自我介绍,说实话,我很喜欢这样的套路,因为全部是在之前模拟演练中的场景,我很熟练的开始介绍起自己来,介绍完毕后,人事又问了我来北京多久了,之前面试过几家公司了,我都如实回答。问的差不多了,人事叫技术的开始问了。

“我想了解下你这个小型电商平台的购物车功能你是具体怎么实现的,你能稍微聊下吗?“,其中一个技术面试官很客气的问道。

说实话,这个问题我之前都不知道演练过多少遍了,一切都在我的掌握之中啊,我回答道,

“我们打开商品页面看到感兴趣的商品点加入购物车,这个时候如果我们没有登录的话,需要先登录,登录完毕后会将登录信息写到cookie里面,这时当我们点击加入购物车,会将商品信息也写到cookie里面,同时也会将购物车信息写到数据库,这样的话我们在另一台电脑上登录,也可以看到购物车里面的商品。“我回答道。

“嗯,那登录后查看购物车信息这个数据是怎么查询出来的,逻辑是什么”,他接着问道。

“首先是查cookie,如果cookie里面有,就展示,如果cookie过期或者没有了,再去查数据库,数据库如果有再写到cookie里面”,我答道。

“你们cookie信息是保持多久”,他问道。

“24小时”,我随便说了个数字。

然后他没接着问,另外一个面试的开始问道,

“你最近这个电影票平台业务是什么呢”。

我知道他想了解整个平台的业务流程,幸好我之前有准备。

“这个项目是我们公司帮xx平台在自己网站上卖电影票,电影票的数据是信息xx平台的,我们每次去xx平台将电影票数据拉取过来在网站上显示,用户通过网站购买电影票下单是直接调用xx平台电影票的接口,等于我们只是一个展示而已“,我回答道。

“你们是怎么拉取xx平台电影票数据的“,他问道。

“通过调用xx平台的一个接口,他们会返回xml数据,电影票的电影名称,内容图片,票价,上映时间等都在这个里面,我们去解析先存到自己数据库,然后展示的时候从自己数据库获取数据”,我答道。

“你们的拉取电影票数据是什么时候拉取一次”,他继续问道。

“半个小时,因为拉去数据和解析数据都是比较耗时”,我说道。

“那你们网站上展示的电影有些其实已经卖完了,但是你们数据还没更新过来,怎么办”,他似乎找到了破绽,继续问道。

“没关系,数据延迟肯定会有的,但是用户下单还是走xx平台接口的,去下单的时候会提示票已经卖完,这个时候我们这边会单独更新这一个电影票的数据”,我回答道。

然后,他们两个又问了我一些java的基本知识,问到了java流,多线程的相关的,我都非常熟练的回答道,我正沉浸在我的毫无破绽的语言中,突然电话响起了,他们三个都看着我,那个场面好尴尬,我恨不得把手机都砸了,其中一个面试官笑着对我说,你先接电话。

我退无可退,拿起电话。

“喂,你好”。

“你好,我是xx公司的,看到你投的我们公司简历,想和你聊下,你现在找到工作了吗”,对方问道。

“没有,要不你发面试信息到我的邮箱上,我现在正有点事情”,说完我就挂了,然后将手机调成静音。我希望对方不要在这个时候来纠缠,同时,我看到那个女的人事那种异样的眼神,我突然感觉到我真的失策,千算万算没想到出了这个无比尴尬的事情,从这个事情后,我后面面试前每次都是将手机调成静音,这种习惯在我后面进公司每次开会,我也都是这样的。

从这个公司出来后,我感觉挺对不住他们的,是我的问题,他们也没说什么就叫我先回去等消息,我继续去第三家,好在也不是很远,坐公交大概20分钟后就到了。

我按照指定路线一直找去,来个一个xx小区门口,应该不会错就是这里了,我问了小区门卫,说这里是不是有个xx公司,门卫说这里面是居民区,没有什么公司。于是我给这个公司打电话,他们说是这里没错,直接进来到2栋3楼,既然电话核实了没什么问题,我就直接走到2栋,上了3楼,刚到楼口,有个男的问我是不是江小峰,我说是,他介绍自己说是xx公司的负责人,带我进去一个房间,我看到门口也没写xx公司名称,带着疑惑进去了,里面是个客厅房间,里面就一张大的会议桌,全是台式电脑,两排一起坐了6个人,他带我进了一个房间,关上门,给我倒了杯水,然后和我聊了起来。

“我先和你介绍下我们这边,我们是xx公司在北京的办事处,你刚才看到是我们这边的所有同事”,他说道。

“嗯”,我应道。

“我们这边是早上9点上班,下午6点下班,平时项目急会晚上偶尔加下班,我们是单休,周6要上班,平时国家法定节假日还是照常放假”,他接着说。

“嗯”,我继续应道,说实话我不知道怎么接他的话。

“另外,我们这边中餐是包吃的,我们隔壁有个房间是厨房,每天会有人过来给我们做饭,晚上要是加班的话,也是在这里吃,相对来说比外面要干净点”,他说话的时候看着我的眼睛,好像在表示待遇挺好的。

“嗯,挺好的”,我附和着。

“我想大概了解下你这边的情况,要不你先稍微介绍下你自己吧”,他问道。

“好的,我叫江小峰,我来自湖北宜昌,武汉xx大学毕业…………”,我巴拉巴拉讲完。

然后他开始问我一些具体事情。

“你这边工作2年是真实年限吗”,他突然问道。

“是的”,我斩钉截铁的回答道。

“离职证明有的吗”,他继续问道。

“有的”,我觉得很奇怪,他怎么不断问这些后面的东西,不问我技术方面的。

“那就没问题,我现在问下你技术方面的”,他说道。

终于来了,我吸了口气。

“jsp中重定向和转发的区别是什么”,他问道。

“重定向发生了两次请求,是浏览器跳转,request绑定的值页面不能获取。而转发只发生一次请求,是服务器跳转,request绑定的值页面可以获取到”,我对这样的题目很熟悉,回答类似的面试题基本不用动脑子,信手拈来。

“get和post有什么区别?”,他继续问道。

“get参数通过url传递,传递的参数是有长度限制的,post放在request body中,没有长度限制”,我答道,我心里知道,面试宝典上列了5,6条,此时我只想到这2条,幸好他没继续追问。

“说下servlet的生命周期”,他问道。

“servlet生命周期可以分成四个阶段:加载实例化、初始化、服务、销毁。”,我答道。

“能描述的更细点吗?”,他好像对这个很感兴趣,继续问道。

我重新整理了下思路,然后说道,

“当客户第一次请求时,首先判断是否存在servlet对象,若不存在,则由web容器创建对象,而后调用init()方法对其初始化,此初始化方法在整个servlet生命周期中只调用一次。完成servlet对象的创建和实例化之后,web容器会调用servlet对象的service()方法来处理请求。当web容器关闭或者servlet对象要从容器中被删除时,会自动调用destory()方法。”,我一口气说完,同时庆幸自己面试宝典不是白背的。

他对我的回答很满意,然后也没继续问下去了,最后问下我的薪资期望。我刚才听到他说周6要上班,于是我开了个15K,他说他们这边目前只能给到10K,我这边能不能考虑下,我说我回去考虑再说,然后握手告别,在出来的那一瞬间,我明显的感觉到厨房有炒菜的声音。

回到旅馆已经是晚上7点了,我在外面随便吃了个面,然后回去洗澡,卸下一身戎装穿上短衣短裤跑到王老师房间,一会大伙到齐了,每个人拿着笔和小本子,正式进入开会时间。

王老师开始叫每个人汇报下今天面试的情况。

每个人大概讲了5,6分钟面试的情况,尤其讲到面试题的时候,有些我们之前没遇到过的都统统记录下来,还有开的薪资情况我们也大概了解下,其中有个哥们说今天一天面试了6家公司,也是蛮拼的,据他说一天吃饭的时间都没有,都是在公交车上吃了点干粮。另外一个哥们恰恰相反,他说自己有点晕车,只能每天安排面试1家,其中我说到我第一家面试的情况,王老师解释道这种属于人力外包公司,我也是第一次听说人力外包这种术语。大家说说笑笑,将一天的面试情况都互相分享,一会就快10点了,王老师叫我们睡觉前再花10分钟投一波简历,然后大家散了。

回到房间爬上床,我拿起手机又投了一波简历,这次投简历大部分都是提示我已经投过了,我也不管三七二十一,反正又投了2000多封简历出去,然后刷新了下邮件,发现里面至少又多了三十多封未读面试邀请邮件,说实话,心好累,我也懒的管了,现在连点进去的欲望都没有了,我反正只认一点,就是电话联系过的我优先去面试,于是我拿本子梳理好明天要面试的公司,花了二十分梳理出来了4家,上午2家,下午2家,实在太累了,躺下后就睡着了。

………

似的面试题基本不用动脑子,信手拈来。

“get和post有什么区别?”,他继续问道。

“get参数通过url传递,传递的参数是有长度限制的,post放在request body中,没有长度限制”,我答道,我心里知道,面试宝典上列了5,6条,此时我只想到这2条,幸好他没继续追问。

“说下servlet的生命周期”,他问道。

“servlet生命周期可以分成四个阶段:加载实例化、初始化、服务、销毁。”,我答道。

“能描述的更细点吗?”,他好像对这个很感兴趣,继续问道。

我重新整理了下思路,然后说道,

“当客户第一次请求时,首先判断是否存在servlet对象,若不存在,则由web容器创建对象,而后调用init()方法对其初始化,此初始化方法在整个servlet生命周期中只调用一次。完成servlet对象的创建和实例化之后,web容器会调用servlet对象的service()方法来处理请求。当web容器关闭或者servlet对象要从容器中被删除时,会自动调用destory()方法。”,我一口气说完,同时庆幸自己面试宝典不是白背的。

他对我的回答很满意,然后也没继续问下去了,最后问下我的薪资期望。我刚才听到他说周6要上班,于是我开了个15K,他说他们这边目前只能给到10K,我这边能不能考虑下,我说我回去考虑再说,然后握手告别,在出来的那一瞬间,我明显的感觉到厨房有炒菜的声音。

回到旅馆已经是晚上7点了,我在外面随便吃了个面,然后回去洗澡,卸下一身戎装穿上短衣短裤跑到王老师房间,一会大伙到齐了,每个人拿着笔和小本子,正式进入开会时间。

王老师开始叫每个人汇报下今天面试的情况。

每个人大概讲了5,6分钟面试的情况,尤其讲到面试题的时候,有些我们之前没遇到过的都统统记录下来,还有开的薪资情况我们也大概了解下,其中有个哥们说今天一天面试了6家公司,也是蛮拼的,据他说一天吃饭的时间都没有,都是在公交车上吃了点干粮。另外一个哥们恰恰相反,他说自己有点晕车,只能每天安排面试1家,其中我说到我第一家面试的情况,王老师解释道这种属于人力外包公司,我也是第一次听说人力外包这种术语。大家说说笑笑,将一天的面试情况都互相分享,一会就快10点了,王老师叫我们睡觉前再花10分钟投一波简历,然后大家散了。

回到房间爬上床,我拿起手机又投了一波简历,这次投简历大部分都是提示我已经投过了,我也不管三七二十一,反正又投了2000多封简历出去,然后刷新了下邮件,发现里面至少又多了三十多封未读面试邀请邮件,说实话,心好累,我也懒的管了,现在连点进去的欲望都没有了,我反正只认一点,就是电话联系过的我优先去面试,于是我拿本子梳理好明天要面试的公司,花了二十分梳理出来了4家,上午2家,下午2家,实在太累了,躺下后就睡着了。

………

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/636921
推荐阅读
相关标签
  

闽ICP备14008679号