一门新技术或者开源项目我是如何从头开始学习

开篇

对于一门新技术或者开源项目如何从头开始学习?相信每个人都有不同的想法和见解,下面谈谈我个人的想法和实践

万变不离其宗

无论你学习的新知识是什么,首先可以简单的百度 google一下,比如我想要学习netty,那么就搜索 "netty 介绍",读完过后,一定要去官方网站看一下。一般的开源项目都放在github上,且有一个readMe.md文件,我建议你一定要去读一遍。因为官网上的文档信息一定是最全最新的,所有其他网站的资料,几乎都是从官网上搬运过去的,且很有可能相关资料已经过时。

无论怎样,对于一门新知识的学习,建议你一定要去官网上看一下文档

重量级知识

这里的“重量级知识”是指有难度,有深度,且相对不容易掌握的知识,例如elasticsearch、netty、Java多线程、JVM底层,这些知识的学习是需要时间沉淀的,不可能一蹴而就。

这些知识,往往不是简单掌握用法、API即可,不然很有可能会埋坑,且在将来某个时间爆发。

就拿我亲身经历来说,以前我们有个项目需要使用elasticsearch,且该项目非常紧急,我和另一个同事之前都没有任何elasticsearch相关经验,我们从网上简单了解并学习相关elasticsearch api过后,就直接在项目中使用,而我们判断elasticsearch是否正确使用的依据,就是 业务 “CRUD” 相关功能是否正常。

受益于elasticsearch开箱即用,我和同事顺利的完成了相关任务,但是随着我深入学习elasticsearch,我发现我们写的代码存在不少问题

  1. elasticsearch没有配置任何mapping,使用的是默认的dynamic mapping,且没有任何设置
  2. 数据分片没有配置,默认只有5个分片,且副本为1,按照官网的信息,1个分片应该最多不超过50G数据,否则大分片在reindex和故障修复时会很慢,且不稳定
  3. 我们使用的相关elasticsearch API存在不少性能问题,在业务允许的情况下,应该优先使用filter查询
  4. 应该提高refresh的默认值,以提升写入速度
  5. ... 很多很多问题

虽然我们顺利的完成了任务,但是我们的代码存在很多问题,且在数据量大的情况下,很致命。(后来已修复)

一件事情,往往有两面性,像elasticsearch开箱即用功能,非常容易上手,简单部署一下,再调用相关API,就能实现 “CRUD”,但是便利的背后却是一大堆问题,如果你不深入学习elasticsearch,包括它的分片、mapping、索引别名、分词器、routing、template、filter过滤器、聚合、JVM内存设置、集群、冷热数据、副本、kibana、logstash等等。即使现在你的代码没有任何问题,能够运行,将来在某个时刻,你一定会为你的行为买单!

因此,对于这些“重量级知识”,我建议你一定要深入学习,并且长时间积累,形成体系。并把一些重要的知识点和坑记录下来,以免忘记。

就拿我学习elasticsearch而言,因为我们项目严重依赖elasticsearch,且数据量不少,因此过年期间我专注于elasticsearch。且后续不断积累相关知识,我的学习步骤如下

首先看官方文档,且在学习的过程中,一直穿插着在看官方文档 ,由于elasticsearch知识点很多,官网的文档也非常多,刚开始学习的时候,仅仅看官网文档,进展很慢,因为一些elasticsearch术语、行话不是很了解,所以是一边看视频、博客、公众号、一边看官方文档。

  1. 看完极客时间 阮一鸣老师 “Elasticsearch核心技术与实战”(因为当时刚好出了这门课程),但是这门主要讲解如何使用,相关api讲解较多
  2. 看完中华石杉 ES-顶尖高手 基础篇和高手进阶篇,这门课程讲解了很多elasticsearch底层原理,受益匪浅
  3. 看完https://blog.csdn.net/laoyang360/ 铭毅天下所有关于elasticsearch的博客,大约有130篇左右
  4. 看完 铭毅天下的公众号 所有关于elasticsearch的文章
  5. 看了很多铭毅天下知识星球上的帖子

如果你想要深入学习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相关的方法。

对于这类“轻量级知识”,通过官方文档信息和单元测试用例来学习,真的非常省时省力。如果你是通过博客或百度查阅一个个知识点,真的很花时间,且资料很可能已经过时。

作者:一杯热咖啡AAA
出处:https://www.cnblogs.com/AdaiCoffee/
本文以学习、研究和分享为主,欢迎转载。如果文中有不妥或者错误的地方还望指出,以免误人子弟。如果你有更好的想法和意见,可以留言讨论,谢谢!
posted @ 2020-04-27 23:09  一杯热咖啡AAA  阅读(770)  评论(2编辑  收藏  举报