- 博客(69)
- 收藏
- 关注
原创 Linux使用systemctl实现开机自启动
1、在部署目录下新建 startup.sh 脚本(注意java路径要改为绝对路径)。然后检查该脚本是否可以执行。2、在 /etc/systemctl/system 目录下,新建test.service 文件。3、修改了service文件,需要执行以下命令更新一下。4、执行以下命令,启动/关闭/查看状态。
2023-10-13 11:51:00
822
原创 无u盘安装ubuntu系统
5、启动easyUEFI,新建一个启动项,选择刚解压的那个ubuntu,设置成第一个启动项,然后重启。4、使用diskgenius分出一个区,格式化为FAT32,并将ubuntu解压至这个盘里。1、在windows系统下,首先下载磁盘分区工具diskgenius并安装。2、下载并安装 启动引导软件 easyUEFI。3、选择并下载合适的ubuntu版本。
2023-07-24 18:48:40
3560
原创 JAVA数据脱敏
实现的方法有很多,可以通过替换、删除、加密、模糊化等方法对敏感信息进行脱敏。有很多方法通过自定义规则进行脱敏,但是加密后如果需要对其进行查询等操作,比如模糊查询、精准查询等,下面介绍一种MySQL自带的函数进行数据加密、解密,从而实现数据脱敏,而且支持模糊查询等操作。例如客户的身份证号、手机号、银行卡等这些都属于客户的隐私信息,都需要对这些数据进行脱敏操作,防止泄漏。
2023-06-08 14:14:57
483
原创 Flowable工作流简单使用
标准)、创建这些流程定义的流程实例、运行查询、访问活动或历史流程实例和相关数据。flowable ui 如何画图?4、将bpmn20.xml流程图部署。流程定义(用于定义流程的行业。
2023-06-02 14:05:54
946
原创 mybatis-plus 动态选择xxxMapper查询数据
在使用mybatis-plus开发过程中,遇到一个问题,当我们要对一些结构相似的表进行动态查询时,会使用到Switch进行判断查询那张表,从而把需要查询的字段返回,如果需要查询的表很多时,Switch判断就会很多,代码重复性很高,而且很乱,开发效率低。3、在方法上加上<T extends TableBase>,根据传过来的参数将枚举值去出,4、这样就可以通过不同的参数,来选择不同的mapper,从而查询出相同的一些属性的数据。1、创建一个枚举类。2、将相同的属性提取出来创建base实体类,并继承它。
2023-04-15 23:09:26
621
1
原创 @Schedule定时任务失效
当一个定时任务执行时间过长或者发生阻塞,就会导致其他的定时任务进行排队或者不执行。一个定时任务执行时间过长,其他的定时任务突然不执行了。
2022-08-11 10:09:54
1011
原创 将html文件解析成图片导出,打成jar包放到linux服务器上运行报错。cannot be resolved to absolute file path because it does not ..
cannot be resolved to absolute file path because it does
2022-06-27 23:29:01
1823
原创 如何定位到服务器CPU飙高的原因
最近生产的服务器老是提示cpu使用率飙高的提示,出于兴趣,排查一下,找到了问题的原因。下面就总结一下如何定位到导致CPU飙高的问题。1、使用top指令找到CPU使用最高的进程2、使用 top -Hp 进程Id ,找到使用率最高的线程3、将这些线程id转换为16进制的,printf “%x\n” 线程Id4、jstack 打印进程堆栈信息 (6962是进程id,a33是线程id的对应的16进制)这要就能找到导致CPU使用率飙高的具体的代码了。嘻嘻嘻嘻~~~~~.............
2022-06-06 22:19:12
2311
原创 swagger上的model和返回的数据字段不一致的问题
今天在项目中遇到一个问题,swagger中的model和接口返回的字段对应不上,比较郁闷,检查了一下,发现是在使用swagger注解@ApiModel()时,出现2个内容一致的文字。
2022-05-30 21:38:44
777
原创 集合——HashSet数据结构的底层结构
我们都知道hashset是set接口的实现类,set的特点是无序、唯一,使用起来也很简单无脑,但hashset底层是怎么实现的?如何保证它的唯一性呢?那我们就一起来探讨一下hashset数据结构的底层结构。进入hashset类的源码发现,它的构造方法里维护了一个hashmap。public HashSet() { map = new HashMap<>();}再看一下它的add方法,发现hashset的add方法,就是调用hashmap的put方法,插入的对象为key
2022-04-05 23:26:55
1438
原创 使用shardingJDBC实现数据库的分库分表
一、概念1、什么是分库分表?为什么要分库分表?随着业务的增加,数据库的数据量越来越多,当数据量达到1000w或者100G后,数据的查询效率就会越来越低,为了提高效率,把数据量分散在不同的数据库中或者表中,使得单一数据库的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。2、分库分表的方式(1)垂直分表:根据分片规则,将数据分布到不同表中。(2)水平分表:将相关性低的字段拆分到不同的表中。(3)垂直分库:根据分片规则,将数据分布到不同的库中。(4)水平分库:根据业
2022-04-05 01:17:19
6170
1
原创 一篇文章了解HTTP请求报文和响应报文
概念HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。请求报文和响应报文都由三部分组成:起始行、首部、主体。HTTP请求报文格式:<method> <request-URL> <version><headers><entity-body>请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET
2022-03-18 15:11:23
3219
原创 聊聊对称加密和非对称加密有什么不同
概念:对称加密:对称加密就是指加密过程和解密过程用的都是相同的密钥。非对称加密:非对称加密就是指使用公钥去进行加密,使用私钥去进行解密,公钥和私钥是一对的,少了任意其中一个,都无法进行加密或解密。各自的优缺点:对称加密优点:简单、速度快缺点:相对于非对称加密来说不是很安全非对称加密:有点:更安全缺点:复杂、速度慢...
2022-03-17 22:18:24
316
原创 谈谈项目中如何去处理全局异常
可以通过@RestControllerAdvice来处理全局异常。启动应用后,被@ExceptionHandler、@InitBinder、@ModelAttribute 注解的方法,都会作用在被@RequestMapping注解的方法上。自定义全局异常处理类:@Slf4j@RestControllerAdvicepublic class GlobalExceptionHandler { @ResponseStatus(HttpStatus.UNAUTHORIZED) @E
2022-03-15 22:53:07
585
原创 谈谈浅拷贝和深拷贝的区别
概念:浅拷贝只复制源对象的地址,当源对象的属性值改变时,拷贝对象的值也随之改变。深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。拷贝前后两个对象互不影响。实现深拷贝的方式: 构造方法 重新clone方法 序列化,实现Serializable 接口重新clone方法代码:public class Dept implements Cloneable{ private In
2022-03-14 11:03:34
693
原创 Java异常——try catch 、throws、throw有什么区别
概念:异常就是不正常的意思。异常的超类是java.lang.Throwable,其下有两个子类,分别是java.lang.Error 和 java.lang.Exception,我们平时所说的异常就是指Exception。error和exception的区别?error是指无法通过处理的错误,好比绝症,只有修改源代码exception好比一些小感冒,可以通过处理,让代码继续运行。异常又可以分为编译时异常和运行时异常。编译时异常:checked异常,是指在代码编写时出现的异常,
2022-03-11 17:41:39
2251
原创 mybatis一级缓存和二级缓存的区别
mybatis系统中定义了两级缓存,分别是一级缓存和二级缓存。默认情况下,只有一级缓存开启。(sqlsession级别的缓存,也称为本地缓存) 二级缓存需要手动开启和配置,他是基于namespace级别的缓存。 为了提高拓展性,mybatis定义了缓存接口cache,我们可以通过cache接口来自定义二级缓存一级缓存一级缓存也称为本地缓存:sqlsession与数据库同一次会话期间查询到的数据会放在本地缓存中 以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库。二级缓存.
2022-03-07 22:33:07
4552
1
原创 设计模式——代理模式
概念:动态代理是设计模式中比较常见的代理模式,大家见得最多的应该是spring aop的动态代理。动态代理是指为对象创建一个代理对象,通过这个代理对象对被代理对象的功能进行增强。动态代理是属于结构型设计模式。动态代理分为两类:静态代理 动态代理(有分为JDK代理、cglib代理)静态代理类图:代理对象和目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法。新建接口:public interface ITeacherDao { public vo.
2022-03-07 21:52:44
443
原创 设计模式——工厂模式
概念:假如直接使用new的方式来创建对象,会存在耦合性高的问题,可以新建对象的工厂类,通过工厂类来获取对象,可以降低耦合性。工厂模式分为三种,分别是简单工厂模式:允许接口创建对象,但不会暴露对象的创建逻辑。 工厂方法模式:允许接口创建对象,但使用哪个类来创建对象,则是交由子类决定的。 抽象工厂模式:抽象工厂是一个能够创建一系列相关的对象而无需指定/公开其具体类的接口。该模式能够提供其他工厂的对象,在其内部创建其他对象。1、简单工厂模式创建接口:public interface C
2022-03-06 23:15:02
266
原创 设计模式——单例模式
概念:单例模式是Java中最简单的设计模式之一。这种类型的设计模式属于创建类模式,它提供了创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例模式的实现 单例设计模式分为两种:饿汉式:类加载的时候就会导致该单实例对象被创建 懒汉式:类加载的时候不会创建该实例对象被创建,而是首次使用该对象的时候才会创建饿汉式1、静态成员变量public class
2022-03-05 22:55:14
172
2
原创 RabbitMQ如何保证消息的可靠性
在了解RabbitMQ消息可靠性之前,先来了解一下RabbitMQ整个消息投递的路径:producer ——> exchange ——> queue ——> consumerRabbitMQ保证消息的可靠性主要分为两个部分:(1)消息可靠投递性(生产者向MQ发送消息,确保MQ接收到消息)(2)消息可靠确认性(消费者确保接收到MQ)1、消息可靠投递在使用RabbitMQ的时候,作为消息发送方拒绝任何消息丢失或者投递失败场景,RabbitMQ为我们提供了两种方式来保证消
2022-03-05 11:55:35
11089
原创 synchronized修饰静态方法和非静态方法有什么区别?
很多同学在学习synchronized的时候,只知道是加锁,但是synchronized锁的什么?synchronized修饰静态方法和非静态方法有什么区别?概念:(1)互斥的基本条件:共用同一把锁(2)静态方法锁的是所在类的Class对象,而非静态方法锁的是this对象(3)针对同一个线程,synchronized支持可重入若synchronized修饰的非静态方法,那么线程在执行到该方法时,会先判断它是否被加锁,如果加了锁,读锁,找到加锁的对象,等待,直到其他线程释放锁,即可获取
2022-03-03 10:58:52
1120
原创 Spring AOP底层实现
1、什么是AOP?aop就是指 将和业务逻辑无关的代码相隔离开来,可以在不需要修改源代码的情况下,通过切面对业务逻辑进行增强,降低代码的耦合性,提高代码的可重用性。2、Spring AOP是 底层是如何实现的?Aop底层使用动态代理实现(1)有两种情况动态代理第一种:有接口情况,使用jdk动态代理创建接口实现类的代理对象,增强类的方法第二种:没有接口情况,使用cglib动态代理创建子类的代理对象,增强类中的方法。3、什么是IOC?控制反转。把对象创建和对象
2022-02-28 17:00:03
889
原创 Spring事务(特性、隔离级别、传播行为、事务失效)学习笔记
1、什么是事务概念:事务是指一组不可分割的操作序列,要么这些操作都成功,要么都失败。2、事务的四大特性(ACID)(1)原子性(2)一致性(3)持久性(4)隔离性3、事务的隔离级别(1)读已提交(2)读未提交(3)可重复读(4)可序列化脏读:一个事务读取到了另外一个事务未提交的值。不可重复读:一个事务读取到了另外一个事务已提交的事务。幻读:一个事务前后两次读取到的数据条数不一致。4、事务的传播行为要搞懂事务的传播行为,首先要理解什么是事务的传播
2022-02-25 17:54:47
735
原创 ConcurrentHashMap学习笔记
一、jdk1.8容器初始化1、源码分析在jdk8的ConcurrentHashMap中一共有5个构造方法,这四个构造方法中都没有对内部的数组做初始化, 只是对一些变量的初始值做了处理jdk8的ConcurrentHashMap的数组初始化是在第一次添加元素时完成//没有维护任何变量的操作,如果调用该方法,数组长度默认是16public ConcurrentHashMap() {}//传递进来一个初始容量,ConcurrentHashMap会基于这个值计算一个比这个值大的2的幂
2022-02-25 10:58:24
153
原创 还不会HashMap?一篇轻松应对面试官
1、hashmap底层架构在jdk1.7之前,hashmap底层是由数组+链表组成。在jdk1.8之后,hashmap有数组+链表+红黑树组成。引入链表是为了解决hash冲突,引入红黑树是由于链表过长时,查询效率低,红黑树查询效率较高,时间复杂度为O(log n)。当数组长度小于64时,链表长度大于8时,hashmap会进行扩容,从新计算hash值;当数组长度大于64时,链表长度大于8时,链表就会转化为红黑树,以此来提高查询效率。hashmap的默认初始容量为8,最大容量为2的30次
2022-02-23 10:27:45
393
原创 MySQL索引学习笔记
1、什么是MySQL索引?定义:索引是一种帮助提高查询效率的数据结构,将无序的数据转化为有序的查询。优点:大大地提高了查询效率缺点:1、索引占据磁盘空间 。 2、维护索引需要消耗资源 。2、索引分类1、主键索引设定主键后创建数据库会自动建立索引,innoDB为聚簇索引2、普通索引(单列索引或者单值索引)即一个索引只包含单个列,一个表可以有多个单列索引3、唯一索引索引列的值必须唯一,允许有空值4、复合索引即一个索引包含多个列3、如何创建索引创建索引主要有
2022-02-21 23:20:00
583
原创 Java内存模型(JMM)
概念:Java内存模型(JMM,Java Memory Model),很多人会把jvm的内存模型和java内存模型搞反。jmm(java memorymodel)规范,他规范了java虚拟机与计算机内存如何协调工作 ,他规定了一个线程如何及何时看到其他线程修改过的变量的值,以及在必须时,如何同步的访问共享变量。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。Java内存模型结构图:从抽象的角度来看,J.
2022-02-20 22:51:09
121
原创 如何根据List中的某个或者多个字段来进行去重
1、推荐使用java8的新特性,Stream流如下例所示:根据用户的性别和地址进行去重package org.springblade.dataReporting.test;import org.springblade.dataReporting.dto.User;import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.TreeSet;import ja
2022-02-14 15:45:14
5468
2
原创 类加载过程
一、类加载过程:就是指将class字节码文件类信息加载到内存,并解析生成对应得class对象的过程类加载过程一般分为三个步骤:加载、连接、初始化连接又可分为三个部分:验证、准备、解析加载 :类加载器将class字节码文件载入到内存的过程连接:1、验证:主要是为了验证加载进来的字节流是否符合虚拟机规范,不会造成安全错误,比如说对文件格式的验证,对字节码的验证,保证语义的合理性等等2、准备:主要为类变量(不是实例变量)分配内存,并赋予初值3、解析:将常量池内的..
2022-02-10 22:36:34
390
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人