在开始这个系列文章之前,先聊一些题外话,说说我为什么要写Java NIO这个系列技术文章(不看完会错失一个亿的),因为Java NIO并不像JVM,中间件源码那么有吸引力,但这个技术点是java的基础,好多人开发者不注重基础的学习,而是喜欢做项目,get最新的技术点,其实我以前也是这样的,一味地做项目,总是了解最新的技术,把新技术运用到自己做的项目中,了解新技术本身是非常好的学习习惯,但是忽视了最基础的东西是值得反思的。

其实我很久以前就有写技术文章,写博客的打算,一直迟迟没有产出,一是因为自己比较懒,最重要的是我认为自己的技术还没有到了能够产出高质量文章的程度,如果写博客只是为了记录自己的学习轨迹,以便自己复习的话,我认为完全没有必要发博客,自己做些笔记保存到印象笔记就够了,因为你发了博客,别人就可以搜到你的博客,然而你写的博客没有什么深度,甚至还存在很多的问题,对他人的学习不但没有帮助,反而还会误导读者,这一点我就深有感触,我看过好多人写的博客,写的很乱,没有条理可言,而且好多都有问题的,看到这样的文章真的让人很难受。

还是要重申我的观点,仅代表我个人观点而已,写博客一定要认真,写完要多检查几遍,看看有没有错别字,知识有没有错误的地方,是否经过自己深入的思考。因为知识程度的差距,技术水平的有限,难免会有一些错误,书籍都有错误,何况我们个人的一些博客呢,但我们可以抱着对自己以及读者负责的态度,尽量减少自己的错误,在写一个技术博客的之前,一定要对技术点有充分的了解,研究到一定深度再写。

我在写博客的时候,一定是我已经阅读了不止一本同类书籍,看过官方文档,撸过代码,看过源码才写的,通过看书,对一个技术有了整体的了解,再通过阅读同一个技术不同作者写的书,思考不同作者的行文思路,你会对一个技术点有更为深入的理解,因为每个作者的技术背景可能不同,写书时肯定都有自己的侧重点,当然也有重叠的内容,就当复习学过的知识了,然后就是一定要结合官方文档,官方文档也是最好的最权威的学习资料了,好多作者写书也是参考官方文档的,甚至有的书就是把官方文档翻译过来的。还有就是一定要写代码,不止写一遍,反正我写一遍是记不住的,尤其是跟着视频学习,一边看视频一边敲代码的,一定要不看视频和书籍把代码自己再写一遍,我就是这么做的,效果也还可以。在这之前我都是先把自己学习时写的笔记保存在印象笔记的,要写就一定认真地写,不然真的没有多大意义。

那么我现在开始写博客了,是不是就意味着我的技术水平足以支撑我写出高质量有深度的博客文章了,不是的,我还在不断地学习中,我是一个渴望通过努力成为技术大牛的理想主义者,所以我一直在学习的过程中,还在不断地升级打怪的路上,只是我的学习重点发生了改变,由以前学习各种技术框架和做项目转变到现在的基础知识上来,这一切的转变都要从阿里的一次面试说起:

众所周知,大家都知道大厂在招人时是很注重基础的,并且对技术的要求不止是会用的层面,而我以前学习技术恰恰是停留在会用的层面的,学习的知识很广,别人说出来的技术基本都了解过,做过的项目也不少,但就是感觉自己的技术能力的提升不是很大,所以我的面试结果大家想必已经知道了,最后挂在了算法上,基础掌握不牢。经过这次面试,我总结了自己的不足,知道了自己与真正的大佬的差距有多大,于是有了学习的动力和更高的目标,以后再战阿里,人要有梦想,万一哪天实现了呢。

带着再战阿里的目标,于是我制定了更深入的学习计划,列出了要阅读的书籍,回归基础,深入学习io,并发等基础知识,要深入源码的研究,搞JVM,研读框架源码 (当然接下来也会有JVM,框架源码等专栏博客),在看书或是看教学视频的时候,一定需记笔记,整理思路,于是我开启了自己的博客之路。并且还开了自己的微信公众号,知乎专栏,头条号,就是要强迫自己更深入的学习,然后进行技术产出,理清思路,以便日后复习,并且要认真地写,分享自己的技术思考与学习过程。可能读者就要问了,你不是说担心写不出高质量的技术文章,怕误导读者吗?是的,以前不写博客就是出于这种考虑,但现在我没有了这种顾虑,现在我每个技术点都要读不止一本书,大量地写代码练习,研读源码,即使不能做到百分百没错,不能让所有读者满意,但是我也已经尽最大努力对自己负责,对读者负责,质量不高是因为能力有限,但最起码是用心在写。

之所以先从NIO开始,是因为我在深入学习NIO的时候,想看一些大牛写的博客,辅助自己学习这一块的知识,但是我找了个遍都没有找到满意的文章,要么就是只有几篇,简单介绍下NIO和BIO的区别,NIO的用法,没有深入API源码,很不系统(我个人认为不深入源码讲解原理都是在耍流氓,并且我这人有强迫症,知识一定要成体系,要系统化,针对一个独立的技术点的博客文章也一样),要么就是把国外大佬写好的博客直接翻译过来,不加入自己的思考与理解。并且关于NIO这块的技术书籍也少的可怜(不知道是不是大佬们都不屑于这样小的技术点)。

总之,学习起来比较费劲,可能有的小伙伴就要说了,网上那么多培训机构的教学视频,总有讲NIO的吧,况且看视频比看书和文章容易理解的多,还节省学习时间。是的,这点我不可否认,网上关于NIO的学习视频的确不少,看视频也容易理解,但是我认为好多的视频作为入门很合适,培训机构往往有教学时间的限制,大佬们平时又都有自己的工作要忙,所以几乎不可能在视频中带着你把所有的api都过一遍,更不用说深入研究了。要深入一项技术,看书和研读底层源码是最好不过的了,并且要不止一遍的看。接下来的NIO这个系列文章,我会把几乎每个api都过一遍,并且结合java8和java11的源码,java11有改动或新增的点我也会重点整理出来,还有就是尽量做到系统地分析一个技术点,不是浅尝辄止,如果那样就不能称之为系列文章了,当然了,每一个api的源码那么多,有的类上千行源码,我也不太可能把所有的源码都分析一遍,只能是分析一些我认为重要的代码。

好了不说太多了,接下来用代码说话,希望我的文章能给读者学习这块知识带去一些帮助,期望优秀的你和我一起学习,共同成长。

Java NIO系列之[说在前面的话]的更多相关文章

  1. java nio系列文章

    java nio系列教程 基于NIO的Client/Server程序实践 (推荐) java nio与并发编程相关电子书籍   (访问密码 48dd) 理解NIO nio学习记录 图解ByteBuff ...

  2. Java NIO系列1-概观

    Java NIO系列1-概观 Java NIO.中间的N你既可以理解为(new),也就是新的IO,相对于java1.5之前的IO它确实是新的;也可以理解为(no-blocking),也就是非阻塞的IO ...

  3. Java NIO系列教程(八)JDK AIO编程

    目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...

  4. Java NIO系列教程(七) selector原理 Epoll版的Selector

    目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...

  5. Java NIO系列教程(三) Channel之Socket通道

    目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> 在<Java NIO系列教程(二) Ch ...

  6. Java NIO系列教程(二) Channel通道介绍及FileChannel详解

    目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> Channel是一个通道,可以通过它读取和写入 ...

  7. Java NIO系列教程(十一) Java NIO 与 IO

    Java NIO系列教程(十一) Java NIO与IO 当学习了 Java NIO 和 IO 的 API 后,一个问题马上涌入脑海: 我应该何时使用 IO,何时使用 NIO 呢?在本文中,我会尽量清 ...

  8. Java NIO系列教程(十)DatagramChannel

    Java NIO系列教程(十)DatagramChannel 转载自并发编程网 – ifeve.com,本文链接地址: Java NIO系列教程(十) Java NIO DatagramChannel

  9. Java NIO系列教程(四) Scatter 和 Gather

    Java NIO系列教程(四) Scatter 和 Gather Java NIO 开始支持 scatter/gather,scatter/gather 用于描述从 Channel(译者注:Chann ...

  10. Java NIO系列教程(三-十二) Buffer

    原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...

随机推荐

  1. backtracing

    5月10日 1 37  Sudoku Slover public void solveSudoku(char[][] board) { if(board == null || board.length ...

  2. TIJ学习--RTTI(Runtime-Time Type Identification)

    TIJ学习--RTTI(Runtime-Time Type Identification) RTTI 运行时类型检查机制 获取一个类的Class引用的三种方法 class TestClass{} Te ...

  3. 【iOS】更换证书遇到的问题

    今天给一个项目换证书的时候遇到了这个问题: Code Sign error: Provisioning profile does not match bundle identifier: The pr ...

  4. Git/Github使用方法小记

    今天把人间网的桌面客户端renjian-deck正式开源了,之前对javascript的了解其实非常的不够的,所以这一次的代码写的也是乱七八糟重用性及其低下,虽然我无数次的想把代码重新整理一下,不过还 ...

  5. React进阶之路书籍笔记

    React进阶之路: "于复合类型的变量,变量名不指向数据,而是指向数据所在的地址.const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心 ...

  6. 两份简单的logstash配置

    input{http{port=>7474}} filter{ grok{ match =>{ #"message" => "%{COMBINEDAPA ...

  7. MyBatis 核心配置综述之 ResultSetHandler

    目录 ResultSetHandler 简介 ResultSetHandler 创建 ResultSetHandler 处理结果映射 DefaultResultSetHandler 源码解析 我们之前 ...

  8. 同时运行多个 tomcat 修改端口

    修改 tomcat 配置文件,路径: tomcat_home/conf/server.xml  1.HTTP端口,默认8080,如下改为8081 <Connector connectionTim ...

  9. extjs4 表单验证自定义

    extjs4 在验证上面支持的也特别好,他可以使用自带的格式验证,也可以自定义验证 比如:正则验证,密码重复填写对比验证,以及 调用后台方法验证,下面将验证方法统一写出以供参考 function lo ...

  10. 暴风雨中的 online :.net core 版博客站点遭遇的高并发问题进展

    今天暴风雨袭击了杭州,而昨天暴风雨(高并发问题)席卷了园子,留下一片狼藉. 在前天傍晚,我们进行了 .net core 版博客站点的第二次发布尝试,在发布后通过 kestrel 直接监听取代 ngin ...