自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Tomcat8部署Java应用

tomcat8在linux部署java应用

2023-03-12 03:30:00 487 1

原创 EasyExcell导出excel添加水印

easyexcel之导出添加水印

2023-03-11 17:23:15 1642 3

原创 java单元测试(二)H2数据库篇

springboot集成H2数据库实现单元测试

2023-03-11 16:06:38 1847

原创 EasyExcel使用详解与源码解读

EasyExcel使用详解与源码解读

2022-11-22 00:00:00 2338

原创 使用poi操作excel详解

POI工具使用

2022-11-20 16:12:13 8001

原创 springboot经典问题总结

springboot经典问题

2022-08-07 12:13:40 777

原创 什么是Stream

什么是Stream

2022-07-09 15:23:37 500

原创 java单元测试之mock篇

java单元测试之mock篇

2022-06-19 16:03:01 13904

原创 Spring循环依赖问题

spring循环依赖

2022-06-05 20:31:52 519

原创 Spring的Bean生命周期源码解读

spring源码解析

2022-06-05 17:35:43 247

原创 spring整合quartz(持久化数据库)

spring整合quartz(持久化数据库)一、spring整合quartz背景需求1、添加依赖2、添加注解3、创建QuartzUtils工具类4、创建CronUtils工具类5、创建定时job6、业务逻辑调用二、quartz数据持久化数据库为什么要持久化1、添加配置文件2、添加核心配置类3、添加JobFactory类一、spring整合quartzQuartz是一个开源的任务调度框架。基于定时、定期的策略来执行任务是它的核心功能。Quartz有3个核心要素: 调度器(Scheduler)、 任务(J

2022-05-02 14:07:18 3299

原创 秒杀系统设计

秒杀系统设计一、秒杀商品上架二、秒杀系统需要考虑的问题三、秒杀流程四、秒杀成功创建订单流程一、秒杀商品上架一般是后台指定一个定时任务,上架秒杀商品假如是集群部署的情况,就会出现分布式问题,可能会存在商品重复上架问题解决方案也很简单,加一个分布式锁商品上架流程图:二、秒杀系统需要考虑的问题1:抽取一个秒杀服务,独立部署,集群部署2:采用动态随机码,加密处理3:信号量控制-原子性4:nginx动静分离5:识别恶意攻击6:使用各种手段,使得用户流程错峰7:限流降级等8:队列削

2022-04-30 22:31:13 1151

原创 如何保证接口幂等性?

如何保证接口幂等性一、什么是幂等性二、哪些情况需要防止三、什么情况下需要幂等四、幂等解决方案1、token机制2、各种锁机制3、各种唯一约束4、防重表5、全局请求唯一id一、什么是幂等性接口冥等性就是里户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用﹔比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条….,这就没有保证接口的幂等

2022-04-30 22:22:22 162

原创 如何保存rabbitmq消息可靠性?

如何保存rabbitmq消息可靠性?一、rabbitmq的消息可靠性如何保证1、消息丢失2、消息重复3、消息积压一、rabbitmq的消息可靠性如何保证1、消息丢失– 消息发送出去,由于网络问题没有抵达服务器做好容错方法(try-catch),发送消息可能会网络失败,失败后要有重试机制,可记录到数据库,采用定期扫描重发的方式做好日志记录,每个消息状态是否都被服务器收到都应该记录做好定期重发,如果消息没有发送成功,定期去数据库扫描未成功的消息进行重发– 消息抵达Broker,Broker要将

2022-04-30 22:18:43 202

原创 商城订单中心实现及用户关单实现思路

商城订单中心实现及用户关单实现思路一、订单服务1.1、订单中心1.2、订单构成1.3、订单状态1.4、订单流程1.5、订单幂等性处理1.6、订单业务流程二、关单方式2.1、RabbitMQ延时队列(实现定时任务)2.1.1、消息的TTL (Time To Live)2.1.2、Dead Letter Exchanges (DLX)2.2、关单释放库存流程图一、订单服务1.1、订单中心电商系统涉及到3流,分别是信息流、资金流、物流,而订单系统作为中枢将三者有机的集合起来。订单模块是电商系统的枢纽,在订

2022-04-30 22:09:53 1714

原创 解决离线rpm安装包无法下载依赖的问题

背景:你需要安装几个rpm包,当时当你执行rpm -ivh *.rpm的时候,却提示需要一大堆依赖。你被不允许配置yum源,你也不能一个一个去尝试包和包之间的依赖关系。解决办法:先在通互联网的机器上配置互联网yum源再安装#yum -y install yum-util* 工具缓存你需要安装的rpm,但是不安装,使用yum主要是自动解决依赖关系,把相关的依赖包一网打尽。使用命令:mkdir -p /tmp/yumyum install <package name> --dow

2022-01-14 16:08:32 866

原创 基于fluentd实现读取nginx日志输出到kafka

基于fluentd实现读取nginx日志输出到kafka一、浅谈fluentd1.1、什么是Fluentd?1.2、应该选择 fluentd 还是 td-agent?二、安装td-agent服务器一、浅谈fluentd1.1、什么是Fluentd?Fluentd是一个用于统一日志层的开源数据收集器。Fluentd允许您统一数据收集和使用,以便更好地使用和理解数据。Fluentd是云端原生计算基金会(CNCF)的成员项目之一,遵循Apache 2 License协议。Treasure Data, In

2022-01-11 15:47:57 3444 2

原创 Linux安装 kafka 详细步骤

Linux安装 kafka 详细步骤一、安装JDK环境1.1、下载jdk1.2、上传jdk到linux1.3、解压jdk1.4、配置环境变量1.5、测试jdk安装是否成功二、安装Zookeper2.1、下载安装包2.2、创建安装目录2.3、修改配置2.4、创建节点的myid:2.5、启动ZooKeeper三、安装Kafka3.1、下载kafka3.2、创建工作目录&启动3.3、开启远程链接3.4、创建和查看topic一、安装JDK环境1.1、下载jdkjdk下载链接: http://www.j

2021-12-31 15:22:34 4916 2

原创 SpringMVC的执行流程

SpringMVC的执行流程1、 用户发送请求至前端控制器DispatcherServlet。2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。4、 DispatcherServlet调用HandlerAdapter处理器适配器。5、 HandlerAdapter经过适配调用具体的处理

2021-12-29 17:11:57 74

原创 maven指令上传jar到nexus仓库

1、通过maven指令上传mvn deploy:deploy-file -DgroupId=com.json -DartifactId=json -Dversion=1.18 -Dpackaging=jar-Dfile=D:\repository\com\json\json-1.18.jar-Durl=http://localhost:8081/repository/releases/ -DrepositoryId=releases命令中的参数解释:-DgroupId=com.json   

2021-12-29 17:06:31 570

原创 Kubernetes集群安装

Kubernetes集群安装一、创建三个虚拟机二、安装docker三、安装kubelet、kubeadm、kubectl四、初始化五、遇到的问题一、创建三个虚拟机分别修改三个虚拟机的hostnamehostnamectl set-hostname k8s-node1 k8shostnamectl set-hostname k8s-node2k8shostnamectl set-hostname k8s-node3 k8s保证三台虚拟机都可以联网二、安装docker跳转链接====>

2021-12-11 19:42:04 192

原创 Bootstrap-treeview动态加载子节点

Bootstrap-treeview动态添加和删除子节点问题1、引入Bootstrap-treeview的js和css2、修改bootstrap-treeview.js源码1、引入Bootstrap-treeview的js和cssbootstrap-treeview.jsbootstrap-treeview.css2、修改bootstrap-treeview.js源码2.1、在var Tree = function (element, options)方法的return中添加如下代码:// 添加

2021-12-08 15:22:07 989

原创 linux部署redis集群cluster(主从)

linux部署redis集群cluster主从模式一、docker拉取一个redis镜像二、创建一个保存redis挂在文件的文件夹三、创建6个redis集群节点四、创建三主三从的集群模式五、测试5.1、测试主从模式一、docker拉取一个redis镜像博主拉的是最新版的redis镜像直接通过docker pull redis就可以二、创建一个保存redis挂在文件的文件夹博主创建的是mkdir /mydata/redis文件夹三、创建6个redis集群节点博主通过一个脚本快速创建出6个redi

2021-12-05 11:56:04 435

原创 微博快捷登录提示21322重定向地址不匹配(解决方案)

微博快捷登录提示21322重定向地址不匹配(解决方案)微博快捷登录提示21322重定向地址不匹配(解决方案)微博快捷登录提示21322重定向地址不匹配(解决方案)1、微博网页应用授权报错,代码:21322,信息:重定向地址不匹配。如图仔细检查之后发现我与微博开放平台中的回调地址写的一毛一样,为什么会出现这种问题呢。是因为浏览器在解析地址的时候,有写字符不能够被解析,那么我们就需要转换成浏览器能解析的字符串编码即可,推荐一个链接: url在线转换工具.编码后再把它写入回调的url中清除缓

2021-12-05 11:38:21 2910 3

原创 Spring的@Transactional如何实现的

Spring的@Transactional如何实现的一、@Transactional注解简介二、spring中声明式事务实现原理猜想三、动态代理逻辑实现四、TransactionInterceptor–最终事务管理者五、总结一、@Transactional注解简介@Transactional是spring中声明式事务管理的注解配置方式,相信这个注解的作用大家都很清楚。@Transactional注解可以帮助我们把事务开启、提交或者回滚的操作,通过aop的方式进行管理。通过@Transactional注

2021-11-15 14:37:08 614

原创 Linux 命令 su 和 sudo 的区别

Linux 命令 su 和 sudo 的区别1、su 命令介绍及主要用法1.1 - 参数2、sudo命令介绍及主要用法2.1 主要用法3、二者的差异对比1、su 命令介绍及主要用法首先需要解释下 su 代表什么意思。之前一直以为 su 是 super user,查阅资料之后才知道原来表示 「switch user」。知道 su 是由什么缩写来的之后,那么它提供的功能就显而易见了,就是「切换用户」。1.1 - 参数su 的一般使用方法是:su <user_name>或者su

2021-11-15 14:29:54 1074

原创 双重校验锁实现对象单例(线程安全)

双重校验锁实现对象单例(线程安全)public class Singleton { private volatile static Singleton uniqueInstance; private Singleton() { } public static Singleton getUniqueInstance() { *//先判断对象是否已经实例过,没有实例化过才进入加锁代码* if (uniqueInstance ==

2021-09-20 15:13:59 163

原创 java8聚合函数

要了解聚合操作,首先要建立Stream和管道的概念Stream 和Collection结构化的数据不一样,Stream是一系列的元素,就像是生产线上的罐头一样,一串串的出来。管道指的是一系列的聚合操作。管道又分3个部分管道源:在这个例子里,源是一个List中间操作: 每个中间操作,又会返回一个Stream,比如.filter()又返回一个Stream, 中间操作是“懒”操作,并不会真正进行遍历。结束操作:当这个操作执行后,流就被使用“光”了,无法再被操作。所以这必定是流的最后一个操作。 结束操作

2021-09-20 15:13:26 206

原创 常用的正则表达式

常用的正则表达式整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:”^[0-9]*$”只能输入n位的数字:”^\d{n}$”只能输入至少n位的数字:”^\d{n,}$”只能输入m~n位的数字:”^\d{m,n}$”只能输入零和非零开头的数字:”^(0|[1-9][0-9]*)$”。只能输入有两位小数的正实数:”^[0-9]+(.[0-9]{2})?$”。只能输入有1~3位小数的正实数:”^[0-9]+(.[0-9]{1,3})?$”。只能输入非零的正整数:”^\

2021-09-20 15:10:50 83

原创 TCP(传输控制协议)和UDP(用户数据报协议)区别

TCP传输控制协议和UDP用户数据报协议的区别区别TCP三次握手TCP四次挥手TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,是专门为了在不可靠的网络中提供一个可靠的端对端字节流而设计的,面向字节流。UDP(用户数据报协议)是iso参考模型中一种无连接的传输层协议,提供简单不可靠的非连接传输层服务,面向报文区别1) TCP是面向连接的,可靠性高;UDP是基于非连接的,可靠性低2) 由于TCP是连接的通信,需要有三次握手、重新确认等连接过程,会有延时,实时性差,同时过程复杂,也使其易

2021-09-20 15:09:35 1050

原创 linux查看防火墙服务

linux查看防火墙服务1、查看防火墙状态systemctl status firewalld2、开启防火墙状态systemctl start firewalld3、重启防火墙systemctl restart firewalld.service4、防火墙开启端口firewall-cmd --permanent --zone=public --add-port=8080/tcp5、刷新防火墙端口firewall-cmd --reload6、查看防火墙所有端口firewall

2021-09-20 14:38:31 561

原创 docker安装redis

docker安装redisdocker安装redis一、拉取redis镜像二、新建挂载配置文件夹三、启动查看Redis服务状态关闭redis服务docker安装redis一、拉取redis镜像(不指定版本,默认拉取最新版本)docker pull redis 二、新建挂载配置文件夹mkdir -p /mydata/redis/conftouch /mydata/redis/conf/redis.conf在刚才新建的redis/conf中新建文件redis.conf,内容如下:#bind

2021-09-20 14:37:24 1065

原创 redis的缓存穿透、缓存雪崩、缓存击穿问题

redis高并发下的缓存穿透、缓存雪崩、缓存击穿问题redis高并发下的缓存穿透、缓存雪崩、缓存击穿问题一、缓存穿透二、缓存雪崩三、缓存击穿redis高并发下的缓存穿透、缓存雪崩、缓存击穿问题一、缓存穿透定义:指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数据库也无此记录,我们没有将这次查询的null写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义风险:利用不存在的数据进行攻击,数据库瞬时压力增大,最终导致崩溃解决:null结果缓存,并加入短暂过期

2021-09-08 16:12:26 46

原创 IDEA给mapper.xml文件绑定数据库,解决SQL数据库字段爆红

IDEA给mapper.xml文件绑定数据库,解决SQL数据库字段爆红一、IDEA设置数据库SQL字段依然爆红二、解决方案一、IDEA设置数据库SQL字段依然爆红填写数据库连接信息,并test测试连接,成功保存配置完数据后我们的SQL语句里的字段依然爆红二、解决方案打开我们的IDEA的settings,配置如下信息把SQL Dialect改成我们所用的数据库,把我们写SQL的mapper.xml文件夹路径配置在Path中,保存。保存后发现,数据库的字段变成了紫色,不再爆红了。并且我

2021-09-03 13:42:40 7321 4

原创 elasticsearch实现中文分词+远程自定义词库(nginx)

elasticsearch实现中文分词+远程自定义词库nginx一、中文分词二、为什么要用远程词库?实现方式一、中文分词elasticsearch本身自带的中文分词,就是单纯把中文一个字一个字的分开,根本没有词汇的概念。但是实际应用中,用户都是以词汇为条件,进行查询匹配的,如果能够把文章以词汇为单位切分开,那么与用户的查询条件能够更贴切的匹配上,查询速度也更加快速。分词器下载网址:https://github.com/medcl/elasticsearch-analysis-ik下载好的zip包,请

2021-09-01 14:19:33 350

原创 docker安装nginx1.10

docker安装nginx1.10一、拉取镜像二、查看镜像三、启动容器一、拉取镜像docker pull nginx:1.10二、查看镜像docker images三、启动容器首先我们创建一个nginx的挂载文件夹mkdir /mydata/nginx先启动一个nginx容器docker run -p 80:80 --name nginx -d nginx:1.10把nginx容器里的配置文件都复制出来当前路径位于docker container cp nginx:/et

2021-09-01 14:18:08 318

转载 JPA查询数据库,并set值改变entity属性值,会自动调用update方法的问题

今天测试的同事在页面上测试的时候,发现一个神奇的bug。当你去查询调用一个JPA语句的时候,他会自动update这条记录。根据业务要求,页面的数据需要通过主表对象来显示,当需要显示主表数据时,先查询字表数据,再把查询到的字表数据赋值给主表,将主表对象用于页面显示,代码执行完毕后,发现数据库字表数据覆盖了主表数据,很纳闷,查看代码,在把子表数据赋值给主表对象后,我仔细回想代码里也没有调用update方法啊,我并没有写更新主表对象的代码呀,数据库怎么会被更新?后来查看日志发现,当将正式表数据赋值给临时表时,有

2021-08-31 13:28:50 1274

原创 docker安装elasticsearch和kibana

docker安装elasticsearchdocker安装elasticsearchdocker安装elasticsearch存储和检索数据docker pull elasticsearch:7.4.2安装es可视化界面,可视化检索docker pull kibana:7.4.2mkdir -p /mydata/elasticsearch/configmkdir -p /mydata/elasticsearch/dataecho "http.host:0.0.0.0">>/m

2021-08-29 22:58:59 196

原创 CentOS7如果忘记密码,密码重置详细步骤

CentOS7如果忘记密码,密码重置详细步骤CentOS7密码重置详细步骤1. 重新启动centos72. 进入编辑模式3. 进入单用户模式重置密码4. 更新系统信息5. 重启系统6. 登录系统CentOS7密码重置详细步骤我们有时候很久不登录centos7虚拟机,会记不起密码,很头疼,没事,我们可以重置密码1. 重新启动centos7进入这个页面之后 选中 “CentOS Linux (3.10.0-693.e17.x86_64)7 (Core)” 后按 e2. 进入编辑模式找到ro

2021-04-18 10:17:26 26239 4

原创 linux安装nginx

linux安装nginxlinux安装nginx第一步:下载nginx压缩包第二步:上传nginx压缩包第三步:解压缩nginx到/usr/local目录下第四步:安装依赖包第五步:安装nginx第六步:启动nginxlinux安装nginx第一步:下载nginx压缩包点击选择nginx1.8以上稳定版下载 => nginx下载地址第二步:上传nginx压缩包第三步:解压缩nginx到/usr/local目录下tar -zxvf nginx-1.18.0.tar.gz复制到/us

2021-04-17 16:08:06 661

空空如也

空空如也

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

TA关注的人

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