JVM学习——学习方法论&学习大纲

2020年02月06日22:25:51

完成了Springboot系列的学习和Kafka的学习,接下来进入JVM的学习阶段

深入理解JVM

学习方法论

如何去学习一门课程——方法论

多讨论,从别人身上发现优点。

从人去学习:更为高层次的方式。从有经验的人身上学习闪光点(成本低,看书。但是因为不是自己经历的,要学会去发现被人的优点)

从事去学习:我们可能自己经历过的事情,我们会有自己的想法,自己踩到坑了,经历过了,失败过了。(成本更高,不撞南墙不回头)

写笔记,写微信公众号,写博客。自己输出,转化为自己的东西,这种做法比较高效。

要做到,输入。但是有输入,必须就有输出。

最高层次的输出:你给别人讲,你给别人分享。对于个人来说是最大的提升。

最好的学习方式:不留余力的去给别人讲。在讲的过程中你会发现自己的问题。给别人讲的时候你得会,也可能会发现自己的不足。也可能是你会,但是你可不一定会讲。也可能是你掌握的问题,也可能是你的表达方式的问题。这些在给别人讲的时候都是能够锻炼得到的。

  1. 这个技术你明白,你能够给别人讲明白。
  2. 这个技术你明白,你给别人讲不明白。
  3. 这个技术你以为你明白了,给别人讲完,你自己也不明白了。
  4. 第四境界,你学过了你也不明白。
  5. 第五境界,你也不明白。

反思一下自己,自己是否彻底理解了这们技术。

懂了很多道理,依然过不了一生。平时经常去看文章,视频,图书,等等,你看完之后,可能都觉得动了,但是落实到自己身上,就会发现问题所在。如果提高学习效率,你花费了一小时的时间,是否就真的有一小时的收获。

关于为什么有些人在学完一门技术之后,在短暂的时间内,你觉得你都会了,是真的会了。但是过一段时间就忘记了呢?的问题,是不是有很多这种情况。产生这种情况的根源到底是什么呢?这个问题真的是一个很普遍,很常见的问题。但是如果这个问题不解决的话,你学习再多的技术都是无济于事的。毕竟,你会忘记。思考一下吧,对于自己而言,为什么会遇到这样的问题?这个问题没有标准答案的,谈谈自己的问题:在看视频,图书,等等资源之后,为什么之所以会产生没有持久化的效果? 在看的当时会认识的很深刻,因为你光有输入,没有输出,过了很长时间。输入和输出一定是相伴相生的。我们在学习的时候是输入,我们一定要吐出来。输出。就好像人在呼吸一样。吸气,吐气。很现实的一个道理。所以。找到属于自己的输出的方式。把技能点,以适合自己的方式给呈现出来,如文字,图片,思维方式等等。任何的编程语言或者技术,通过你的输出,你的输出过程让那些东西变成了你自己的东西。我们的日常开发,用的多了的技术就会很熟练,其实道理也是这样的,在使用的过程中,实际上你就是在无限的输出。就算你会忘记,但是你看到你自己的博客或者笔记之后,就会瞬间给全部捡起来。不用非得重新去搜索或者Google。因为笔记就是自己的东西。刻意练习:有意而为之。

关于“项目当中用到什么就学什么”这个问题。在此讨论一下。即便你在大型公司,你平时开发用到的技术也只是很少的一部分。并不会把你学到的东西全部给用上,不要把你自己绑定在公司的上面,比如你脱离了公司,你也有自己的独当一面的能力,充分提升自己的竞争力。所以并不是说项目当中用到什么技术你去学习什么技术。如果是从提升自己的角度去学习的话,不管你是为了工作还是什么,但是归根结底来说是提升自己的能力的,所以不论你是否用的到,你自身的能力都会提升的。如果你能碰到你觉得这个技术对你来说是特别特别重要的,你就去学习,尽管两年之内你现在的项目组或者公司是用不到这个技术的,但是并不妨碍你自己的提升。公司是靠业务来盈利的,而技术是服务于业务的。

不管上面说的这些话是否有用,如果有一句话对你有用,那我的这些口舌就没有白费。归根结底还是要自己去做。

  1. 实验1:随便在Apache框架上找一个框架,花半天的时间去看一遍用户指南,只输入,不输出。
  2. 实验2:随便在Apache框架上找一个框架,花半天的时间去看一遍用户指南,学习+笔记的方式。
  3. 一个月之后,判断两种方式哪种适合你。

关于学习视频资源资源,如果资源能够很系统的话,我觉得是很好的资源。但是虽然很好,视频绝对绝对不能无限的重复看。在看的过程中还是要记录笔记的,看了2-3遍之后,视频就可以删除掉了,就当不存在。把内容编程自己的东西。学习视频的最大的缺点:不能够检索。但是如果能够做出自己的笔记的话,是完全可以进行索引的。

效率笔记工具:印象笔记,有道云笔记很小很小的一个工具没准就对你的日常习惯造成了很大的变化。

写了这么多,JVM的课程完全还没开始,但是心态,状态,和正确的学习方法。已经搭建起来了。确保自己学完忘记,忘记之后再重新学的这种尴尬现象不会发生。这些时间是很有必要的。既然每个人来学习这门课程,肯定是包邮很大的期望的。因为在日常聊天的时候就能感觉到大家的渴望。实际上JVM是一个很难学好的。但是又都很想学的一门技术。对于功力的提升我们很向往。

学习曲线

JVM的学习我们应该采用哪些方式。拿其他的框架来说,其他的框架我们能够马上应用。如springboot框架,对着文章就能照猫画虎,写出helloworld程序。立竿见影,我们马上就能付出得到回报。这对学习是很有帮助的。这是学习应用框架的学习曲线。如其他的Dubbo,Zookeeper等,该干啥干啥,学完之后就能用起来的。起来之后,我们如果感兴趣的话,我们可以进行深入学习,各种测试等等,在感兴趣,我们可以深入源码学习,等等。断路器的使用,等应用层的技术框架,学习方式是比较容易的(相比于JVM来说)。

然后,JVM学习起来不是这样的。第一,特别枯燥,因为涉及了特别特别多理论的东西。特别是程序人员。我们对于应用框架学习是比较感兴趣的。如果没问题,万事大吉,如果有问题,尝试去解决问题。解决完之后就OK了。所以我们在学习的时候需要记录。第二,JVM理论知识是很难举例去说明我们讲述的内容的。如关键字的应用等等。我们只能去结合硬件信息或者是字节码的东西去理解内容。第三,无论是线程,还是Web应用在中断的时候会抛出关于JVM的内容,我们是很难去重新模拟举例说明的。第四,JVM涉及的内容,太多太多太多了。

所以,我们这个JVM课程究竟会涉及哪些内容。第一,基于Java8来进行学习和深入。各个小版本差距不会去深入学习。第二,各个版本通用的核心内容是我们学习的重点。第三,JVM的重要参数的介绍,如果只是很少用到。第四,达到了解和熟悉JVM的境界。

学习JVM:必须要记笔记。因此会大量涉及我们日常开发的时候涉及不到的内容。像应用层的开发,或者是系统的开发的,也绝对不是说天天都能够跟JVM打交道的。记录下来,当做自己的回顾和梳理,这才是学习JVM最好的方式和道路。希望能够学到你想学到的内容。绝对绝对不会有速成的方式,也绝对不可能有突击的方式去学习。如:一口气去把一个学习视频学完。掌握是不可能的。别人几年的时间,你几天就能达到吗?所以:要有节奏,有计划的去学习。力争每节课都会有收获。

另外,关于JVM的课程,涉及的内容特别特别的多。我们要抱着敬畏的心态,也不要有畏难的思想。付出,就能够得到你想得到的境界和内容。

推荐图书:《酌情购买1-2本,翻一翻》 JVM,Java虚拟机。

做笔记,技术分享,有反馈:价值体现

国内比较有权威的:R大 (之前在淘宝,现在在Oracle)

问题1:学了十几节课,你觉得什么都没有学到。

为什么:因为在日常开发当中,你都用不上。(JVM并不是立竿见影的)

问题2:学习完JVM之后,你会发现学的越多,你不知道越多

为什么:因为这是正常的。无论你学的再多,都只是一点点而已。(踏入这个圈子了,正确的,不可避免的情况)

问题3:学习JVM,文章资料都是英文的。

为什么:没办法,自我提升英语水平和水准把。不想看,没看法,看不懂,你就学不会

问题4:关于耐心,没有怎么办。

为什么:没办法。自己提升耐心吧。学1个月,你还是什么也坐不了。沉下心来,有的放矢的去进步吧。

问题5:内容不全怎么办

为什么:老师也不会。要有自己甄别能力。

学习目标:从什么都不会打小白,变成一个深入理解JVM的大白。

课程大纲

介绍:JVM是一个涉及内容很多的,但是又极为重要的平台。基于JVM的各种动态与静态语言生态圈已经异常繁荣了。JVM运行的不是Java代码而是字节码文件。Scala,Groove,Kotlin语言也能在JVM上面运行(因为都能生成字节码文件。)所以JVM是一个平台,不是一门语言。

  • HotSpot虚拟机讲解 (Oracle)
  • 垃圾收集方式讲解
  • 垃圾收集算法讲解
  • 垃圾收集器讲解
  • 分带垃圾收集机制讲解 (新生代/老年代)
  • 新生代讲解
  • 老年代讲解
  • G1收集器分析与实例
  • 常见且重要的虚拟机参数示例
  • 方法区
  • 线程共享内容区
  • 根搜索算法
  • Serial收集器
  • ParNew收集器
  • 类加载机制详解
  • 类加载的双亲委托机制
  • 字节码文件生成与分析
  • 魔数
  • 常量池与方法表
  • 各种指令详解
  • 锁详解
  • 线程安全
  • 偏向锁、自旋锁与轻量级锁
  • JIT编译器
  • GC日志生成与分析
  • 虚拟机监控工具详解
  • jConsole使用方法详解
  • 何为逃逸与逃逸分析
  • 方法内联
  • 虚拟机内存模型详解

两个JVM提供的可视化工具:jconsole,jvisualvm 命令行工具:jmap

讲课顺序并不是根据上面大纲的顺序开始的。如果提到相应的点,可以深入的去链接相关的知识点和实现。有针对性的进行学习和了解。

  1. 解决遇到JVM的相关问题
  2. 面试的时候,肯定不嘘

2020年02月06日23:57:26,累了。睡觉。

下次开始,直接从类加载机制开始学起。

本次主要给自己打打气,学习到了比较喜欢的学习方法论和学习技巧。已经对JVM的概括了解和接下来的学习大纲。

2020年02月12日20:12:15 今天学习到26课。

再谈学习方法论

2020年02月12日20:09:45

老师的JVM课程的第33讲。

学习误区:大同小异

  1. 学习的时候,太着急了。以为把视频很快的看完了。这个知识就掌握了。其实:看完≠掌握

    有些人的进步很快,在讲完之后还能扩展,还能用文章,博客输出。有些人的效果很差。

  2. 如何把别人讲的东西,规整到自己的技能树当中

    进步一段时间之后,回顾一下。别总是低头去做自己的事情(工作,学习)。

  3. 效率问题

    与效率相比,时间反而并没有效率重要。

    因为,无论是哪一点被无限扩大,都是会带动进步的

    时间,总量就是那些,所以,我们所能改变的就是效率问题。

    那么,我们怎么才能提高我们的效率?这才是我们最需要关心的问题。

  4. 输出问题

    现在回想之前学习的netty,jvm细节的东西,java8等。

    如果你当时没有任何的记录,现在想不起来了,想复习,怎么办。

    另外:40分钟一个视频。如果你看完了没有收获,你的时间是不是就浪费了呢?(机会成本)

    记录,越详细越好。无论是你想到的。还是知识点。不要以为记笔记就是在浪费时间。

    永远不要相信你的大脑。用心去体会记录给你带来的本身的价值和记录的力量。

  5. 节奏感

    突击学习给你带来的最直观的效果就是:让你误以为你已经掌握了这项技术。

    而真正掌握,都是一点一点积累的。想要深入且系统学习的话,一定是需要很多很多时间的。

    让学习形成节奏感。让大脑形成一种惯性。不是说让学习的时候,自己逼着才能去学习。

    我要找我自己的节奏感

    张龙老师是在业余时间,每周4-5节课的节奏感,没有浪费自己工作时间的一秒钟,好几年了。长此以往,他已经保持好了这种节奏了。。

  6. 每个人是不一样的

    每个人是不一样的,但是一定是存在共性的。如,方法论,价值观。学习方法等等。都是可以相互学习和借鉴的。现在,就是要真正的花费时间,去找出自己思维方式到底有哪些问题。而不是立刻去反驳。人一定要有自知之明,接收别人的一针见血的批评。这种批评才是最有价值,成长最快的。

一定要抓住一切机会,去记录去记录去记录,通过记录,变成你自己的部分。

不要觉得记录笔记慢,因为:慢,就是快。

学习过程本来就是长久的过程,记录笔记的慢,和学习过程的长久比较起来。如果以后能够快速的通过笔记照会你的学习过程的知识,到底什么样是慢呢。

把握分享的机会。分享的时候 从能力,自信心,心里上。只有你自己做的时候,才能体会到这些方面给你带来的问题。还能锻炼自己表达能力。你自己理解了,你能让别人理解吗?如果能把你的轨道扩展为多个技能轨道的话。这种影响力是相互乘法运算的。

把自己做得好的地方,写下来。

把自己做的不好的地方,写下来。

找到自己能够启示自己的地方。

技术债务:欠的技术都是要还的

从学习,到记录,到遗忘,要复习,都使用,到遗忘,到复习。都是你的学习过程。

慢,就是快。

有没有自己这样跟源代码? 问到你的内心灵魂深处。

如果你是自己追的代码,那么你就掌握了追源码的技能。

如果你没有自己追代码,那么你就只掌握了别人给你讲的那单一的一个技能点。

授人以鱼不如授人以渔。

原文地址:https://www.cnblogs.com/bigbaby/p/12348938.html