缘起&应朋友之邀

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.高标准要求自己。只有不断地提高标准,才能越走越高,所以要以高标准要求自己,不断地反思、总结和审视自己,才能够提升自己。

健康很重要(๑>◡<๑)

程序猿猝死的新闻很多,所以健康最重要,工作之余记得锻炼身体,身体是革命的本钱。跑跑步、撸撸铁,早睡早起身体好。现在得癌症的人越来越多,也越来越年轻化,为了降低风险,如果你是家里的主要经济来源,一份重疾保险值得拥有。先大人,后小孩,先人身,后财产。

选择比努力更重要,格局比能力更重要,以此和大家一起共勉!

 

厚着脸皮求领导写了一篇java小白进阶大牛之路!!!的更多相关文章

  1. java能不能自己写一个类叫java.lang.System/String正确答案

    原文: http://www.wfuyu.com/php/22254.html 未做测试 ! 最近学习了下java类加载相干的知识.然后看到网上有1道面试题是 能不能自己写个类叫java.lang.S ...

  2. 请阐述调用Activity有哪几种方法,并写出相关的Java代码

    请阐述调用Activity有哪几种方法,并写出相关的Java代码. 答案:可以采用两种方式调用Activity:显示调用和隐式调用.显示调用直接指定了Activity,代码如下: Intent int ...

  3. 写代码质量改善java计划151建议——导航开始

    2014-05-16 09:08 by Jeff Li 前言 系列文章:[传送门] 下个星期度过这几天的奋战,会抓紧java的进阶学习.听过一句话,大哥说过,你一个月前的代码去看下,慘不忍睹是吧.确实 ...

  4. JAVA语言之怎样写出高性能的Java代码?

    本文主要向大家介绍了JAVA语言之怎样写出高性能的 Java 代码?通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法.我 ...

  5. 手写代码注意点--java.lang.Math 相关

    1-如果用到了Math的函数,需要手动写上: import java.lang.Math; 2-求x的y次方,用的是Math.pow(x,y); 注意,返回值是double!!! 不是int, 如果需 ...

  6. 如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?

    转自<知乎>如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文? 问题: 作为一个博士生,一直为写论文头疼,读过很多高质量论文,觉得写的真好,但是轮到自己写总 ...

  7. 写了一篇关于 FastAdmin 插件路由的分析文章

    写了一篇关于 FastAdmin 插件路由的分析文章 插件路由演示 ThinkPHP 的路由就像是整个应用的调度室,让你的应用 url 更友好,而且让应用更安全,不会让真实的地址暴露出去. 了解过 L ...

  8. 外国人专门写了一篇文章,来分析为什么go在中国如此火

    外国人专门写了一篇文章,来分析为什么go在中国如此火: <Why is Golang popular in China?> http://herman.asia/why-is-go-pop ...

  9. 算法是什么(二)手写个链表(java)

    算法是什么(二)手写个链表(java)   liuyuhang原创,未经允许禁止转载 目录 算法是什么(〇) 很多语言的API中都提供了链表实现,或者扩展库中实现了链表. 但是更多的情况下,Map(或 ...

随机推荐

  1. 【Java基础】【01初识Java】

    01.01_计算机基础知识(计算机概述)(了解) A:什么是计算机?计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代 ...

  2. AJAX应用【股票案例、验证码校验】

    一.股票案例 我们要做的是股票的案例,它能够无刷新地更新股票的数据.当鼠标移动到具体的股票中,它会显示具体的信息. 我们首先来看一下要做出来的效果: 1.1服务器端分析 首先,从效果图我们可以看见很多 ...

  3. leetcode — unique-binary-search-trees

    /** * Source : https://oj.leetcode.com/problems/unique-binary-search-trees/ * * * Given n, how many ...

  4. 服务化改造实践 | 如何在 Dubbo 中支持 REST

    什么是 REST REST 是 Roy Thomas Fielding [[1]](#fn1) 在 2000 年他的博士论文 [[2]](#fn2) “架构风格以及基于网络的软件架构设计” 中提出来的 ...

  5. SpringBoot系列——Spring-Data-JPA

    前言 jpa是ORM映射框架,更多详情,请戳:apring-data-jpa官网:http://spring.io/projects/spring-data-jpa,以及一篇优秀的博客:https:/ ...

  6. C#多线程编程笔记

    在开发中经常有遇到因为程序执行的时间过长,而造成程序假死的情况,这是因为我们的程序是同步执行的,当执行到需要长时间的操作时,程序就会等待当前的操作完成,从而造成程序假死.C#的异步与多线程就是为了解决 ...

  7. C# 爬虫----Cookies处理(Set-Cookie)

    /// <summary> /// Cookie 助手 /// </summary> public class CookieHelper { /// <summary&g ...

  8. JAVA程序员面试30问(附带答案)

    第一,谈谈final, finally, finalize的区别. 最常被问到.final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能 ...

  9. 测试一波SpringBoot的HTTP吞吐量

    本来,其实就我个人而言现在很少去弄性能这一块的阵地了,主要在做设计与架构,不过前几天刚刚关注公众号的罗哥给我抛了关于性能方面的问题. 一个问题立马引起了我的兴趣,太久没弄性能方面的事情了,所以在隔天有 ...

  10. 【大数据】了解Hadoop框架的基础知识

    介绍 此Refcard提供了Apache Hadoop,这是最流行的软件框架,可使用简单的高级编程模型实现大型数据集的分布式存储和处理.我们将介绍Hadoop最重要的概念,描述其架构,指导您如何开始使 ...