自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Jackson详解

Jackson库的核心功能是将Java对象转换为json字符串(序列化)以及将json字符串转换为Java对象(反序列化)SpringMVC默认json解析器便是Jackson与其他Java的json的框架相比Jackson 解析大的json文件速度比较快Jackson 运行时占用内存比较低,性能比较好Jackson 有灵活的API,可以很容易进行扩展和定制核心模块由三部分组成jackson-core,核心包。

2024-07-22 07:00:00 2523 196

原创 ThreadLocal全面解析

ThreadLocal类用来提供线程内部的局部变量这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量ThreadLocal实例通常来说都是类型的,用于关联线程和线程上下文使用场景及作用线程并发: 在多线程并发的场景下传递数据: 我们可以通过ThreadLocal在同一线程,不同组件中传递公共变量线程隔离: 每个线程的变量都是独立的,不会互相影响ThreadLocal并不解决线程间共享数据的问题ThreadLocal适用于变量在线程间隔离且在。

2024-05-13 09:09:05 2872 86

原创 Maven详解

1)数学中的坐标使用 x、y、z 三个『向量』作为空间的坐标系,可以在『空间』中唯一的定位到一个『点』2)Maven中的坐标和 Java 类一样,POM 之间其实也是单继承的。如果我们给一个 POM 指定了父 POM,那么继承关系如下图所示:在 POM 的继承关系中,子 POM 可以覆盖父 POM 中的配置如果子 POM 没有覆盖,那么父 POM 中的配置将会被继承按照这个规则,继承关系中的执行命令:mvn help:effective-pom超级 POM:所有 POM 默认继承,只

2024-05-06 09:04:35 2901 42

原创 java开发常用工具类(持续更新...)

【代码】java开发常用工具类(持续更新...)

2024-04-29 09:33:06 1652 48

原创 详解Java中的五种IO模型

在学习IO模型前,需要先了解些基础概念,才能理解IO的执行流程及阻塞的原因selectpollepoll底层数据结构数组链表红黑树和双链表获取就绪的fd遍历遍历事件回调事件复杂度O(n)O(n)O(1)最大连接数1024无限制无限制fd数据拷贝每次调用select,需要将fd数据从用户空间拷贝到内核空间每次调用poll,需要将fd数据从用户空间拷贝到内核空间使用内存映射(mmap),不需要从用户空间频繁拷贝fd数据到内核空间。

2024-04-22 07:36:30 3109 30

原创 NIO详解

NIO (New lO)也有人称之为java non-blocking lO是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java lO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。NIO可以理解为非阻塞IO。

2024-04-15 09:51:07 2382 62

原创 SpringBoot实现License认证(只校验有效期)

License也就是版权许可证书,一般用于收费软件给付费用户提供的访问许可证明应用场景应用部署在客户的内网环境这种情况开发者无法控制客户的网络环境,也不能保证应用所在服务器可以访问外网因此通常的做法是使用服务器许可文件,在应用启动的时候加载证书然后在登录或者其他关键操作的地方校验证书的有效性License授权原理使用开源的证书管理引擎生成密钥对,使用Keytool生成公私钥证书库授权者保留私钥,使用私钥和使用日期生成证书license。

2024-04-08 09:12:47 4656 30

原创 Tomcat源码解析(五):StandardEngine、StandardHost、StandardContext、StandardWrapper

前文中我们介绍了StandServer与StandService的init与start方法,而Service的init方法和start方法则是调用顶级容器Engine、请求url映射Mapper、执行器Executor、连接器Connector的init和start方法。本文就介绍下容器的init和start及Mapper的组成。至此,整个容器的启动过程就介绍完了,可以看到整个流程是由Server起步直到Wrapper结束。

2024-04-01 08:58:13 2936 28

原创 RocketMQ(四):重复消费、消息重试、死信消息的解决方案

因为 Message ID 有可能出现冲突(重复)的情况。创建user表结构,num_no字段设置为唯一索引。控制重试次数,重试几次后,直接记录到数据库等等。application.yml配置文件设置。所以用业务唯一标识作为幂等处理的关键依据。Redisson分布式锁配置。所有Consumer。监听死信队列处理消息。什么情况下会出现堆积。

2023-11-30 13:44:17 4672 38

原创 MyBatis-Plus(实用篇)

Wrapper:条件构造抽象类,最顶端父类AbstractWrapper:用于查询条件封装,生成sql的where条件QueryWrapper:查询条件封装UpdateWrapper:update条件封装AbstractLambdaWrapper:使用Lambda语法LambdaQueryWrapper:用于Lambda语法使用的查询WrapperLambdaUpdateWrapper:用于Lambda语法更新WrapperUserMapper中定义接口方法。

2022-12-22 23:41:47 10172 19

原创 FastJson详解

FastJson 是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。Fastjson 的优点速度快fastjson相对其他JSON库的特点是快从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越使用广泛fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。

2024-07-15 07:30:00 6437 211

原创 SpringMVC源码解析(一):web容器启动流程

由上一节可知,web容器初始化工作会调用自定义配置类的onStartup方法为了方便查看,我根据类的关系和类中方法的作用整理成了下面的结构图。

2024-07-08 07:50:18 2950 246

原创 SpringMVC基础详解

MVC是一种软件架构模式(是一种软件架构设计思想M:Model(模型),负责业务处理及数据的收集V:View(视图),负责数据的展示C:Controller(控制器),负责调度。它是一个调度中心,它来决定什么时候调用Model来处理业务,什么时候调用View视图来展示数据。

2024-07-01 07:00:00 2649 243

原创 个人博客文章目录索引(持续更新中...)

26、Java基础(二十六):Stream流及Optional类。

2024-06-24 09:13:18 2403 216

原创 curl命令行发送post/get请求

curl 是一个命令行实用程序,允许用户创建网络请求curl 在WindowsLinux和Mac上皆可使用。

2024-06-17 08:12:58 4547 196

原创 Tomcat源码解析(八):一个请求的执行流程(附Tomcat整体总结)

前文中我们介绍了NIO解析请求数据,网络字节流转化为Request和Response对象。接下来介绍拿到Req和Res之后如何走到Servelt,以及正常响应返回。回顾之前篇章,NioEndpoint通过socket服务端监听8080端口接收连接,获取到连接扔给连接池处理,SocketProcessor从NioChannel通道中读取数据到ByteBuff缓冲区再赋值给对应属性,最后通过适配器生成容器Req和Res调用容器管道的执行方法。Endpoint是连接器Connector。

2024-06-10 15:22:25 3204 168

原创 idea实用快捷键(持续更新...)

【代码】idea实用快捷键(持续更新...)

2024-06-03 08:09:33 2366 165

原创 Tomcat源码解析(七):底层如何获取请求url、请求头、json数据?

前文中我们介绍了连接器的初始化和启动,实际就是EndPoint的初始化启动,EndPoint主要负责接收socket请求,然后将socket请求包装为SocketProcessor对象(实现Runnable接口)扔给线程池Executor处理。接下来介绍NIO如何解析请求数据,网络字节流与Request和Response对象的转化。Nio通过NioChannel将请求数据读取到ByteBuffer缓冲区中先解析请求行,包括请求方式、请求url、请求协议再解析请求头的name和value解析都是通过。

2024-05-27 09:05:14 2026 131

原创 Tomcat源码解析(六):Connector、ProtocolHandler、Endpoint

前文中我们介绍了容器Engine、Host、Context、Wrapper的启动,代表整个tomcat容器启动就算完成了。接下来介绍下连接器,处理Socket连接,负责网络字节流与Request和Response对象的转化。Tomcat设计了3个组件。Endpoint(网络通信)负责提供字节流给Processor;Processor(应用层协议解析)负责提供Tomcat Request对象给Adapter;Adapter(请求响应转化)负责提供ServletRequest对象给容器。

2024-05-20 09:12:53 2979 121

原创 MyBatisPlus新版代码生成器(Velocity模板引擎详解)

Velocity是一个基于Java的模板引擎,可以通过特定的语法获取在java对象的数据 ,填充到模板中,从而实现界面和java代码的分离。应用场景Web应用程序 : 作为为应用程序的视图, 展示数据源代码生成 : Velocity可用于基于模板生成Java源代码自动电子邮件 : 网站注册 , 认证等的电子邮件模板网页静态化 : 基于velocity模板 , 生成静态网页只需要关注.vm结尾模板即可(属于velocity引擎模板),其他模板是其他模板引擎的模板,这里不做过多介绍。

2024-03-25 07:08:52 4043 98

原创 EasyExcel实现文件上传下载(百万级数据、单元格自定义样式)

Java解析、生成Excel比较有名的框架有Apache poijxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。EasyExcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;

2024-03-18 07:32:55 3134 67

原创 Tomcat源码解析(四):StandardServer和StandardService

前文Tomcat源码解析(二):Bootstrap和Catalina介绍Tomcat的启动类的加载,在Catalina初始化时加载了server.xml,创建ServerServiceConnector等一些列组件,然后调用Server的init和start方法,启动tomcat。Tomcat源码解析(三):LifeCycle生命周期管理介绍了组件init、start、stop等共同生命周期方法,使用模板方法设计模式,具体的实现类由子类去实现。

2024-03-11 07:42:14 2366 111

原创 Tomcat源码解析(三):LifeCycle生命周期管理

在前文中我们介绍了tomcat的启动类加载核心内容就是getServer().init()组件的初始化和getServer().start()启动服务由于所有的组件均存在初始化启动停止等生命周期方法,拥有生命周期管理的特性基于生命周期管理抽象成了一个接口Lifecycle组件Server、Service、Container、Executor、Connector组件,都实现生命周期的接口监听器处理生命周期方法生命周期状态。

2024-03-05 14:33:59 1775 31

原创 Tomcat源码解析(二): Bootstrap和Catalina

Bootstrap是一个启动引导类,本身没有太多启动关闭细节的实现而是通过加载Catalina,对Catalina发号施令,调用start、stop等方法。

2024-02-29 21:42:52 1516 109

原创 关于字符集(彻底搞清楚一个中文占几个字节?)

不同字符编码在内存中的字符对应磁盘中的byte数组数值@Test// [65]byte[] bytes2 = "中".getBytes("GBK");byte[] bytes3 = "中".getBytes("UTF-8");注意: 在中文操作系统上,ANSI编码即为GBK;在英文操作系统上,ANSI编码即为ISO-8859-1。

2024-02-24 18:33:52 1464 116

原创 Java基础(二十六):Stream流及Optional类

Stream 是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列Stream和Collection集合的区别Collection是一种静态的内存数据结构,讲的是数据;主要面向内存,存储在内存中Stream是有关计算的,讲的是计算;面向CPU,通过CPU实现计算对于并行流,其在底层实现中,是沿用了Java7提供的fork/join分解合并框架进行实现fork根据cpu核数进行数据分块,join对各个fork进行合并。

2024-02-21 18:55:44 1492 38

原创 Java基础(二十五):Lambda表达式、方法引用、构造器引用

只要看起来没有歧义,只能仅有调用某个方法,传入某些参数,就可以简化为Lambda表达式或方法构造器引用。

2024-02-19 16:30:38 1075 107

原创 Java基础(二十四):网络编程

回复一个彻底断开的报文。

2024-02-06 08:53:23 1243 161

原创 Tomcat源码解析(一): Tomcat整体架构

来确定请求是由哪个Wrapper容器里的。Pipeline-Valve是责任链模式。Tomcat支持的I/O模型。Tomcat支持的应用层协议。Pipeline接口。

2024-01-09 17:53:09 2484 132

原创 跨域的解决方式(java后端)

同源策略(Sameoriginpolicy)是浏览器最核心也最基本的安全功能一个页面发起的ajax请求,只能是与当前页域名相同的路径,这能有效的阻止跨站攻击所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号。

2023-12-14 13:54:41 2316 44

原创 JavaWeb三大组件(Servlet程序、Filter过滤器、Listener监听器)

概述Servlet (server applet) 是运行在服务端(tomcat)的Java小程序Servlet主要负责接收处理请求、协同调度功能以及响应数据Servlet是运行在服务端的,Servlet必须在WEB项目中开发且在Tomcat这样的服务容器中运行Servlet的请求和响应流程tomcat接收到请求后,会将请求报文的信息转换一个对象该对象中包含了请求中的所有信息(请求行、请求头、请求体)tomcat同时创建了一个对象,该对象用于承装要响应给客户端的信息。

2023-12-11 16:25:00 1301 149

原创 RocketMQ(三):集成SpringBoot

需要创建两个服务,消息生产服务和消息消费者服务。生产消息存在多个服务,消费则统一由一个服务处理。过滤模式有两种:正则表达式和sql92方式。keys从MessageExt对象中获取。获取带key和tag的消费者。

2023-11-17 10:20:15 898 116

原创 RocketMQ(二):原生API快速入门

Spring源码系列文章RocketMQ(一):基本概念和环境搭建RocketMQ(二):基础API及集成springbootpom.xml1、生产者发送消息dashboard客户端界面,查看主题界面可以看到刚刚创建的testTopic主题状态栏这里记录的是生产者发送的条数,所以这里没有变化执行结果:因为是异步,所以发送消息后,不论成功失败,继续往下走,执行“我先发送”之后消费发送成功,回调函数执行“发送成功”3、发送单向消息这种方式主要用在不关心发送结果的场景这种方式

2023-11-14 21:16:57 524 133

原创 RocketMQ(一):基本概念和环境搭建

RocketMQ是阿里巴巴2016年MQ中间件,使用Java语言开发RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务为什么要使用MQ?削峰限流:设置流程缓冲池,可以让后端系统按自身吞吐能力进行消费,不被冲垮异步:消息发送者可以发送一个消息而无需等待响应解耦:发送者和接收者不必了解对方,只需要确认消息,不必同时在线MQ的执行流程发送者把消息发给消息服务器[MQ]

2023-11-11 18:19:05 698 136

原创 Spring源码解析(十二):TransactionInterceptor事务拦截器

核心类作用:通过@Transactional注解指定的事务的属性,包括是否只读、超时、回滚等:事务的状态,这个状态分为很多方面,比如事务的运行状态(是否完成、是否被标记为rollbakOnly),事务的同步状态(这个事务是否开启了一个新的同步),还有事务是否设置了保存点。

2023-10-10 22:12:50 660

原创 Spring源码解析(十一):spring事务配置类源码

TransactionDefinition默认实现类DefaultTransactionDefinition。@EnableTransactionManagement与@EnableAspectJAutoProxy对比。AbstractTransactionManagementConfiguration抽象父类。ProxyTransactionManagementConfiguration核心配置类。PlatformTransactionManager的实现类。Spring中一共定义了7种事务的传播机制。

2023-10-08 17:02:44 223

原创 Spring源码解析(十):spring整合mybatis源码

通过sqlSession获取对应的代理对象代理对象执行sql完成数据库操作// 1.解析XML配置// 2.基于解析好的XML配置创建一个SqlSessionFactory// 3.通过SqlSessionFactory,创建一个SqlSession// 4.获取一个代理对象// 5.调用代理对象的方法System.out.println("代理对象查询结果:" + mapper.selectOne(1));根据@MapperScan注解扫描指定路径下接口。

2023-09-02 11:43:00 454 2

原创 gitee上传本地项目bug

🤮这个破bug不知道浪费了多长时间,以前没有记录,每次都忘记,这次记下来。

2023-08-30 15:10:20 975

原创 Spring源码解析(九):AOP源码之@Aspect所有相关注解解析

AOP是一种思想,它的实现主要有Spring AOP和AspectJspring AOP底层实现是jdk和cglib动态代理运行期织入借助了AspectJ的语法,即使用了@Aspect @Before @Pointcut等注解来实现AspectJ主要原理是用asm做字节码替换来达到AOP的目的,需要使用专门的编译器ajc编译期、编译期后、类加载期都可以织入AnnotationAwareAspectJAutoProxyCreator主要类图AOP的操作流程都在类中添加注解由@Import注解导入而来。

2023-08-29 10:51:59 352 2

原创 Spring源码解析(八):bean后置处理器CommonAnnotationBeanPostProcessor

查找bean的@Resource属性和@PostConstruct和@PreDestroy方法并缓存起来@Resource注解属性填充初始化前执行解析@PostConstruct注解的初始化方法销毁前执行解析@PreDestroy主键的销毁方法。

2023-08-08 22:55:55 1142 99

贪吃蛇的java小程序

贪吃蛇的java小程序

2024-03-11

空空如也

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

TA关注的人

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