2018 年终总结
前言
从来没有写年终总结的习惯,但是今年想尝试写一点年终总结。算是一点点仪式感吧。
今天主要问自己下面几个问题
2018 规划了什么?
2018 实际做了什么?
2018 哪些做的不好?哪些做的好?
2019 的规划
2018 规划了什么?
先回顾下 2018 年的目标:
这是我 17 年最后一天立的 flag。
那么实现的怎么样了呢?
2018 实际做了什么?
先看 flag 有没有实现。
并发,JVM,Netty。
首先说并发,我的学习路线是先看书,熟悉 API,然后看 JUC 源码,写博客总结。关于并发的博客文章大概写了 49 篇文章。对并发编程算是有了一些自己的理解。
然后说 JVM,这个说实话,由于可实际操作的机会太少,只是看了几本书,包括周志明的《深入理解 Java 虚拟机》,《实战 Java 虚拟机》,《深入理解 G1》等,还有 R 大博客,笨神的博客,小狼的博客等。
整体上对 JVM 的理解的范围包括运行时内存布局,GC 策略,GC 算法,ClassLoader 机制,一些工具的简单使用,例如 Jmap, jstat,mat 等,还有一些简单的 GC 优化。关于 JVM 的笔记写了大概 9 篇。
自己对 JVM 的理解并没有深入到源码层面,虽然 debug 环境搭建好了,但是由于对 C++ 的不熟悉,有些吃力。
这是 2019 年需要用力的地方。
再说说 Netty。
Netty 和并发学习类似,都是先熟悉 API,再看书,看源码,和网友讨论等,写了大概 20 篇源码分析的文章。对 Netty 的线程模型和一些优化都有了些许理解,但仍谈不上精通。Netty 的坑还是很大的,而且也有一些 bug,值得深挖。
所以, 2019 Netty 也要再复习一下。
2018 哪些做的好?哪些做的不好?
总的来说,年初立的 flag 算完成了80% 吧,由于没有量化指标,只能这么认为了 ^_^。
1. 哪些做的不好?
整个 2018 年也换了一份工作,也从苏州来到了杭州。换工作的经历也是比较坎坷,放弃了薪资高的,选了一份比较低的,主要还是工作内容的不同吧。这个选择有些赌博的成分在里面。
那段时间也参加了很多面试,包括上海,苏州,杭州等。大公司,小公司,外包等等,都面了一遍,面到最后,甚至面试官接下来要问什么,我都能感觉到.
面试多了,也有好处,好处就是你知道了自己的弱点,例如,面试大厂的时候,那时的自己,大型分布式的经验不是很足,仅仅接触了一个 SpringCloud 项目而已,对分布式事务,分布式存储等仅仅停留的博客文章层面。在大厂面试官面前,确实有些弱。
坏处则是,理论有余,实践不足,甚至让自己有一种“能应付面试,我就掌握了这门技术”的错觉。
同时,对 JVM 没有深入到源码级别的理解,高难度的 GC 调优也基本没有,基本是靠着看笨神的文章跪着学习的。
还有传统算法,例如 LeetCode 上的那些算法没有刷过,这个也让自己在面试的时候吃了一些亏。
由于时间所限制,自己对数据库,缓存,MQ 等中间件没有深入到源码级别去理解,也让自己在面试的时候,有点僵硬。
不过,虽然没有被大厂看上,但由于自己对并发,Netty,SOFA 有些了解,所以,拿小厂的 offer 还是比较容易的。而且薪资在市场价里,也还行。
2. 哪些做的好?
哪些做的好? 竟然感觉还挺多的,先列一下吧。
- 看了 SOFA RPC 的源码,为官方贡献了一篇源码分析文章,自己也写了一部分。
- 看了 SOFA Bolt 的源码, 为官方贡献了一篇源码分析文章。
- 开源了自己的 Lu-RPC 项目,虽然很简单,但是算是自己对 RPC 的理解,通过这个项目,让自己在公司的 DireWolf 项目开发中对 RPC 框架的设计又了更深刻的理解。目前也有了 78 个 star, 2019 争取上到 100, ^_^.
- 阅读了 RAFT 论文,看了 Nacos 的源码,自己实现了一个 Raft 分布式一致性算法,相较于 nacos 的 AP,自己实现的是 CP,难度更高,算是对分布式一致性有了更深刻的理解。
- 研究了 Apollo 的源码和设计,对分布式配置中心算是有了自己的理解,并且在 Apollo 的基础上做了 2 次开发。也写了 10 篇源码分析文章。
- 独自为公司开发了限流熔断系统 DireWolf,开发过程中,借鉴了 Sentinel,hystrix,concurrent-limit 等项目,实现了动态限流,多通多流量分配,自适应限流等,让自己对限流熔断的理解更深入了一些,对框架类库的设计也更深刻的理解了一些,开发过程了,借鉴了很多之前看过的源码设计,例如 SOFA, Netty,Dubbo,Hystrix,Sentinel 等等,因此,更加觉得看优秀的源码是一件非常重要的事情。
- 在工作期间,接触了 kv 相关的分布式缓存,例如 codis,redis,pika,搜狐的 CacheCloud 也看了一下,还基于 SpirngData-RedisTemplate 封装了公司内部的 Redis 客户端 —— Tedis,对 Redis 客户端有了一些了解。也接触了 Rocketmq,看了存储模块的代码。了解了一个 MQ 的核心设计。接触了阿里的 binlog 同步中间件 —— canal,hbase,es 等。但这些由于工期较紧,都没有深入到源码层面去研究。
- 工作之余阅读了 Spring 1.0 版本的框架代码,别名 interface 21,相较于现在的版本,代码量更少,阅读起来很轻松,也能更好的理解 Spring 的设计。我觉得这个代码可以多阅读几遍,Spring 对设计模式用的很多,甚至可以说过度设计(随便一说,别当真,只是想表达 Spring 的设计模式用的太多)。
- 在研究 RPC 的时候,看了毕玄大师的 McQueenRPC, 对 RPC 的理解又更深入了一点,感叹“开源世界真好”。同时,在研究 RPC 的时候,阅读了梁飞的博客文章,对框架类库设计多了一些见解,可以说,梁飞博客文章常读常新。
- 代码之外的话,自己 2 个月成功减肥了 20 斤,不过最近去重庆暴饮暴食,长了 4 斤左右了,但对于减肥,我已经有自己的一套办法了,因此无所谓。从 7 月 15 开始,每天 6 点之前起床, 12 左右睡,保持了一个比较好的生物钟。不得不说,跑步真的很重要,等到 2019 年气温回升到 20 度的时候,就恢复跑步。
- 最后,还买了一台顶配的 iMac,开发效率大增。哈哈,缺点就是太贵了。我保证用 5 年,把本钱赚回来。
整体上,大概是几个部分,
- 阅读优秀源码,尝试编写优秀代码。
- 阅读优秀文章、书籍,尝试编写优秀文章。
- 保持身体健康,以最好的身体状态写代码。
2019 的规划
回顾完了 2018,规划下 2019 吧。
实际上,那天跨年,我们酒过三巡后,每个人都给自己写了 7 个愿望,希望在 2019 实现。
具体内容就不放出来了,从几个方面来说吧
- 工作相关,希望新的一年,能够公司做的更好。薪资,职位都能够有所提升。这算是人之常情吧。
- 技术相关,希望自己在新的一年,在分布式领域能够有更深刻的认识,配合公司多活建设,能够一起成长。然后有一些高质量的技术输出。
- 个人相关,首先身体健康吧(戒烟,跑步,早睡早起),然后尝试解决感情问题。
- 业余生活相关,希望自己在新的一年,看些闲书啥的。拓展一下自己的思维。
以上就是跨年夜立的 flag。
今天,结合对 2018 的回顾,重新整理一下。
针对 2018 做的不好的地方,要做一些改变,特别是技术相关的。
- Java 并发的查缺补漏。
- JVM 的深刻理解,GC 优化
- Netty 源码的复习
- LeetCode 算法题的复习
针对 2018 年做的好的地方,需要继续保持
- 阅读优秀代码,阅读优秀文章和书籍
- 尝试编写优秀代码,尝试编写优秀文章
- 保持身体健康
目前计划看的代码:gprc, disrupt, netty 引用的 mpsc 类库。
结合起来就能组成 2019 年的规划:
- 阅读优秀代码,优秀文章,复习并发,JVM,Netty,然后写一点高质量的文章。
- 在分布式领域能做一个高难度的产品。
- 能通过工作,改善一下家人的生活。
- 保持身体健康。
- 如果可能,在 golang 和 rust 中,选取一门语言作为自己的第二语言。虽然我很喜欢用 Java,但尝试下别的语言,写一些简单应用,例如那些占用内存很少的小工具。
最后,希望明年这个时候,能够达到自己的目标吧,离“而立”又近了一年,时间不多了。
新的一年,猫腰前行,继续战斗。虽然犹死,向死而生。
EOF