自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 红黑树笔记

手搓红黑树

2022-10-04 18:13:31 212 1

原创 关于MyBatis在IDEA中进行工具类封装的空指针异常

关于MyBatis在IDEA中进行工具类封装的空指针异常请赐给我一双火眼金睛操作mybatis对象出Bug了。经过一系列排查,发现工具类写错了(给自己一个大耳刮子)请赐给我一双火眼金睛看视频学编程最大的痛苦莫过于——跟着视频一步一步走,他运行成功了,而你出了一堆Bug…操作mybatis对象回忆一下创建一个简单的mybatis工程进行数据库增删改查操作的基本步骤:新建数据库和数据表加入maven的mybatis坐标、mysql驱动坐标创建实体类,保存表中的一行数据(定义每一列的属性、set和

2021-04-04 15:34:27 506 2

原创 Netty学习笔记_15(TCP粘包和拆包)

1、TCP粘包与拆包TCP面向连接,面向流,提供高可靠性服务。在消息收发过程中,需要在发送端和接收端建立成对的Socket,发送端不会一有数据就进行发送,而是将多次间隔较小的,数据量较小的数据合并成一定长度的数据包整体发送。这样可以提高效率,但会给接收方分辨单个数据消息增加难度,因为面向流的通信是没有消息保护边界的。 TCP粘包与拆包,是指发送端在发送多个数据消息时出现的不同情形。由于数据在发送前需要先转换为二进制字节码,当多个数据消息的字节码被合并成一个数据包发送时,称为粘包;当某个数据消息的字节码

2020-08-17 15:37:51 181

原创 Netty学习笔记_14(Netty编解码器和handler调用机制)

1、Netty的主要组件有:Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipeline等。ChannelHandler充当了处理入站和出站数据的应用程序逻辑的容器。例如:实现ChannelInboundHandler接口(或ChannelInboundHandlerAdapter),可以接收入站事件和数据,这些数据将被业务逻辑处理;当给客户端回送响应时,也可以通过ChannelInboundHandler冲刷数据。业务逻辑通常写在一个或多

2020-08-14 16:34:42 777

原创 Netty学习笔记_13(ProtoBuf在Netty中的简单应用)

1、Netty编解码器​数据在网络中是以二进制字节码的形式流动,而我们在端接收或发送的数据形式则各种各样(文本、图片、音视频等),因此需要在发送端对数据进行编码,在接收端对收到的数据解码; codeC(编解码器)的组成部分——Encoder(编码器)负责将业务数据转换为二进制字节码;Decoder(解码器)负责将二进制字节码转换为业务数据; Netty编码机制——StringEncoder / StringDecoder负责字符串数据对象的编解码;ObjectEncoder / Objec.

2020-08-09 17:49:50 302

原创 Netty学习笔记_12(WebSocket与长连接)

Http短连接和长连接Http短连接即TCP短连接,即客户端和服务器通过“三次握手”建立连接后,进行一次Http操作以后,便断开连接。因此,浏览器每打开一个web资源,便创建了一个新的http会话; Http长连接即TCP长连接,即客户端和服务器建立连接后保持一定的时间,即使用户在进行某次操作后将浏览器(或客户端)关闭,但只要在保持时间内又一次访问该服务器,则默认使用已经创建好的连接; Http1.0默认支持短连接,Http1.1默认支持长连接。Http连接无状态Http协议无状态是指协议对于

2020-08-07 20:02:44 684

原创 Netty学习笔记_11(Netty群聊系统)

一、Netty群聊系统开发要求编写一个Netty群聊系统,实现服务器端和客户端之间的数据简单通信(非阻塞) 实现多人群聊 服务器端:检测用户上线、离线、转发客户端消息 客户端:通过channel可以无阻塞发送消息给其他客户,同时可以接收其他客户端发送的消息(服务器转发得到)二、设计与开发2-1、服务器端首先要设置监听端口,服务器将通过该端口与客户端交换信息,发送和接收数据; 初始化事件循环组EventLoopGroup,这里初始化两个事件循环组bossGroup和workerGroup

2020-08-05 00:09:05 306

原创 Netty学习笔记_10(Netty核心模块组件)

1、BootStrap,ServerBootStrap一个Netty应用通常由一个BootStrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中的BootStrap类是客户端程序的启动引导类,ServerBootStrap是服务端启动引导类 常见方法: public ServerBootstrapgroup (EventLoopGroup parentGroup, EventLoopGroup childGroup) 作用于服..

2020-07-28 22:13:01 345

原创 Netty学习笔记_9(Netty概述)

一、原生NIO存在的问题NIO的类库与API繁杂,需要熟练掌握Selector、ServerSocketChannel、SocketChannel、Bytebuffer等 要求熟悉Java多线程编程和网络编程 开发工作量和难度大,例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等 JDK NIO的BUG:例如Epoll Bug,它会导致Selector空轮询,最终导致CPU占用100%,到JDK1.7还未被有效解决二、Netty说明Netty是由JBOS.

2020-07-25 10:48:37 173

原创 Netty学习笔记_8(NIO与零拷贝)

1、零拷贝基本介绍传统IO是基于数据拷贝操作的,即让数据在操作系统内核地址空间的缓冲区和用户程序地址空间定义的缓冲区进行传输【PS:减少了磁盘IO,但增加了CPU开销( CPU会进行多次冗余拷贝,且在数据拷贝过程中有极大的系统资源浪费 )】 零拷贝是一种避免CPU将数据从一个存储块拷贝到另一块存储的技术【避免数据拷贝+多种操作结合】(所谓“零拷贝”,是没有CPU拷贝)1.2、传统IO(本地文件数据上传)【4次拷贝,3次切换】应用程序调用read()方法,先将数据从磁盘读取到OS内核缓冲区,采用D

2020-07-21 16:57:37 228

原创 Netty学习笔记_7(Selector的基本使用及NIO小案例)

1、Selector(选择器)1.1、基本介绍Java的NIO使用了非阻塞的io方式->一个线程处理若干个客户端连接,使用到了selector(选择器)。 Selector能够检测到多个注册通道上是否有事件发生(多个Channel以事件的形式注册到同一个selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。 只有在连接/通道真正有读写事件发生时,才会进行读写,减少了系统开销,并且不必为每个连接都创建一个线程,不用去维护多个线程。 避免了多线程之间上下文切换导致的开

2020-07-09 10:39:44 510

原创 Netty学习笔记_6(Channel的基本使用)

1、基本介绍1、NIO通道类似于Java的输入输出流,有所区别: 通道可以同时进行读写,流只能读或写; 通道可以实现异步读写数据; 通道可以从缓冲区读数据,也可以写数据到缓冲区。2、BIO中stream是单向的,例如FileInputStream对象只能进行读取数据的操作,而NIO的 通道(Channel)是双向的可以读操作,也可以写操作。3、Channnel在NIO中是一个接口:public interface Channel extends Clos...

2020-06-23 10:21:31 19091

原创 Netty学习笔记_5 (Buffer的基本使用)

基本介绍:本质——可以读写数据的内存块【一个容器对象(含数组)】;一组方法——可以轻松使用内存块;一些机制——跟踪或记录缓冲区的状态变化情况。Buffer类及其子类:NIO中Buffer是一个顶级父类,抽象类常用的Buffer子类:1)ByteBuffer——存储字节数据到缓冲区ShortBuffer——存储字符串数据到缓冲区 CharBuffer——存储字符数据到缓冲区 IntBuffer——存储整型数据到缓冲区 LongBuffer——存储长整型数据到缓冲区...

2020-06-18 00:03:36 400

原创 Netty学习笔记_4(NIO的基本介绍和与BIO的比较)

Java NIO(non-blocking IO):从jdk1.4开始,Java提供的一系列改进输入输出的新特性;同步非阻塞。NIO相关的类都被放在java.nio包及其子包下【java.io包内容改写】 Java NIO三大核心组件:Channel(管道)、Buffer(缓冲区)、Selector(选择器)》》提供了面向缓冲区(面向块)的编程 Java NIO的非阻塞模式:一个线程可以从某通道发送请求/读取数据——》得到目前可用的数据(无数据可用则什么都不获取)——》不会保持线程阻塞,线程可以做其

2020-06-14 23:27:12 181

原创 Netty学习笔记_3(BIO基本介绍和简单使用)

Java BIO,即blocking IO,是传统的Java IO编程,在JDK1.版本之前,只有这一种IO编程,BIO 相关的类和接口被封装在java.io包及其子包中。BIO——同步阻塞型IO,每有一个客户端想要连接服务器时(即发出请求),服务器就启动一个线程专门处理该请求。一个连接对应一个线程,则有多少客户端连接服务器,就会产生多少线程。当有海量客户发出请求时,必然给服务器巨大的压力;除此之外,客户端对于服务器的访问并不是永久持续的,服务器在启动一个线程管理某客户端的请求后,客户端如果不再发...

2020-06-13 16:49:31 193

原创 Netty学习笔记_2(IO模型)

IO模型:即使用什么样的通道进行数据的发送和接收,很大程度决定了程序通信的性能Java BIO:传统阻塞IO(原生的Java IO)—>同步并阻塞;服务器(一个连接——一个线程)即每当客户端有连接请求时,服务器启动一个线程进行处理》》当此连接不做任何事情时会造成不必要的线程开销【大量客户端会开启大量线程,服务器压力大;客户端线程不会一直传输数据,不必要开销;服务器未读取到输入数据时,会阻塞在read/write方法处】BIO模式:Java NIO:同步非阻塞;服务器实现一个线程处.

2020-06-11 16:47:05 124

原创 Netty学习笔记_1(基本介绍)

Netty学习笔记_1(基本介绍)Netty是异步的,基于事件驱动的网络应用框架。异步:区别于过去的BS模型,当浏览器向服务器发送某请求以后,可以不等待服务器对该请求做出响应,而是设置一回调函数专门处理此服务器响应。浏览器可以在此期间发出其他事件请求。基于事件驱动:例如在网页上点击某按钮,即产生一事件,随后程序会按照此事件发出请求,服务器相应地做出回馈,最后将结果呈现给用户。实际使用时,网页连接、网页断开、表单提交等都可以看做是一个事件。而这一个一个的事件,是Netty框架功能运行的触发者。Nett

2020-06-07 15:45:12 187

原创 Study Better AND Day Day UP——时间处理相关类——备忘录

时间处理相关类主要包括Date类,DateFormat类,Calendar类以及其下属子类,类与类间关系如图1:图1 时间处理相关类其中,Date类是核心类,DateFormat类主要用于将时间格式化(时间与指定格式字符串的相互转化),Calendar类主要针对于日期。GergorianCalendar类和SimpleDateFormat类分别是其父抽象类的实现类。Dat类是进行时间...

2020-02-08 16:05:36 131

原创 Study Better AND Day Day UP——String类深化——备忘录

String类称为不可变字符序列,String类部分源码如下:char value[ ]表示String产生的对象时字符串数组,final表示常量不可修改String类拼接字符串优化public class TestString { public static void main(String[] args) { //编译器优化,在编译时直接将字符串进行拼接 St...

2020-02-04 15:38:24 97

原创 Study Better AND Day Day UP——包装类——备忘录

Java是面向对象的语言,但并非纯面向对象,实际应用中的基本数据类型(int,float,boolean,string等)就不是对象,因此需要将基本数据类型转化为对象,便于操作。Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,称为包装类(Wrapper Class),位于java.lang包,8种(char—>Character;int—>Integer等)包装类方法基...

2020-02-03 16:08:18 110

原创 Study Better AND Day Day UP——冒泡排序——备忘录

基本冒泡排序算法每次相邻元素两两比较,将较大元素放在后面,通过循环嵌套,每进行一次外层循环,都将当前最大元素放置在最终位置上。import java.util.Arrays;/** * 测试冒泡排序 * */public class testBubbleSort { public static void main(String[] args) { int[] value...

2020-01-31 16:15:40 95

原创 Stydy Better AND Day Day UP——多维数组——备忘录

二维数组的声明及内存分析二维数组初始化 public class testBiArrays { public static void main(String[] args) { int[][] a = new int[3][]; a[0] = new int[]{20,30}; a[1] = new int[]{20,52,60}; a[2] = new int[]{15...

2020-01-30 10:34:03 120

原创 Stydy Better AND Day Day UP——Arrays工具类——备忘录

Arrays工具类是Java常用的静态工具类,提供了打印数组、数组排序、二分查找等的静态方法。打印数组(public static String toString(int[] a){}) public class testArrays { public static void main(String[] args) { int[] s1 = {12,50,3,56,85,100};...

2020-01-30 09:34:36 94

原创 Stydy Better AND Day Day UP——数组的拷贝——备忘录

Java数组的基本拷贝Java中数组的拷贝主要使用了System.arraycopy(src, srcPos, dest, destPos, length)类。其中,src(Object对象)是操作数组源地址,dest(Object对象)是拷贝数组的目标地址,srcPos(int型)是开始拷贝的位置,destPos(int型)是拷贝到的位置,length(int型)是数组中拷贝数据的长度。...

2020-01-29 17:37:40 90

原创 Stydy Better AND Day Day UP——String类基础学习笔记——备忘录

String类被称为不可变字符序列,位于Java.lang包中,是核心类String类不能被继承:public final class String;String类只能被初始化一次:private final char value[];Java字符串是Unicode字符序列String类创建:String str = "abc";String str = new String("abc...

2020-01-27 16:22:17 150

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除