2018 年终总结

前言

从来没有写年终总结的习惯,但是今年想尝试写一点年终总结。算是一点点仪式感吧。

今天主要问自己下面几个问题

  1. 2018 规划了什么?

  2. 2018 实际做了什么?

  3. 2018 哪些做的不好?哪些做的好?

  4. 2019 的规划

2018 规划了什么?

先回顾下 2018 年的目标:

image

这是我 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. 哪些做的好?

哪些做的好? 竟然感觉还挺多的,先列一下吧。

  1. 看了 SOFA RPC 的源码,为官方贡献了一篇源码分析文章,自己也写了一部分。
  2. 看了 SOFA Bolt 的源码, 为官方贡献了一篇源码分析文章。
  3. 开源了自己的 Lu-RPC 项目,虽然很简单,但是算是自己对 RPC 的理解,通过这个项目,让自己在公司的 DireWolf 项目开发中对 RPC 框架的设计又了更深刻的理解。目前也有了 78 个 star, 2019 争取上到 100, ^_^.
  4. 阅读了 RAFT 论文,看了 Nacos 的源码,自己实现了一个 Raft 分布式一致性算法,相较于 nacos 的 AP,自己实现的是 CP,难度更高,算是对分布式一致性有了更深刻的理解。
  5. 研究了 Apollo 的源码和设计,对分布式配置中心算是有了自己的理解,并且在 Apollo 的基础上做了 2 次开发。也写了 10 篇源码分析文章。
  6. 独自为公司开发了限流熔断系统 DireWolf,开发过程中,借鉴了 Sentinel,hystrix,concurrent-limit 等项目,实现了动态限流,多通多流量分配,自适应限流等,让自己对限流熔断的理解更深入了一些,对框架类库的设计也更深刻的理解了一些,开发过程了,借鉴了很多之前看过的源码设计,例如 SOFA, Netty,Dubbo,Hystrix,Sentinel 等等,因此,更加觉得看优秀的源码是一件非常重要的事情。
  7. 在工作期间,接触了 kv 相关的分布式缓存,例如 codis,redis,pika,搜狐的 CacheCloud 也看了一下,还基于 SpirngData-RedisTemplate 封装了公司内部的 Redis 客户端 —— Tedis,对 Redis 客户端有了一些了解。也接触了 Rocketmq,看了存储模块的代码。了解了一个 MQ 的核心设计。接触了阿里的 binlog 同步中间件 —— canal,hbase,es 等。但这些由于工期较紧,都没有深入到源码层面去研究。
  8. 工作之余阅读了 Spring 1.0 版本的框架代码,别名 interface 21,相较于现在的版本,代码量更少,阅读起来很轻松,也能更好的理解 Spring 的设计。我觉得这个代码可以多阅读几遍,Spring 对设计模式用的很多,甚至可以说过度设计(随便一说,别当真,只是想表达 Spring 的设计模式用的太多)。
  9. 在研究 RPC 的时候,看了毕玄大师的 McQueenRPC, 对 RPC 的理解又更深入了一点,感叹“开源世界真好”。同时,在研究 RPC 的时候,阅读了梁飞的博客文章,对框架类库设计多了一些见解,可以说,梁飞博客文章常读常新。
  10. 代码之外的话,自己 2 个月成功减肥了 20 斤,不过最近去重庆暴饮暴食,长了 4 斤左右了,但对于减肥,我已经有自己的一套办法了,因此无所谓。从 7 月 15 开始,每天 6 点之前起床, 12 左右睡,保持了一个比较好的生物钟。不得不说,跑步真的很重要,等到 2019 年气温回升到 20 度的时候,就恢复跑步。
  11. 最后,还买了一台顶配的 iMac,开发效率大增。哈哈,缺点就是太贵了。我保证用 5 年,把本钱赚回来。

整体上,大概是几个部分,

  1. 阅读优秀源码,尝试编写优秀代码。
  2. 阅读优秀文章、书籍,尝试编写优秀文章。
  3. 保持身体健康,以最好的身体状态写代码。

2019 的规划

回顾完了 2018,规划下 2019 吧。

实际上,那天跨年,我们酒过三巡后,每个人都给自己写了 7 个愿望,希望在 2019 实现。

具体内容就不放出来了,从几个方面来说吧

  1. 工作相关,希望新的一年,能够公司做的更好。薪资,职位都能够有所提升。这算是人之常情吧。
  2. 技术相关,希望自己在新的一年,在分布式领域能够有更深刻的认识,配合公司多活建设,能够一起成长。然后有一些高质量的技术输出。
  3. 个人相关,首先身体健康吧(戒烟,跑步,早睡早起),然后尝试解决感情问题。
  4. 业余生活相关,希望自己在新的一年,看些闲书啥的。拓展一下自己的思维。

以上就是跨年夜立的 flag。

今天,结合对 2018 的回顾,重新整理一下。

针对 2018 做的不好的地方,要做一些改变,特别是技术相关的。

  1. Java 并发的查缺补漏。
  2. JVM 的深刻理解,GC 优化
  3. Netty 源码的复习
  4. LeetCode 算法题的复习

针对 2018 年做的好的地方,需要继续保持

  1. 阅读优秀代码,阅读优秀文章和书籍
  2. 尝试编写优秀代码,尝试编写优秀文章
  3. 保持身体健康

目前计划看的代码:gprc, disrupt, netty 引用的 mpsc 类库。

结合起来就能组成 2019 年的规划:

  1. 阅读优秀代码,优秀文章,复习并发,JVM,Netty,然后写一点高质量的文章。
  2. 在分布式领域能做一个高难度的产品。
  3. 能通过工作,改善一下家人的生活。
  4. 保持身体健康。
  5. 如果可能,在 golang 和 rust 中,选取一门语言作为自己的第二语言。虽然我很喜欢用 Java,但尝试下别的语言,写一些简单应用,例如那些占用内存很少的小工具。

最后,希望明年这个时候,能够达到自己的目标吧,离“而立”又近了一年,时间不多了。

新的一年,猫腰前行,继续战斗。虽然犹死,向死而生。

EOF