目录
开篇
万变不离其宗
重量级知识
轻量级知识
开篇
对于一门新技术或者开源项目如何从头开始学习? 相信每个人都有不同的想法和见解, 下面谈谈我个人的想法和实践
万变不离其宗
无论你学习的新知识是什么, 首先可以简单的百度 google 一下, 比如我想要学习 netty, 那么就搜索 "netty 介绍", 读完过后, 一定要去官方网站看一下. 一般的开源项目都放在 GitHub 上, 且有一个 readMe.md 文件, 我建议你一定要去读一遍. 因为官网上的文档信息一定是最全最新的, 所有其他网站的资料, 几乎都是从官网上搬运过去的, 且很有可能相关资料已经过时.
无论怎样, 对于一门新知识的学习, 建议你一定要去官网上看一下文档
重量级知识
这里的 "重量级知识" 是指有难度, 有深度, 且相对不容易掌握的知识, 例如 Elasticsearch,netty,Java 多线程, JVM 底层, 这些知识的学习是需要时间沉淀的, 不可能一蹴而就.
这些知识, 往往不是简单掌握用法, API 即可, 不然很有可能会埋坑, 且在将来某个时间爆发.
就拿我亲身经历来说, 以前我们有个项目需要使用 Elasticsearch, 且该项目非常紧急, 我和另一个同事之前都没有任何 Elasticsearch 相关经验, 我们从网上简单了解并学习相关 Elasticsearch API 过后, 就直接在项目中使用, 而我们判断 Elasticsearch 是否正确使用的依据, 就是 业务 "CRUD" 相关功能是否正常.
受益于 Elasticsearch 开箱即用, 我和同事顺利的完成了相关任务, 但是随着我深入学习 Elasticsearch, 我发现我们写的代码存在不少问题
Elasticsearch 没有配置任何 mapping, 使用的是默认的 dynamic mapping, 且没有任何设置
数据分片没有配置, 默认只有 5 个分片, 且副本为 1, 按照官网的信息, 1 个分片应该最多不超过 50G 数据, 否则大分片在 reindex 和故障修复时会很慢, 且不稳定
我们使用的相关 Elasticsearch API 存在不少性能问题, 在业务允许的情况下, 应该优先使用 filter 查询
应该提高 refresh 的默认值, 以提升写入速度
... 很多很多问题
虽然我们顺利的完成了任务, 但是我们的代码存在很多问题, 且在数据量大的情况下, 很致命.(后来已修复)
一件事情, 往往有两面性, 像 Elasticsearch 开箱即用功能, 非常容易上手, 简单部署一下, 再调用相关 API, 就能实现 "CRUD", 但是便利的背后却是一大堆问题, 如果你不深入学习 Elasticsearch, 包括它的分片, mapping, 索引别名, 分词器, routing,template,filter 过滤器, 聚合, JVM 内存设置, 集群, 冷热数据, 副本, kibana,logstash 等等. 即使现在你的代码没有任何问题, 能够运行, 将来在某个时刻, 你一定会为你的行为买单!
因此, 对于这些 "重量级知识", 我建议你一定要深入学习, 并且长时间积累, 形成体系. 并把一些重要的知识点和坑记录下来, 以免忘记.
就拿我学习 Elasticsearch 而言, 因为我们项目严重依赖 Elasticsearch, 且数据量不少, 因此过年期间我专注于 Elasticsearch. 且后续不断积累相关知识, 我的学习步骤如下
首先看官方文档, 且在学习的过程中, 一直穿插着在看官方文档 , 由于 Elasticsearch 知识点很多, 官网的文档也非常多, 刚开始学习的时候, 仅仅看官网文档, 进展很慢, 因为一些 Elasticsearch 术语, 行话不是很了解, 所以是一边看视频, 博客, 公众号, 一边看官方文档.
看完极客时间 阮一鸣老师 "Elasticsearch 核心技术与实战"(因为当时刚好出了这门课程), 但是这门主要讲解如何使用, 相关 API 讲解较多
看完中华石杉 ES - 顶尖高手 基础篇和高手进阶篇, 这门课程讲解了很多 Elasticsearch 底层原理, 受益匪浅
看完 https://blog.csdn.net/laoyang360/ 铭毅天下所有关于 Elasticsearch 的博客, 大约有 130 篇左右
看完 铭毅天下的公众号 所有关于 Elasticsearch 的文章
看了很多铭毅天下知识星球上的帖子
如果你想要深入学习 Elasticsearch, 我强烈推荐你去看 铭毅天下的博客, 公众号, 知识星球. 这个博主专注于 Elasticsearch 领域, 且已经通过了 Elasticsearch 官方认证工程师. 百度搜索 "铭毅天下" 即可
至此, 我的 Elasticsearch 相关领域的知识, 已经从最初的简单使用 API 到现在 已深入理解 Elasticsearch 相关核心知识.
我在学习 Elasticsearch 的过程中, 不断积累相关重点知识和坑, 并形成一定知识体系, 方便我后期查阅.
我建议你最好也将相关知识记录下来, 最后形成一定体系.
轻量级知识
这里的 "轻量级知识" 是指难度较低, 且深度较浅, 并容易掌握的知识. 类似于 druid 数据库连接池, easyExcel 等等
就拿我学习 easyExcel 举例. 以前处理 Excel 相关数据的时候, 使用的都是 poi, 但是最近发现同事在使用 easyExcel, 这引起了我的好奇心, 到网上查阅相关资料, 发现 easyExcel 相比 poi,jxl 有不少优点, 且有完善的中文文档和社区 (其实就是 qq 群和钉钉群, 有问题可以到群里面提问), 于是我也尝试使用 easyExcel 来处理 Excel 相关数据.
第一步: 我到 GitHub easyExcel 首页, 读完整个 readMe.md 文档 (全是中文), 建议你一定要读完, 以免错过重要信息.
第二步: 通过文档信息, 我知道 easyExcel 是个 maven 工程, 并且有着完善的单元测试, 我随即 clone() 最新的代码到本地
第三步: 通过文档信息, 找到核心单元测试 ReadTest,WriteTest, 并跑完这两个类所有的测试方法
第四步: 读取 docs 目录下相关 easyExcel 相关信息
这里不得不提一下, easyExcel 的单元测试用例, 写的非常好, 并且很完善, 基本上所有和 Excel 相关的处理, 你基本上都可以找到相关的测试用例代码. 每一个单元测试, 你都可以成功运行, 且还有代码注释和实际的控制台输出, 如果你想深入了解底层逻辑, 还可以 debug 代码.
每一个测试用例都有详细的注释:
每一个测试用例都有详细的输出:
通过 easyExcel 的单元测试用例, 仅仅一个下午的时间, 我就完全掌握了 easyExcel 处理 Excel 相关的方法.
对于这类 "轻量级知识", 通过官方文档信息和单元测试用例来学习, 真的非常省时省力. 如果你是通过博客或百度查阅一个个知识点, 真的很花时间, 且资料很可能已经过时.
来源: https://www.cnblogs.com/AdaiCoffee/p/12790915.html