回顾2017:谈谈过去一年的成长
2017过去了,回顾2017希望能够看清楚现在的自己,在2018遇见更好的自己。前不久支付宝的年度账单刷屏朋友圈,作为一名程序员,我也来晒晒我的2017年度技术“账单”。
2017年度成长“账单”
Github:89 stars, 37 forks
spring-boot-learning-examples: 62 stars, 27 forks
java-skill-graph: 27 stars, 10 forks
博客:21篇
java开发问题汇总:4
框架学习:15
架构设计:2
职业生涯:开始带新人,成为团队核心
随着对业务的熟悉和技术能力的提高,开始成为团队核心,并开始带新人
算是上级对个人能力的认可,2018继续加油。
技术成长:砥砺前行,进阶高级开发
工作后发现进步明显没有在学校快,一方面是没有了大把空闲的时间去学习了,另一方面是系统化的学习越来越少,所以更多的技术方面的成长主要来源于在工作中学和周末时间的利用。
总结起来,技术成长可以概括为3块:架构设计、问题排查、框架学习
架构设计:
- 设计了一种分布式系统的水平扩展方案,方便系统进行扩容;
- 设计一种分布式缓存本地化的解决方案;
- 部分核心接口进行了全缓存改造,让dubbo远程调用更快;
- 自主研发了服务治理平台,集成配置中心、性能诊断和流量压测
问题排查:
- 使用BTace进行线上问题定位,btace的一大优点是安全性和无侵入性
- 线上CPU很高排查
- log4j同步日志造成的死锁,线上一定要用异步日志
框架学习:
- Kafka
- RocketMQ
- Dubbo
- Sharding-JDBC
- Mockito
- Elesaticsearch
- Disconf
- Redis
- Cache: Ehcache + Caffiene
在架构方面做一些总结的话,我觉得可以概括为如下几点:
- 做好系统的监控,包括性能指标、业务指标
- 缓存是提高性能的利器,包括分布式缓存和本地缓存(本地缓存失效问题要考虑)
- 多个dubbo接口调用尽量采用异步,一种方案是使用线程池 + Future
- 单个批量查询接口如果批量的数目比较大,可以采用分页 + 异步的并行方案
提高效率
提高工作效率有很多方面,这里包括时间管理、知识管理、沟通协作、提前设计、谨慎修改、使用插件
(1)时间管理
在日常工作中总是不免会被各种事情干扰,比如测试突然给你反馈一个问题、产品突然需要上线一个紧急需求、PM突然让你开个会、leader突然找你谈个话。。。诸如此类,作为程序员的我们只想安静地写写代码,有那么难吗。上面这些相信程序员都深有体会,为了更好处理这些事情,我一般会给这些事情设个优先级,哪些是要马上做的(不做可能会造成更大的问题,比如线上突然出现问题)、哪些是可以稍后在做的(比如测试反馈一个问题)。每天用Google Keep今天要做哪些事,技术的、业务迭代的
(2)知识管理
程序员需要不断学习,我一般使用使用印象笔记进行管理,在碎片时间看到好的文章收藏到印象笔记里面,设置一个标签,方面后面进行搜索和管理。设置标签可以很好地进行归类,现在很多人把文章收藏到印象笔记后就懒得看了,一个很重要的原因就是很乱,没有看的欲望。
(3)沟通协作
一个需求经常会跨部门协作,积极主动找接口人沟通问题和细节可以尽早发现问题,程序员沟通都比较实在,不要只知道闷头写代码,多通沟通可以了解更多上下游的细节,对我们自己开发也是很有帮助的
(4)提前设计
一个需求评审完后,其实就可以开始开发了,一般我不会马上急于开发,而是事前设计好实现方案,想好可能会出现的问题,包括设计的改动会有哪些、哪些业务会涉及到、如何上线、是否有不一致的问题(特殊场景)、如何回滚。当我们把这些细节想清楚后,其实开发的时间会大大缩短,而且实现的代码质量也会比较高。
(5)谨慎修改
刚才提到提前设计,为什么还要提谨慎修改呢?有一些需求或者重构你一看就知道应该改哪些以及怎么改,这种就没必要进行详细设计了,一般可以直接改代码。改代码过程中要谨慎、思路清晰,切忌不懂原来代码逻辑凭主观理解去修改代码。忌:永远不要去猜代码!
(6)使用插件
对于IDE,可以使用插件提高开发效率,比如使用Maven Helper分析项目依赖,这笔敲mvn dependency:tree
快多了。常用代码构建Maven命令保存下来,比如mvn clean install
、mvn clean source:jar deploy
等,将常用的运行脚本保存下来,下次执行就可以从列表选择
写得一手好代码
相信很多程序员或者说好的程序员都对写得一手好代码情有独钟,好代码就像读优美的文章一样让人心旷神怡,感觉很舒服。代码是给人看的,我自己对写得一手好代码也有一些浅显的理解:
(1)每个函数的职责清晰
如果一个方法很长,那么很可能这个方法做了太多事情,读起来会非常难受,可以把不同的功能封装到单独的函数,函数最好能够见文知义
(2)手动创建线程池
可以更加明确线程池的运行规则,规避资源耗尽的风险。说明:Executors各个方法的弊端:newFixedThreadPool和newSingleThreadExecutor的主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。
(3)包名统一小写
(4)多线程下使用ThreadLocalRandom实例获取随机数
(5)使用Log4j2
Log4j2、log4j、logback性能对比:log4j2 > logback > log4j。优先使用log4j2的异步日志
(6)CountDownLatch.await避免无限等待
使用CountDownLatch要注意避免无限等待,如果有线程超时或者异常可能会造成无法执行countDown()方法,造成await无限等待,从而让线程卡死。
(7)属性copy尽量使用纯setter方式
Apache BeanUtils性能较差,不要使用!优先使用Spring BeanUtils, Cglib BeanCopier,其中Cglib BeanCopier性能优于Spring BeanUtils。
(8)序列化方式选择
MQ消息序列化可以使用FastJSON、Redis序列化可以使用Jackson或者Google Protocol Buffer
(9)定时任务优先使用Spring Task,简单易用
避免在多线程下使用TimerTask,如果有一个线程抛Exception其他任务也会终止。
(10)DO、VO、DTO命名
DO:数据库传值对象
VO:前端展示对象
DTO:外部接口返回值
(11)善用快捷键
善用快捷键可以大大提高工作效率,每天练习使用下IntellJ IDEA的快捷键,可以让你受益颇多
学习、心态、职业规划
这里谈谈自己关于学习、心态和职业规划的感受。
(1)保持好奇心,持续精进
相信工作了一段时间的朋友都会感到瓶颈出现,不知道下一步怎么继续走下去,我觉得保持好奇心很重要:听到新名词自己下去了解下其功能和使用场景;在公司自己一个mvn deploy
就部署上去了,那么是不是可以研究下怎么把代码部署到maven的中央仓库;公司在用Disconf,那么其实现原理是怎么样的,如果让自己设计怎么做到高可用,自己是不是可以搭建一个环境加个配置就搞定;公司使用Sharding-JDBC进行分库分表,自己是不是也可以做个demo学习下,万一后面用到了呢。
(2)技术建议先深后广
虽然今年人工智能很火,各种再不学Python你就Out的话不绝于耳;最近又出了个牛逼的框架,该不该学些呢。现在技术更新发展很快,如果不掌握背后的规律很容易弄得自己很浮躁,我建议是与其浮躁不如静下心来好好看书。不管是以后的职业发展还是跳槽面试,总是深度优先的。这就要求在Java方面必须有自己的特长,不管是业务经验还是技术经验,JVM、问题排查、架构设计都可以。只要有一项你牛逼就够了。
(3)系统化学习
系统化学习最好的方式还是看书。工作以后发现没有大块的时间让你去学习,但是我们可以把零碎时间利用起来。比如想深入学习JVM,可以给自己列下学习提纲,每个提纲找相应的学习资料,利用去公司做公交的时间、中午午休的时间、晚上睡前的时间。。。
(4)谦虚做人,认真做事
在公司通常会有很多比你厉害的人,可以向他多多请教学习,比如某A很擅长排查线上问题,可以请教怎么快速进行线上问题定位;某B很擅长看源码,可以和他多多交流看源码的心得
(5)多研究源码
看源码的好处不言而喻,学习好的设计,也是写得一手好代码的重要途径。可以看看JDK的源码、Dubbo的源码、RocketMQ的源码、Mybatis的源码
(6)向技术专家方向进阶
本人不止一次想过以后的职业发展,是继续在技术方面深造还是转型做管理都想过不少。我对以后自己的设想是往技术专家方向发展,带带团队,写写代码,如此甚好!我之前在Github开源的java-skill-graph就是希望自己在Java方面能够继续深造下去,成为这方面的专家级程序员。
展望2018
新的一年,希望自己不忘初心,保持好奇心,持续精进!
回顾2017:谈谈过去一年的成长相关推荐
- 回顾2017,展望2018
时光如水,一不小心就从指尖流过.真是不知不觉间2017年就要过去了. 这一年可以说经历了各种各样不同的事情,也有着各种不同的目标,有些已经完成了,有些却遗憾的没有达成. 软考网工就是一个我2017年的 ...
- 回顾2017年JavaScript状况
by Sacha Greif 由Sacha Greif 回顾2017年JavaScript状况 (A Look Back at the State of JavaScript in 2017) 在20 ...
- 用文本挖掘回顾2017年的一些人与事
一.前言 终于做出这张图时,我突然有点感慨,这就是2017年我的日记中提到过或记录过的一个个人名,当然为避免引起不必要的麻烦,隐去了许多亲人朋友的名字.想到一辈子说长也长,说短的话,几十张词云图也就概 ...
- 回顾2017系列篇(三):UX设计大会,都预示了哪些设计趋势?
2017已接近尾声,在这一年中,无数的UX大会和设计大会在世界各地召开.每一场会议的召开,都是界内精英人士经验的交流和智慧的碰撞.虽然2017年的会议都已过去,但每场会议上的话题探讨,尤其是界内精英们 ...
- 强大的API测试工具Hitchhiker v0.9 基于UI的断言测试,回顾2017
v0.9是Hitchhiker在2017农历年的最后一个版本,而起点正是刚过完2016农历年,农历2018即将到来,一年轮回,今天写点东西稍微回顾下hitchhiker的2017. 先还是说v0.9, ...
- 谈谈软件的开发及成长历程
每个人身上,都有着独一无二的经历,也有着不一样的成长历程.回顾一下,从大学时期参加校网络中心从事开发工作,到目前在社会上的风雨兼程,也走过十多年的开发路程了,黄金岁月,青春年华,都在这期间度过. 养成 ...
- 回顾2017系列篇(二):移动端APP设计趋势
2019独角兽企业重金招聘Python工程师标准>>> 移动端APP在2017年经历了诸多的变化, 人工智能.聊天式的界面.响应式设计.虚拟现实(VR)和增强现实(AR)让设计师不断 ...
- 2016年回顾2017年目标之流水账
本来不想写,这一年浑浑噩噩,没啥可回顾的:但想了想,还是写个流水账,至少留个念想. 在2016年中,技术上没有什么长进,计划的马拉松也没有完成(跑步这事完全断掉了),机器学习的也没有太好的进展,英语学 ...
- 大数据回顾2017年消费升级:90后上演“手机狂魔”,70后当仁不让,80后...
70.80.90后消费群体,谁的消费贡献最大?谁的增长最快?消费渠道有何变化?各地区的消费存在哪些差异? 谁的人均消费支出最大?钱都花去哪了?出现了哪些热点消费商品?各类人群有何偏好 作者 | 中国银 ...
最新文章
- 取第N个排序的元素之Mysql存储过程动态SQL order by offset实现案例
- 捡对象引流脚本 内容_对象和索引流
- HTML+CSS+JS实现 ❤️canvas酷炫表白爱心动画❤️
- 浅析libcurl多线程安全问题
- Ubuntu Hudson 安装配置
- Android中的内存泄露问题
- html 内容写入数据库中,FoxPro数据库写入html文件中
- 计算机发展趋势 五笔型码,计算机五笔识别码字有哪些
- Objective C 单例实现
- 拼多多员工因匿名发贴被辞退,拼多多最新回应
- 安卓手机安装虚拟定位的方法Xposed安装器+模拟位置(Xposed模块)
- Python moviepy 快速视频剪辑编辑神器
- java 队列线程池_Java线程池Executor使用
- AE插件哪款好?这5款堪称动效设计必备
- python软件下载对电脑配置要求-Python实现的读取电脑硬件信息功能示例
- 现在快手流量怎么样?如何增加流量?
- php采集喜马拉雅,喜马拉雅数据 JSSDK API 接入 demo WEB版 标准登录 、免登陆
- 详解js对称加密和非对称加密
- 徐登科浅谈币圈:从口罩现在只需0.9元/只,看看机会变成陷阱最短需要多久呢?
- MWC2023,现场海量图片放送!