其实就是 3 个词: learning、trying、teaching !
1) Learning
这个是第一阶段,看书、google、看视频、看别人的博客都可以,但要注意一 点是“系统化”,特别是一些基础性的东西,例如 JVM 原理、Java 编程、网络编程, HTTP 协议等等,这些基础技术不能只通过 google 或者博客学习,我的做法一般是 先完整的看完一本书全面的了解,然后再通过 google、视频、博客去有针对性的查 找一些有疑问的地方,或者一些技巧
2) Trying
这个步骤就是解答前面提到的很多同学的疑惑的关键点,形象来说就是“自己动 手丰衣足食”,也就是自己去尝试搭建一些模拟环境,自己写一些测试程序。例如:
● Jvm 垃圾回收:可以自己写一个简单的测试程序,分配内存不释放,然后调整 各种 jvm 启动参数,再运行的过程中使用 jstack、jstat 等命令查看 jvm 的堆内存分布和垃圾回收情况。这样的程序写起来很简单,简单一点的就几行,复 杂一点的也就几十行。
● Reactor 原理:自己真正去尝试写一个 Reactor 模式的 Demo,不要以为这 个很难,最简单的 Reactor 模式代码量(包括注释)不超过 200 行(可以参考 Doug Lee 的 PPT)。自己写完后,再去看看 netty 怎么做,一对比理解就更 加深刻了。
● MySQL:既然有线上的配置可以参考,那可以直接让 DBA 将线上配置发给我 们(注意去掉敏感信息),直接学习;然后自己搭建一个 MySQL 环境,用线上 的配置启动;要知道很多同学用了很多年 MySQL,但是连个简单的 MySQL 环境都搭不起来。
● 框架封装了 DAL 层:可以自己用 JDBC 尝试去写一个分库分表的简单实现, 然后与框架的实现进行对比,看看差异在哪里。
● 用浏览器的工具查看 HTTP 缓存实现,看看不同种类的网站,不同类型的资 源,具体是如何控制缓存的;也可以自己用 Python 写一个简单的 HTTP 服务 器,模拟返回各种 HTTP Headers 来观察浏览器的反应。
简单来说,就是要将学到的东西真正试 试,才能理解更加深刻,印第安人有一句谚语:I hear and I forget. I see and I remember. I do and I understand,而且“试试”其实可以比较简单,很多时候 我们都可以自己动手做。
当然,如果能够在实际工作中使用,效果会更好,毕竟实际的线上环境和业务复 杂度不是我们写个模拟程序就能够模拟的,但这样的机会可遇不可求,大部分情况我 们还真的只能靠自己模拟,然后等到真正业务要用的时候,能够信手拈来。
3) Teaching
一般来说,经过 Learning 和 Trying,能掌握 70% 左右,但要真正掌握,我觉 得一定要做到能够跟别人讲清楚。因为在讲的时候,我们既需要将一个知识点系统 化,也需要考虑各种细节,这会促使我们进一步思考和学习。同时,讲出来后看或者听 的人可以有不同的理解,或者有新的补充,这相当于继续完善了整个知识技能体系。
这样的例子很多,包括我自己写博客的时候经常遇到,本来我觉得自己已经掌 握很全面了,但一写就发现很多点没考虑到;组内培训的时候也经常看到,有的同学 写了 PPT,但是讲的时候,大家一问,或者一讨论,就会发现很多点还没有讲清楚, 或者有的点其实是理解错了。写 PPT、讲 PPT、讨论 PPT,这个流程全部走一遍, 基本上对一个知识点掌握就比较全面了。
资源来源于《职业发展黄金手册》
https://developer.aliyun.com/topic/download?id=793
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。