自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单向链表的实现(Java版)

头插法:将新节点添加至链表头部。第一步:创建新节点 newNode;第二步:获取原来的头节点 f;第三步:将头节点 first 指向新节点 newNode;第四步:判断原头节点是否为null:为null即新节点 newNode 既是头节点 first 也是尾结点 last ,则将尾结点 last 指向新节点 newNode;否则只需将新节点 newNode 的 next 指向原头节点 f 即可。尾插法:将新节点添加至链表尾部。第一步:创建新节点 newNode;第二步:获取原来的尾结点 l;

2023-09-27 21:38:15 134

原创 常问问题(计算机网络版)

接收方发送的确认报文中的窗口字段可以用来控制发送方窗口的大小,从而影响发送方的发送速率。TCP连接的两方都有固定大小的缓冲区,TCP的接收端只允许发送端发送接收端缓冲区所能容纳的数据数量,一旦超出,则会提示发送方降低发送速率,防止丢包,实现流量控制。随着接受方的确认,发送方将不断向前移动窗口。客户端收到服务器的释放连接数据包后,再向服务器发送确认释放连接的数据包,首部格式为:FIN=0,ACK=1。服务器接收到释放连接的数据包后,向客户端发送确认释放连接的数据包,首部格式为:FIN=0,ACK=1;

2023-09-24 15:52:55 128

原创 反转链表(Java版)

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。要求:空间复杂度O(1) ,时间复杂度O(n)。数据范围: 0≤ n ≤1000。

2023-09-14 21:39:03 145

原创 Java类加载机制(通俗易懂版)

类是在运行期间第一次使用时,被类加载器动态加载至JVM。JVM不会一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。Java类加载机制是指在Java程序运行时,将类文件加载到内存中的一系列步骤。Java的类加载机制遵循着“按需加载”的原则,也就是说,只有在需要用到某个类的时候,才会将这个类的相关信息加载到内存中。这种“按需加载”的设计使得Java程序具备了很好的灵活性和效率。

2023-09-11 21:49:03 1083

原创 Seata(详细配置版)

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

2023-09-11 17:45:30 2760

原创 java.util包下的集合框架

集合是一个放数据容器,它主要包括Collection接口类集合和Map接口类集合。(1)集合只能存放对象,Java中每一种基本数据类型都有对应的引用类型。例如在集合中存储一个int型数据时,要先自动转换成Integer类后再存入;(2)集合存放的是对对象的引用,对象本身还是存放在堆内存中;(3)集合可以存放不同类型、不限数量的数据类型。

2023-09-09 22:28:16 431

原创 Spring Boot集成Swagger

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的web服务的接口文档。目前的项目基本都是前后端分离,后端为前端提供接口的同时,还需同时提供接口的说明文档。但我们的代码总是会根据实际情况来实时更新,这个时候有可能会忘记更新接口的说明文档,造成一些不必要的问题。

2023-09-07 12:48:03 277

原创 进程、权限(Linux版)

打印不同格式的时间或日期,以及要根据时间和日期执行操作,也可以使用命令设置固定的格式,在类UNIX系统中,日期被存储为一个整数,1970年1月1日0时0分0秒起流逝的秒数。(2)free:可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区;chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比。

2023-08-28 16:20:36 336

原创 Linux基本命令

(1)Linux的基本操作命令。如:ls、cd、uname、pwd;(2)Linux的基本命令对文件的管理。如:touch、mkdir、cp、rmdir、rm、mv、tar。(3)要注意的时tar命令的使用,因为参数较多,在参数的下达中,c/x/t/r仅能存在一个,不可同时存在,因为不可能同时压缩与解压缩。

2023-08-27 21:16:04 202

原创 消息中间件之RocketMQ

注册邮件,发送短信写入消息队列后,直接返回,因此写入消息队列的速度很快,基本可以忽略,因此架构改变后,系统的吞吐量大大提高了。:为了提高性能和吞吐量,引入了Message Queue,一个Topic可以设置一个或多个Message Queue,这样消息就可以并行往各个Message Queue发送消息,消费者也可以并行的从多个;在创建一个接收消息的RocketMQSeceiveTest2类,对这两个接收消息的类都加上下面的代码,再去测试时,我们会看到两个消费者消费的消息数量是对等的,都是5条。

2023-08-26 22:50:10 105

原创 常用SQL语法(MySQL版)

DELETE 语句用于删除数据表中现有的记录。表(Table)是以行和列形式组织的数据的集合,表被创建以后,列数是固定的,但是行数可以改变。GROUP BY 子句用来根据指定的字段对结果集(选取的数据)进行分组,如果某些记录的指定字段具有相同的值,那么它们将被合并为一条数据。LIKE 用于在 WHERE 语句中进行模糊匹配,它会将给定的匹配模式和某个字段进行比较,匹配成功则选取,否则不选取。DISTINCT 关键字需要和 SELECT 语句一起使用,用来去除结果集中所有重复的记录,仅保留唯一的一条记录。

2023-08-24 22:27:33 951

原创 ThreadLocal

ThreadLocal被称为线程局部变量,用于在线程中保存数据。由于在ThreadLocal中保存的数据仅属于当前线程,所以该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal用于在同一个线程间,在不同的类和方法之间共享数据的的场景,也可以用于在不同线程间隔离数据的场景。ThreadLocal利用Thread中的来进行数据存储。示例1:创建两个线程// 线程局部变量// 线程1@Override。

2023-08-22 22:30:59 85

原创 系统架构的演变

随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及微服务架构势在必行,必需一个治理系统确保架构有条不紊的演进。单体应用架构 ===> 垂直应用架构 ===> 分布式架构 ===> SOA架构 ===> 微服务架构 ===> 悄然兴起的Service Mesh(服务网格化)。

2023-08-21 21:30:54 615 1

原创 Java 8特性

1、Java 8中,接口中除了抽象方法外,还可以定义default默认方法和static静态方法。2、Java 8支持使用Lambda表达式,实现函数式编程风格。3、函数式接口(2)通过链式编程,使得它可以方便地对数据进行链式处理;(3)方法参数都是函数式接口类型;(4)一个 Stream 只能操作一次,操作完就关闭了,继续使用这个 Stream 会报错;(5)Stream 不保存数据,不改变数据源。4、Java 8在java.time 包下包含一个全新的日期和时间API。

2023-08-20 15:40:40 621 1

原创 synchronized实现原理

否则说明多个线程竞争该对象的锁,轻量级锁就要升级为重量级锁,lock标志位的状态值变为“10”,Mark Word中存储的就是指向重量级锁(互斥量)的指针,后面等待锁的线程也要进入阻塞状态。因此,这种依赖于操作系统互斥锁所实现的锁,称之为“重量级锁”。(1)在代码进入同步块的时候,如果对象锁状态为无锁状态(lock标志位“01”,biased_lock标志位“0”),虚拟机首先将在当前线程的栈帧中建立一个名为锁记录(Lock Record)的空间,用于存储锁对象目前的Mark Word的拷贝。

2023-08-19 21:23:15 236

原创 Spring Boot集成Shiro

Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份 认证、权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。本篇博客将使用Spring Boot框架集成Shiro,同时结合mybatis框架实现用户的认证以及授权功能。

2023-08-18 20:21:03 501 1

原创 Redis(相关概念版)

乐观锁(Optimistic Lock)顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每 次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。everysec(每秒):每秒将缓冲区中的指令同步到AOF文件中,数据准确性较高,性能较高在系统突然宕机的情况下丢失1秒内的数据;

2023-08-16 22:35:40 276 1

原创 Java也能操作ElasticSearch?

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布, 是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索、稳定、可靠、快速、安装使用方便。ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。

2023-08-13 16:04:36 475 1

原创 Spring Boot中的小技术(旧活新整版)

在项目开发中,绝大多数情况下都是通过同步方式处理业务逻辑的,但是比如批量处理数据,批量发送 邮件,批量发送短信等操作 容易造成阻塞的情况,之前大部分都是使用多线程来完成此类任务而在 Spring 3+版本之后,就已经内置了@Async注解来完美解决这个问题,从而提高效率。” 至客户端浏览器,而控制台会在发出请求后3秒打印输出 “===批量新增===”。执行结果分析:执行效果是在星期三,时间为8月9日的20点56分的每秒钟控制台都会输出“是大眼同学呦!@Async 标识的方法会异步执行。

2023-08-09 22:18:50 119 1

原创 Spring Bean的生命周期

Bean被实例化后,到最终缓存到名为singletonObjects单例池之前,中间会经过Bean的初始化过程, 例如:属性的填充、初始方法init的执行等,其中有一个对外进行扩展的点BeanPostProcessor,我们称为Bean后处理。(1)Bean的实例化阶段:Spring框架会取出BeanDefinition的信息进行判断当前Bean的范围是否是 singleton的, 是否不是延迟加载的,是否不是FactoryBean等,最终将一个普通的singleton的 Bean通过反射进行实例化;

2023-08-06 20:09:30 137

原创 Spring核心思想之一 —— IOC/DI的实现方式

IOC(控制反转)是Spring框架的核心思想之一,主要用于解耦。IOC是指将创建对象对象的权利转移给Spring框架进行管理。由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系,使之形成松散耦合的关系,实现解耦。DI(依赖注入)是对IOC概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IOC容器注入当前bean对象所需要的另外一个bean对象。

2023-08-05 19:54:25 204 1

原创 Spring框架

Java EE开发最常用的框架是Spring,该框架开始于2003年,它是由罗德·约翰逊(Rod Johnson)创建的一个轻量级开源框架。Spring框架是为了解决企业应用开发的复杂性而创建的,它的出现使得开发者无须开发重量级的Enterprise JavaBean(EJB),而是通过控制反转(IOC)和面向切面编程(AOP)的思想进行更轻松的企业应用开发,取代了EJB臃肿、低效的开发模式。

2023-08-04 20:34:20 334 1

原创 Object类中的方法

Object类是java.lang包下的核心类,是所有类的父类,任何一个类如果没有明确的继承一个父类的话,那么它就是Object类的子类。Object类中的方法:1、需要重写:toString()、equals()、hashCode();2、与线程有关:wait()、wait(long timeoutMillis)、wait(long timeoutMillis, int nanos)、notify()、notifyAll();3、与反射有关:getClass();

2023-07-29 19:27:20 303

原创 CopyOnWriteArrayList核心源码阅读

CopyOnWrite是一种读写分离的容器,进行写入操作(有锁)时,不影响读取操作(无锁)。CopyOnWriteArrayList内部使用ReentrantLock锁来维护线程安全。当我们往CopyOnWriteArrayList进行写入操作时,会先根据内部的Object[ ]数组复制出一个新的数组,然后在新的数组中进行写入操作,最后将原数组的引用指向新数组,此时并发进行的读取操作是在原数组中进行的。CopyOnWriteArrayList只能有一个线程进行写入操作,允许多个线程并发进行读取操作。

2023-07-19 10:19:47 160

原创 ReentrantLock和synchronized

ReentrantLock和synchronized都是可重入锁,但在代码的实现上有一些区别。由于ReentrantLock可以在实现中尝试去获取锁,所以使用ReentrantLock比直接使用synchronized更安全,线程在tryLock()失败的时候不会导致死锁。无论是使用ReentrantLock还是synchronized都能够保证问哦们的线程安全,在执行过程中不会被其他线程干扰。

2023-07-17 21:58:40 115 1

原创 AES算法的CBC和ECB两种工作模式(Java版)

AES算法的密钥长度有128位、192位和256位的,工作模式有ECB、CBC、PCBC、CTR等,填充模式有NoPadding、PKCS5Padding、PKCS7Padding等。对称加密算法是使用一个密钥进行加密和解密。AES算法是目前应用最广泛的对称加密算法。CBC工作模式需要一个随机数作为IV参数,这样对于同一份明文,每次生成的密文都不同。ECB模式需要一个固定长度的密钥,固定的明文会生成固定的密文。

2023-07-16 22:26:23 968 1

原创 线程池(Java版)

程序中如果需要使用线程,将一个执行任务传给线程池,线程池就会使用一个空闲状态的线程来执行这个任务。1)) 工作队列未满时,线程池将该任务放入工作队列中等待,当线程池中出现空闲队列时, 将该任务从工作队列中调出,交给该空闲线程执行;3. STOP:停止状态。线程池调用shutdownnow()方法,进入停止状态,此时线程池不会接受新任务,也不会处理工作队列中的任务,而且会中断工作队列中的任务。1. 向线程池提交一个新的线程任务,线程池会分配一个空闲线程来执行这个任务。

2023-07-16 18:22:55 238 1

原创 线程的创建方式(Java版)

【代码】线程的创建方式(Java版)

2023-07-15 18:53:40 178 1

原创 Java Reflection(反射)

由于JVM为每个加载的class创建了对应的Class实例,并在实例中保存了该class的所有信息,包括类名、包名、父类、实现的接口、所有方法、字段(成员变量)等,因此,如果获取了某个Class实例,我们就可以通过这个Class实例获取到该实例对应的class的所有信息。是指在程序的运行状态中,可以得到任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。Class实例在JVM中是唯一的,所以,上述方法获取的Class实例是同一个实例。

2023-07-14 06:55:17 335 1

原创 哈希算法(Java版)

哈希碰撞是不能避免的,因为输出的字节长度是固定的,String的hashCode()输出是4字节整数,最多只有4294967296种输出,但输入的数据长度是不固定的,有无数种输入。在用户输入原始口令后,系统计算用户输入的原始口令的MD5并与数据库存储的MD5对比,如果一致,说明口令正确,否则,口令错误。因为相同的输入永远会得到相同的输出,因此,如果输入被修改了,得到的输出就会不同。然后我们只需要自己计算一下本地文件的哈希值,再与官网公开的哈希值对比,如果相同,说明文件下载正确,否则,说明文件已被篡改。

2023-07-10 18:35:37 1831 1

原创 FTP协议实现文件列表展示、文件上传、文件下载(Java版)

2023-07-09 20:55:52 1144 1

原创 Java Email —— 使用Java发送电子邮件

发送带有附件的邮件时,我们不能直接调用setText()方法,而应该先创建BodyPart类型的对象textPart和filePart分别设置邮件的正文和附件(附件以图片为例),然后在创建一个Multipart对象multipart,最后,通过setContent()方法把Multipart添加到Message中后,调用Transport.send(message)方法即可发送成功。发送HTML邮件与发送文本邮件类似,我们只需要将文本邮件中的。(根据需求插入相应的HTML标签)获取授权密码(只显示一次)

2023-07-08 20:17:44 1504 1

RocketMQ可视化插件压缩包

RocketMQ可视化插件压缩包

2023-08-26

RocketMQ压缩包

RocketMQ压缩包

2023-08-26

五表查询(Shiro)

用户表、角色表、权限表、用户角色关系表、角色权限关系表

2023-08-18

酒店数据tb-hotel表

酒店数据tb-hotel表

2023-08-11

空空如也

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

TA关注的人

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