菜鸟驿站怎样记账 如何系统的学习JAVA?
如何系统的学习JAVA?
java的整体生态和再积累真的是太大了。95年至今20多年的积累,完全涉及到计算机软硬件的方方面面。我依我之见就认为,提主所说的全精通,是指jdk本身和一些必要的数据结构以及广泛框架和面向对象的基本上思想吧。
从11年初到现在,一直在在学习java相关的知识。其中也走了不少弯路。按自己的积累,提出提主一个自怀疑合理且有肯定会深度的学习路线。大概情况分下面几个阶段吧。
1.简单的方法应尽可能的打牢基础的数据结构和简单的算法基础。
也可以去快速的学习一些简单的四头系统,来行最简形矩阵软件自学的兴趣和初期成就感。但,一定得回过头,翻看的短时间内数据结构基础和很简单算法。类似这种书就是可以。
2.比较熟练在用Java类库和java第三方工具框架。
怎么学习建议使用java的语法,尝试表述Java语法怎么设计的逻辑。能熟练手中掌握jdkjava代码本身,和各种第三方类库工具包和第三方框架的简单使用。这里学习的同时,推荐一下看看《设计模式》,《代码整洁之道》,《spring源码解读》,《Spring揭秘》等这一类的书集。
3.理解怎么学习jdkjava代码本身的应用源码实现方法和高端点第三方框架的源码和架构设计。
例如jdk本身的数据结构二叉树,红黑树,treemap,和异步包的unsafe,同步阻塞队列,call-future等等包源码,以及线程基础类的实现,各个类库电脑设计的结构和设计模式。弄懂第三方框架的设计思想,理解去学习第三方框架的核心源码。
肯定,这里面很有可能会比较复杂到其他的事务,分布式协议等,这里继续展开。这个过程不是他一朝一夕,很有可能不需要大量的时间和技术感悟。其实,《设计模式》,《代码整洁之道》,《spring源码解读与设计详析》,《Spring揭秘》等等这一大类书,在这个过程可以不明白大差不差了。
4.明白jdk,jre即jvm原理和实现程序。
这里我推荐看下张桂兰的《实战java虚拟机》,里面解释比较比较偏实操。容易上手明白。
简单的方法,是可以从jdk那个软件的工具自学来先学些。
比如:jstat,jmap,jstack,jps,jdb.......甚至于另外直接是可以窥视运行期间不好算内存数据的HSDB。肯定,以及学习正式,我们只是需要理解具体用法的几个命令,并明白其华指的意义表就行。况且,第三方监控工具,以及jdk本身也提供给了3个可视化的监控。
主要,明白jvm的运行打开程序原理,弄明白class文件结构。
这个过程我们是可以自身之前会是用监控工具,理解jvm加载的基本原理。这个可以做个参考官方各个版本的jvm标准,学习没看明白class文件。于此可以在用如classpy等工具,方便啊我们然后阅读理解class文件。也可以试下接受class字节码级别的单步运行调试工具。哪怕,这个可以一段时间用用jvm汇编编码工具。
接下来,再理解jvm的垃圾回收机制发展历史和各个主流垃圾回收器的工作原理。
这个过程反正相当紧张。垃圾回收器有各种串行,联成一体,新声代/swap和老年代,在内回收警戒线,full触发条件,各种个样的基本参数和不怎末用的超参数,和G1的H区,ZGC等等。。。不错的是,GC并不属于jvm官方规范的一部分。
后再,动手做一些jvm的实践和实战,
诸如,jvm常见的故障排查和故障总结,性能调优,热程序加载,class字节码的动态操作,asm等。
结果,可以不试图利用自己的jvm。(当然了这个步骤,对很多同学来说并非要了)
这里我帮我推荐几本书,也再次搞明白jvm国家规范的学习路径。最好就是自己基于垃圾回收器。
周老师的《深入理解Java虚拟机》。
接下来的是《深入嵌入式java虚拟机》和配套源码。这个cldc的jvm源码仅有1M多。目前在oracle的官网上,依旧可以去下载。是一个设计太系统精简的jvm基于。
下一步,这个可以去阅读《自己动手写java 虚拟机》。这本书的jvm实现程序是常规go语言c语言程序。肯定其中也有很多设计并不是的很合理不。但基本都不能违背了jvm规范。
这会儿就可以不去看看吧github上各种jvm的开源软件实现程序了。有run,scalajvm,javainjava,ajvm,python-jvm,lua,各个版本各个差别的jvm实现程序。
其实,这些基于都只不过基本原理。
后面我推荐你看看《实战hotspot》豹子书,打听一下高级语言虚拟机的圈子。
其实,垃圾回收的书籍都很少,这里应该我推荐给你垃圾回收的超经典书《The Garbage Collection Cookbook》。只不过对新的垃圾回收算法有兴趣,可以去知乎搜索相关的论文和GC算法开源软件实现的demo。
5.当然,我的建议只不过是对Java本身。
真正要提升彻底能学好java生态,软件工程,计算机网络,大数据基础知识,mahuot,sparklib,分布式搜索架构,各种消息中间件,缓存中间件,数据库,DNS/CDN。。。。。这些大都做互联网应用,无法躲开的。
只能建议您,通用知识熟练的掌握,专研方向全精通,相关生态打听一下。
而提问是针对java本身。我就不再继续发动了攻击说其他详细方向了。具体描述的是大的技术方向,并没有什么其他答主那样的话,详细去再讨论语法糖这种级别。只希望对提主有不帮助。
有任何问题,记得关注快回复,与我继续讨论。谢谢啦。
怎么可以挣钱?
可以赚钱的道路千万条,也不知你想哪一条?能赚钱是站稳脚步社会的最基础理论知识,挣多挣少,因人而异。
关与挣钱,其实那是相互。君子爱财,取财有道。你选一个你擅长的工作或行业,认真钻研,极限能发挥,钱也就随之疾飞。业有专攻,术有独精,拥有行业的专家,才能赚大钱。加油哈吧!
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。