2022年展望 : 理论与实践

1,100 阅读5分钟

首先分享之前的所有文章 , 欢迎点赞收藏转发三连下次一定 >>>> 😜😜😜
文章合集 : 🎁 juejin.cn/post/694164…
Github : 👉 github.com/black-ant
CASE 备份 : 👉 gitee.com/antblack/ca…

一 . 前言

2021 年是具有历史意义的一年 . 在这一年里 , 我对待技术的态度由使用转变为了研究 . 在这一段时间里 , 想了很多东西 , 在此总结一下 , 来规划一下后续的技术路线.

二 . < 2021 : 源码

至此为止 , 我经历了3个阶段 , 总结来说就是 : 使用 > 沉淀 > 理论 , 我想大多数从业者都会经历这样的过程 .

第一阶段 : 使用(毕业初期) 我记得第一次写博客是 2017 年 9 月 , 那个阶段我在快速的扩展自己的广度 , 大多数文档都是以使用为主 , 但是使用类的文章太普遍了 , 写出来的也没有别人的好 .

思考之后 , 认为 : 技术太广缺乏深度 , 于是离开了当时的单位 , 由一名全栈 , 转为专注后端 , 开始专注于后端知识 , 而博客也在这个阶段暂停了下来.

第二阶段 : 沉淀(1-3年)

在第二阶段开始 , Java 在服务端得到了很大的使用 , 其发展的生态 , 也非常的庞大 .

在这个阶段 , 沉淀各种框架的使用 , 以熟悉各种业务场景成了重中之重.

随着技术的不断积累 , 发现自己不知不觉间就积累了宝贵的财富 , 一个包含上百种框架 Demo 的 Git 项目 gitee.com/antblack/ca…

沉淀的时期很乏味 : 被迫去学习与业务无关的框架, 去了解一下从未听说的使用 , 去思考 ,去练习 . 但是随着时间 ,我发现这些都是宝贵的财富.

随着沉淀越来越多 , 我发现我可以快速的搭建框架 , 可以轻易的集成外部工具 , 但是随着年限和业务的增长 , 普通的使用和基础的处理已经远远无法满足需求.

于是 ,进入到了第三个阶段

第三阶段 : 理论 (3-5年)

在上个阶段 , 发布了2个开源半成品 :

  • AntSSO : 一个可扩展的单点认证项目
  • Engine : 一个数据清洗项目

当时 , 都没写完就放弃了 , 主要原因是缺少理论支持. 所以开启了第三个阶段>>>

第三阶段也是在掘金发文的一年 , 在这一年里 , 在掘金共发表了 114 篇文章 , 其中8成是源码解析 @ juejin.cn/post/694164…

image.png

源码解析可以快速帮我定位问题 , 可以从源码层面解决一些复杂的业务需求 , 但是如果读多了源码就知道 , 读源码其实是最基础的入门罢了

那么在读源码背后 , 还有什么等着我呢 ?

三 . 2022 : 实践

读源码的的过程中 , 我们能学到很多底层的东西 , 例如 :

  • 表层作用不明显的 NIO 在各种框架底层的大量使用
  • 各种设计模式在框架的灵活使用
  • 无比优雅的停机方式

是的 , 读源码能见识到很多不同的风景 , 但是对技术的提升愈来愈难 , 对业务的作用更加少, 那么后续的路该如何走下去 ?

就像题目中所说的实践吗 ? 应该不止 ! 现阶段我缺失了什么 ?

  1. 细节点 : 在框架某个小模块的细节点 , 比较典型的案例包括 : Redis 字段的扩容方式 ,
  2. 更全面流程的并发思路 : 有些问题是并发中非常常见的性能瓶颈 , 例如 IO 瓶颈 , 这些比较底层 , 但是有些时候我们很容易忽略
  3. 基于实践的Demo : 之前写过很多 Demo ,但是都缺少真正意义上的实践.
  4. 更全面的解决方案 : 学得越多 , 发现一个高性能的系统 , 不能局限于某个框架 , 甚至不能局限于一种语言 , 一个系统

这里面涉及到各个领域 , 方方面面 ,任重道远.

总结

春节最后一天了 , 祝大家新年快乐 , 步步高升 .

附录 : 源码阅读思路分析

// 注意要点 : 
- 不阅读所有源码 , 先追述主流程 , 再开枝散叶看自己感兴趣的模块
- 阅读源码尽量绘画流程图 , 关系图 , 根据个人习惯做笔记
- 注意代理和多线程 , 切勿深究

阅读主流程 :

1. 预估代码量 , 预览整体代码结构
大多数开源框架是单体或者 Maven 聚合结构 , 快速浏览整体的代码情况有助于理解

2. 断点的选择
阅读源码没必要从头开始看 , 可以凭借经验猜测会经过的业务 ,通过断点直接切入代码流程. 这里有个我非常喜欢的方式就是通过 Log 来判断处理的类 , 从而打断点切入业务.

断点有很多深入的操作可以让我们更容易的切入 , 比如断点的 Condition 以及表达式等等 , 了解这些对阅读很有帮助

3. 多线程处理 多线程比较麻烦, 多线程运行后 , 断点很难处理. 我对于多线程的处理常用的方法就是溯源. 在new Thread 之前就打上断点.

另外一种场景就是线程池 , 可以用类似的 , 但是想过不明显.

能想到只有通过 Debug 工具的 Threads 进行处理 , 大佬们有没有实用的经验传授一下🎁🎁

4. 代理处理

不论是 AOP 还是其他的切面 , 代理方式 , 其最终都会传入一个类名+方法名进行代理 , 找到反射的地方直接查询类名即可.