提笔忘字,但基于每年的流程年终还是要写点什么的,我本身是一个朴素的程序员,没有煽情的文笔,纵使词不达意,唯有朴实感情留下这一年的感触。
关于自己
忘记了是什么时候买了练字贴,偶尔用过那么几次就静静的躺在书桌上。
忘记了什么时间淘了那一本本的书,很是认真的读了一两本,各种琐事就把剩下的撂在了一边。
好像只记得办健身卡的时候,貌似是情人节前后。然后激情了小半年,因为学车,同事离职各种原因懈怠了自己(借口)。我自认为不是一个特别懒的人,只要想做,就会去努力争取,可是好习惯这东西真的挺难养成。比如,骑车,读书,晨跑,爬山这些自己都曾尝试过,但大都没有坚持下来。
忘不了的是,每天上班前总会打开自己的网站瞅那么两眼。很欣慰,一直在坚持,还好没放弃。筹备了多年的博客最终使用了Typecho,一个很精简的博客,喜欢她的精致小巧。情感,生活乃至技术更多的是记录在博客上面,所以我想这会一直坚持下去吧。
2016年7月25日,我在这里写下了第一篇日志,至今已经有大大小小88篇,一些事技术,有些是随笔,还有我们的心情。我不是一个善于表达的人,以至于很少在朋友圈发各种心情。很多人渴望认同,害怕寂寞,所以会经常发,以期得到关注。每一个赞和评论都会让你开心。后来发现做这些东西毫无意义,很少有人能戳到你的嗨点,或者你期待的那个人根本就没有赞或评论,又或者你认为你的生活已经毫无可取之处,没啥值得晒了,也就不发了吧。也有一些人,可能就是单纯的记录生活的点点滴滴。而我,自己也说不清楚。
那年冬天,清晨一人走遍的榉林山的角角落落。尽管每天都起得很早,但是山上已经有很多晨练的老人,或跑步,或是不经意的吼一嗓子,那声音回荡在整个山林之中。也许是享受那种感觉,竟不知不觉的走了一个来月,看看现在的自己,或许真的要重新拾起来了。
我讨厌现在的自己,讨厌那个懒惰而又各种理由的自己。想做和做可能只在一念之间,但是做和坚持去实现既定目标却有很大的区别。
关于工作
2016年,有一段时间曾感觉很压抑,有些事情想不明白,想逃离。也许环境太安逸感觉不到自己的成长,也可能是快速变更的需求,以至于现有功能都被自己改的乱七八糟,对于现有功能的无力感。但自认为不是一个安于现状的人,我会努力去网上爬取作为一个合格程序员所应具备的能力。
日志分析系统
涉及技术:linux、logstash、redis、shell、elasticSearch,kibana
2016年,我们上线了多个系统,当然问题也接踵而至。如果用户反应或者测试人员发现,开发人员可能会排查一下错误日志,那时的情景是这个样子的,开发人员进入服务器log目录下,命令查看日志,我先清一下屏,哎某某某你在点一下,问题出现了,贴着屏幕查看错误行数。但对于多机多应用部署就不合适了。这里的多机多应用指的是同一种应用被部署到几台服务器上,每台服务器上又部署着不同的多个应用。可以想象,这种场景下,为了监控或者搜索某段日志,需要登陆多台服务器,执行多个tail -F和grep命令。你一定看的眼花缭乱吧。但是如果我们的工程师没有发现或者用户没有反应?呵呵,后果自己想去吧。
年初的时候还感觉今年准备学点什么呢?逛博客园的时候偶然发现一篇博文,也是关于年终总结的。看别人也是激励自己,你还有许多事情要去尝试和经历。 其中一部分是关于日志分析ELK系统的,第一次接触,原来日志也可以这么高大上的统计分析和报警。关于ELK日志分析其实就是一系列开源组间搭建的日志分析,监控,展示系统。很是幸运,公司还是一片空白。对于互联网公司而言,日志的重要性不言而喻。记录用户行为,大数据分析用户操作,错误日志警报及时通知工程师等等,这些都是项目上线后必备的功能。这里送给大家一句话,从0到1是创新,从1到100那是苦力。
任务调度系统
涉及技术:linux、dubbo、zookeeper、quartz、springMvc、shiro
公司的项目越来越多,因为是做教育产品,所以存在众多分类,拿科目来说,每个科目就是一个项目。以前有很多定时统计分析的业务是在各个项目中的,但是每一次功能的新增和修改,任务量是呈现几何倍数的,功能的新增,修改,项目的上线打包部署(测试和开发环境)都是有很大工作量的(很多是重复的工作)。去年开始就筹备这个事情,今年年初算是把任务平台的大体架构搭建好了,项目采用springMvc+Dubbo+hibernate框架,使用远程调用的方式,把所有任务或者重复的功能基于接口抽离出去,提供给消费者调用。这样以来,工作量是大大减少了并提高了工作效率。
自动部署工具
涉及技术:linux、shell、ant、svn
上面提到项目的上线打包部署,就拿我们现在的某某平台来说,两个平台,暂时每个平台下3个科目(以后可能会扩展到多个科目),加上统一认证平台也就是说7个项目。如果有新功能或者修改的需求,一般来说各个科目的修改是同步修改的。在部署项目或打包项目中,通常大家都是手动部署或打包的多。
很多公司把这一任务交个了我们做开发的,其实这部分应该谁做呢?本质上应该是测试的来完成,但一些公司的测试不会做这个,慢慢的就变成了开发的事情。有些公司是人手比较少、不健全,所以一部分人自己承担了这个事情。在我们手动打包时,其实这是一个重复的、没有技术含量的、耗费体力的活儿,有时候甚至要部署几个小时。一般步骤就是备份服务器项目、更新svn上代码、修改好相关的配置、编译class、发布到tomcat(web工程)、测试启动无误。
其实网上有很多自动化部署的工具,就那jenkins来说,就是一个很好的界面化部署工具,但是测试了一下并不适合我们现在的场景(190服务器经常卡崩),有点重。由于我们项目中使用的时候ANT工具打包,配合SVN在公司内网linux系统下编写了一套build.xml脚本,从更新,打包,停止服务,备份项目,部署项目,启动服务一体化程序。至此我们的部署时间缩短了不少,省去了枯燥无味的拖拽工作。
其实最不好弄的就是编写build脚本,但这个脚本其实也是很简单的(因为搞定了),它其实就是一个个命令,只不过它是用xml方式来完成命令行的而已。所以测试或者我们的攻城狮会写ant的build脚本这个也是应该的,如果你还在天天在做反复、没有多大意义的、浪费生命的事情。还是建议你学习学习。反正是百益无一害的事情,何乐而不为呢!
两个APP
涉及技术:appcan、springMvc、websocket、locStorage,uexScanner,hibernate
由于公司的需求和业务,一不小心就做了2个APP。其实很简单,就是一个APPcan的外壳+H5页面,所有的前后台都是部署在我们自己的服务器上。虽然是两个小项目,但是用了全新的框架技术,摒弃了以前项目中使用的struts2,使用了更轻量化的springMvc,AOP日志记录机制还有log4j异常邮件报警功能,websocket做前后端通信。
三个支付
涉及技术:springMvc、dubbo、zookeeper,hibernate,支付宝支付,微信支付,银联支付
对于自己来说,支付这个词经常被群里的网友问起,因为不曾接触,也不好回答。由于公司要上线充值业务,所以顺手就做了支付模块,支付宝和微信扫码支付。由于提前准备,做起来还算顺利,当然中间也经历了许多坑,如果真要吐槽的话,微信开发团队的文档API真是一个烂,基础的DEMO都写不全,很多都是让开发者自己去猜了。同时也感谢一下阿里蚂蚁金服工程师柯刘阳的热情回复。
小结
以上,说起来很轻松很简单,但是中间经历了什么也只有鬼知道了。勉励自己,也希望大家尽可能多的去接触你所在领域的新鲜事物,以便做到以后拿来就用。
作为一个JAVA后端程序员,有很多东西等着你学习和精进。深厚的JAVA基础功底,spring和mybatis框架,linux服务器,数据库优化,消息服务,缓存服务,负载均衡等等一系列的知识。时刻保持一种学习的心态和欲望,这也是作为一个合格程序员的基本素养。
一些鸡汤,勉励自己也送给大家:
今天你看到了,你做了,那或许未来的某一天,你会感谢今天努力的你。但如果你看到了,没有做,或许你依旧还是那个,整天抱怨工作没劲,加班太累的人,然后在碌碌无为和怨天尤人中度过。
程序员这个职业很公平,相信不少人当初踏上这条路的时候,也是觉得程序员这个职业充满着奋斗的气息,可以依靠自己的努力改变自己的命运,而不像某些职业一样需要拼爹。
在程序员这条路上,努力,你就有很大希望成就自己的目标和梦想。不努力,那你就基本上原地踏步下去,直到被后浪拍死在沙滩上。
如果你能接受平庸下去,那就平庸下去,幸福的过完你的一生,也没什么不好。否则,你就坚持努力下去,直到达到你一个又一个目标。
最怕的情况就是,心中充满了欲望,不甘于平庸,却又不愿意努力的人,这样的人,如果做了程序员,真的是一种悲哀。
关于情感
Stand alone, one day the world will find you...... 2014年6月5日 我在QQ空间里面发了这样一条说说。2016年我遇到了她,一个让我仰望的女子,穿鞋比我高,头发比我长的姑娘。一起爬山,骑车,大清早陪我学车,穿过隧道,然后去飞一趟天府之国。
如果你读到最后,可能要问我,为什么你的情感描述的如此简单。我只能说,这是我们的世界,我们的路还很长,我们会这样一直走下去。