在开始这个系列文章之前,先聊一些题外话,说说我为什么要写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. 將Python打包成 exe可执行文件

    利用Python寫了一個小腳本想要傳給使用Windows但沒有裝Python的朋友執行,這時候就可以利用將檔案包裝成exe檔案,讓沒有Python的朋友也可以執行.本篇將介紹利用套件「PyInstal ...

  2. Codeforces Round #554 (Div. 2) C. Neko does Maths (数论 GCD(a,b) = GCD(a,b-a))

    传送门 •题意 给出两个正整数 a,b: 求解 k ,使得 LCM(a+k,b+k) 最小,如果有多个 k 使得 LCM() 最小,输出最小的k: •思路 时隔很久,又重新做这个题 温故果然可以知新❤ ...

  3. +CIMG+彩色图片边缘提取实验记录_canny/hough transfrom

    前言: 书到用时方恨少 正文: 边缘提取技术一直都有接触,最通用的莫过于拉普拉斯,sobel几个算子,两个算子都可通过简单的模板运算进行,而现在比较好的一个边缘提取技术是canny,文章中我是用的ca ...

  4. python交互界面无法使用方向键

    问题 python交互界面无法使用方向键,按方向键全变成^[[^C这类型的字符 解决办法 办法1: 使用yum安装readline.readline-devel,然后重装python 这种方法太麻烦了 ...

  5. 并发编程之Java内存模型

    在介绍Java内存模型之前,先来了解一下为什么要有内存模型,以及内存模型是什么.然后我们基于对内存模型的了解,学习Java内存模型以及并发编程的三大特性. 为什么要有内存模型 在计算机中,所有的运算操 ...

  6. 【iOS】“找不到使用指定主机名的服务器”

    今天用 Application Loader 提交 APP 的时,遇到了这个奇葩的问题,如下图: 后来换个网络解决了……我也不知道什么原因,就这么奇葩的弄好了……

  7. .net持续集成测试篇之Nunit常见断言

    系列目录 Nunit测试基础之简单断言 在开始本篇之前需要补充一些内容,通过前面搭建Nunit测试环境我们知道要使一个方法成为单元测试方法首先要在此方法所在类加上TestFixture注解,并且在该方 ...

  8. python利用select实现的Socket Server

    # 利用python的select模块实现简单的Socket Sever #实现多用户访问,再次基础上可以实现FTP Server应用程序 # 发布目的,在于解决了客户端强行终止时,服务器端也跟着程序 ...

  9. 关于STM32GPIO按键上下拉配置的认识

    说真的,后知后觉这个问题还是有点值得研究的,一开始学习我用的板子在按键模块电路中GPIO输入脚是有外部上下拉电阻的,如下图所示:当KEY1接V3.3,在其后为它接一个下拉电阻,可以保证按下按键输入高电 ...

  10. 非UI线程更新界面

    package com.caterSys.Thread; import java.text.SimpleDateFormat; import java.util.Date; import org.ec ...