0 | Netty:简略梳理IO模型
这是一篇对IO模式知识点的简要笔记,后续会根据知识的积累与理解继续做更新。几种常见的IO名称最早接触的是BIO,在Java的网络编程中,有一个ServerSocket,会调用accept()方法,监听某个端口,直到有新的连接进来,代码才会继续往后执行;再到后面是NIO,一说是New IO,又说是No
这是一篇对IO模式知识点的简要笔记,后续会根据知识的积累与理解继续做更新。几种常见的IO名称最早接触的是BIO,在Java的网络编程中,有一个ServerSocket,会调用accept()方法,监听某个端口,直到有新的连接进来,代码才会继续往后执行;再到后面是NIO,一说是New IO,又说是No
TCP是个流协议,流是一串没有界限的数据。TCP会根据TCP缓冲区的实际情况对包进行划分。因此造成一个完整的业务包,会被TCP分成多个包、把多个包封装成一个大的包进行发送。 粘包与拆包现象 服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包; 服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP粘包; 服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容,第二次读取到了D2包的剩余内容,这被称为TCP拆包; 服务端分两次读取到了两个数据包,第一次读取到了D1包的部分内容D1_1,第二次读取到了D1包的剩余内容D1_2和D2包的整包。 产生原因 应用程序write写入的字节大小/大于套接口发送缓冲区大小; 进行MSS大小的TCP分段; 以太网帧的payload大于MTU进行IP分片。 对于Linux,发送缓冲区的默认值为:16384。可使用下面命令查看: # 接收 cat /proc/sys/net/ipv4/tcp_rmem # min default max # 4096 87380 6291456
每一种设计模式都可以用UML类图来表示,能看懂UML类图,就能够对该设计模式有宏观上的认知和理解。单个类里面的简单格式以长方形表示类,长方形内部被分成3个区域,分别表示类名、属性名、方法名。格式含义斜体抽象类、抽象方法下
什么是Servlet对一个HTTP请求的正常的处理流程是:发送HTTP请求服务端的HTTP服务器收到请求调用业务逻辑返回HTTP响应产生了下面3个问题:HTTP 服务器怎么知道要调用哪个业务逻辑,也就是 Java 类的哪个方法呢?HTTP服务器可以被设计成收到请求后,接续寻找该请求的处理逻辑,但是这
@PathVariable与@RequestParm在spring mvc中,有@requestparm, @requestbody和@pathvariable 三种注解来获得浏览器端的参数,其中@requestparm是取自url中“?”之后的a=b&c=d,@requestbody 来自
TCP提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接。因此TCP是一种可靠的的运输服务,但是正因为这样,不可避免的增加了许多的开销,比如确认,流量控制等。字段含义序号seq,占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。例如,一段报文的序号字段值是 301
备份 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据 mysqldump -h localhost -uroot -p123456 database > dump.sql 导出单个数据表结构和数据 mysqldump -h localhost -uroot -p123456 database table > dump.sql 导出整个数据库结构(不包含数据) mysqldump -h localhost -uroot -p123456 -d database > dump.sql 导出单个数据表结构(不包含数据) mysqldump -h localhost -uroot -p123456
安装及配置docker(基于Ubuntu)sasurai@ubuntu:~$ sudo apt install docker.iosasurai@ubuntu:~$ docker versionClient: Version: 19.03.2 API version:
源码基于的Oracle JDK版本为:11.0.5什么是CLH队列简单理解是一个双向链表,链表中存放的是包含线程在内的信息,队首的是正在执行的线程,后面的是等待执行的线程,如下图所示:Node概述The wait queue is a variant of a "CLH" (Cr
N皇后问题 * N-Queens * N-Queens II import java.util.ArrayList; import java.util.List; /* * @lc app=leetcode id=51 lang=java * * [51] N-Queens */ public class Solution { List<List<String>> result = new ArrayList<>(); private static int total = 0; public List<List<String>> solveNQueens(
起始每次打开Spring Boot的应用的main方法时,都会出现下面如下所示Spring的Logo。之前没有注意过这个Logo的配置,直到看到一个Spring Cloud的开源示例项目时,看到了一个配置如下:有一个问题:为什么放在classpath下且名字为banner.txt就能够配置成功?源码
大概一年多前,用过Netty做局域网内自动组网,但是当时的主要代码不是我写的,并且时间过了很久,忘得差不多了,然而发现Netty确实是一个很有意思的框架,值得去深入研究、学习。本文的例子,之前也看过、写过,在各种介绍Netty的书籍中都有看到,并且Netty的官方文档也有这样的例子。 EchoServer Netty官方Echo例子,其实在源码中也有该例子。 EchoServer import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.