2019 年终总结 ~ 逆风起航

时间过的很快,2019 年过去了,迎来了崭新的 2020。

今天做一个 2019 年终总结,算是对 2019 年的一个交代。

主要总结下 2019 年技术上的 成长、读书、理财、时间管理 方面的东西。

技术

关于 Kotlin

翻开 2019 年第一篇博客,竟然是 2019-1-2 晚上 1:27 发表的,真不敢想象 2019 年初还这么作,不把健康放在心上。现在呢,嗯,10 点半就得睡觉了。
在这里插入图片描述
2019 年初系统的学习了下 Kotlin 相关的技术,写了 3 篇关于 Kotlin 的文章。

虽然只有 3 篇,但是有几篇的文章字数是 3-4 万。其实这 3 篇如果进行细分的话可以写很多博客,形成一个体系。

文章的数量不重要,重要的是质量。我习惯一篇文章,把所有的事情讲完。

这些文章基本涵盖了 Kotlin 基本的语法和常用的特性。

我们知道 Kotlin 编译后也是 class 字节码, 在介绍 Kotlin 语法糖的时候不仅仅介绍怎么用,还介绍了它背后的实现原理,语法糖对应的 Java 是什么?

这样对于熟悉 Java 的开发人员来说,可以更快、更加深入的掌握 Kotlin。让我们写的每一行 Kotlin 代码更加自信。

这三篇文章分别为:

然后 2019 年 6 月份,在 CSDN 开了一个关于 Kotlin 的课程,希望通过视频的方式向初学者介绍 Kotlin,由于各种原因没有更新完,2020 年更新完。

关于 JVM

今年还系统的学习了 Java 虚拟机相关的技术。一听到 Java 虚拟机可能觉得是高深的技术,或者和我们开发没有什么太大的关系,或者觉得这只是用来面试的技术。

其实不然,首先 Java 虚拟机肯定是一门高深的技术,这是无数大师汇聚的心血,你一个人不可能掌握其中的所有细节,但是不妨碍我们去学习它,而且市面上也有很多相关的资料。

其次,学习 Java 虚拟机技术和我们开发的关系很大。我个人觉得,系统的学完之后,会对代码的感受力不一样的,会让我们明白写的每行 Java 代码对应的字节码是什么?不同的编写方式,JVM 会怎么区别对待。

系统的学习了下 Java 虚拟机让我明白:

写的 Java 类对应的 class 字节码是由哪些部分组成的。学完 class 字节码文件后,会让我们从字节码的层面分析内部类内存泄漏的原因。什么时候应该用 + 号拼接字符串,什么时候不应该使用。会让我们更加深入理解装箱与拆箱,避免开发中容易遇到的坑。会让我们具备使用开源框架如 ASM、Javassist 实现修改 class 字节码的能力,例如我在路由框架中使用了 gradle plugin + ASM 在编译时自动注入字节码的方式达到自动初始化的目的。

可以看出,Java 虚拟机技术还是和我们开发息息相关的,class 字节码还只是 Java 虚拟机的一小部分。

有了 class 字节码,那么 Java 虚拟机是如何加载它的呢?学习完这方面的知识后,我们会明白:什么时候才会加载一个 class,加载的时机是什么?类的加载过程是什么?什么是类加载器?什么是双亲委派机制?什么又是非双亲委派机制,非双亲委派机制有什么用?Java 为什么使用双亲委派?如何自定义类加载器?Java 1.7 之前 ClassLoader 的死锁是如何产生的?

知道了 Java 虚拟机如何加载 class 字节码后,那么虚拟机时是如何执行它的?执行 class 字节码,肯定要分配内存,所以我们要搞清楚 Java 虚拟机的内存结构。执行方法的时候,JVM 如何定位到这个方法,执行方法的时候涉及到的局部变量表、操作数栈、动态连接等。

Java 是面向对象的,我们无时无刻不是在创建对象,那么一个对象占用多少内存,一个对象的内存布局是什么,如何打印一个对象的内存布局,以及不同的虚拟机参数会对对象的内存占用有什么影响?Java 虚拟机是怎么判断一个对象可以被回收的。一个新创建的对象会分配在哪里,什么时候进入 Eden 区,什么时候进入 Survivor 区,什么时候进入老年代?以及不同的 Java 版本对垃圾回收做了哪些改动?

我是根据上面的路径来学习 Java 虚拟机的:从静态的 class 字节码文件开始,再到 Java 虚拟机加载这个 class,然后到如何执行 class,最后到垃圾回收器。然后形成了这个系列文章:

虽然上面 Java 虚拟机的文章不多,但是也有 11 万字,也是花费了非常多的时间和精力,但是得到的也很多。

为什么要写作?我个人写博客的过程不是将学到的东西复述出来,而是把学过的东西重新梳理,会有新的思考,新的疑问。所以写作的过程比较慢,写作又是一次学习加深的过程。

从整个学习过程来看,我个人总结的是:如果只是看几本 Java 虚拟机相关的书、博客、视频,不去联系实际的项目或正在使用的语言,这样学习到的 Java 虚拟机理论知识收益不大,而且很容易忘记。没有内化成自己的东西,最后都会还回去。个人建议是:理论结合实际,然后就是整理成笔记或者博客进行输出,随着成长,如果对以前知识有更加深入的理解或者感悟,可以修改笔记或者博客。

设计模式

除了 Java 虚拟机,还对设计原则、设计模式进行系统的学习。

设计模式很简单同时又很难。简单的是任何一个设计模式,我们在学习的时候就是由几个类组成的而已,难的是我们不知道什么时候用,或者很难把它用好。

有的时候,我们使用这个模式好像也可以,使用那个模式似乎也行,我们该使用哪一个?有的时候,遵循了这个设计原则(SOLID),却违反了另一个设计原则,这个时候我们怎么办,怎么抉择?有的时候是不是觉得设计模式、设计原则很玄学。

在学习的过程中参考很多的资料和书籍,其中有:

  • 《设计模式之禅》
  • 《Java设计模式及实践》
  • 《Java设计模式深入研究》
  • 《设计模式(Java版)》
  • 《Java与模式》
  • 《Head First 设计模式》
  • 《Effective Java》

参考这些书籍主要目的有两个:一个是看看模式的基本原理;另一个最主要的是看看作者对该模式的见解,这个才是最重要的。

所以在学习的过程中,也是需要将理论集合实际项目,然后形成自己的见解,只有这样才能把设计模式、设计原则内化成自己的一部分。而不是照本宣科的把该模式说一遍。

经典的有 23 种设计模式,有些模式,确实没用到过,但是知道 JDK 中哪些源码用到了,但是自己在项目中没有用到,或者没有过多的见解,于是就没有成博客,因为感觉意义不大。对有些设计原则或者模式有自己的见解或者项目中使用到了,就汇总成了博客记录下:

学习设计原则和模式后最大的收获是:在编写代码的时候,设计类的时候会自动的向设计原则和相关模式靠拢。在重构 MRouter 代码的时候会有体会和感觉。

对学习设计模式总结:个人感觉是一定要思考思考在思考,思考的过程一定要结合项目,或者以前在编写代码的时候遇到的痛点,是不是可以用这个模式解决?在实际项目中使用设计模式或者设计原则的时候,一定要不断的反思,使用这个设计模式或面向对象设计原则,是不是代码更好维护,是不是违反其他设计原则、对工作量的影响有多大等等,经过这些灵魂发问,会慢慢形成属于自己对设计模式设计原则的见解。使用它一定要有理论支撑,而不是靠感觉。

框架的学习

今年对框架的学习不多,只学习了 Retrofit 网络框架。

我学习框架的思路是:分两个阶段,第一个阶段是学习它的用法,而不是一头钻进源码中。第二个阶段是阅读源码,看看每个用法的实现原理。

Retrofit 是网络框架,学习它最好有个服务器,我搭建了一个 Tomcat + Servlet 来充当服务器,这样可以更好的调试 Retrofit 框架

在进行图文上传的时候,会出现乱码,为什么会乱码,这还牵扯到一点 Web 相关的知识,也可以从 Retrofit 源码中找到答案。

这样可以更加全面的学习 Retrofit,有的东西还是不能偷懒,特别是网络框架,最好能有服务器进行调试。

在学习基本用法的时候,就会有很多疑问,这些疑问,我们都可以记录下来,然后在后面阅读源码的时候统一解决。

对框架源码学习的总结:阅读源码一方面是看基本的 API 实现原理,另一方面也可以学习相关的设计模式,学习设计模式的时候,不应该只是知道这个框架使用了这个设计模式,然后就没了。而是思考它为什么使用这个模式?使用这个模式解决了什么问题?试着站在设计者的角度去思考问题,可能会让我们受益更大,搞清楚这个问题后,我们遇到类似的问题或需求时,也自然而然会使用这样的设计模式来解决问题。

Flutter

关于 Flutter 只是学习了 Dart 语言和 Flutter 一些基础的东西,也在实际项目中做了一些尝试,但是还需要继续学习。

其他

在技术上还有其他一些零零散散的东西,比如 MVP 架构的一些改造、NDK、Repo 等:

读书

2019 年读了30-40 本书吧,在微信读书上大部分是非技术类。年初制定的是一个月 2 本书,基本上完成了。

但是在读书方法上,还是有很多可以改善的地方。在微信读书上的英语相关的书挺方便,可以很容易查询某个单词在书中的使用,或者全书中哪些地方用到了该单词等,非常便于检索。下面是 2019 年微信读书上的统计:

在这里插入图片描述

理财

2019 年也开始学习了一些关于理财方面的知识,开始尝试一些基金理财方面的尝试。

时间管理

在时间管理上也有一些小小的心得就是每天写日报,这可能算不上时间管理。但是个人觉得还是挺有帮助的。

在晚上,一天快要结束的时候,记上一两句话,问问自己,这一天有什么东西可以值得去记录的,自己都干了哪些事情。

日报不见得是要规定多少个字,几句话也行,几百个字也行,不要将其任务化,否则很难坚持。

只要今天进步一点点,都可以写在日报上。用一句话总结来说就是:你今天比昨天更博学了吗? 这是奇葩说杨奇函的口头语,挺发人深省的。

如果没有什么可以写,说明我们可能在浪费光阴。日报的还有一个好处是我们在年末的时候,可以对这一年的每一天都可以复盘,也是一件挺有意思的事情。

最近,我们公司在执行周报,日报汇总一下就成周报了。个人觉得日报最主要的还是给自己看的,虽然做不到一日三省吾身,但一天一省还是有必要的,与所有人共勉 ~

2019 年也浪费了许多时间,有很多地方可以改进,希望 2020 年更加聚焦,在时间管理上更加有效率。

最后,祝所有人,元旦快乐 ~

发布了161 篇原创文章 · 获赞 1125 · 访问量 125万+

猜你喜欢

转载自blog.csdn.net/johnny901114/article/details/103792493