从一个初级程序员到高级程序员的经历

你好!我是谦先生,我是茫茫程序猿中的一猿,平凡又执着。

刚入行的时候说实话,啥都不懂,就懂点皮毛的java,各种被虐狗的感觉。又写js又写css又写后台。。。慢慢被虐出来了~开始掌握一些好多前端框架比如jqury、jquery ui、easyui、datagrid、zTree、extjs、boostrap、echart。。。各种各样的(XoX),后端也因为外包的项目各种各样,主流的框架如struts2、hibernate、mybatis、spring都要熟悉使用,但对于struts2与spring mvc,用得最多还是spring mvc

后来,工作久了有了许多代码的积累,发现一个问题,写过的代码复用起来总是需要改很多地方,我开始尝试尽可能的提高代码的通用型以及代码的扩展性。于是就开始搞设计模式,啃书啃开源框架的源码,万事学习模仿起嘛。之后就模仿着开源框架写了核心设计的代码,比如ioc容器、rpc框架、基于观察者的高可用中间件等代码。也仿写基于二进制的linux的权限管理并在项目中成功应用,优化了一般字符串存储的体量问题。

随着时间的飞逝,公司越来越多的业务跟我挂钩了。慢慢的我在项目组中编码的能力也得到了认可,从一个新人变成了一个核心的开发成员,开始接触到软件架构的事情了。开始有同事协助我的工作,开发任务的安排不由得我不写接口文档,以及做项目的架构中很重要的数据库设计,也开始画各种UML来理清项目代码的各种关系。在外包的工作当中,有开发的工作,也有研发的工作,中间件设计与开发是最恶心的,常常会处理许多并发编程的问题,各种并发容器,比如LinkBlockingQueue、DelayQueue等各种队列,还有容量评估、高水位、系统阈值、QPS、RT等一大堆新认知,顿时发现这个世界太大了,这水好深。除了中间件带给我的痛苦,同时还有另一个恶心的就是mysql存储过程的提示,写了几遍再也不想写了。还有700多行有些甚至上千行的的sql的扩展开发,改哪哪疼,多么希望别再往里加需求或改需求了。也因为性能的事情也开始学习orcale优化器策略、索引设计、物化视图的设计跟jvm的知识,那些新老生代、标志压缩、TLAB、串并行收集器让我记起了那个寒冷的冬天。

项目经理开始让我去了解学习hadoop,linux熟练程度决定了我的掌握速度,我开始把下班的生活搬进linux的世界,一个月多都在使用linux shell去干活,迫不得已才能用windows(只能查东西),为了强化linux,开始学习集群的架构知识,今天把一个tomcat集群搭起来,明儿几天计划并实施nginx、Apache的负载均衡,又实施了集群优化,比如读写分离、动静分离等技术。后来想到一个问题,就是当负载服务器宕掉就会出现集群瘫痪的问题,于是就接触到了高可用,也发现了keeplive跟zookeeper这两个好东西。之后做压力测试的时候发现,nginx的峰值是4W左右、Apache就低很多,就开始研究他们的负载均衡。于是了解到他们是出于第七层的负载均衡只能做到请求派发,有一项技术叫LVS——软件实现的第四层负载均衡,跟F5的原理一样以转换IP达到的负载均衡技术,不过它是软件实现。还有基于一致性hash的session缓存层,跟几个常用的nosql研究。

一个月后发现,我的linux已经突飞猛进了,然后我开始去做学习hadoop体系,从第一个版本到第二个版本,他的生态也研究了如hive、hbase、zookeeper、sqoop,还有storm跟spark。开始尝试去从朋友拿到的数据,根据朋友描述的产品线做集群设计与部署,看着自己部署的集群能模拟朋友公司的生产环境运作,我感到很兴奋。之后也为了获得更多的数据去学习python跟nutch,还有solr跟elasticsearch的使用。在自己的公司也有大数据部门,后来成功通过了考核转到了大数据事业部,进入了我的大数据职业生涯。开始我遇到了许多问题,mr、hive的数据倾斜、storm、spark的join问题,还有基于elasticsearch的hive索引优化,以及hbase的二级索引实施的分布式问题。这个过程因为经常写运维脚本也强化了我的python跟linux shell能力,还掌握了scala的多范式编程。

在大数据事业部的日子一天一天的过去,也慢慢适应了与web不一样的业务需求,刚开始的时候就部署下环境,改了许许多多配置文件,还有一些日常的清洗工作、指标统计工作以及一些临时的处于问题排查的业务需求外,一天工作中剩下的时间还是挺多的。听说最近的项目也有不少跟模型有关,开始了解大数据的数据挖掘领域。通过同事朋友的交流还有网上市面的一些资料书籍,慢慢开始熟悉机器学习的各种算法在spark、mahout、还有mapreduce中的应用。比如基于频繁集项、分类、聚类等算法的舆情分析系统,以及过程中词库的设计、同义词、错写词的处理等一些关键问题,其次就是标签系统跟用户画像系统的开发,还有公交路段实时监测预测系统的开发过程。在这个学习的过程当中,如当初一样,往事模仿起,写了好些业务流程的架构开发,也开始在生产中投入自己在数据挖掘中的自身价值,如今已经有很多的数据挖掘开发经验了。。(上海尚学堂大数据培训谦先生原作,请多关注后续更多大数据相关技术文章)

写到这里,从web到大数据所经历的许许多多以后,我又一次看到了一个新的方向,那就是人工智能,也开始投入到人工智能的研究路上。同时也慨叹,作为一个IT技术人,迫切需要一种学无止境的精神才能抵得住技术的快速更替。

谦先生的程序员日志之我的hadoop大数据生涯一的更多相关文章

  1. [转载]Java程序员使用的20几个大数据工具

    最近我问了很多Java开发人员关于最近12个月内他们使用的是什么大数据工具. 这是一个系列,主题为: 语言web框架应用服务器SQL数据访问工具SQL数据库大数据构建工具云提供商今天我们就要说说大数据 ...

  2. Java程序员使用的20几个大数据工具

    最近我问了很多Java开发人员关于最近12个月内他们使用的是什么大数据工具. 这是一个系列,主题为: 语言 web框架 应用服务器 SQL数据访问工具 SQL数据库 大数据 构建工具 云提供商 今天我 ...

  3. 程序员必须要知道的Hadoop的一些事实

    程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...

  4. 程序猿的还有一出路:大数据project师

    非常多年前我非常郁闷地写了一篇博客<程序猿的出路在哪里?>,之所以郁闷.我记得是看了中国男足的比赛,不由自主对照自已苦逼的程序猿生涯,以前对中国软件的感情有如对中国男足,绝望到没有不论什么 ...

  5. 看似简单!解读C#程序员最易犯的7大错误

    编程时犯错是必然的,即使是一个很小的错误也可能会导致昂贵的代价,聪明的人善于从错误中汲取教训,尽量不再重复犯错,在这篇文章中,我将重点介绍C#开发人员最容易犯的7个错误. 格式化字符串 在C#编程中, ...

  6. 后端程序员之路 47、Hadoop hdfs

    Hadoop的核心是HDFS和MapReduce,而两者只是理论基础,不是具体可使用的高级应用,Hadoop旗下有很多经典子项目,比如HBase.Hive等,这些都是基于HDFS和MapReduce发 ...

  7. 以慕课网日志分析为例-进入大数据Spark SQL的世界

    下载地址.请联系群主 第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目 ...

  8. 以某课网日志分析为例 进入大数据 Spark SQL 的世界

    第1章 初探大数据 本章将介绍为什么要学习大数据.如何学好大数据.如何快速转型大数据岗位.本项目实战课程的内容安排.本项目实战课程的前置内容介绍.开发环境介绍.同时为大家介绍项目中涉及的Hadoop. ...

  9. 【慕课网实战】一、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    课程整套CDH相关的软件下载地址:http://archive.cloudera.com/cdh5/cdh/5/ cdh-5.7.0 生产或者测试环境选择对应CDH版本时,一定要采用尾号是一样的版本 ...

随机推荐

  1. 最简单实用的JQuery实现banner图中的text打字动画效果!!!

    下面,就让小博详细介绍如何实现上面GIF实现的banner图中的文字动画效果,最简单实用的方法(鉴于代码量较小,就内嵌在一个HTML文件中了): 首先,我们要在header导入一个jQuery,并新建 ...

  2. 团队作业7---Alpha冲刺值事后诸葛

    一.设想和目标 1.我们的软件要解决什么问题? 解决教师和助教对实验报告查重的问题,拥有两个用户:1.教师或助教:查看学生实验报告的重复率:4.学生:上传实验报告. 2.是否定义得很清楚?是否对典型用 ...

  3. 【Alpha】 第七次Daily Scrum Meeting

    一.本次会议为第七次meeting会议 二.时间:9:37AM-9:50AM 地点:禹州三楼 三.会议站立式照片 四.今日任务 成员 昨日任务 今日任务 林清青 学习并了解微信程序相关方面知识,为小组 ...

  4. 201521123018 《Java程序设计》第2周学习总结

    1. 本章学习总结 * String类 * Java数组Array的使用 2. 书面作业 Q1.(1) 使用Eclipse关联jdk源代码,并查看String对象的源代码(截图)? (2)分析Stri ...

  5. Java补码表和位移运算符

    在java中数据都是以二进制的形式保存的. 但是我们看到的数据怎么是10进制的? 因为java展示之前会自动调用toString()方法 这里以4位2进制为例,4位2进制只能表示16个数,即0-15. ...

  6. POJ-2299 Ultra-QuickSort (树状数组,离散化,C++)

    Problem Description In this problem, you have to analyze a particular sorting algorithm. The algorit ...

  7. Oracle总结第二篇【视图、索引、事务、用户权限、批量操作】

    前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了-那么本篇主要总结关于Oralce视图.序列.事务的一些内容- 在数据库中,我们可以把各种的SQL语句分为四大类- (1 ...

  8. JDBC操作数据库之查询数据

    以数据库中查找图书信息,并将信息显示在jsp页面当中为例,下面贴上代码片段: (1)在index.jsp页面代码body中只要添加如下一段代码: <a href="FindServle ...

  9. tomcat The specified JRE installation does not exist

    window->perferences->server->installed runtimes 里tomcat删掉,重新建立服务,再运行

  10. C++临时对象以及针对其进行的优化

    C++临时对象以及针对其进行的优化 C++中真正的临时对象是看不见的,它们不出现在你的源代码中. 那么什么时候回产生临时对象呢?主要是三个时刻: 产生临时对象的三个时刻: 用构造函数作为隐式类型转换函 ...