自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (1)
  • 收藏
  • 关注

原创 解决IDEA拉取或提交代码时SSL certificate problem: unable to get local issuer certificate问题

在项目根目录下,打开Git Bash。

2024-06-06 17:31:26 1143 1

原创 Windows下安装Go的SDK

Go的SDK安装

2023-02-17 18:05:24 1328

原创 解决Idea启动项目失败,提示Error running ‘XXXApplication‘: Command line is too long

Error running 'XXXApplication': Command line is too long. Shorten command line for XXXApplication or also for Spring Boot default configuration.

2023-02-13 15:00:13 5955

原创 SpringBoot——Banner介绍

springboot的banner的介绍

2023-02-10 11:10:42 9228

原创 解决SpringBoot项目整合Sharding-JDBC后启动慢的问题

解决整合了ShardingSphere-JDBC的Springboot项目启动慢问题。

2023-01-10 17:58:49 4347 4

原创 关于ShardingSphere内置分片算法及其数据倾斜问题总结

根据官网描述,ShardingSphere内置提供了多种分片算法,能够满足用户绝大多数业务场景的需要。按照类型可以划分为自动分片算法、标准分片算法、复合分片算法和 Hint 分片算法。其中,自动分片算法包括:取模分片算法,哈希取模分片算法,基于分片容量的范围分片算法,基于分片边界的范围分片算法,自动时间段分片算法。标准分片算法包括:行表达式分片算法,时间范围分片算法。复合分片算法只有复合行表达式分片算法。Hint 分片算法只有Hint 行表达式分片算法。

2022-12-22 10:34:06 3349 1

原创 Springboot整合shardingsphere-jdbc的5.2.0版本实现分库分表

Springboot整合shardingsphere-jdbc的5.2.0版本实现分库分表

2022-12-09 11:31:18 8254 6

原创 基于美团Leaf-Segment的双buffer方案实现序列号生成器

有时项目中对于流水号有一些特殊的需求。比如,和业务A有关数据,我们在落库时想要给每条数据添加一个流水号字段,用于作为全局唯一标识。流水号格式规则如下,如:BTA(业务A代号)+年月日(20221208)+序列号。并且对序列号的长度有要求,如序列号要求为5位,即从00001到99999,当序列号达到99999后,再次获取则继续从00001开始累加循环。流水号的形式如TX2022120800001。

2022-12-08 14:39:43 1377

原创 Linux下安装Git

Git官网如下,我们以安装Git最新版本2.36.1版本为例。Git可以通过rpm -aq | grep git或git -version查看当前Linux下是否已安装Git。可以看到当前Linux下没有安装Git,若安装了Git,则通过命令yum remove git删除已有的Git。由于我们是通过下载Git源码进行编译安装的,而Git是C语言编写的,所以在安装Git前需要提前安装编译Git时需要的包。执行以下两个命令:若在执行上面第一条命令时看到有类似如下报错时也没有关系,这是因为我们在安装这些包

2022-06-14 13:51:54 6471 3

原创 Linux下安装Tomcat

Tomcat官网如下,我们以下载安装9.0.64版本的Tomcat为例。Apache Tomcat® - Apache Tomcat 9 Software Downloads安装Tomcat前要确保Linux已安装了JDK,Linux下安装JDK可以参考之前的文章,连接如下Linux下安装JDK8_luffylv的博客-优快云博客_linux安装openjdk8在/opt目录下执行如下命令,即可将Tomcat安装包下载到/opt目录下。 将Tomcat安装在/opt/tomcat目录下,执行以下两个

2022-06-13 16:17:15 2992 1

原创 Linux下安装Maven

获取maven安装包有两种方式:1、直接去官网下载maven下载界面链接如下Maven – Download Apache Maven直接下载apache-maven-3.8.5-bin.tar.gz并拖进Linux系统中。2、使用wget命令在/opt目录下执行如下命令,即可将maven安装包下载到/opt目录下。二、安装Maven将maven安装在/opt/maven目录下,执行以下两个命令:安装完成后,执行mvn -version可以看到下图提示,是因为没有配环境变量。 可以通过两

2022-06-10 15:19:09 1701

原创 生成shardingsphere-jdbc分库分表配置脚本

使用shardingsphere-jdbc实现分库分表时需要在配置文件中配置分库规则,分表规则,以及不分库分表规则,若项目中涉及到的表数量较多,在进行配置的时候比较麻烦,并且很容易出错。下面针对shardingsphere-jdbc的5.0.0版本实现自动生成分库分表配置脚本。假设user表、order表作为需要进行分库分表的表,假设有4个数据库,每个库中有50个表,共计100张表,且这两张表以user_no为分片键。goosd表不分库分表,即该表只在主库中且只有一个表。注:该脚本只支持分库数小于10,分表

2022-06-09 18:06:20 996 1

原创 Linux下安装JDK8

我目前使用的虚拟机是CentOS7,也可以通过cat /etc/centos-release命令查看,如下图:安装系统时默认会安装JDK,可以通过java -version命令查看,如下图,可以看出系统默认安装的JDK是OpenJDK,版本为1.8.0_262。安装新JDK时需卸载任何之前安装的 Java 程序包。使用rpm -aq | grep java命令查看当前系统中已有的java程序包。如下图使用 rpm -e --nodeps package_name 命令卸载Java程序包,命令如下:上面

2022-06-08 16:16:56 2013

原创 将年月日字符串通过Calendar转成Date后月份被加一问题

简单描述下问题:数据库有一个开始时间字段`start_time` varchar(20) NOT NULL DEFAULT '' COMMENT '开始日',存储形如"2022-04-25"年月日的字符串,业务中需要将其转换为指定小时的形如"2022-04-25 07:00:00.0"的Date对象。我是通过Calendar类来处理实现的,代码如下:运行结果如下:从运行结果可以看到,月份被加了一个月,4月变成了5月。查看Calendar源码可以看到,其关于月份的定义如下:通过上面可以看到,4代表

2022-04-25 14:55:36 1638

原创 Java关键字之final

在面试中,涉及java基础的问题,final关键字算是个高频问题,经常会被问道。面试官可能会问说说final。final修饰的抽象类能被继承吗等等。下面汇总一下关于final关键字的知识点。

2022-04-18 20:45:19 3199 1

原创 Springboot整合shardingsphere-jdbc的5.0.0版本实现分库分表

之前项目中一直使用的是shardingsphere的4.1.0版本,该版本有一些SQL是不支持的,如下。为了使用例如子查询,case when语句等,今日将项目中的shardingsphere升级到5.0.0版本。该版本不支持项明显减少,更方便开发。下面以两库十表为例,其中dbm为主库,db1、db2用于分库分表。user表分库分表,student表不分库分表。自定义精准分片策略,以user_id的倒数第一位数字对库数取模作为具体库,user_id的倒数第二三位数字对表数取模作为具体表。详细

2022-04-15 11:21:27 7334 14

原创 SpringCloud组件OpenFeign——拦截器

OpenFeign组件中有一个这么一个接口——RequestInterceptor 。我们来看一下源码中关于这个接口的介绍。

2022-03-11 17:12:17 6901

原创 Redis应用缓存穿透、缓存击穿、缓存雪崩问题的原因及解决方案

一、缓存穿透

2022-01-11 17:01:30 571

原创 Redis的两种持久化方式

Redis提供了两种不同级别的持久化方式。一种是RDB(Redis DataBase),另一种是AOF(Append Only File)。一、RDB(Redis DataBase)1、什么是RDBRDB持久化方式是指在指定的时间间隔内将内存中的数据集快照写入磁盘。当重启Redis时将快照文件直接读到内存里。2、如何触发RDB快照保存策略有两种方式触发RDB持久化策略通过配置文件中配置save <seconds> <changes>(后面具体介绍),自动.

2021-12-31 13:56:03 1153

原创 SpringCloud组件OpenFeign—— 自定义OpenFeign日志

我们在通过OpenFeign调用服务端接口默认是不打印日志的,这样我们就不知道具体调用的哪个远程方法以及出入参,如果出现异常,不利于通过日志定位及分析问题。如何开启OpenFeign的日志及设置日志级别可以参考之前写的这篇博客。开启OpenFeign日志并设置日志级别https://blog.youkuaiyun.com/m0_47503416/article/details/122093768下面是Logger.Level.FULL级别下的OpenFeign日志内容。ok,在讲如何自定义OpenFei

2021-12-25 20:50:37 2781 6

原创 SpringCloud组件OpenFeign——默认HTTP请求方式

OpenFeign相较于Feign新增了对SpringMvc的支持,通过以下方式可以调用服务端对应的方法。但是如果使用@RequestMapping注解不指定请求方式时,通过客户端打印的OpenFein日志可以看出,客户端都是使用的GET请求。只有使用@PostMapping或者@RequestMapping中指定请求类型@RequestMapping(method = RequestMethod.POST)发送的才是POST请求。那么使用@RequestMapping()时OpenFiegn.

2021-12-24 16:57:11 3060 1

原创 SpringCloud组件OpenFeign——日志显示请求及响应信息

通过SpringCloud构建微服务项目时,客户端通常使用Feign接口调用服务端方法。但是通常情况下客户端服务的日志中不会打印出调用相关的信息,如请求的url、入参、响应等。可以通过以下两种方式实现客户端调用Feign接口将相关信息记录到日志中。方式一1、创建Feign日志配置类@Configurationpublic class FeignConfiguration { @Bean Logger.Level feignLoggerLevel() { //

2021-12-22 20:26:27 2777

原创 SpringCloud组件OpenFeign——将服务端详细异常信息返回给客户端

一、场景最近使用单位封装的微服务架构搭建微服务项目,封装的不太多,大部分可以按原生的SpringCloud组件的使用方式使用。涉及到的组件有Nacos、Ribbon、OpenFeign、Hystrix、Sentinel。领导让搭建微服务项目,并且不使用Hystrix和Sentinel做服务熔断和降级,即客户端通过OpenFeign调用服务端服务,如果服务端异常直接返回给客户端,客户端能够捕获并打印出异常信息。二、模拟服务端异常先让服务端产生一个算数异常并抛出,看一下正常情况下客户端会怎么样。.

2021-12-22 18:15:23 6654 8

原创 SpringBoot项目中使用Redis事务出现ERR EXEC without MULTI的分析与总结

一、场景虚拟机CentOS7redis版本6.2.6SpringBoot版本2.5.6spring-boot-starter-data-redis依赖版本2.4.0RedisTemplate配置package com.example.redistest.config;import com.fasterxml.jackson.annotation.JsonAutoDetect;import com.fasterxml.jackson.annotation.PropertyAc

2021-11-23 20:51:12 4317 3

原创 使用IDEA的Redis插件连接Redis服务器

IDEA中的Redis插件作为Redis的可视化工具,可以通过该插件连接Redis服务器,并并进行增删改查操作。一、IDEA安装Redis插件1、点击File->Setting2、点击Plugins3、在Browse Repositories中输入redis4、点击Redis插件5、下载并重启二、IDEA连接Redis服务器安装完后,通过右侧工具栏或File->Setting->Other Settings->NoSql Server可找到连接R.

2021-11-18 15:27:10 39878 8

原创 解决跨服务接口调用406 Not Acceptable问题

一、问题描述前段时间写一功能,需要调用外部接口,使用postman可以调用成功,但是通过代码去调用一直报406 Not Acceptable的错误。错误信息如下图:调用的代码片段一类似如下(下面代码只是调用的方式,为了不透露公司代码):package com.test.controller;import com.alibaba.fastjson.JSONObject;import lombok.extern.slf4j.Slf4j;import org.springframewo.

2021-10-12 16:18:56 3501 2

原创 脏读、不可重复读和幻读

1、幻读(Phantom)所谓幻读,就是指在同一个事务中,同一个查询执行两次,在两次查询之间,有另一事务插入一个新记录或更新某一行并提交,并且这一行满足查询事务中的WHERE条件,导致第二次查询比第一次查询多一条记录。这种现象称为幻读,第二次查询多出来的这一行称为幻读行。幻读比不可重复读更难防范,因为锁定第一个查询结果集的所有行并不能防止幻读现象的产生。串行化读隔离级别下可以防止幻读,可重复读、读已提交、读未提交隔离级别下允许幻读。假设child表的id列上有一索引。此时,读取并锁定表中所有

2021-07-28 17:38:42 800

原创 MySQL的事务隔离级别

事务隔离是数据库处理的基础之一。隔离(Isolation)是ACID中I的首字母缩写。隔离级别是在多个事务同时进行更改和执行查询时,对性能与结果的可靠性、一致性和再现性之间的平衡进行微调的设置。InnoDB提供了SQL:1992标准中描述的所有四个事务隔离级别:READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ和SERIALIZABLE。InnoDB的默认隔离级别是REPEATABLE READ。可以使用SET TRANSACTION语句更改单个会话或所有后续

2021-07-28 11:12:59 146

翻译 InnoDB中不同SQL语句设置锁的情况总结

在Mysql中,锁定读、更新、删除操作通常会对SQL语句处理过程中扫描到的每条索引记录设置记录锁。语句中是否存在排除该行的WHERE条件并不重要。InnoDB不记得确切的WHERE条件,只知道扫描了哪些索引范围。next-key锁通常会阻塞往记录之前的间隙插入数据。可以显示禁用间隙锁,使得next-key锁不可用。事务的隔离级别也会影响锁的设置。如果在搜索中使用了二级索引,并且在二级索引上设置的是排他锁,InnoDB还会检索相应的聚集索引,并在聚集索引上也设置锁。如果在SQL语句中没有使用合适的索引,此

2021-07-19 23:09:14 370

翻译 InnoBD中的几种锁

前段时间遇到线上应用报死锁问题,于是对于Mysql的锁相关问题产生了兴趣,鉴于之前不太了解这块,特此根据官网整理锁相关知识。InnoDB的锁共享锁和排它锁(Shared Locks && Exclusive Locks)InnoDB实现了标准的行级锁,其中有两个类型的锁,共享锁(S)和独占锁(X)(也称为排它锁)。共享锁(S)允许持有锁的事务读取一行。 排它锁(X)允许持有锁的事务更新或删除一行。如果事务T1持有r行的S锁,然后来自某个不同是事务T2也请求对r行上锁的处理

2021-07-13 14:15:38 643

原创 io.shardingsphere的3.X版本与pagehelper同时使用时导致offset始终为0的问题

继上一次将分库分表的依赖由3.0.0.M3的版本替换为3.1.0以支持数据库域名中带下划线后,又遇到另一个坑。3.1.0版本的依赖: <dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> &lt

2021-07-05 17:43:50 1288

原创 分析处理遇到的Mysql死锁问题

上周遇到线上死锁问题,特此总结记录一下,该情况只是某一特定场景下,遇到死锁问题还要具体问题具体分析。场景上周末,连续两天线上的某每小时执行一次的定时任务A在凌晨两点左右报了死锁异常(每天出现了四次死锁)。异常信息如下:初步分析首先,出现死锁的这个表做了分库分表,根据编号进行分片。四台服务器同时执行该定时任务,且根据某编号进行分片,也就是说不会有两个及以上该定时任务应用同时操作同一张表,正常来说应该不会出现死锁的情况。初步怀疑可能是别的也在凌晨两点执行的分片定时任务B也操作了该表,导致A.

2021-06-29 22:20:23 726

原创 类加载器总结

类加载器负责将.class文件(可能在磁盘上,也可能在网络上)加载到内存中,并为之生成对应的java.lang.Class对象。一、类加载机制类加载器负责加载所有的类,系统为所有被载入内存中的类生成一个java.lang.Class实例。一旦一个类被载入JVM中,同一个类就不会被再次载入了。在JVM中,一个类用其全限定类名和其类加载器作为唯一标识。当JVM启动时,会形成由三个类加载器组成的初始类加载器层次结构:Bootstrap ClassLoader:根类加载器,加载jre/lib/...

2021-05-21 17:54:41 227

原创 类初始化总结

当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化三个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或类初始化。一、类的加载**类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象。**也就是说,当程序中使用任何类时,系统都会为之建立一个 java.lang.Class对象。类的加载由类加载器完成, 类加载器通常由JVM提供,这些类加载器是程序运行的基础,JVM提供的这些类加

2021-05-19 14:51:16 574

原创 如何查看当前虚拟机使用的是哪种收集器

可以通过jmap -heap vmid查看当前虚拟机使用的是哪种收集器,如下图所示:其中VMID为虚拟机进程ID,若查看的是本地虚拟机进程,则VMID和LVMID相同。通过jps -l查看所有虚拟机进程的进程ID,如下图:...

2021-04-06 14:22:37 412

原创 JVM启动参数总结

启动参数含义-Xms设置堆内存的最小值-Xmx设置堆内存的最大值-Xmn-Xss设置栈容量-Xoss设置本地方法栈大小-XX:+/-UseTLAB虚拟机是否使用TLAB(本地线程分配缓冲)-XX:SurvivorRatio+XX:CompactFieldstrue/false(默认为true)子类之中较窄的变量是否允许插入父类变量的空隙之中-XX:MaxPermSize-XX:+PrintGCDetails-...

2021-03-30 17:53:35 168

原创 JVM 学习总结(六)——垃圾收集器

垃圾收集算法是内存回收的方法论,垃圾收集器是内存回收的实践者。衡量垃圾收集器的三项最重要的指标是:内存占用(Footprint)、吞吐量(Throughput)和延迟(Latency),三者共同构成了一个“不可能三角”。一款优秀的收集器通常最多可以同时达成其中的两项。经典垃圾收集器各款经典收集器之间的关系如下图:一、新生代垃圾收集器1、Serial收集器Serial收集器是最基础、历史最悠久的收集器。在JDK1.3.1之前是HotSpot虚拟机新生代收集器的唯一选择。这个收集器时一个单线程工作的

2021-03-30 15:03:50 183 1

原创 JVM 学习总结(五)——垃圾收集算法

从如何判定对象消亡的角度出发,垃圾收集算法可以划分为 “引用计数式垃圾收集”(Reference Counting GC) 和 “追踪式垃圾收集”(Tracing GC) 两大类,这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。注: 以下介绍的所有算法均属于追踪式垃圾收集的范畴。一、垃圾收集算法1、分代收集理论分代收集(Generationl Collection)建立在三个分代假说之上:弱分代假说(Weak Generationl Hypothesis):绝大多数对象都是朝生夕灭的。强分

2021-03-16 18:03:10 154

原创 JVM 学习总结(三)——对象存活判定算法

垃圾收集器在对堆内存进行回收前,第一件事情就是要确定这些堆中的对象哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。一、判定对象是否存活的两种算法1、引用计数算法引用计数算法(Reference Counting): 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。优点: 引用计数算法(Reference Counting)虽然占用了一些额外的内存空间来进行计数,但它的原理简

2021-03-15 17:58:10 478 1

原创 JVM学习总结(四)——Java中四种引用类型

无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象是否引用链可达,判断对象是否存活都和“引用”离不开关系。在JDK1.2版之前,Java里面的引用是很传统、狭义的定义:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称该reference数据是代表某块内存、某个对象的引用。 在JDK1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strongly Reference) 、软引用(Soft Reference) 、弱引用(Weak Refer

2021-03-15 16:11:48 138

2021年Java大厂面试题整理大全

2021年Java大厂面试题整理大全

2021-01-10

空空如也

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

TA关注的人

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