缘起&应朋友之邀
2019年已经过去两个月了,应朋友之邀,写写自己的个人经历,与其说经历还不如是自我的总结与反思。2012年2月份只身一人拖着行李箱来到北京库巴科技有限公司实习,那时候库巴处在高速发展的阶段,我记得那一年库巴招了300多个应届毕业生,光技术就招了50多人,有运维、测试、开发、产品经理。那时候公司有宿舍,4个人一间,上下铺,条件虽然艰苦了一些,但认识了很多好朋友,至今还在保持着联系。下班之余大家经常一起吃饭喝酒,也就是那个时间胖了很多,回学校答辩的时候老师说:“你怎么胖成这样了,都有点快认不出来了”。
学校&java
在学校的时候对java很感兴趣,以至于上C语言课的时候,我在看java的学习视频,记得那时候看了很多牛人的视频,像魔乐科技的李兴华老师,尚学堂的马士兵老师,传智播客的张孝祥老师。
库巴&实习
在学校学的是struts、spring、Hibernate,实习的时候,公司用的是SSI,Ibatis没有用过,花了一周的时间学习框架,可能基础还算比较好,第二周领导就让我参与项目,这也是我人生中的第一个真实项目,虽然以前在学校也做过一些项目和参加过一些比赛,都是只限于单机版。公司的网站最早是用.net开发的,遇到高并发的时候经常宕机,我属于用户中心组,我们的任务是将注册登录部分用java进行重构,我负责登录功能的开发,在这个项目学到了很多东西,Nginx负载均衡、redis缓存,diamond配置中心,那时候只是知道一个概念,并不了解nginx是如何工作的,都有哪些负载均衡的策略,对于redis只是知道它比数据库要快,并不知道为什么它很快?那时候阿里开源了很多项目dubbo、diamond、metaq、tddle等等,我是比较幸运的,库巴是一个敢于使用新技术的公司,在这个环境下我也学到了很多东西。
库巴被国美收购&大裁员
2012年年底库巴被国美收购,就面临着公司合并和大裁员,到了年底300多个应届生,留下来的不多,可能不到50个吧,我有幸被留了下来,两个公司合并不光只是人员组织合并、系统、数据都要合并,2012年年底我的主要任务就是迁移数据,导出sql脚本,在那段时间我学会了使用python,因为用java效率比较低下,那时候库巴已经有800多万的用户,最开始用的是limit进行分页,随着分页越来越往后,查询速度会越来越慢,最后经过研究才知道mysql使用limit会需要先定位到前多少条之后再取出后面的数据,当limit200万的时候,先要查询出前200万的数据,就会很慢,最后的解决方案是根据id分段,每次取1000个id,这样还可以使用索引,最后800万的数据使用了2个小时就导出成功了。
去国美上班
2013年过年之后就到国美上班了,在中关村鼎好大厦,国美给我的印象不太好,虽然有好几层办公楼,人员也很多,但是办公室政治也挺严重,不太喜欢那个氛围。国美使用的是oracle公司的电子商务相关的ATG系统,很复杂,光是搭建开发环境都需要很久,我也挺排斥的,不太想学这个,即便学会了对将来出去找工作也没有什么帮助,因为能买得起ATG系统的公司并不多,我把这个想法告诉了领导,领导给我重新分配了任务,让我参与了一个“国之美”的项目,用以前库巴的技术系统,去搭建一个网站售卖艺术品的网站。之前部署应用的同事,不想再搭建服务器了,他把这个任务交给了我,这段时间学到了很多,我学会了很多linux命令,如查看日志、软链、安装软件、挂载、启动应用等等常用的命令。学会了如何配置nginx,怎么让nginx重新加载生效。最重要的是对整个系统架构,应用之间的依赖调用关系,有一些基础的认识,因为以前只是对注册登录、用户中心比较了解,对订单购物车、促销、库存知之甚少。
国美壹药网&成长
2013年6月底,很多同事都不太喜欢国美的工作氛围,都想去换工作,也包括我,领导让我们再等等,他最近在谈一个项目,那就是做医药电商的网站壹药网(2018年美国上市,哈哈,我也是在上市公司待过的人),那时候壹药网还没有自己的技术团队,使用的是一号店的系统,需求排期需要很长,响应速度很慢,想找一个有能力的技术团队,然后我们9个人从北京来到上海,月底就全部去武汉出差,因为1号店研发部门设立在武汉,需要与他们对接,迁移药网的数据(用户、订单)和做系统的切割,一边对接数据,一边开发系统。那时候20多人,在武汉待了两个月,每周工作6天,每日从9点到晚上10点,那时候很辛苦,但是成长也最快。以前是在同事带领下辅助完成工作,现在需要自己独挡一面,因为电商系统相对来说比较复杂,功能模块很多,每个大的模块都是单独的应用(有点微服务的感觉),每个人都负责好几个应用,我负责注册登录、用户中心以及一些后台的应用开发,还有就是应用的部署,那时候还没有集成jenkins,都是通过linux命令和脚本部署应用。经过3个月的努力,系统上线了,我现在还记得那天上线的情形,从晚上10点开始上线,还是出现了很多意想不到的问题,记得那时我们到第二天下午5点多才解决完问题,然后才回家休息。
在壹药网工作的这段期间,最大的收获是业务上的成长,接触到了商品、库存、促销、购物车、CPS等,商品还是挺复杂的,有产品、商品、sku、商家、商品属性(筛选属性、说明书属性),前后台分类、套餐、图片、文描等。库存要求比较严格需要控制超卖,我们使用的是乐观锁,每次冻结库存的时候where条件加上库存数量的判断,如果有足够多的库存才允许冻结。CPS是和网盟合作,如51返利、亿起发、万里通、成果网等等,需要和网盟对接,推送订单至网盟,并为对方提供查询订单接口。
2013年-2015年是药网高速发展的两年,业务运营人员和技术人员都很给力,月销售额从50万做到了8000万,日注册用户2万人,接口性能要求越来越高,经常晚上使用jmeter对接口进行压力测试,有一次网站遭遇DDOS攻击,网站长时间服务不可用,最后使用了阿里云盾之后,才恢复正常。随着业务量的增加,用户的增长,对系统的考验也越来越大。系统的架构演进过程,注册登录、用户中心、购物车、订单、库存、商品、促销、退换货等部署在同一个应用,业务增长,单台服务器不足以支持业务发展,增加服务器使用nginx负载均衡,随着机器的不断增加,mysql很快达到瓶颈,应用拆分微服务,各模块独立,数据库独立,为了进一步提升性能,增加缓存,前台接口查询缓存,后台才查数据库,通过消息队列进行数据库和缓存的同步,同时每天定时任务,保证数据库和缓存的最终一致性。使用限流、降级和熔断等方法应对瞬间高并发。
药网离职&去360健康
15年8月份,从药网离职,来到360健康,重构商品,将商品属性去掉了动态属性,系列属性、说明书属性、更加动态,商品管理也变得简单。在这里开始使用敏捷开发,每两周一个迭代,需求通过系统管理,每天花15分钟开晨会,回顾昨天的任务,今天的计划,过程中遇到了什么问题。每天提前发现问题,这个迭代结束之前,确认好下个迭代的需求,并将需求拆解,估时,并录入系统。每隔一段时间做一次复盘,发现迭代过程中做的好的地方,以后的迭代中继续保持。迭代中做的不足的地方,一起讨论解决方案,避免下次再犯,会议结束后,通过邮件的形式给予反馈。技术方面,真正意义上开始使用jdk8,用gradle替换了maven,更简单灵活,crm系统审批使用了工作流activiti,为了提高效率使用了spring boot,使用代码生成器,减少重复代码的开发。
减少打游戏&戒烟
12年7月份毕业以来,工作之余花了很长的时间打游戏,周末也不研究技术,就宅在家里,看看电影,打打游戏,LOL、剑灵、dota2、风暴英雄,浪费了很多大好时光。还好17年在亦师亦友的领导影响下,回归正道,我记得我是在17年3月份开始减少打游戏的时间,因为那段时间在udacity学习机器学习,因为要学习机器学习需要把大学的数学知识重新捡起来,比如离散数学、高数、概率论、线性代数,3个月拿到了机器学习进阶的证书。到了17年10月份,当我读了采铜《精进·如何成为一个很厉害的人》,让我彻底明白了,打游戏是一个高收益,但是半衰期很短的事情,我们应该多做一些收益高和半衰期长的事情,如读书。从那以后我就再也没有玩过游戏了。当自己想通了,觉得某件事是对的我会毫不犹豫的坚持下去,我觉得自己还算一个自制力比较强的人。15年在药网的时候,周边的同事都在戒烟,再加上抽烟,让我早上起来的时候,恶心干呕的厉害,为了健康把烟戒了,万事开头难,刚戒烟那会儿真的很痛苦,看到别人抽烟真的忍不住想抽,过了几个月之后,就没有那么强烈了,现在已经没有什么感觉了,戒烟到现在虽然中途抽过几根,也只是在一些特殊的场合,抽着好玩而已。
阅读
我以前觉得自己不太爱表达归咎于自己内向的性格,现在我渐渐发现,其实不然,可能是知道的太少了,不知道怎么去表达,更不知道该表达什么,随着读的书多了,慢慢的就有话题聊了,当然读书不只是为了谈资、炫技,更多的是自我提高,通过学到的知识,帮助我们解决问题,提高效率,提高做成功决策的概率。一开始我是很排斥读书的,像戒烟一样,一开始很痛苦,真的是逼着自己去看,为了培养自己的读书习惯,我先从自己感兴趣的书开始,我比较喜欢历史,从《如果这就是宋史》这套书一共有十册,我给自己制定了计划花3个月的时间看完,基本上是一周一册,因为看的是电子书,在去地铁的路上,合理利用这些碎片化的时间,3个月下来我把这十本书真的看完了,并分了3次和同事一起分享,自己做PPT,最主要是为了锻炼自己的表达能力。经过这三个月,给自己建立了一些信心,后面觉得看书也没有这么难。这两年也看了一些书,也买了很多书,读书还是要读一些经典的书,不要像我一开始,不管三七二十一,只要在亚马逊评分还不错就会买,就会读。现在读书会有选择性的读,会读那些经常被人推荐的书,在这里也推荐几本我自己觉得还不错的书,《远见》《见识》《穷查理宝典》《黑天鹅》《精进·如何成为一个很厉害的人》《高效能人士的七个习惯》《运营之光》《原则》《深度思维》《终身学习》《思考快与慢》《富兰克林自传》。
《远见》的作者提到了三大职场燃料,可迁移的技能、有意义的经验和良好的人际关系。在职场中的能力分为两种,一种是硬技能,一种是软技能。硬技能对于一个程序员来说就是技术能力,软技能就是日常工作中经常使用的,沟通表达能力、协调能力、决策能力、管理能力等等。这两年投入的大量的时间在提高软技能方面,以至于硬技能有所懈怠,今年过完年之后,觉得有必要重新合理安排时间,将大部分时间投入到硬技能学习中去。
分享&提高
最近在听左耳听风的技术专栏,他在技术领导力的一篇文章中提到提高技术领导力的四个方法,觉得很有道理在这里和大家分享一下。
1.吃透基础技术,基础技术是各种上层技术共同的基础
2.提高学习能力,所谓学习能力,就是能够很快地学习新技术,又能在关键技术上深入的能力
3.坚持做正确的事。做正确的事,比用正确的方式做事更重要,因为这样才始终会向目的地靠拢
4.高标准要求自己。只有不断地提高标准,才能越走越高,所以要以高标准要求自己,不断地反思、总结和审视自己,才能够提升自己。
健康很重要(๑>◡<๑)
程序猿猝死的新闻很多,所以健康最重要,工作之余记得锻炼身体,身体是革命的本钱。跑跑步、撸撸铁,早睡早起身体好。现在得癌症的人越来越多,也越来越年轻化,为了降低风险,如果你是家里的主要经济来源,一份重疾保险值得拥有。先大人,后小孩,先人身,后财产。
选择比努力更重要,格局比能力更重要,以此和大家一起共勉!