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. 每个人是不一样的

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

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

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

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

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

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

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

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

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

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

慢,就是快。

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

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

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

授人以鱼不如授人以渔。

JVM学习——学习方法论&学习大纲的更多相关文章

  1. 【基本技能篇】>>第3篇《暗时间_指导学习的方法论——心得》

    暗时间——指导学习的方法论 ——2016年2月11日 打造自己的核心竞争力:①专业领域技能:②跨领域的技能(解决问题的能力,创新思维,判断与决策能力,表达沟通能力等等):③学习能力,持续学习和思考新知 ...

  2. JVM中ClassLoader的学习

    JVM中class loaderの学习 一..class文件和jvm的关系 类的加载 所有的编译生成的.class文件都会被直接加载到JVM里面来吗(并不 首先我们明确一个概念,.class文件加载到 ...

  3. 20155234 2610-2017-2第九周《Java学习笔记》学习总结

    20155234第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...

  4. (转)Predictive learning vs. representation learning 预测学习 与 表示学习

    Predictive learning vs. representation learning  预测学习 与 表示学习 When you take a machine learning class, ...

  5. java JDK8 学习笔记——助教学习博客汇总

    java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...

  6. [未完成]WebService学习第一天学习笔记

    [未完成]WebService学习第一天学习笔记[未完成]WebService学习第一天学习笔记

  7. Asp.net MVC4高级编程学习笔记-视图学习第一课20171009

    首先解释下:本文只是对Asp.net MVC4高级编程这本书学习记录的学习笔记,书本内容感觉挺简单的,但学习容易忘记,因此在边看的同时边作下了笔记,可能其它朋友看的话没有情境和逻辑顺序还请谅解! 一. ...

  8. 2019最新WEB前端开发小白必看的学习路线(附学习视频教程)

    2019最新WEB前端开发小白必看的学习路线(附学习视频教程).web前端自学之路:史上最全web学习路线,HTML5是万维网的核心语言,标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次 ...

  9. 最近开始学习Cesium,学习学习。

    最近开始学习Cesium,学习学习.

随机推荐

  1. MASA Framework - EventBus设计

    目录 MASA Framework - 整体设计思路 MASA Framework - EventBus设计 概述 利用发布订阅模式来解耦不同架构层级,亦可用于解决隔离业务之间的交互 优点: 松耦合 ...

  2. 【Java】集合

    文章目录 集合框架的概述 数组在存储多个数据方面的特点 数组在存储多个数据方面的缺点 集合框架 Collection接口中的方法的使用 add(Object e) size() addAll(Coll ...

  3. 【C语言】将文本中汉字读入字符数组输出乱码

    输出中文字符乱码 今天从文件中将中文读入字符数组后输出发现其中文变成了乱码,,令人头大. 解决办法 将文本编码格式改成ANSI即可. 打开记事本->文件->另存为->更改编码格式-& ...

  4. R语言服务器程序 Rserve详解

    R语言服务器程序 Rserve详解 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到 ...

  5. Android官方文档翻译 七 2.Adding the Action Bar

    Adding the Action Bar 增加一个Action Bar(工具栏) The action bar is one of the most important design element ...

  6. go语言 strconv.ParseInt 的实现分析

    字符串与数值之间进行转换是一个高频操作,在go语言中,SDK提供 strconv.ParseInt 将字符串转换为数值,strconv.FormatInt 可以将数值转换为字符串. 1.首先看下 st ...

  7. LaTex 中圆圈序号及一些特殊字符的输入

    众所周知,LATEX 提供了 \textcircled 命令用以给字符加圈,但效果却不怎么好: 实际上,加圈并不是一个平凡的变换,它会涉及到圈内字符形状的微调,而这是几乎无法在 TEX 宏层面解决的. ...

  8. vue文档1-VSCode介绍

    开发工具VSCode: Vue的开发工具用的是VSCode(Visual Studio Code),这款开发工具是微软官方出品,开源,免费,并且功能相当强大,使用者很多,插件相当丰富,是Vue开发的不 ...

  9. P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two

    // Problem: P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two // Contest: Luogu // URL: https://www.luogu.com ...

  10. golang中结构体的嵌套、方法的继承、方法的重写

    package main import "fmt" type human struct { name, phone string age int8 } type student s ...