自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 若依框架集成sharding-jdbc

本文基于4.X版本在若依框架上集成sharding-jdbc, 实现了精准查询与范围查询, 通过雪花id反推时间进行分配查询等操作

2023-06-13 15:30:38 1947

原创 生成的雪花算法ID前端接收到的不一致问题处理

生成的雪花算法ID前端接收到的不一致问题处理

2023-05-31 17:39:34 987

原创 设计模式之原型模式

原型模式基本介绍克隆羊问题传统方式传统方式优缺点原型模式方式思路代码spring框架原型模式源码深拷贝与浅拷贝浅拷贝深拷贝代码注意事项基本介绍原型模式指用原先实例指定创建对象的种类, 并且通过拷贝这些原型, 创建新的对象原型模式是一种创建型设计模式, 允许一个对象再创建另一个可定制的对象, 无需指定如何创建的细节工作原理是通过一个原先对象传给那个要创建的对象, 这个要发动创建的对象通过请求原对象拷贝他们自己来实施创建, 即对接.clone()克隆羊问题现有一直样, 名为Tom, 年龄为1,

2021-11-23 16:46:52 389

原创 设计模式之工厂模式

工厂模式需求传统方式类图代码优缺点改进简单工厂类图代码工厂方法模式新需求思路类图代码抽象工厂类图代码小结需求要求便于披萨种类的扩展,便于维护披萨的种类很多披萨的制作有 prepare, bake, cut, box完成披萨店订购功能传统方式类图代码/** * @Classname Pizza * @Description * @Date 2021/9/28 14:12 * @Author Yzx */public class Pizza { private St

2021-11-23 15:39:36 508

原创 单例设计模式

单例模式介绍实现方式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全 同步方法)懒汉式(线程安全 同步代码块)双重检查静态内部类枚举注意事项介绍采取一定的方法保证在整改的软件体系中, 对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象的静态方法实现方式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全, 同步方法)懒汉式(线程安全, 同步代码块)双重检查静态内部类枚举饿汉式(静态常量)私有化构造器(防止new对象

2021-10-26 16:13:32 88

原创 UML类图关系

UML类图关系依赖关系泛化关系实现关系关联关系单向一对一双向一对一聚合关系组合关系依赖关系只要类中使用到了对方, 那么他们直接就存在依赖关系类中使用到了对方类的成员属性方法的返回类型方法接受的参数类型方法中使用到的类型#mermaid-svg-qqOMOUKP5Hcz7lsc .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:

2021-10-13 15:16:01 58

原创 设计模式七大原则

设计模式七大原则设计模式目的七大原则单一职责原则接口隔离原则依赖倒转原则里氏替换原则开闭原则迪米特法则合成复用原则七大原则归纳设计模式目的为了让查询具有更好的代码重用性(相同功能的代码, 不用多次编写)可读性(编程规范性, 便于其他程序员的阅读和理解)可拓展性(当需要增加新功能时, 非常方便, 可维护)可靠性(新增功能后对原来的功能没有影响)使程序呈现高内聚, 低耦合的特性七大原则单一职责原则接口隔离原则依赖倒转原则里氏替换原则开闭原则迪米特法则合成复用原则单一职

2021-10-13 11:52:51 52

原创 强密码校验

强密码校验JS版本强密码规则校验Java版本强密码规则校验强密码规则: 必须包含大小写字母和特殊字符, 长度为8至30位JS版本强密码规则校验var regex= /^(?![A-z0-9]+$)(?=.[^%&',;=?$\x22])(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{8,20}$/;console.log(regex.test("Qq123456*"));Java版本强密码规则校验package com.util;/** * @Descr

2021-04-29 15:31:01 996 1

原创 SpringBoot的自动配置源码

SpringBoot的自动配置原理@SpringBootApplication注解SpringBoot的自动配置原理@EnableAutoConfiguration注解作用@SpringBootApplication注解@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@Componen

2021-03-01 15:02:59 156

原创 Spring 循环依赖问题

Spring 循环依赖问题整体过程解决循环依赖的前置条件出现循环依赖的 Bean 必须是单例的依赖注入的方式不能都是构造注入的方式整体过程Spring 通过三级缓存解决了循环依赖问题, 一级缓存为单例池, 二级缓存为早期暴光对象, 也就是还没有属性注入及初始化的对象, 三级缓存为早期暴露的单例工厂, 二级缓存中存储的就是从这个工厂获取的对象调用 doGetBean() 方法, 想要获取 beanA, 于是调用 getSingleton() 方法从缓存中查找 beanA在 getS

2021-02-21 10:06:50 131

原创 Spring事务

Spring事务Spring事务的隔离级别Spring 事务传播行为@TransactionalSpring事务的隔离级别TransactionDefinition.ISOLATION_DEFAULT: 使用后端数据库默认的隔离级别TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读,幻读或不可重复读TransactionDefinition.ISOLATION_READ_COMMITTED:

2021-02-19 11:23:56 106

原创 Spring中的Bean的生命周期

Spring中的Bean的生命周期Bean 容器找到配置文件中的 Spring Bean 的定义Bean 容器利用 Java Reflection API 创建 Bean的实例如果涉及到一些属性值, 利用 set() 方法设置属性值如果 Bean 实现了 BeanNameAware 接口, 调用 SetBeanName() 方法传入 Bean 的名字如果实现了其他的 *Aware 接口, 就调用相应的方法如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProces

2021-02-19 10:47:37 88

原创 RabbitMQ高可用

RabbitMQ高可用各种消息队列对比使用推荐RabbitMQ 高可用普通集群模式镜像集群模式保证消息队列的幂等性(消息不被重复消费)消息队列的可靠性传输生产者丢失数据RabbitMQ丢失数据消费者丢失数据保证消息的顺序性消息积压问题各种消息队列对比特性ActiveMQRabbitMQRocketMQKafka单机吞吐量万级, 吞吐量比RocketMQ和Kafka要低一个数量级万级, 吞吐量比RocketMQ和Kafka要第一个数量级10万级, RocketMQ也是可以支

2021-02-19 09:48:11 2793 1

原创 分布式事务及解决方案

分布式事务及解决方案分布式事务强一致性弱一致性最终一致性CAP一致性 C可用性 A分区容错性 P总结BASE 理论柔性事物幂等操作分布式事务解决方案两阶段提交 (2PC)大致流程存在问题三阶段提交 (3PC)大致流程存在问题TCC (Try Confirm Cancel)大致流程相比 2PC 解决的问题存在问题本地消息表大致流程实现条件容错机制可靠消息最终一致性 (只有 RocketMQ 实现)大致流程与本地消息表区别尽最大努力通知大致流程分布式事务指事务的参与者, 支持事务的服务器, 资源服务器以及

2021-02-06 13:13:58 126

原创 RabbitMQ 延迟队列

RabbitMQ 延迟队列什么是延迟队列Time To Live(TTL)Dead Letter Exchanges(DLX)延迟队列实现方式一(推荐)原理代码实现延迟队列实现方式二(不推荐)原理缺点什么是延迟队列延迟队列存储的对象肯定是对应的延时消息,所谓"延时消息"是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费。本人使用场景:项目对接银行支付, 由于银行回调会由于某种原因如网络波动等情况导致没有接收到回调, 需要自己去查询该订单是否已经支付

2021-02-05 14:54:12 240

原创 idea启动项目正常docker启动失败问题记录

idea启动项目正常docker启动失败问题记录问题描述查找问题原因分析解决方案问题描述项目在本地启动正常, 但是打包后放到docker生成镜像后发现启动失败查找问题查看docker容器项目的启动日志docker logs -f -t --tail 40 容器id可以发现启动失败的原因是找不到类原因分析本地启动是正常的, 但是打包后竟然出现类找不到的情况查看类发现这个类是外部引入的类,由于是对接银行,所以使用了特定类之前pom文件引入方式是直接引入 <depende

2021-02-05 11:45:31 1283

原创 maven 安装本地 jar包

maven 安装本地 ja r包maven安装本地 jar 包在pom文件中引入刚刚安装的jar包最近对接交通银行支付需要引入外部 jia 包, 发现非maven引用在docker环境启动下会出现无法找到类的情况,初步发现是打包没有把引入的外部jar打包进去,本地启动没问题,打包后启动就报错的情况maven安装本地 jar 包在需要安装的jar包文件夹下执行cmd命令:mvn install:install-file -Dfile=jar包名称 -DgroupId=分组id-Dartifac

2021-02-05 11:30:49 298

原创 CentOS 6.X开源镜像站Yum源失效404问题解决

CentOS 6.X开源镜像站Yum源失效404问题解决CentOS停止维护时间解决方案关闭fastestmirror备份原Yum源文件更换Yum源清理并构建新缓存CentOS停止维护时间CentOS 6 停止维护更新日期2020年11月30日CentOS 7 停止维护更新日期2024年6月30日CentOS 8 停止维护更新日期2029年5月31日解决方案关闭fastestmirrorsed -i "s/enabled=1/enabled=0/g" /etc/yum/pluginconf

2021-02-02 15:12:57 688

原创 十二、七款经典垃圾收集器

十二、七款经典垃圾收集器GC分类评估GC的性能指标七款经典的垃圾收集器Serial回收器: 串行回收ParNew回收器: 并行回收Parallel回收器: 吞吐量优先CMS回收器: 低延迟工作原理CMS的优点CMS的弊端CMS的参数设置小结G1回收器: 区域化分代式介绍工作原理GC分类按线程数分,可以分为串行垃圾回收器和并行垃圾回收器串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直到垃圾收集结束在单CPU处理器或较小的应用内存等硬件平台不是特别优越

2021-02-02 09:04:14 558

原创 十一、垃圾回收其他相关概念

十一、垃圾回收其他相关概念System.gc()的理解内存溢出(OOM)内存泄漏(Memory Leak)Stop The World并发与并行垃圾回收的并发与并行安全区域引用强引用(StrongReference): 不回收软引用(SoftReference): 内存不足即回收弱引用(WeakReference): 发现即回收虚引用(PhantomReference): 对象回收跟踪终结器引用(FinalReference)System.gc()的理解默认情况下,通过System.gc()或者Run

2021-01-29 10:41:19 139

原创 十、垃圾回收及相关算法

十、垃圾回收及相关算法垃圾为什么需要GCJava垃圾回收机制判断垃圾相关算法引用计数算法(Java未采用)可达性分析算法(Java, C#采用)GC Roots对象的finalization机制获取dump文件垃圾清除阶段标记-清除算法(Mark-sweep)复制算法(Copying)标记-压缩算法(Mark-Compact)标记-清除算法与标记-压缩算法对比三种算法小结指针碰撞分代收集算法增量收集算法分区算法垃圾垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾如果不及时对内存

2021-01-29 10:04:39 135

原创 九、StringTable

九、StringTableString基本特性String的内存分配StringTable为什么要从永久代调整到堆中字符串拼接拼接操作与append效率对比intern()的使用new String("ab") 创建几个对象new String("a") + new String("B") 创建几个对象intern使用总结String基本特性String: 字符串,使用一堆 “” 引起了表示String声明为final,不可继承String实现了Serializable接口:表示字符串可序列化,实

2021-01-27 10:35:55 104

原创 八、执行引擎

八、执行引擎概述工作过程Java代码编译解释器JIT编译器Java是半编译半解释型语言字节码解释器JIT编译器即时编译技术热点代码热点衰减Hotspot设置执行方式Hotspot VM中JIT分类C1和C2编辑器优化策略概述是java虚拟机核心组成部分之一执行引擎是由软件自行实现,可以不收物理条件制约的定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式JVM的主要任务时复制装载字节码到其内部,但字节码并不能直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,内部包含

2021-01-27 10:08:01 90

原创 七、对象实例化

七、对象实例化对象实例化创建对象的方式创建对象的步骤对象内存布局对象头实例数据对齐填充对象访问定位直接内存对象实例化创建对象的方式new对象和调用静态方法Class的newInstance() 反射方式,只能调用空参构造器,权限publicConstructor的newInstance(xxx) : 反射方式,可以空参,有参构造器,无权限要求使用clone() : 不调用任何构造器,需实现CLoneable接口的clone()方法使用反序列化 : 从文件中等获取一个对象的二进制流第三方库O

2021-01-27 09:50:03 83

原创 六、运行时数据区(四)方法区

六、运行时数据区(四)方法区栈,堆,方法区的交互关系方法区JDK7及JDK8实现设置方法区内存大小解决OOM内部结构与储存信息类型信息域信息方法信息non-final的类变量运行时常量池与常量池常量池为什么需要常量池常量池存储的数据类型运行时常量池方法区演进细节元空间替换永久代原因StringTable调整原因方法区的垃圾收集总结栈,堆,方法区的交互关系方法区<Java虚拟机规范> 中明确说明: “尽管所有的方法区在逻辑上是属于堆的一部分, 但一些简单的实现可能不会选择去进行垃圾收集或

2021-01-27 09:33:27 85

原创 五、运行时数据区(三)堆

五、运行时数据区(三)堆堆核心概述内存结构堆空间大小设置年轻代与老年代对象分配过程特殊情况常用调优工具Minor GC、Major GC、Full GC年轻代GC(Minor GC)触发机制老年代GC(Major GC / Full GC)触发机制Full GC 触发机制堆空间分代思想内存分配策略对象分配过程: TALB为什么有TLAB什么是TLAB堆空间参数设置堆是分配对象的唯一选择吗逃逸分析参数设置代码优化栈上分配同步省略标量替换小结堆核心概述一个JVM实例只存在一个堆内存, 堆也是Java内存管

2021-01-26 17:03:50 106

原创 四、运行时数据区(二)虚拟机栈

四、运行时数据区(二)虚拟机栈虚拟机栈特点可能出现的异常设置栈的大小栈帧弹出方式栈中存储虚拟机栈面试题虚拟机栈每个线程在创建时都会创建一个虚拟机栈, 其内部保存一个个的栈帧, 对应这一次次的Java方法调用,线程私有的. 生命周期与线程一致. 主管java程序的运行,保存方法的局部变量, 部分结果, 并参与方法的调用和返回特点内存小,跨平台性,指令集小,编译器容易实现,访问速度仅次于PC寄存器JVM直接对Java栈的操作只有 进栈和出栈栈不存在GC问题, 存在OOM, PC寄存器即不存在G

2021-01-26 16:20:45 77

原创 三、运行时数据区(一)

运行时数据区(一)结构图程序计数器(PC寄存器)为什么设定为线程私有?本地方法栈栈与堆结构图JDK8 的元数据区 + JIT编译产物 就是 JDK7及以前的方法区线程私有: 程序计数器, 虚拟机栈, 本地方法栈线程共享: 堆 , 对外内存 (方法区永久代或元空间, 代码缓存)一般来说JVM优化 95% 是优化堆区, 5% 是优化方法区程序计数器(PC寄存器)PC寄存器是用来存储指向下一条指令的地址, 也即将要执行的指令代码. 由执行引擎读取下一条他是一个很小的空间,几乎可以忽略不计, 也

2021-01-26 16:08:43 85

原创 二、类装载子系统

类装载子系统类装载子系统位置作用加载链接模块验证准备解析初始化类加载器分类获取ClassLoader的途径双亲委派机制沙箱安全机制类装载子系统位置作用类加载子系统负责从文件系统或者网络中加载class文件, class文件在文件打开头有特定的文件标识classLoader只负责class文件的加载,至于他是否可以运行, 则有Execution Engine 决定加载的类信息存放于一块称为方法区的内存空间,除了类的信息外,方法区中还会存放运行时常量池信息,可能还包含字符串字面量和数字常量(这部分

2021-01-26 14:49:06 70

原创 一、 JVM简介

JVM简介什么是JVM常见的JVMJava内部体系结构JVM位置JVM架构图JVM架构模型JVM生命周期虚拟机的启动虚拟机的执行虚拟机的退出什么是JVM运行编译好的Java文件生成的 .class 文件,并解析为当前运行系统所对应的指令.Java程序的跨平台性主要指字节码文件可以在任何具有Java虚拟机的计算机或电子设备上运行,Java虚拟机中的Java解释器复制将字节码文件解释成特定的机器码进行运行.常见的JVMSUN ClassicExact VMHotSpot VM : HotSpot

2021-01-26 14:33:51 121

原创 Redis 其他知识点

Redis 其他知识点NoSQL数据库(非关系型数据库)Redis 特性Redis 内存划分Redis 和 Memcached 的区别Redis 单线程模型效率高的原因Redis 单线程模型Reds 6.0 开始引用多线程Redis过期策略内存淘汰机制Redis 事务Redis 监控 Watch (可以实现乐观锁)缓存雪崩及解决方案缓存穿透及解决方案缓存击穿布隆过滤器概念原理保证缓存与数据库的双写一致性Redis并发竞争问题Redis分布式锁使用Redission框架的分布式锁 (主要使用)RedLock

2021-01-26 14:15:16 62

原创 Redis 高可用

Redis 高可用Redis 主从架构Redis主从复制的原理哨兵单机哨兵原理Redis哨兵集群高可用哨兵集群原理哨兵核心知识Redis 哨兵主备切换数据丢失解决方案[Redis Cluster 集群 (常用)](https://blog.csdn.net/weixin_38854703/article/details/113173415)特点原理一致性 Hash 算法判断节点宕机从节点选举Redis的持久化方式RDB 原理AOF 原理如何选择Redis 主从架构一主多从,主负责写,并且将时间负责到其

2021-01-26 11:34:58 65

原创 Redis集群搭建

Redis集群搭建该部分为redis 5.0 以前版本才需安装 == 开始 ==该部分为redis 5.0 以前版本才需安装 == 结束 ==由于Redis的容错投票机制是集群中过半数的节点认为某个节点检测失效时才生效,所以搭建最小集群模式至少需要三个节点,但是为了集群的高可用,就需要为每一个节点增加一个备份机,所以就需要六台服务器。所以搭建伪分布式集群创建集群文件夹,将已安装好的Redis中的bin目录复制到该集群文件夹中删除集群7001文件夹下的dump.rdb文件,将redis.c

2021-01-26 09:55:41 94

原创 Redis 八大数据类型

Redis 八大数据类型Redis 的五大基本数据类型String(字符串)应用场景常用命令List(列表)应用场景常用命令Hash(字典)应用场景常用命令Set(集合)应用场景常用命令ZSet(有序集合)应用场景常用命令跳跃表Redis 三种特殊数据类型Geospatial 地理位置(GEO)getaddgetposGEODISTGEORADIUSGEORADIUSBYMEMBERGEOHASH其他Hyperloglog 统计应用场景Bitmap 位图应用场景Redis 的五大基本数据类型String

2021-01-26 09:26:52 864

原创 mysql 5.7 安装与主从配置

mysql 5.7 安装与主从配置主从配置介绍各种方式优点主从复制原理准备工作mysql 5.7 安装准备工作配置主从配置从服务器验证是否成功取消主从主服务器数据库已有数据安装过程中出现的问题主从配置介绍主从配置又叫做Replication、AB复制。是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。默认情况下,复制是异步的, 从站不需要永久连接以接收来自主站的更新。根据配置,可以复制数据库中的所有数据库,所选数据库甚至选定的表。各种方式

2021-01-25 16:53:37 171

原创 MySQL 事务 & MVCC

MySQL 事务 & MVCC事务的四大特性并发事务带来的问题事务的隔离级别MVCC当前读快照读隐藏字段undo 日志Read ViewMVCC 原理事务的四大特性原子性: 要么都成功,要么都失败一致性: 执行事务前后数据保持一致,多个事务对同一个数据库读取的结果是相同的隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,个并发事务直接数据库是独立的持久性: 一个事务被提交后,对数据库中数据的改变是持久的.数据库发生故障也不会对其有任何改变并发事务带来的问题脏读: 读取

2021-01-25 15:43:03 130

原创 MySQL索引

MySQL索引MyISAM 和 InnoDB 区别为什么要用索引索引的数据结构B+Tree 原理B+Tree 和 B 树的区别B+Tree 和[红黑树](https://editor.csdn.net/md/?articleId=112994731)的比较B+Tree 和 Hash 索引比较为什么 MySQL 默认索引是 B+TreeMySQL 实现 B+Tree 索引MyISAM 实现 B+TreeInnoDB 实现 B+Tree索引缺点如何使用索引覆盖索引查询性能优化MyISAM 和 InnoDB 区

2021-01-25 10:09:51 74

原创 AQS(AbstractQueuedSynchronizer) 框架源码解析

AQS框架源码解析什么是AQSAQS 内部体系架构内部类 Node 结构AQS 同步队列基本结构源码解析本次以非公平锁开始分析抢锁解锁回到前面线程抢锁阻塞处什么是AQS用来构建锁或其他同步器组件的重量级基础框架及整个 JUC体系的基石,通过内置的 CLH队列的变种来完成资源获取线程的排队工作,将每条要去抢占资源的线程封成一Node节点来实现锁的分配,有一个 int 的 state 变量表示持有锁的状态,通过 CAS 完成对 state 变量的修改 0表示没有,1表示阻塞, 大于1表示可重入锁AQS

2021-01-23 15:00:23 134

原创 线程池及原理

线程池及原理线程池的好处创建线程池的三大方法Executors 创建的弊端:创建线程池七大参数四大拒绝策略最大线程池如何定义线程池中的线程创建流程线程池的好处降低资源的消耗提高响应的速度方便管理线程复用,可以控制最大并发数,管理线程创建线程池的三大方法线程池不允许使用 Executors 去创建,而是通过 ThreeadPoolExecutor 的方式Executors.newSingleThreadExecutor(); // 单个线程Executors.newFixedTh

2021-01-23 14:21:27 53

原创 红黑树&二叉树

红黑树了解二叉查找树二叉树特点二叉查找树缺点红黑树红黑树特点红黑树自平衡操作左旋右旋变色红黑树查找流程红黑树插入流程红黑树删除了解二叉查找树二叉树特点左子树上所有的节点值均小于或等于他的根节点的值右子树上所有的节点的值均大于或等于他的根节点的值左右子树也一定分别为二叉排序树二叉查找树缺点插入新节点会导致不平衡,可能会导致一边特别长,查询的性能大大折扣,几乎就是线性查找红黑树红黑树特点符合二叉查找树的特征之外还符合一下性质节点颜色为红色或者黑色根节点为黑色每个叶子的

2021-01-23 13:03:40 162

空空如也

空空如也

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

TA关注的人

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