自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一树一菩提的博客

努力、奋斗

  • 博客(64)
  • 收藏
  • 关注

原创 必看,关于sql的慢查询及解决方案

文章目录 一、前言二、慢查询概要2.1 第一步,慢查询分析之前的配置2.1.1 方式一:修改my.ini2.1.2 方式二:修改数据库 2.2 第二步,找到执行慢的sql语句2.3 第三步,找到原因两种方式之一,explain分析,explain各个字段的解释2.4 第四步,找到原因两种方式之一,profile分析,找到慢查询的本质原因,profile各个字段的解释2.4.1 explain制造慢sql语句,profile找到慢的sql语句2.4.2 show profile for query 具

2021-05-31 09:49:19 7731

原创 Zuul和Gateway的区别

spring-cloud-Gateway是spring-cloud的一个子项目。而zuul则是netflix公司的项目,只是spring将zuul集成在spring-cloud中使用而已。因为zuul2.0连续跳票和zuul1的性能表现不是很理想,所以催生了spring团队开发了Gateway项目。Zuul:使用的是阻塞式的 API,不支持长连接,比如 websockets。底层是servlet,Zuul处理的是http请求没有提供异步支持,流控等均由hystrix支持。依赖包spring-cl.

2021-05-13 15:59:48 16972

原创 各证件号码(身份证、护照、军官证、驾驶证、港澳台湾通行证、户口簿)正则表达式校验 完整正确

网上种类繁多,这里整理了最详细最正确的(身份证、护照、军官证、驾驶证、港澳台湾通行证、户口簿)正则校验package com.***.utils;/** * @Description 各证件卡号校验类 * @author longwei * @date 2020/7/23 14:17 */public class CardsUtil { /** 正则表达式:验证身份证 */ public static final String REGEX_ID_CARD = "(^[1-9

2020-07-24 14:59:02 15891 1

原创 Java从resources文件下载文档,文档没有后缀名

Java从resources文件下载文档,文档没有后缀名,下载成需要的文档格式文件

2023-10-12 16:12:56 816

原创 Java 给某段代码加超时时间

问题原因:使用HuTool 的DbTtil 不能设置数据库连接超时时间,可能数据库挂了,会导致连接一直卡在那,也没有异常抛出,导致线程一直占着。所以给该段代码加超时时间处理。

2023-02-16 15:14:21 1184

原创 爽文,Redis分布式锁的实现和原理

分布式锁,就是控制分布式系统中不同进程共同访问同一共享资源的一种锁的实现。所谓当局者迷,旁观者清,先举个生活中的例子,就拿高铁举例,每辆高铁都有自己的运行路线,但这些路线可能会与其他高铁的路线重叠,如果只让高铁内部的司机操控路线,那就可能出现撞车事故,因为司机不知道其他高铁的运行路线是什么。所以,中控室就发挥作用了,中控室会监控每辆高铁,高铁在什么时间走什么样的路线全部由中控室指挥。

2023-02-09 11:37:25 646

原创 Spring Cloud Sleuth 链路追踪

清晰地记录服务的调用链路是一个需要解决的问题。同时,由于各种原因,跨进程的服务调用失败时,运维人员希望能够通过查看日志和查看服务之间的调用关系来定位问题,而Spring cloud sleuth组件正是为了解决微服务跟踪的组件。一、背景单纯的理解链路追踪,就是将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

2023-02-06 17:12:43 767

原创 Java日期时间转Cron表达式

Date,LocalDateTime转Cron表达式

2022-11-07 09:31:49 2365 2

原创 Mysql强大的开窗函数Demo1

开窗函数Demo1业务场景每天产生四种血型的最新库存数量,需要根据年月排序拿到最新一天的库存量数据库准备CREATE TABLE `yl461_blood_station_storagedetail` ( `ID` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '平台血站血液库存编号', `BLOODVARIETIESCODE` varchar(2) CHARACTER SET utf8

2022-05-27 14:47:48 165

原创 docker-compose部署Nacos集群

docker-compose部署Nacos集群1、参考: https://www.jianshu.com/p/88b4aec8db69 前置准备:docker、nacos的数据库2、创建nacos目录3、切换到nacos目录下,创建并写nginx.conf配置文件4、创建并写docker-compose.yaml配置文件5、编排docker-compose.yaml6、地址:http:{ip}:8845/nacos 账号密码都为nacos1、参考: https://www.ji

2022-05-07 14:04:13 3602 3

转载 Docker的基本命令(转)

一、基本命令 docker version查看docker版本 docker info查看docker详细信息 docker --help查看docker命令 二、镜像命令 docker images查看docker镜像 PEPOSITORY:镜像的仓库源 TAG:镜像的标签 IMAGE ID:镜像ID CREATED:镜像创建时间 SIZE:镜像大小  同一个仓库源可以有多个TAG,表示这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像。如果不指定一个镜像的版本标签,例如只使用t

2022-04-19 10:10:04 213

转载 MySQL中IS NULL、IS NOT NULL、|=索引问题

看面试题的时候,总能看到MySQL在什么情况下用不上索引,如下:MySQL的WHERE子句中包含 IS NULL、IS NOT NULL、!= 这些条件时便不能使用索引查询,只能使用全表扫描。不耽误大家时间,告诉大家结论:MySQL中决定使不使用某个索引执行查询的依据就是成本够不够小,如果null值很多,还是会用到索引的。自己做了个验证:一个大概3万数据的表,如果只有10多个记录是null值,is null走索引,not null和!=没走索引,如果大部分都...

2022-03-17 16:47:27 2400

转载 线程池的工作原理与源码解读及各常用线程池的执行流程图

其中使用到了线程池的内容下面给大家介绍下线程池的工作原理与源码解读及各常用线程池的执行流程图 有时候花了大把时间去看一些东西却看不懂,是很 “ 蓝瘦 ” 的,花时间也是投资。 本文适合: 曾了解过线程池却一直模模糊糊的人了解得差不多却对某些点依然疑惑的  随着cpu核数越来越多,不可避免的利用多线程技术以充分利用其计算能力。所以,多线程技术是服务端开发人员必须掌握的技术。   线程的创建和销毁,都涉及到系统调用,比较消耗系统资源,所以就引入了线程池技术,避免频繁的线程创.

2021-06-22 16:17:49 818

转载 关于 锁的四种状态与锁升级过程 图文详解

一、前言锁的状态总共有四种,级别由低到高依次为:无锁、偏向锁、轻量级锁、重量级锁,这四种锁状态分别代表什么,为什么会有锁升级?其实在 JDK 1.6之前,synchronized 还是一个重量级锁,是一个效率比较低下的锁,但是在JDK 1.6后,Jvm为了提高锁的获取与释放效率对(synchronized )进行了优化,引入了 偏向锁 和 轻量级锁 ,从此以后锁的状态就有了四种(无锁、偏向锁、轻量级锁、重量级锁),并且四种状态会随着竞争的情况逐渐升级,而且是不可逆的过程,即不可降级,也就是说只能进行锁.

2021-06-22 10:33:35 658

原创 死锁的原因及解决方案

死锁的概念 死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局,若无外力作用,这些进程(线程)都将无法向前推进 ,这时就形成了死锁。处于死锁状态的进程称为死锁进 比如一扇门,你要出我要进,你在等我让,我在等你让,这时就陷入了死循环,就形成了死锁。 死锁产生的原因 先来看两个概念: 可抢占资源和不可抢占资源 可抢占资源:指某进程在获得这类资源后,该资源可以再被其他进程或系统抢占。对于这类资源是不会引起死锁的。CPU 和主存均属于可抢占...

2021-06-03 13:18:25 816

转载 Redis的缓存穿透及解决方法—布隆过滤器BloomFilter

目录 1. Redis概述: 2. Redis的主要应用场景: 3. 缓存穿透及布隆过滤器 (1)缓存穿透(大量查询一个不存在的key)定义 (2)解决方法 ps:布隆过滤器原理 ps:布隆过滤器另一个用途——推荐去重 1. Redis概述: Redis是一个开源的Key-Value存储系统,其中Value支持String、list、set、hash、zset五种数据结构,这些数据都支持push/pop、add/remove、取交集并集、排序等丰...

2021-06-03 09:52:57 377

转载 Redis为什么会比MySQL快

1.Redis是基于内存存储的,MySQL是基于磁盘存储的2.Redis存储的是k-v格式的数据。时间复杂度是O(1),常数阶,而MySQL引擎的底层实现是B+Tree,时间复杂度是O(logn),对数阶。Redis会比MySQL快一点点。3.MySQL数据存储是存储在表中,查找数据时要先对表进行全局扫描或者根据索引查找,这涉及到磁盘的查找,磁盘查找如果是按条点查找可能会快点,但是顺序查找就比较慢;而Redis不用这么麻烦,本身就是存储在内存中,会根据数据在内存的位置直接取出。4.Redis是单线程的

2021-06-02 17:01:32 1194

转载 B树索引和Hash索引的应用场景和区别

转自:https://blog.csdn.net/chuangsun/article/details/78013537关系型数据库中,索引大多采用B/B+树来作为存储结构,而全文搜索引擎的索引则主要采用hash的存储结构,这两种数据结构有什么区别?如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;从示意图中也能看到,如果是范围查询检索,这时候哈希

2021-06-02 16:05:03 1973

转载 SpringBoot自动装配原理分析

先看看SpringBoot的主配置类: 里面有一个main方法运行了一个run()方法,在run方法中必须要传入一个被@SpringBootApplication注解的类。 @SpringBootApplication SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就会运行这个类的main方法来启动SpringBoot项目。 那@SpringBootApplication注解到底是什么呢,点进去看看...

2021-06-01 22:53:42 143

转载 聚簇索引和非聚簇索引

参考博客:http://www.admin10000.com/document/5372.html 聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。具体细节依赖于其实现方式。 MySQL数据库中innodb存储引擎,B+树索引可以分为聚簇索引(也称聚集索引,clustered index)和辅助索引(有时也称非聚簇索引或二级索引,secondary index,non-clustered index)。 这两种索引内部都是B+树,聚集索引的叶子节点存放着一整行的数据。 Innobd中的主键.

2021-05-21 14:58:11 427

转载 垃圾回收机制算法

什么是垃圾回收机制 垃圾回收机制就是,不定时,向堆内存中清理不可达对象。 垃圾回收可以有效的防止内存泄漏,有效的使用空闲的内存。 内存泄漏是指改内存空间使用完毕之后未被回收,在不涉及复杂数据结构的一般情况下,java的内存泄漏表现为一个内存对象的生命周期超出了程序需要它的时间长度,我们优势也将其称为”对象游离“。 内存泄漏的定义:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着。 手动GC回收 public class JVMD...

2021-05-21 09:39:59 173

转载 JAVA线程池的种类

常用的JAVA线程池有以下几种类型:1、newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。这种类型的线程池特点是:工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。在使.

2021-05-20 18:13:46 841

转载 synshronzed 1.6之后的提升

synchronized是Java里一个重量级的操作,但是同时我们又说从JDK1.6之后synchronized性能有了大幅上升,那,为什么JDK1.6之后它的性能就大幅提升了呢? 一、synchronized的实现原理 在Java中最基本的互斥同步手段就是synchronized关键字,synchronized关键字经过编译之后,会在同步块的前后分别形成monitorenter和monitorexit这两个字节码指令,这两个指令都需要一个reference类型的参数来指明要锁定和要解锁的对象。 如.

2021-05-20 17:53:48 390

转载 为什么MySQL数据库索引选择使用B+树?

为什么MySQL数据库索引选择使用B+树?在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使用B+树!学过数据结构的一般对最基础的树都有所认识,因此我们就从与我们主题更为相近的二叉查找树开始。 一、二叉查找树(1)二叉树简介:二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质:1、任意节点左子树不为空,则左...

2021-05-20 16:58:16 127

原创 Spring AOP(通知、连接点、切点、切面)

一、AOP术语通知(Advice)  切面的工作被称为通知。通知定义了切面是什么以及何时使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题。5种通知类型:前置通知(Before):在目标方法被调用之前调用通知功能后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么返回通知(After-returning):在目标方法成功执行之后调用通知异常通知(After-throwing):在目标方法抛出异常后调用通知环绕通知(Ar...

2021-05-20 15:53:37 2579 1

转载 Spring七种事务传播行为及五种隔离级别

1. 首先,说说什么事务(Transaction) 事务,就是一组操作数据库的动作集合。事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚到最初的系统状态。2. spring七个事务传播属性: 1.PROPAGATION_REQUIRED – 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择.

2021-05-20 14:56:12 181

转载 分布式-分布式系统

什么是分布式系统? 要理解分布式系统,主要需要明白一下2个方面: 1.分布式系统一定是由多个节点组成的系统。 其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。2.这些连通的节点上部署了我们的节点,并且相互的操作会有协同。 分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服务而已,而实际上这些服务是通过背后的众多服务器组成的一个分布式系统,因此分布式系统看起来像是一个超级计算机一样。 例如淘宝,平时大家都会使用,它本身就是一个分布式系统,我们通过浏览器访问淘宝网.

2021-05-20 11:26:55 312

转载 RocketMQ-延迟消息

延迟消息是实际开发中一个非常有用的功能,本文第一部分从整体上介绍秒级精度延迟消息的实现思路,在第二部分结合RocketMQ的延迟消息实现,进行细致的讲解,点出关键部分的源码。第三步介绍延迟消息与消息重试的关系。 1 延迟消息介绍 基本概念:延迟消息是指生产者发送消息后,不能立刻被消费者消费,需要等待指定的时间后才可以被消费。 场景案例:用户下了一个订单之后,需要在指定时间内(例如30分钟)进行支付,在到期之前可以发送一个消息提醒用户进行支付。 一些消息中间件...

2021-05-19 11:14:54 344

原创 RocketMQ-高可用性机制

一、分布式集群 RocketMQ分布式集群是通过Master和Slave的配合达到高可用性的。 Master和Slave的区别:在Broker的配置文件中,参数brokerId的值为0表明这个Broker是Master,大于0表明这个Broker是Slave,同时brokerRole参数也会说明这个Broker是Master还是Slave。 Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是 Producer只能和Master角色的...

2021-05-18 19:02:33 296

原创 RocketMQ—HA高可用

在集群模式的部署方式中,Master与Slave配对是通过指定相同的brokerName参数来配对,Master的BrokerId必须是0,Slave的BrokerId必须是大于0的数。一个Master下面可以挂载多个Slave,同一个Master下的多个Slave通过指定不同的BrokerId来区分。有4种部署方式: 部署方式优点缺点备注单个Master模式一旦Broker重启或者宕机时,会导致整个服务不可用,不建议线上环境使用;多个Master模式配置简单,单...

2021-05-18 18:54:10 265

原创 RocketMQ消息模型

rocketmq采用的是发布-订阅的模式,不需要每个消费者维护自己的消息队列,生产者将消息发送到topic,消费者订阅此topic 读取消息。  基本概念:  消息模型:消息模型包括producer,consumer,broker三部分。producer生产消息,consumer消费消息,broker存储消息,broker可以是集群部署,其中topic位于broker中  Producer: 一般是业务系统为生产者,将消息投递到broker,投递消息要经历“请求-确认”机制,确.

2021-05-18 10:26:03 627

原创 消息队列入门了解

参考博客: https://www.cnblogs.com/williamjie/p/9481780.html https://www.cnblogs.com/laojiao/p/9573016.html 1. 什么是MQ? 消息队列(MQ),是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。 消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排

2021-05-17 15:22:34 73

原创 Redis的集群模式

    通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据都是。     为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器已让可以继续提供服务。为此,Redis提供了复制(rep...

2021-05-14 16:20:04 109

原创 Redis持久化的区别

1、前言Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”.

2021-05-14 16:06:05 236

原创 Redis的过期策略和内存淘汰机制,LRU算法?

redis 的过期策略都有哪些?内存淘汰机制都有哪些?[手写一下 LRU 代码实现?](https://blog.csdn.net/kuizhu7142/article/details/81115750) 常见的有两个问题: • 往 redis 写入的数据怎么没了? 可能有同学会遇到,在生产环境的 redis 经常会丢掉一些数据,写进去了,过一会儿可能就没了。我的天,同学,你问这个问题就说明 redis 你就没用对啊。redis 是缓存,你给当存储了是吧? 啥叫缓存?用内存当缓存。内存是无限的吗,内.

2021-05-14 11:11:07 157

转载 redis并发竞争key问题如何解决

1. 问题描述 并发竞争key这个问题简单讲就是: 同时有多个客户端去set一个key。 示例场景 1 例如有多个请求一起去对某个商品减库存,通常操作流程是: 取出当前库存值 计算新库存值 写入新库存值 假设当前库存值为 20,现在有2个连接都要减 5,结果库存值应该是 10 才对,但存在下面这种情况: 示例场景 2 比如有3个请求有序的修改某个key,按正常顺序的话,数据版本应该是&nbs...

2021-05-14 10:37:05 2364

原创 一、Nacos入门介绍

前言6月份阿里开源的Nacos发布了1.0.1版本,从去年7月份第一个release版本到现在一直在默默关注官方的版本规划为:Nacos从0.8.0开始支持生产可用,1.0版本可大规模生产可用,2.0版本接入k8s、SpringCloud、ServiceMesh、ServerLess公司目前的项目都是Springcloud,由于eureka2.X的断更、以及Nacos面世,所以自然而然最近就进行了一次试水爬坑,虽然过程艰苦,但是最终效果似乎还不错。本文主要从以下几点来带大家熟悉下NacosNac

2021-05-13 22:51:24 266

原创 Redis的新认知 九种数据类型

90%的人知道Redis 5种最基本的数据结构; 只有不到10%的人知道8种基本数据结构,5种基本+bitmap+GeoHash+HyperLogLog; 只有不到5%的人知道9种基本数据结构,5.0最新版本数据结构Streams; 只有不到1%的人掌握了所有9种基本数据结构以及8种内部编码; 掌握这篇文章的知识点,让你成为面试官眼中Redis方面最靓的仔! 说明:本文基于Redis-3.2.11版本源码进行分析。 5种普通数据结构 这个没什么好说的,对Redis稍微有点了解的都知道5种最基.

2021-05-13 22:44:23 392

原创 Eureka、Nacos、Consul的区别

1、配置中心 配置中心eureka不支持nacos支持 用起来简单,符合springBoot的命名风格,支持动态刷新consul支持 但用起来偏麻烦,不太符合springBoot框架的命名风格,支持动态刷新2、注册中心 eurekanacosconsul应用内/外直接集成到应用中,依赖于应用自身完成服务的注册与发现属于外部应用,侵入性小属于外部应用,侵入性小ACP原则遵循AP(可用性+分离容忍)原则,有较强的可用性,服务注册快,但牺牲了一定的一致性通知遵循CP原则(一致性+分离容忍) 和AP原则(可.

2021-05-13 15:37:19 629

转载 解析Spring Cloud

文章目录 为什么需要学习Spring Cloud什么是Spring Cloud设计目标与优缺点设计目标优缺点 Spring Cloud发展前景整体架构主要项目Spring Cloud ConfigSpring Cloud NetflixSpring Cloud BusSpring Cloud ConsulSpring Cloud SecuritySpring Cloud SleuthSpring Cloud StreamSpring Cloud TaskSpring Cloud Zookeep...

2021-05-13 14:59:01 97

空空如也

空空如也

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

TA关注的人

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