自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java日志门面之JCL和SLF4J

什么时日志门面?随着系统开发的进行,可能会更新不同的日志框架,造成当前系统中存在不同的日志依赖,让我们难以统一的管理和控制。借鉴JDBC的思想,为日志系统也提供一套门面,那么我们就可以面向这些接口规范来开发,避免了直接依赖具体的日志框架。这样我们的系统在日志中,就存在了日志的门面和日志的实现。常见的日志框架及日志门面常见日志门面:JCL、slf4j常见日志实现:JUL、log4j、logback、log4j2框架诞生顺序:log4j --> JUL -->JCL-->slf4j。

2024-09-27 07:00:00 2037 240

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

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

2024-04-29 09:33:06 1900 86

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

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

2024-02-21 18:55:44 1653 49

原创 Hutool工具包-常用开发工具类(让代码更简洁)

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间可以根据需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块

2023-03-29 18:00:42 6194 49

原创 java日志框架之Log4j

Log4j是Apache的一个开源项目可以控制日志信息输出到控制台文件、甚至是数据库中可以控制每一条日志的输出格式通过一个配置文件来灵活地进行配置,而不需要修改应用的代码主要由Loggers (日志记录器)、Appenders(输出控制器)和 Layout(日志格式化器)组成Loggers:控制日志的输出级别与日志是否输出Appenders:指定日志的输出方式(输出到控制台、文件等)Layout:控制日志信息的输出格式;源码默认从类路径找。

2024-09-23 07:00:00 2764 228

原创 java日志框架之JUL(Logging)

JUL全程,它是java原生的日志框架,使用时不需要另外引用第三方的类库相对其他的框架使用方便,学习简单,主要是使用在小型应用中Logger:被称为记录器应用程序通过获取Logger对象,调用其API来发布日志信息Logger通常被认为是访问日志系统的入口程序Handler:处理器每个Logger都会关联一个或者是一组HandlerLogger会将日志交给关联的Handler去做处理,由Handler负责将日志做记录Handler具体实现了日志的输出位置,比如可以输出到控制台或者是文件中等等。

2024-09-18 07:00:00 1868 244

原创 \r和\n不同系统的区别

【代码】\r和\n不同系统的区别。

2024-08-19 10:26:07 2021 299

原创 SpringBoot基础(二):配置文件详解

方式一:使用临时属性设置配置文件名,注意仅仅是名称,不要带扩展名方式二:使用临时属性设置配置文件路径或类路径,全路径名。

2024-08-12 04:51:41 10172 292

原创 SpringBoot基础(一):快速入门

SpringBoot可以简单快速地创建一个独立的、生产级别的Spring应用(说明:SpringBoot底层是Spring)大多数SpringBoot应用只需要编写少量配置即可快速整合Spring平台以及第三方技术SpringBoot特性快速创建独立Spring应用以前的SSM框架,需要导包、写配置、启动运行直接嵌入Tomcat、Jetty or Undertow,不再需要部署war包提供可选的场景启动器(starter),简化应用整合。

2024-08-07 07:00:00 2484 277

原创 Hibernate Validator 数据校验框架

JSR:Java Specification Requests的缩写,意思是Java规范提案是指向JCP(Java Community Process) 提出新增一个标准化技术规范的正式请求任何人都可以提交JSR,以向Java平台增添新的API和服务JSR已成为Java界的一个重要标准就是这个JSR规范之一Bean Validation是一个运行时的数据验证框架的标准JSR303是专家组成员向JCP提交的第1版Bean Validation,即针对bean数据校验提出的一个规范,

2024-08-05 08:51:23 2370 199

原创 SpringMVC源码解析(二):请求执行流程

前文中我们介绍了SpringMVC容器的启动,包括前端控制器DispatcherServlet对象的创建,过滤器添加到Tomcat容器的过滤器集合中,将所有拦截器、跨域配置、消息转换器等配置统一添加到各自集合中,解析@RequestMapping注解生成请求路径和Controller方法的映射map。本章来研究下请求的执行过程。说到请求过程,那么得先说下入口在哪里?入口肯定是统一分发请求给处理程序的,DispatcherServlet归根结底也是Servlet。

2024-07-29 07:00:00 9506 270

原创 Jackson详解

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

2024-07-22 07:00:00 2983 221

原创 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 7992 215

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

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

2024-07-08 07:50:18 3816 250

原创 SpringMVC基础详解

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

2024-07-01 07:00:00 3229 247

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

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

2024-06-24 09:13:18 2531 221

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

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

2024-06-17 08:12:58 6203 200

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

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

2024-06-10 15:22:25 3597 174

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

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

2024-06-03 08:09:33 2799 171

原创 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 2181 136

原创 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 3097 122

原创 ThreadLocal全面解析

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

2024-05-13 09:09:05 2997 97

原创 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 3075 49

原创 详解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 4173 73

原创 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 2534 73

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

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

2024-04-08 09:12:47 6324 60

原创 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 3151 151

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

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

2024-03-25 07:08:52 5192 99

原创 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 3654 69

原创 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 2452 111

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

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

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

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

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

2024-02-29 21:42:52 1638 110

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2023-11-30 13:44:17 5104 42

原创 RocketMQ(三):集成SpringBoot

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

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

贪吃蛇的java小程序

贪吃蛇的java小程序

2024-03-11

空空如也

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

TA关注的人

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