自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(260)
  • 资源 (4)
  • 问答 (5)
  • 收藏
  • 关注

原创 Spring Boot集成MyBatis、Redis、JWT、Shiro

Spring Boot集成MyBatis、Redis、JWT、Shiro认证流程自定义过滤器@Slf4jpublic class JwtFilter extends BasicHttpAuthenticationFilter { /** * 执行登录认证 * * @param request * @param response * @param mappedValue * @return */ @Overri

2020-06-03 20:20:35 382

原创 数据结构之二叉树

数据结构之二叉树递归构造二叉树二叉树节点:public class TreeNode { public int data; public TreeNode left; public TreeNode right; public TreeNode(int data) { super(); this.data = data; } @Override public String toString() {

2020-05-19 19:58:53 543

原创 快速上手spring-boot+spring-security+jwt

快速上手spring-boot+spring-security+jwt数据库表设计三张表:用户表 user角色表 role用户角色表 user_roles图示:实体类用户类@Entitypublic class User implements UserDetails { @Id @GeneratedValue private Long id; private String username; private String

2020-05-13 16:39:36 344

原创 数据结构之—栈

数据结构之—栈顺序栈内部采用数组实现结构图;定义结构体:typedef struct StackInfo{ int topOfStack; /*记录栈顶位置*/ ElementType stack[STACK_SIZE]; /*栈数组,也可以使用动态数组实现*/}StackInfo_st;函数声明int stack_push(StackInfo_st *s,ElementType value);int stack_pop(StackInfo_st *s,Elemen

2020-05-10 20:39:45 278

原创 双链表

双链表整体结构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZFeXoXC-1588932073880)(https://upload-images.jianshu.io/upload_images/5653258-79c65c0bc4fbe466.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]初始化void init(DLlist* pList){ pList->head = pL

2020-05-08 18:01:38 241

原创 Netty + websocket聊天室

Netty + websocket聊天室程序处理逻辑启用websocket从标准的HTTP或者HTTPS协议切换到WebSocket时,将会使用一种称为升级握手的机制。因此,使用WebSocket的应用程序将始终以HTTP/S作为开始,然后再执行升级。这个升级动作发生的确切时刻特定于应用程序;它可能会发生在启动时,也可能会发生在请求了某个特定的URL之后约定:如果被请求的 URL ...

2020-05-06 15:52:43 354

原创 Netty多人与群组聊天

Netty多人与群组聊天消息设计图示:public abstract class Packet { /** * 协议版本 */ @JSONField(deserialize = false, serialize = false) private Byte version = 1; @JSONField(serialize = fals...

2020-05-02 21:39:52 703

原创 Netty私有协议栈设计

Netty私有协议栈设计消息定义消息头消息主体图示:Header:public class Header { private int crcCode = 0xadaf0105; // 唯一的通信标志 private int length; // 总消息的长度 header + body private long sessionID; // ...

2020-05-01 16:44:04 354

原创 剖析LengthFieldBasedFrameDecoder

剖析LengthFieldBasedFrameDecoder下面这个测试用例是Netty自带的:@Test public void testDiscardTooLongFrame1() { ByteBuf buf = Unpooled.buffer(); buf.writeInt(32); for (int i = 0; i < 3...

2020-04-30 16:01:28 283

原创 jenkov.tutorials系列(Java加密与解密的具体使用)

jenkov.tutorials系列(Java加密与解密的具体使用)Java Cipher(javax.crypto.Cipher)类表示一种加密算法。 密码这一术语是密码学领域中加密算法的标准术语。 这就是为什么Java类称为Cipher而不是例如 加密器/解密器或其他东西。创建Cipher在使用Java Cipher之前,您只需创建Cipher类的实例。 通过调用带有参数的getInst...

2020-04-27 09:32:53 398

原创 jenkov.tutorials系列(Java加密与解密概览)

jenkov.tutorials系列(Java加密与解密概览)Java密码学扩展Java加密API由正式称为Java加密扩展的Java提供。 Java密码学扩展有时也通过缩写JCE来引用。Java密码体系结构Java密码学体系结构(JCA)是Java密码学API内部设计的名称。JCA是围绕一些中央通用类和接口构建的。 这些接口背后的实际功能由提供程序提供。 因此,您可以使用Cipher类...

2020-04-25 21:47:06 317

原创 Netty之Http

Netty之HttpHttp协议HTTP是一个属于应用层的面向对象的协议,由于其使用简捷和快速的方式,非常适用于分布式超媒体信息系统。HTTP协议特点支持Server/Client模式;简单——客户向服务器请求服务时,只需要指定服务的URL(统一资源定位符)并且携带对应的请求参数或消息体即可;灵活——HTTP允许传输任意类型的数据对象,内容类型由HTTP消息头中的Conte...

2020-04-23 11:25:04 630

原创 异常控制流

异常控制流系统需要能够对系统状态的改变做出反应,这些系统状态不是被内部程序变量捕获的,而且也不一定和程序的执行相关。如:一个硬件定时器定期产生信号,这个事件必须得到处理。包到达网络适配器,必须放在内存中。程序向磁盘请求数据,然后休眠,直到被通知数据已经就绪。子进程终止时,创造这些子检查点父进程必须得到通知现代系统通过使控制流突变来对这些情况做出反应,把这些突变称为异常控制流(ECF).异常控制...

2020-04-20 21:51:56 662

原创 Netty-TCP拆包/粘包

Netty-TCP拆包/粘包TCP拆包/粘包TCP 是一个面向字节流的协议,它是性质是流式的,所以它并没有分段。就像水流一样,你没法知道什么时候开始,什么时候结束。所以它会根据当前的套接字缓冲区的情况进行拆包或是粘包粘包问题图示:客户端发送两个数据包D1&D2给服务端,因为服务端一次读取的字节数是不确定的,所以可能出现:正常情况,服务端分两次读取到了两个独立的数据包服...

2020-04-17 19:35:12 189

原创 Netty 的组件和设计

Netty 的组件和设计Channel & EventLoop & ChannelFuture概览:Channel — SocketEventLoop — 控制流、多线程处理、并发ChannelFuture — 异步通知Channel 接口public interface Channelextends AttributeMap, ChannelOu...

2020-04-15 20:48:02 220

原创 Java NIO Selector

Java NIO SelectorJava NIO Selector是一个组件,可以检查一个或多个Java NIO Channel实例,并确定哪些通道可供使用,读或写.这样,单个线程可以管理多个通道,从而可以管理多个网络连接。为什么要使用选择器?仅使用单个线程来处理多个通道的优点是只需要更少的线程来处理通道。 实际上,只能使用一个线程来处理所有通道。 线程之间的切换对于操作系统来说是昂贵的,...

2020-04-12 20:48:05 309

原创 可执行文件的装载与进程

可执行文件的装载与进程进程虚拟地址空间程序与进程的区别?程序是一个静态的概念,就是一些预先编译好的指令和数据集合的一个文件进程则是一个动态的概念,它是程序运行时的一个过程,很多时候吧动态库也叫作运行时每个程序被运行起来以后,它将拥有自己独立的虚拟地址空间(Virtual Address Space),这个虚拟地址空间的大小由计算机的硬件平台决定,**具体地说是由CPU的位数决...

2020-04-09 10:40:58 703

原创 动态链接

动态链接为什么需要动态链接静态链接使得不同的程序开发者和部门能够相对独立的开发和测试自己的程序模块,从某种意义上来讲大大促进了程序开发的效率,原先现在程序规模也随之扩大。但静态链接的缺点也暴露出来:浪费内存、磁盘空间、模块更新困难。内存与磁盘空间静态链接在计算机早期还是比较流行的,但是到了后面,其缺点也非常明显。比如浪费内存和磁盘空间,更新模块困难等。举个例子,每个程序内部除了都保留了...

2020-04-08 20:29:46 4093 1

原创 Java-NIO(3)

Java-NIO(3)ByteBufferByteBuffer为Buffer子类,可以在缓冲区中以字节为单位对数据进行存取此类定义了对字节缓冲区的六种操作类别:读取和写入单个字节的绝对和相对的get和put方法;相对批量获取方法,用于将字节的连续序列从此缓冲区传输到数组中;相对批量放置方法,用于将字节数组或某些其他字节缓冲区中连续的字节序列传输到此缓冲区中;绝对和相对...

2020-04-08 09:05:10 286

原创 Java-NIO(2)

Java-NIO(2)缓冲区常规I/O操作存在很大缺点,主要是因为它们是阻塞的,而NIO正是为了解决常规I/O执行效率低的问题,采用非阻塞高性能运行的方式来避免出现笨拙的同步I/O带来的效率低的问题缓冲区Buffer,在NIO的使用中地位很高,因为数据就是放到缓冲区,对数据进行处理的NIO中的Buffer是一个用于存储基本数据类型的容器,它以类似于数组有序的方式来存储和组织数据,每个基本数...

2020-04-07 15:56:26 245

原创 Java-NIO(1)

Java-NIO(1)概述Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java1.4开始),Java NIO提供了与标准IO不同的IO工作方式。所以Java NIO是一种新式的IO标准,与之前的普通IO的工作方式不同。标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到...

2020-04-06 20:20:52 176

原创 Java-I/O学习(7)

Java-I/O学习(6)Reader在Java API中,Java Reader类(java.io.Reader)是所有Reader的基类。Reader和InputStream不同的地方在于它是基于字符流的而不是字节流。换句话说,Reader是用来读取文本的数据的,而InputStream是用来读取原始的字节的。构造函数//Creates a new character-stream ...

2020-04-05 10:00:00 227

原创 Java-I/O学习(6)

Java-I/O学习(6)DataInputStreamDataInputStream可以让你从InputStream读取Java基本类型来代替原始的字节。用DataInputStream来包装InputStream,你就可以从DataInputStream直接以Java基本类型来读取数据。这就是为什么叫做DataInputStream如果你需要读取的数据是由大于一个字节的java基础类型构...

2020-04-04 20:03:39 177

原创 Java-I/O学习(5)

Java-I/O学习(5)ByteArrayInputStreamByteArrayInputStream类可以让你从一个字节数组来读取流创建//Creates a ByteArrayInputStream so that it uses buf as its buffer array. The buffer array is not copied. The initial value ...

2020-04-04 10:01:50 212

原创 Java-I/O学习(4)

Java-I/O学习(4)FileJava IO 的File类可以帮助你访问底层的文件系统,使用File类你可以:查看文件或目录是否存在如果目录不存在,可以创建读取文件的长度删除或移动文件删除文件查看路径指向的事文件还是目录读取目录下的文件列表创建// Creates a new File instance by converting th...

2020-04-03 17:36:44 205

原创 Java-I/O学习(3)

Java-I/O学习(3)RandomAccessFile构造函数构造方法具体描述RandomAccessFile​(File file, String mode)Creates a random access file stream to read from, and optionally to write to, the file specified by the ...

2020-04-03 09:35:37 190

原创 Java-I/O学习(2)

Java-I/O学习(2)InputStreamInputStream是Java IO中所有输入流的基类方法列表:读取操作:返回类型方法具体描述abstract intread()Reads the next byte of data from the input stream.intread​(byte[] b)Reads some number o...

2020-04-02 09:14:33 208

原创 Java之String

Java之String开篇下面这段代码的输出: String str1= "abc"; String str2= new String("abc"); String str3= str2.intern(); System.out.println(str1==str2); System.out.println(...

2020-04-01 11:24:13 1227

原创 静态链接

静态链接当有两个目标文件时,如何将它们连接起来形成一个可执行文件?其中发生了什么?使用两个源代码文件作为研究例子:a.cextern int shared;int main(){ int a = 100; swap(&a,&shared);}b.cint shared = 1;void swap(int *a,int *b){...

2020-04-01 09:33:40 1003 1

原创 JVM方法句柄

JVM方法句柄方法句柄是一个强类型的,能够被直接执行的引用。该引用可以指向常规的静态方法或者实例方法,也可以指向构造器或者字段。当指向字段时,方法句柄实则指向包含字段访问字节码的虚构方法,语义上等价于目标字段的 getter 或者 setter 方法**方法句柄的类型(MethodType)**是由所指向方法的参数类型以及返回类型组成的。它是用来确认方法句柄是否适配的唯一关键。当使用方法句柄时...

2020-03-30 15:36:37 511

原创 目标文件

目标文件有什么目标文件的格式PC平台流行的可执行文件格式主要为Windows下:PELinux下:ELF目标文件就是源代码编译之后但是未进行链接的那些中间文件(Windows下的.obj和Linux下的.o)目标文件具体什么样子目标文件中的内容除了编译后的机器指令代码,还有链接时所需要的一些信息,比如:符号表,调试信息,字符串等,一般目标文件将这些信息按照不同的属性,以“...

2020-03-30 09:44:21 645

原创 Java-I/O学习(1)

Java-I/O学习(1)Java IO是java中的相关API,主要目的为读数据与写数据(input 和 output)。大部分的应用都需要处理一些输入数据,并且根据输入数据生成一些输出数据,比如说从文件或网络读取数据,然后写回文件或通过网络响应数据。Java的IO包本身的主要关注点在于,从一个地方读取原始数据和向目的地写入数据。最典型的数据来源和目的地主要有:文件(File)管...

2020-03-29 14:40:54 247

原创 JVM与synchronized

JVM与synchronizedsynchronized 关键字使用:声明一个 synchronized 代码块直接标记静态方法或者实例方法声明 synchronized 代码块public class T1 { public void foo(Object lock) { synchronized (lock) { loc...

2020-03-27 09:27:15 174

原创 编译与链接

编译与链接代码运行背后的过程经典C语言程序:#include<stdio.h>int main(){ printf("hello world!\n"); return 0;}Linux下,使用gcc来编译这个程序,进入命令行输入:gcc hello.c可以看到文件下面多出了一个a.out文件:Linux的.out是由gcc编译生成的二进...

2020-03-26 10:09:04 296

原创 实现一个简单的词法分析器

实现一个简单的词法分析器词法分析词法分析的工作是将一个长长的字符串识别出一个个的单词,这一个个单词就是 Token。而且词法分析的工作是一边读取一边识别字符串的,不是把字符串都读到内存再识别词法单元:单词的内部表示是词法单元 token编程语言中最小的语法单元词法单元的表示目标程序语句:age >= 45解析age >= 45过程图:标识符、...

2020-03-25 15:09:38 1439

原创 Java反射API

Java反射APIJava反射机制提供的功能获取一个类的所有成员变量及方法(含构造方法(有/无 参数))创建一个类的对象:1、获取一个对象具有的成员变量及赋值2、调用一个对象的方法3、判断一个对象所属的类java.lang.Class 类java.lang.Class类是反射机制的基础Class存放着对应类型对象的运行时信息在Java程序运行时,Java虚拟机为...

2020-03-24 09:30:52 167

原创 Java反射理解

Java反射理解Java类型信息RTTI(运行时类型识别)源于《Thinking in Java》一书,其作用是在运行时识别一个对象的类型和类的信息。这里分两种:编译期的:也叫传统的”RRTI”,它假定我们在编译期已知道了所有类型(在没有反射机制创建和使用类对象时,一般都是编译期已确定其类型,如new对象时该类必须已定义好),另外一种是运行期的:利用反射机制它允许我们在运行时发现和...

2020-03-21 10:12:03 169

原创 JVM方法调用

JVM方法调用背景**Java文件在编译过程中不会进行传统编译的连接步骤,方法调用的目标方法以符号引用的方式存储在Class文件中,这种多态特性给Java带来了更灵活的扩展能力,**但也使得方法调用变得相对复杂,需要在类加载期间,甚至到运行期间才能确定目标方法的直接引用。重载与重写在 Java 程序里,如果同一个类中出现多个名字相同,并且参数类型相同的方法,那么它无法通过编译。也就是说,在...

2020-03-20 09:47:48 154

原创 深入理解计算机系统-第七章(链接)笔记

深入理解计算机系统-第七章(链接)笔记背景链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程这个文件可被加载(拷贝)到存储器中并执行:链接可以执行于编译时,也就是源代码翻译成机器码时也可以执行于加载时,也就是程序被加载到存储器并执行时甚至执行于运行时,由应用程序来执行链接是由叫做链接器的程序自动执行的。链接器的出现,使得分离编译成为可能,我们不用将一个大型...

2020-03-19 10:20:53 753

原创 深入理解JVM第十三章笔记

深入理解JVM第十三章笔记线程安全对“线程安全”一个比较准确的定义:当多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象时线程安全的Java中的线程安全限定场景:多个线程之间存在共享数据访问这个前提不可变在Java中,不可变对象一定是线程安全的,...

2020-03-18 09:51:41 156

Spring+Spring MVC+Spring JDBC+MySql实现简单登录注册

Spring+Spring MVC+Spring JDBC+MySql实现简单登录注册

2017-08-02

Node.js+Express+MongoDB实现简单登录注册功能

Node.js+Express+MongoDB实现简单登录注册功能,压缩包中包含了所需模块,直接可以用

2017-07-18

基于Netty的GUI版聊天室

基于Netty实现的简单多人用户聊天室,带有GUI。

2017-06-12

Spring+SpringMVC+Hiberate+MySql+BootStrap实现一个简易的用户管理后台

2017-04-13

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

TA关注的人

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