java新手学习的一些建议

许多初学者经常面对这样一个问题,看自学视频觉得慢,而看书觉得虽然快,但是缺乏实战,囫囵吞枣,不得其解。而且,无论是看书还是看视频,存在一个问题,几天后过去就忘的一干二净。为什么??主要是缺乏对技术的使用,学习后并不知道这个技术干什么,只能模仿着书中或者视频中的代码再敲一遍,这只能增加一些基本印象。而不能将技术移植到其他地方,总而言之,实际上就是缺乏举一反三的能力,自学能力欠缺,成了菜鸟路上的炮灰。有幸看了金旭亮老实的几篇文章,大获裨益,与诸君共勉。
金老师在文章中直戳痛点,指出菜鸟新手自学的问题。如何架起书本与实际技术之间的联系?将书本中的知识转换成自己的知识。以及小白如何更快的踏入初级程序员门槛。金老师说到了这么几点。
其实要“速成”方法并不复杂,其中关键有以下几点:
(1)“只学必要的知识,不做无用功”,

(2)“充分收集信息,少走弯路”,

(3)“遵循科学的刻意训练方法,循序渐进
什么叫只学必要知识,不做无用功??简而言之就是对特定的应用场景,掌握特定技术,并达到能使用它来干活的水平,要学的东西其实并不多。带着目的性去学,自己对代码的理解和使用会更加得心应手。
这里写图片描述
这样,将自学的‘’内容一一分解,同时又更有目的性去学。
为了更直观形象地说明,金旭亮金老师就以学习与掌握Java技术领域中的NIO这块技术为例来介绍,这个表如何填。

  1. 应用场景
    要明确技术的具体应用场景
    NIO这个技术,主要用于开发高性能的网络服务端应用,这样的网络应用,具有应对高并发请求的能力。

  2. 技术特性
    (1)它是从“缓冲区(Buffer)”而不是“流(Stream)”中读取数据。 (2)它采用I/O非阻塞的操作。
    优缺点:它使用Selecor多Channel的方式,让一个线程管理多个网络连接,从而避免了单线程单连接的编程方式在高并发请求环境下所带来的问题:Server端大量地创建线程,占用大量服务器资源
    在了解特定技术的技术特性时,往往会涉及许多的术语和概念,把这些术语和概念“打磨”清楚,并能用自己的话把它讲出来,是衡量你是否真弄明白了这个技术的“试金石”。

    没有真正地理解特定技术领域中的核心术语与相关概念,是很多人学技术学得稀里胡涂的原因所在。
    用自己话讲清楚,这才是学习的最终目的,学习到最后都能转化成自己语言才代表是真正学懂了

  3. 关联技术与知识网络
    途径: 通过阅读相关的书籍,在互联网上搜索相关的文章,不难绘出以下的技术关联图:

可以看到,NIO与经典Socket开发,以及两个流行的高性能网络开发框架Netty和Vert.x密切相关。
另外,掌握上述技术,必须具备计算机专业的两门核心课程《计算机网络》和《操作系统》中的部分知识,比如Socket编程就直接与操作系统的网络组件及进程和线程管理机制密切相关。
我们还可以进一步地明确这些技术之间关联关系到底是什么?
这里写图片描述
对着这个图,自己就说了:在需要高性能的场景,应该使用NIO取代传统的单线程Socket,如果想提高开发效率,避免被原生的Java NIO各种技术细节所困扰,可以使用更上一层封装的Netty或Vert.

  1. 使用方法与步骤
    掌握一个技术最快的模式,就是‘走’一个helloworld流程‘。也就是写程序从编程到部署的过程
    NIO由于是内置于JDK中的,直接可用,不够典型,下面就以其上层框架Netty为例进行介绍。
    在学习Netty初期要完成的Hello World流程大致是这样的:
    (1)打开你熟悉的IDE,Eclipse\Netbeans\IntelliJ等等,创建一个Maven项目
    (2)在pom.xml中添加相关依赖,导入Netty相关的jar包
    (3)照着书或网络上的例子,写一个最简单的Netty应用
    (4)将你的Netty应用打包,然后部署到Linux服务器上。
    将上面四步走完,你就基本上掌握了这个技术的使用方法。
    在具体学习某项技术时,其官网上通常都会有一个相应的HelloWorld教程,跟着做就是了。虽然官网教程大多是英文的,但国内有不少热爱学习的技术发烧友做了很无私的贡献,积极地将这些教程译为中文,直接读这些中文教程,你完成一个HelloWorld流程可能花不了一个小时。
    另外,国内也有很多热爱学习的人将他们探索新技术、走完HelloWorld流程的过程写成了博客,百度一下就能找到这些文章,这些文章通常都很接地气,不仅有详细的步骤和丰富的截图,而且可能会掉入的各种坑都告诉你了,跟着做,难度很低。

  2. 编程模型与核心开发场景的技术解决方案
    这一块是学习技术最花费时间的地方。只有完成了这块,你才能说真正掌握了这项技术。
    任何一项技术,都有其编程模型,对于面向对象的软件开发框架来说,最关键的就是它所包容的核心组件(或类型)。
    还是拿NIO来说事,NIO其实就是三大组件:
    这里写图片描述
    了解这三大组件的职责,掌握它们的用法,就是掌握NIO这个技术领域“最少的最必要”的知识与技能。
    先提溜出Channel与Buffer两个,学习相应资料,按照着自己的理解画一张图:

这里写图片描述
Selector的用法,总结成另一张图:这里写图片描述
将知识进行可视化,才能更好的掌握技术
(1)每个组件的职责是什么?
(2)这些组件之间是如何协作的
你就基本上把握了这个技术领域的最关键也最必要的知识。剩余的就是写Demo了,写一堆的小的Demo,每个Demo针对一个小的场景,测试一个特定的技术特性。小的Demo写了一堆之后,通常你就会比较熟悉这个技术了,这时,你再“来一个大招”,基于你所掌握的这个技术写一个能干点事的有用的规模比较大的项目,比如,用学会的NIO技术写一个网络文件服务器,你可以把这个项目放到GitHub上,求职时,直接给出GitHub上的链接,这可比你费心思去“包装”简历、伪造项目经验有效得多……
金旭亮老师指明了如何将厚书读薄再读厚,本人准备拿自己刚看到javaweb编程从入门到实践入手,践行金老师的方法,会将读书笔记贴至博客
本文所选内容均出自金旭亮老师的文章
链接:https://zhuanlan.zhihu.com/p/29543277
来源:知乎
著作权归作者所有。

猜你喜欢

转载自blog.csdn.net/wang_ze_ma/article/details/78158854