【commons-pool2源码】写前思考
写作的初衷
工作4年多, 一直没有系统的阅读过优秀的开源代码, 所以从今年开始做一些尝试, 阅读源码并且试着将自己的理解以文章的形式输出, 从而达到以下目的:
- 通过阅读源码提升自身的技术水准, 通过写作来巩固和加深理解.
- 希望给工作1-2年的同学带来一些启发.
- 希望遇到同频的人.
文章标准
在写作初期, 给文章制定了以下几项准标:
- 逻辑清晰, 并用大白话表达, 文章最重要的就是让人看懂.
- 分主次. 每篇文章应该有主要表达的观点, 以及文章所处的上下文环境, 做好必要的克制.
- 举例论证严谨, 丰富, 辅助理解.
第一个系列文章
【源码】系列的第一部作品选择了讲解Apache开源的commons-pool2. 开源库的选择上, 需要满足两点, 一是开源项目需要足够大牌, 注释够多, 被使用的够多. 二是该项目的依赖项足够少, 减少阅读初期带来的难度. 所以最终选择了commons-pool2.
但是执行过程遇到的问题. 源码类的文章写的太浅就变成了Javadoc. 首先写之前就得完整的阅读并理解项目, 写作之前就需要花很多时间整理, 然后才能动笔写, 再获得反馈进行调整, 整个闭环周期太长, 无法阶段性的获得正反馈, 导致焦虑的产生, 甚至导致最后放弃写作. 所以我就需要一个更具可行性的执行逻辑.
我将【源码】系列文章划分为4种状态.
- 思考状态. 用于记录在写作时遇到问题的思考或者根据反馈来的复盘.例如:
【commons-pool2源码】写前思考. - 准备状态. 记录一些在阅读源码过程中遇到的不了解的知识点. 但只是停留在对知识点的认识以及使用, 如果要深入则另开系列文章. 例如:
【commons-pool2源码】_pre JMX. - 进行状态. 系统性的写对源码的理解.例如:
【commons-pool2源码】_ing 对象状态详解. - 拓展状态. 主要看下当前项目在其他知名项目中的应用.例如:
【commons-pool2源码】_ex commons-pool2在Jedis中的应用.
按四种状态的方式执行写作, 在阅读源码初期遇到一些知识点就可以写, 不至于从开始阅读源码到进行状态之间都没有文章产出, 既可以锻炼写作的熟练度, 也能为真正写源码解析做更充足的准备.
感谢阅读!
【commons-pool2源码】写前思考的更多相关文章
- Apache Commons Pool2 源码分析 | Apache Commons Pool2 Source Code Analysis
Apache Commons Pool实现了对象池的功能.定义了对象的生成.销毁.激活.钝化等操作及其状态转换,并提供几个默认的对象池实现.在讲述其实现原理前,先提一下其中有几个重要的对象: Pool ...
- 温故而知新 Volley源码解读与思考
相比新的网络请求框架Volley真的很落后,一无是处吗,要知道Volley是由google官方推出的,虽然推出的时间很久了,但是其中依然有值得学习的地方. 从命名我们就能看出一些端倪,volley中 ...
- Netty 源码阅读的思考------耗时业务到底该如何处理
目录大纲: 前言 处理耗时业务的第一种方式-------handler 种加入线程池 处理耗时业务的第二种方式-------Context 中添加线程池 总结:两种方式的对比和思考 前言 熟悉 Net ...
- RequireJs 源码解读及思考
写在前面: 最近做的一个项目,用的require和backbone,对两者的使用已经很熟悉了,但是一直都有好奇他们怎么实现的,一直寻思着读读源码.现在项目结束,终于有机会好好研究一下. 本文重要解读r ...
- BackBone 源码解读及思考
说明 前段时间略忙,终于找到时间看看backbone代码. 正如知友们说的那样,backbone简单.随性. 代码简单的看一眼,就能知道作者的思路.因为简单,所以随性,可以很自由的和其他类库大搭配使用 ...
- 读 Kafka 源码写优雅业务代码:配置类
这个 Kafka 的专题,我会从系统整体架构,设计到代码落地.和大家一起杠源码,学技巧,涨知识.希望大家持续关注一起见证成长! 我相信:技术的道路,十年如一日!十年磨一剑! 往期文章 Kafka 探险 ...
- 第74讲:从Spark源码的角度思考Scala中的模式匹配
今天跟随王老师学习了从源码角度去分析scala中的模式匹配的功能.让我们看看源码中的这一段模式匹配: 从代码中我们可以看到,case RegisterWorker(id,workerHost,.... ...
- 手写Redux-Saga源码
上一篇文章我们分析了Redux-Thunk的源码,可以看到他的代码非常简单,只是让dispatch可以处理函数类型的action,其作者也承认对于复杂场景,Redux-Thunk并不适用,还推荐了Re ...
- 手写Express.js源码
上一篇文章我们讲了怎么用Node.js原生API来写一个web服务器,虽然代码比较丑,但是基本功能还是有的.但是一般我们不会直接用原生API来写,而是借助框架来做,比如本文要讲的Express.通过上 ...
随机推荐
- 高性能Web框架
不管 Web 前端架构运行机制还是 Web 后端架构中,网络是必不可少的且占分量很重.用户通过网络访问 Web 服务器,Web 后端架构中各种服务之间通过网络来进行通信和协作,网络是现代 Web 应用 ...
- kafka auto.offset.reset参数解析
kafka auto.offset.reset参数解析 1.latest和earliest区别 2.创建topic 3.生产数据和接收生产数据 4.测试代码 auto.offset.reset关乎ka ...
- 使用Spring MVC实现文件上传与下载
前段时间做毕业设计的时候,想要完成一个上传文件的功能,后来,虽然在自己本地搭建了一个ftp服务器,然后使用公司的工具完成了一个文档管理系统:但是还是没有找到自己想要的文件上传与下载的方式. 今天看到一 ...
- Jenkins(2)docker容器中安装python3
前言 使用docker安装jenkins环境,jenkins构建的workspace目录默认是在容器里面构建的,如果我们想执行python3的代码,需进容器内部安装python3的环境. 进jenki ...
- 设计模式(十四)——模板模式(SpringIOC源码分析)
1 豆浆制作问题 编写制作豆浆的程序,说明如下: 1) 制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 2) 通过添加不同的配料,可以制作出不同口味的豆浆 3 ...
- cartographer环境建立以及建图测试(详细级)
- hdu3635 Dragon Balls
Problem Description Five hundred years later, the number of dragon balls will increase unexpectedly, ...
- 无所不能的Embedding6 - 跨入Transformer时代~模型详解&代码实现
上一章我们聊了聊quick-thought通过干掉decoder加快训练, CNN-LSTM用CNN作为Encoder并行计算来提速等方法,这一章看看抛开CNN和RNN,transformer是如何只 ...
- Cobbler自定义标题及菜单密码
sha1pass mypassword || openssl passwd -1 -salt sXiKzkus mypassword $1$sXiKzkus$x12Z3ZaiC34GhceLH5LXw ...
- codeforces 878A
A. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...