客户端 1 public static void main(String[] args) throws IOException { 2 3 4 5 // 创建客户端 6 7 SocketChannel sc = SocketChannel.open(); 8 9 10 11 // 指定要连接的服务器ip和端口 12 13 sc.connect(new InetSocketAddress("127.0.0.1
开发出高质量的 NIO 程序并不是一件简单的事情。 除去 NIO 固有的复杂性和 Bug 不谈,作为一个 NIO 服务端,需要能够处理网络的闪断、客户端的重复接入、客户端的安全认证、消息的编解码、半包读写等情况, 如果你没有足够的 NIO 编程经验积累, 一个 NIO 框架的稳定往往需要半年甚至更
1. 选择键 Channel 和 Selector的关系确定好后,并且一旦通道处于某种就绪状态,就可以被选择器查询到。 这个工作,使用选择器Selector的select() 方法完成。 select方法的作用,对感兴趣的通道操作,进行就绪状态的查询。 Selector可以不断地查询
JAVA IOJAVA NIO JAVA IO 阻塞 IO 模型 最传统的一种 IO 模型,即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出CPU。当数据就绪之后,内核会将数据拷贝到用
1. 多路复用的概念 一个选择器,可以同时监听多个服务器端口,帮多个服务器端口同时等待客户端的访问 2. Selector和Channel的关系 Channel和Buffer比较好理解,联系也比较密切,他们的关系简单来说就是: 数据总是从通道中读到buffer缓冲区内,或者从buffer
一个完备的语言可以自成体系,并不需要与外部文件打交道,不过这种说法只是理论上的,实际上任何一个语言都需要与外部文件进行数据交换。一个不能与外部进行任何交换的系统似乎用处不大,一个封闭的单细胞怕是生存不下来,广言之,“闭关锁国”真是要不得啊。 Java一生下来就有了对I/O的支
使用FileChannel完成文件的复制 1 import java.io.FileInputStream; 2 3 import java.io.FileNotFoundException; 4 5 import java.io.FileOutputStream; 6 7 import java.io.IOException; 8 9 import java.nio.ByteBuffer; 10 11 import java.nio.channe
## 一、网络编程基础回顾### 1\. Socket`Socket`本身有“插座”的意思,不是Java中特有的概念,而是一个语言无关的标准,任何可以实现网络编程的编程语言都有`Socket`。在`Linux`环境下,用于表示进程间网络通信的特殊文件类型,其本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当
## 一、网络编程基础回顾### 1\. Socket`Socket`本身有“插座”的意思,不是Java中特有的概念,而是一个语言无关的标准,任何可以实现网络编程的编程语言都有`Socket`。在`Linux`环境下,用于表示进程间网络通信的特殊文件类型,其本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当
### 正文如果你**参加过一些大厂面试**,肯定会遇到一些开放性的问题:> 1、 写一段程序,让其运行时的表现为触发了5次Young GC、3次Full GC、然后3次Young GC;>> 2、 如果一个Java进程突然消失了,你会怎么去排查这种问题?>> 3、 给了一段Spring加载Bean的代码片段,阐述一下具体的执行流程?
## 一、网络编程基础回顾### 1\. Socket`Socket`本身有“插座”的意思,不是Java中特有的概念,而是一个语言无关的标准,任何可以实现网络编程的编程语言都有`Socket`。在`Linux`环境下,用于表示进程间网络通信的特殊文件类型,其本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当
## 一、网络编程基础回顾### 1\. Socket`Socket`本身有“插座”的意思,不是Java中特有的概念,而是一个语言无关的标准,任何可以实现网络编程的编程语言都有`Socket`。在`Linux`环境下,用于表示进程间网络通信的特殊文件类型,其本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当
作为一个 java 中年兵,每每遇到面试要准备的时候,都绕不开 BIO、NIO 这个话题。 最近又打开了一篇 NIO 文章,刚阅读前面部分的时候,突然想通了一些问题。想阅读原文的朋友可以vx文章里搜一下“NIO 概览”这个标题,是收集于 JavaGuide 公众号的一篇文章。 其在最开始提到: NIO中的N可以
直接内存 Direct Memory 不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。 直接内存是在Java堆外的、直接向系统申请的内存区间。 来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存 通常,访问直接内存的速度会优于Java堆。即读写性能高。 因此出
## Java NIO 基本介绍* Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的* NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。* NI
1. 常用方法 拿到一个缓冲区,我们往往会做什么? 很简单,就是读取缓冲区的数据 / 写数据到缓冲区中 所以,缓冲区的核心方法是: put(byte b):给数组添加元素 get():获取一个元素 import java.nio.ByteBuffer; import j
0. IO回顾 <1> IO:Input Output ( 输入 输出 ) <2> IO技术的应用:解决设备和设备之间的数据传输问题 <3> IO应用场景:图片上传、下载、打印机打印信息表、解析XML... 1. 概念 <1> 即 Java New IO <2> 是一个全新的
BIO的网络通信原理 BIO的特点就是每次一个客户端接入,都要在服务端创建一个线程来服务于这个客户端,所以如果有很多个客户端,就会对应成千上万个服务端线程,这会导致服务端负载过高,甚至卡死。 NIO的网络通信原理 1.一个客户端会对应一个channel,然后多路复用器selector会轮询channel
Java NIO 基本介绍 Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。NIO 有三大
常见的分布式事务场景 分布式事务其实就在我们身边,你一直在用,但是你却一直不注意它。 转账 扣你账户的余额,增加别人账户余额,如果只扣了你的,别人没增加这是失败;如果没扣你的钱别人也增加了那银行的赔钱。 下订单/扣库存 电商系统中这是很常见的一个场景,用户下单成功了,店家没收
一、业务场景介绍 先来给大家说一个业务场景,假设咱们现在开发一个电商网站,要实现支付订单的功能,流程如下: 创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为“已支付” 扣减相应的商品库存 通知仓储中心,进行发货 给用户的这次购物增加相应的积分 针对上述
一、网络编程基础回顾 1. Socket Socket本身有“插座”的意思,不是Java中特有的概念,而是一个语言无关的标准,任何可以实现网络编程的编程语言都有Socket。在Linux环境下,用于表示进程间网络通信的特殊文件类型,其本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们
NIO概述 什么是NIO Java NIO (New IO,Non-Blocking 10)是从Java 1.4版本开始引入的一-套新的IO API,可以替代标准的Java I0 API。Nlo与原来的I0有同样的作用和目的,但是使用的方式完全不同,NIO 支持而向缓冲区的(IO是而向流的)、基于通道的IO操作。NIO将以更加高效的方式进行文件的读
简介 BIO Blocking IO 阻塞IO 简单来说, 就是服务器对每一个接收数据请求, 开启一个线程进行对于数据和逻辑的处理, 但是能创建的线程数量有限. 很多处理逻辑开启的线程处于阻塞状态. NIO Non-blocking IO 非阻塞 IO 简单来说, 服务器对于每一个接受数据的请求, 就是多路复用器,可
前言 本文涵盖了阿里巴巴、腾讯、字节跳动、京东、华为等大厂的Java面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研究大厂的面试题。 与此同时,今年算法面试一定是会被问的,而算法不