年度技术总结
[toc]
技术对别
2018
2018年年底自掌握的技术栈,业务框架SpringBoot,对SpringCloud不熟悉,只是会简单的调用下Feign,对业务模块分层也不清晰,年底开始参与学习Netty框架,但还未达到能写出一款应用的水平,自己尚未有说单独写一块业务的能力,还需要在别人的帮助下搭建一些脚手架。对Java基础感觉还不是很夯实,因为自己也是半路转过来的第一年,特别是JUC这块几乎说没有看过一遍。还有就是不具备网络开发的能力,长连接服务压根就没有开发过。JVM这块也不熟。
数据库这块的话,当时能比较顺利的编写一些MongoDB,Mysql已经渐渐被弱化,Redis其实也只是到达能使用的阶段,并且基本能使用好他。
2019
2019年年底,比去年多了就是能熟练编写Netty应用,并在Netty的基础上编写了 通道服务,曾开过一遍Netty的源码但是由于看的时候也属于走马观花,没有说自己去Debug做记录,只是跟着别人的思路走源码,所以到现在也只能知道一个大概的设计思路。
JUC这部分,开始阅读了一些数据(高并发编程实战,并发编程之美,极客时间的并发),但这些阅读也属于松松夸夸,有些看了大部分,有些看了一部分。都属于缺乏总结性思考。但是相对于2018年,在并发这块稍微有了些思路,在项目中使用了线程池,Synchronzied,ConcurrentHashMap这些并发工具。可以说是对并发编程,有了一个初步级别的认知,但未达到熟练使用,在今年评级的时候,评委问了一个如何实现一个阻塞队列的问题居然还没答上来,实属垃圾。因为平常对这些JUC下的工具缺乏系统性思考,所以导致学了知道,知道了过了一段时间,就变成了不知道。没有说是一种学了知道,知道了去使用,使用后强化记忆,再去思考的过程。
JVM这块部分,自己一直在强调要开始学习,学习,学习,但是从今年开始有时间的时候没有想过要开始学JVM,没有时间的时候JVM的优先级永远是最低的。
数据库这块,今年也就是上个月开始阅读了Redis源码(redis设计与实现)这本书,也就是基本上跟着作者的思路走一遍。Mysql这块没有继续阅读一些更深的原理书,Mysql的原理知识还是停留在2017年的水平阶段,MongoDB也没有进行更一步的深入,阶段停留在2018年。
网络协议这块, 今年因为由于做通道,所以自己开始了解了一些网络知识,但是这块知识还是属于薄弱的,在出了问题还是比较难以去解决。
技术进展
Netty(掌握) Redis(深入) JUC(入门) 网络知识(初识)
技术薄弱
SpringCloud 分布式理论 Mysql MongoDB 一些服务的部署 网络知识
系统术语这块还是很欠缺的,就像大佬说的那样,平常也应该关注一下系统术语,不然无法交流了都
什么熔断,降级,雪崩,健壮,鲁棒,可用,可靠,并发这些都是应该对其进行认知和理解的
业务系统这块也是薄弱的,如果说要我来架构一个后端系统,我应该如何去架构设计,这个说上去有点简单,但是能把它做好就是能够达到P7级别了,我现在还不具备这个能力。
中间件薄弱,比如RabbitMQ缺乏对其原理的理解(甚至没看过一本相关的书籍),Zookeeper(没去尝试使用过),类似分库分表的Sharding JDBC,Mycat也只是说知道却没有自己去搭一个弄一下。
设计上面也是薄弱的,一个主程应该是具备模块的设计能力的,我今年算是设计了几个模块,但是其规范型还是不够的,就是想写点啥就写点啥的那种水平状态,连时序图,结构图,数据流向图,这些图没有掌握好,只是能参照着画一下。
Linux底层的网络开发不熟悉,因为通道依赖于底层的操作系统函数,如Select Epoll这些,自己没有使用过,对其的理解就不深,如果面试的时候问一些类似的问题,答不出来我觉得就有些业务了。
方法总结
说起方法总结,自己的学习方法一直觉得有问题,一直是缺乏阶段性总结。譬如一个月总结一次,一个礼拜总结一次,自己在这一年里,没有做过类似的事情,有时候尝试做一下每天总结一次,但是做着做着就阶段性放弃。
就像这次评级的时候,大佬们问我说你线上遇到了啥问题,以及如何解决这些问题的,我发现我懵逼了,不知道自己说了些啥,就是感觉自己表现还是挺差的。
知行合一这个思想,我2017年就是在指导自己,但是自己还是懒,2018年有了知的时候不去行,有了行的时候也没有回顾性总结。希望在2019年自己能做到知行合一。
2020期望
2020算是自己做技术的第三个年头了,对自己第三年的要求肯定是要比前两年更高的。希望自己能做到如下:
- 掌握熟练java的JUC,熟练并发编程(没有场景的话,自己去模拟场景)
- 熟悉JVM(这块必须得要熟悉了,拖了很久了,在面试如果不掌握这些很不有利)
- 分布式(Spring Cloud的组件,Eureka,Zuul, Hystrix)这些必须要掌握了,能对其有一个比较深的理解,能做到能使用,知道为何要使用,以及如何使用,还需要对其进行进阶看他们的源码。
- 数据库,能够吃烂Mysql,熟练使用MongoDB(吃烂MongoDB),Redis的话感觉集群去熟悉了解,这些数据库的集群,读写分离,高可用必须要去掌握了解了。
- 掌握一些常用的中间件,不只是能用中间件(RabbitMQ,Kafka,RocketMQ)都可以去熟练掌握一下,有条件时间的话还可以看下RabbitMQ的源码。
- 可以业务时间,多去掌握一下其他的语言如Go,我是想去使用并且玩一下的(做一个小应用啥的)。
- 能够对RPC有个比较深的了解,因为类似DUUBO这类RPC服务,自己还是缺乏对其的了解