
java基础进阶
文章平均质量分 88
码炫课堂-码哥
一名有10余年经验的互联网老兵,历经从传统软件公司到大型互联网公司的洗礼,早年在中兴通讯等大型通信公司担任项目leader,后随着互联网的崛起,先后在前美团支付等大型互联网公司担任架构师。对互联网架构底层技术有相当的研究和独特的见解,在多个领域有着丰富的实战经验。
展开
-
深入分析 Java IO (八)IO模型详解
blocking和non-blocking的区别调用blocking IO会一直block住对应的进程直到操作完成,而non-blocking IO在kernel还准备数据的情况下会立刻返回。synchronous IO和asynchronous IO的区别在说明synchronous IO和asynchronous IO的区别之前,需要先给出两者的定义。两者的区别就在于synchronous IO做”IO operation”的时候会将process阻塞。按照这个定义,之前所述的。原创 2024-12-17 08:15:22 · 1085 阅读 · 0 评论 -
深入分析 Java IO (七)IO模型一基础知识
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-17 08:14:16 · 556 阅读 · 0 评论 -
深入分析 Java IO (六)Netty高级知识
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-17 08:12:46 · 1027 阅读 · 0 评论 -
深入分析 Java IO (五)Netty基础简介
Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。但实际上呢,Netty框架并不只是封装了多路复用的IO模型,也包括提供了传统的阻塞式/非阻塞式 同步IO的模型封装。Netty提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。原创 2024-12-17 08:11:12 · 610 阅读 · 0 评论 -
深入分析 Java IO (四)AIO
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-16 19:16:34 · 685 阅读 · 0 评论 -
深入分析 Java IO (三)NIO
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-16 19:15:41 · 594 阅读 · 0 评论 -
深入分析 Java IO (二)BIO
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-16 18:32:44 · 610 阅读 · 0 评论 -
深入分析 Java IO (一)概述
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-16 18:31:45 · 838 阅读 · 0 评论 -
NIO之零拷贝
所谓的【零拷贝】,并不是真正无拷贝,而是在不会拷贝重复数据到 jvm 内存中,零拷贝的优点有更少的用户态与内核态的切换不利用 cpu 计算,减少 cpu 缓存伪共享零拷贝适合小文件传输。原创 2024-12-16 07:39:06 · 641 阅读 · 0 评论 -
NIO之IO模型
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-16 07:38:23 · 960 阅读 · 0 评论 -
NIO之多线程优化
之前说到的服务端程序都是在一个线程上进行的,这个线程不仅负责连接客户端发来的请求,同时还要处理读写事件,这样效率还是不够高。如今电脑都是多核处理器,这意味着可以同时进行多个线程,所以服务端应该充分利用这一点。单线程配一个选择器(Boss),专门处理 accept 事件创建 cpu 核心数的线程(Worker),每个线程配一个选择器,轮流处理 read 事件关系图说明Boss线程只负责Accept事件,Worker线程负责客户端与服务端之间的读写问题,他们都各自维护一个Selector负责监听通道的事件。原创 2024-12-16 07:37:41 · 919 阅读 · 0 评论 -
NIO Selector之处理write事件
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-16 07:36:41 · 158 阅读 · 0 评论 -
NIO消息边界问题处理
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-16 07:35:49 · 1026 阅读 · 0 评论 -
Selector处理accept和read事件
多路复用单线程可以配合 Selector 完成对多个 Channel 可读写事件的监控,这称之为多路复用多路复用仅针对网络 IO、普通文件 IO 没法利用多路复用如果不用 Selector 的非阻塞模式,线程大部分时间都在做无用功,而 Selector 能够保证有可连接事件时才去连接有可读事件才去读取有可写事件才去写入限于网络传输能力,Channel 未必时时可写,一旦 Channel 可写,会触发 Selector 的可写事件。原创 2024-12-16 07:34:25 · 935 阅读 · 0 评论 -
NIO之选择器(Selector)
Selector一般称为选择器,也可以翻译为多路复用器,是Java NIO核心组件之一,主要功能是用于检查一个或者多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个Channel(通道),当然也可以管理多个网络连接。使用Selector的好处在于,可以使用更少的线程来处理更多的通道,相比使用更多的线程,避免了线程上下文切换带来的开销等。原创 2024-12-16 07:32:54 · 1085 阅读 · 0 评论 -
NIO之Files Demo
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-15 20:17:52 · 124 阅读 · 0 评论 -
NIO之Files介绍
Files是Java1.7 在nio中新增的专门用于处理文件和目录的工具类。Files和Path配合可以很方便的完成对文件/目录的创建、读取、修改、删除等操作。描述:方法检查一个路径是否存在于当前的文件系统中。参数Path :传入的文件路径。必须exits()方法的选项数组。如代表不允许跟随文件系统中的符号链接来确定路径是否存在。非必须。原创 2024-12-15 20:16:41 · 872 阅读 · 0 评论 -
NIO之Path介绍
Path接口是java NIO2的一部分。首次在java 7中引入。Path接口在包下,所以全称是。java中的Path表示文件系统的路径。可以指向文件或文件夹。Path同时也有相对路径和绝对路径之分:绝对路径:表示从文件系统的根路径到文件或是文件夹的路径。相对路径:表示从特定路径下访问指定文件或文件夹的路径。如果使用java.nio.file.Path实例,必须先创建它。通过静态工厂方法创建。/***///创建Path实例。原创 2024-12-15 20:14:51 · 330 阅读 · 0 评论 -
NIO之FileChannel练习
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等。作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题。联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。FileChannel Demo 改变子缓冲区内容。超过 2g 大小的文件传输。原创 2024-12-15 20:14:01 · 103 阅读 · 0 评论 -
NIO之FileChannel介绍
FileChannel 可以通过的对象中的方法来获取,也可以通过静态方法来打开。FileChannel.open()的方式通过静态静态方法 FileChannel.open() 打开的通道可以指定打开模式,模式通过 StandardOpenOption 枚举类型指定。示例Paths.get("data","test","c.txt"), // 路径:data/test/c.txtpath获取:将传入的参数根据顺序进行统一拼接成为一个完整文件路径;:传入一个路径参数;原创 2024-12-15 20:12:56 · 1006 阅读 · 0 评论 -
NIO之FileChannel介绍
FileChannel 可以通过的对象中的方法来获取,也可以通过静态方法来打开。FileChannel.open()的方式通过静态静态方法 FileChannel.open() 打开的通道可以指定打开模式,模式通过 StandardOpenOption 枚举类型指定。示例Paths.get("data","test","c.txt"), // 路径:data/test/c.txtpath获取:将传入的参数根据顺序进行统一拼接成为一个完整文件路径;:传入一个路径参数;原创 2024-12-15 09:50:04 · 796 阅读 · 0 评论 -
NIO之bytebuffer黏包和半包
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-15 09:48:48 · 494 阅读 · 0 评论 -
NIO之bytebuffer常见方法演示
*** @Description:调试工具类*/static {i < 256;for (i = 0;i++) {} else {/*** 打印所有内容*//*** 打印可读取内容*/原创 2024-12-15 09:47:41 · 531 阅读 · 0 评论 -
NIO之bytebuffer内部结构和方法
Bytebuffer有以下重要属性:capacity(容量):缓冲区的容量。通过构造函数赋予,一旦设置,无法更改。position(指针):读写指针,记录数据读写的位置,缓冲区的位置不能为负,并且不能大于limit。limit(读写限制):缓冲区的界限。位于limit 后的数据不可读写。缓冲区的限制不能为负,并且不能大于其容量。原创 2024-12-15 09:46:35 · 689 阅读 · 0 评论 -
NIO之bytebuffer基本使用
本篇将通过nio读取一个文本文件来演示bytebuffer的基本使用。原创 2024-12-15 09:45:47 · 227 阅读 · 0 评论 -
NIO简单介绍
一种叫非阻塞IO(Non-blocking I/O)另一种叫新的IO(New I/O)其实两种概念也是相同的。Java NIO是从Java1.4版本开始引入的一个新的IO API,可以代替标准的IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的,基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。NIO有三大核心部分Channel(通道)Buffer(缓冲区)Selector(选择器)原创 2024-12-15 09:44:49 · 968 阅读 · 0 评论 -
Java基础系列-Comparable和Comparator
Java中的排序是由Comparable和Comparator这两个接口来提供的。Comparable表示可被排序的,实现该接口的类的对象自动拥有排序功能。Comparator则表示一个比较器,实现了该接口的的类的对象是一个针对目标类的对象定义的比较器,一般情况,这个比较器将作为一个参数进行传递。Comparable为可排序的,实现该接口的类的对象自动拥有可排序功能。Comparator为比较器,实现该接口可以定义一个针对某个类的排序方式。原创 2024-12-14 19:49:52 · 507 阅读 · 0 评论 -
Java基础系列-equals方法和hashCode方法
equals方法和hashCode方法都是有Object类定义的。任何的类都是Object类的子类,所以它们默认都拥有这两个方法。equals方法用于定义两个对象的比较方式,而hashCode方法是native方法,主要用户计算对象的hash值。原创 2024-12-14 19:46:03 · 602 阅读 · 0 评论 -
Java基础系列-二进制操作
Java源码中涉及到大量的二进制操作,非常的复杂,但非常的快速。原创 2024-12-14 19:45:19 · 385 阅读 · 0 评论 -
Java基础系列-final、finally关键字
final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。finally关键字不同于final关键字,这是一个需要与异常体系结构配合使用的关键字,旨在定义必须要进行操作,一般用于在发生异常的时候进行一些收尾操作,比如释放资源等。另外还有个finalized,它是一个方法,它需要与垃圾收集体系配合使用。原创 2024-12-14 19:44:17 · 932 阅读 · 0 评论 -
Java基础系列-static关键字
static关键字是Java诸多关键字中较常使用的一个,从其本意可得其意:静态,何为静态呢?静,即不动,静止,固定不变之意(其实可以理解为存储位置不变)。Java中的静是相对于“动”而言的,所谓的动就是可变化的内容。当然这里指的是针对类而言的,静态内容指的是在类被JVM加载的时候就确定的内容,这部分内容只会被分配一次内存,即在内存中保留一份存储,动态内容则不同,它们是随类的对象创建而动的,每当创建一个对象的时候就会对这些内容分配一份内存,即每个对象都有自己独有的内存存储空间(其中保存着那些动态的内容)原创 2024-12-14 19:43:33 · 897 阅读 · 0 评论 -
Java基础系列-序列化与反序列化
在项目中有很多情况需要对实例对象进行序列化与反序列化,这样可以持久的保存对象的状态,甚至在各个组件之间进行对象传递和远程调用。序列化机制是项目中必不可少的常用机制。要想一个类拥有序列化、反序列化功能,最简单的方法就是实现java.io.Serializable接口,这个接口是一个标记接口(marker Interface),即其内部无任何字段与方法定义。原创 2024-12-14 19:42:52 · 956 阅读 · 0 评论 -
Java基础系列-浅拷贝和深拷贝
Java中的拷贝功能是由Object类的clone方法定义的。//...//...这是一个可被重写的本地方法。这个方法是与Cloneable接口相关联的,如果针对一个没有实现Cloneable接口的方法执行器clone方法,会抛出CloneNotSupportedException异常。原创 2024-12-14 19:40:38 · 868 阅读 · 0 评论 -
Java基础系列-Optional
Optional的引入是为了解决null的问题,那么到底是解决null的什么问题呢?我们知道当我们针对null调用方法的之后,就会抛出空指针异常,Optional就是为了解决这个问题而来的。Optional通过封装目标对象的方式来表示,当我们使用的时候,Optional是必然存在的,因为如果结果为null,会返回一个固定的EMPTY实例,这样就不会存在null引用的问题了。那该如何来使用Optional呢?原创 2024-12-14 09:22:34 · 599 阅读 · 0 评论 -
Java基础系列-Stream
Stream操作简称流操作,这里的流与IO流毫无关系,这里的流指的是流式操作,就是流水线操作。Stream流操作主要包包括三大模块:创建流操作、中间流操作、终结流操作。其中创建流主要是创建Stream对象。每个Stream对象只能使用一次终结操作。中间流操作指的是各种中间流操作方法,比如去重、过滤、排序等终结流操作指的结果操作,终结操作的目的是产生最终结果。流式操作代码描述性强,易理解,而且功能强大,可以简化很多集合操作。在我们需要对集合数据进行处理的时候,不妨试试使用流式操作来实现。原创 2024-12-14 09:21:04 · 635 阅读 · 0 评论 -
Java基础系列-Collector和Collectors
Collector是专门用来作为Stream的collect方法的参数的。而Collectors是作为生产具体Collector的工具类。整个Collectors工具类就是在为Collector服务,用于创建各种不同的Collector。部分功能与Stream中的方法重合了,为了简化代码,完全不必采用Collectors实现,优先Stream方法。原创 2024-12-14 09:19:40 · 769 阅读 · 0 评论 -
Java基础系列-Lambda
JDK1.8引入了函数式编程,重点包括函数式接口、lambda表达式、方法引用等。所谓函数式编程就是将函数(一段操作)作为一个基本单位进行传递。以前的Java中参数只能是具体的变量,函数式编程打破这一规范,可以将整个方法作为一个参数传递。Java毕竟是面向对象的编程语言,你要传递的东西,必须是一个类或接口的对象或者一个基本类型变量,所以Java就定义了函数式接口,用来承载传递的函数。JDK 1.8为我们预定义了许多函数式接口,它们位于java.util.function包中。序号接口名抽象方法。原创 2024-12-14 09:18:22 · 773 阅读 · 0 评论 -
Java基础系列-静态代理和动态代理
第一步:创建接口,JDK动态代理基于接口实现,所以接口必不可少(准备工作)第二步:实现InvocationHandler接口,重写invoke方法(准备工作)第三步:调用Proxy的静态方法newProxyInstance方法生成代理实例(生成实例时需要提供类加载器,我们可以使用接口类的加载器即可)第四步:使用新生成的代理实例调用某个方法实现功能。我们的动态代理实现过程中根本没有涉及到真实类实例。5、Cglib动态代理的实现。原创 2024-12-14 09:17:18 · 1007 阅读 · 0 评论 -
Java基础系列-instanceof关键字
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等。instanceof关键字是在Java类中实现equals方法最常使用的关键字,表示其左边的对象是否是右边类型的实例,这里右边的类型可以扩展到继承、实现结构中,可以是其真实类型,或者真实类型的超类型、超接口类型等。原创 2024-12-14 09:16:11 · 391 阅读 · 0 评论 -
Java基础系列-Lombok常用注解
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-12-13 15:29:22 · 636 阅读 · 0 评论