自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

江湖人称小程的博客

技术无他,唯有熟尔。

  • 博客(98)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 vue设置路由模式为history,打包部署,并解决404问题

vue设置路由模式为history,打包部署,并解决相关问题

2023-09-20 09:53:35 781

原创 Nginx 启动失败和转发请求失败问题解决

Nginx 启动失败和转发请求失败问题解决

2022-06-06 14:08:43 3398 1

原创 Java后端与Vue前端导出Excel表格文件并解决乱码和文件打不开

Java 需要用到 poi 两个依赖包,Maven如下:<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.0.0</version></depende

2021-11-26 14:42:42 8589 3

原创 Java和命令行实现Redis的发布订阅

一、命令行实现 Redis 的发布与订阅1. 开启订阅者窗口与发布者窗口开启几个 Redis 客户端,一个作为发布者,其余作为订阅者。2. 订阅者订阅指定频道订阅频道使用的命令:subscribe channel[channel…]它的作用是:订阅一个或多个频道的信息返回值:订阅的消息3. 发布者向指定频道发布消息消息发布使用命令:publish chanel message它的作用:将message消息发送到channel频道。message是要发送的消息,channel是自定义的频

2021-05-12 17:49:41 702

原创 MySQL从5.7升级到8.0.X后Java Spring无法连接到数据库问题整理

问题一:新的SpringBoot项目能够正常连接MySQL,老的Spring不能连接。出现这个现象,我猜测新的项目肯定用的新的包,所以能够正常。经过排查,发现老项目的MySQL驱动包还是使用的5.7的。所以对项目进行升级,直接修改POM文件的对应版本号。<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <versio

2021-04-12 14:51:28 1627

原创 发现修改缓存内容,就清除缓存并跳转到登录界面

// 防止修改缓存内容,一旦发现修改就清除缓存并跳转到登录界面window.addEventListener('storage', function() { localStorage.clear() window.location.replace('/#/login')})

2021-03-24 15:33:55 597

原创 注解 @Autowired 的注入机制

在Spring IoC 的概念中,依赖注入( Dependency Injection, DI )可以通过注解 @Autowired 来实现,下面就举例说明该注解的注入机制.假设人类(Person)有时需要自我介绍,比方说 Charles 是来自英国的,张三是来自中国的。为了更好的展示这个过程,我们首先定义一个接口:Personpublic interface Person { /** * 自我介绍 */ void introduce();}接下来创建张三(Zh

2021-03-19 17:38:41 1795 1

原创 Windows使用javah命令编译class从而得到.h头文件

我有这样一个Java类package com.jni;public class HelloJni { static { try { System.loadLibrary("HelloJni"); } catch (UnsatisfiedLinkError e) { e.printStackTrace(); } } public native static void sayHello(

2021-03-10 16:51:07 848

原创 Java8获取年、月、周数据和某一天的开始结束时间

在Java8中使用 LocalDate 、LocalDateTime、TemporalAdjusters、TemporalField 获取 上周、上个月、去年、本周、本月、今年、下周、下个月、明年的相关数据public static void main(String[] args) { DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDate today = L

2021-01-08 10:26:31 2559

原创 消息中间件RocketMQ的事务消息

上图说明了事务消息的大致方案,其中分为两个流程:正常事务消息的发送及提交(黑线走的流程)事务消息的补偿流程(黑线+红线走的流程)。正常事务消息流程发送消息MQ服务端响应消息发送结果根据发送结果执行本地事务(如果发送失败,此时消息对业务不可见,本地事务逻辑不执行)。根据本地事务状态执行Commit(Commit操作生成消息索引,消息下发给消费者)或者Rollback(Rollback,直接删掉消息)事务消息的补偿流程补偿阶段用于解决消息Commit或者Rollback发生超时或者失.

2021-01-07 14:39:42 343

原创 消息中间件RocketMQ的过滤消息

单靠脑袋是记不住的鸭~文章学习总结于视频:B站学习视频视频中有一些错误,已经在文章中修改过来了在RocketMQ中,TAG是一个简单而有用的设计,其可以来选择您想要的消息。例如:DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("defultGroup");consumer.subscribe("Topic", "TagA || TagB || TagC");消费者将接收包含 TagA 或 TagB 或 TagC 的消息。.

2021-01-04 14:40:55 306

原创 Session 工具类

总结记录 Session 工具类import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import java

2020-12-30 16:04:25 552

原创 this.$router.push 传参

方式一:paramsthis.$router.push({ name: '要跳转的页面名', params:{ userId: 222 }})获取:console.log(this.$route.params)方式二:querythis.$router.push({ name: '要跳转的页面名', query: userId:222})获取:console.log(this.$route.query)...

2020-12-30 16:03:06 419

原创 SpringBoot在AOP中获取HttpServletRequest和HttpSession信息

获取HttpServletRequest信息RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();if(requestAttributes != null){ HttpServletRequest request = (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUE

2020-12-24 19:18:13 2323 2

原创 消息中间件RocketMQ的延时消息和批量消息

单靠脑袋是记不住的鸭~文章学习总结于视频:B站学习视频文章目录1. 延时消息1.1 使用限制1.2 示例1.2.1 延时消息的生产者1.2.2 延时消息的消费者2. 批量消息2.1 小于4MB的批量消息发送2.2 大于4MB的批量消息发送2.3 消费者代码1. 延时消息延时消息是指消费者延时消费,比如电商里,提交了一个订单就可以发送一个延时消息,1h后去检查这个订单的状态,如果还是未付款就取消订单释放库存。它的实现与普通消息的发送和消费没多大区别,只多了一句话:message.setDela.

2020-12-24 19:11:17 526 1

原创 消息中间件RocketMQ的顺序消息

单靠脑袋是记不住的鸭~文章学习总结于视频:B站学习视频文章目录顺序消费的原理解析示例1. 创建订单类2. 创建 Producer2.1 在 Producer 类中创建构建订单的方法2.2 在 Producer 类中实现发送消息3. 消费者实现顺序消息指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ可以严格的保证消息有序,可以分为分区有序或者全局有序。顺序消费的原理解析在默认的情况下消息发送会采取Round Robin轮询方式把消息发送到不同的queue(分区队列);而消费消息的.

2020-12-24 19:09:35 365

原创 解决Git错误:no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

新增 config 文件cd ~/.ssh/vim config文件内容为Host * KexAlgorithms +diffie-hellman-group1-sha1

2020-11-25 15:05:30 2377

原创 解决Java程序在Linux系统中创建文件或者文件夹后权限不足的问题

tomcat 需要8以及以上我在Java程序里面有很多生成文件的功能,比如用户上传文件、将数据生成xml文本等。我发现生成的文件权限全是:-rw-r—,而文件的拥有者是 root,这样就只有root用户组的才有读取权限。Linux系统为了安全考虑,默认创建文件的最高权限为666,而创建文件夹的最高权限为777,系统通过变量umask来控制创建文件的权限问题。我们假设设置 umask 的值为 025 时,则创建的文件权限为 641,即权限是通过最高权限减去 umask 的值来控制的。我们可以通过修.

2020-11-25 15:04:21 4173 2

原创 Git 设置用户名和邮箱

设置用户名git config --global user.name "username"设置邮箱git config --global user.email "[email protected]"查看用户名和密码git config user.namegit config user.email查看其他配置信息git config -l技 术 无 他, 唯 有 熟 尔。知 其 然, 也 知 其 所 以 然。踏 实 一 些, 不 要 着 急, 你 想 要 的 岁 月 都 会 给 你。

2020-11-25 15:03:11 588

原创 消息中间件RocketMQ的简单消息(同步、异步和单向)发送与消费

单靠脑袋是记不住的鸭~文章学习总结于视频:B站学习视频文章目录1. 准备工作2. 发送和消费的步骤简述3. 发送和消费同步消息3.1 消息发送者3.2 消息消费者4. 发送和消费异步消息4.1 消息发送者4.2 消息消费者5. 发送和消费单向消息5.1 消息发送者5.2 消息消费者6. 总结7. 消费者的消费模式7.1 负载均衡模式(默认)7.2 广播模式8. 消费模式总结9. 拓展 - 关于如何启动 main 方法多次1. 准备工作导入MQ客户端依赖<dependency> .

2020-11-10 10:30:30 1758

原创 Linux上搭建RocketMQ的集群监控平台

单靠脑袋是记不住的鸭~文章学习总结于视频:B站学习视频视频中有一些错误,已经在文章中修改过来了1. 概述RocketMQ 有一个对其扩展的开源项目: incubator-rocketmq-externals,这个项目中有一个子模块叫 rocketmq-console,这个便是管理控制台项目了,先将 incubator-rocketmq-externals 项目拉到本地,因为我们需要自己对 rocketmq-console 进行编译打包运行,它本身就是一个 springboot 项目,因此修改好内.

2020-11-06 15:30:26 215 1

原创 Linux上搭建RocketMQ的双主双从集群环境

文章目录1. 双主双从集群搭建1.1 大致步骤1.2 服务器环境1.3 Host添加信息1.4 防火墙配置1.5环境变量配置1.6 创建消息存储路径1.7 broker配置文件1)master12)slave23)master24)slave11.8 服务启动1)启动NameServe集群2)启动Broker集群1.8.1 查看进程状态1.8.2 查看日志1. 双主双从集群搭建1.1 大致步骤消息高可用采用2m-2s(同步双写)方式启动NameServer,NameServer起来后监听端口,等待

2020-11-06 14:15:35 581

原创 Linux上安装RocketMQ

这篇文章主要学习RocketMQ的下载、安装、启动、关闭这些基础的流程。文章目录1. 准备工作1.1 下载RocketMQ2. 环境要求3. 安装步骤4. 目录介绍5. 启动RocketMQ6. 测试RocketMQ6.1 发送消息6.2 接收消息7. 关闭RocketMQ1. 准备工作1.1 下载RocketMQ点我下载,下载的时候下载二进制版本。2. 环境要求Linux64位系统JDK1.8(64位)3. 安装步骤本教程以二进制包方式安装解压安装包进入安装目录4. 目

2020-11-05 18:06:07 221

原创 Mariadb 在 Navicat 中转储SQL文件出错:Column count of mysql.proc is wrong...

提示:虽然我是用的 Mariadb 数据库,但是此解决方案同样适用于 MySQL 数据库。 Mariadb 和 MySQL的报错信息和解决方案是一模一样的。今天在使用 Navicat 工具操作我的数据库时,想要转储SQL语句。不料遇见错误完整错误如下:1558 column count of mysql.proc is wrong.Expected37,found 20.created with mysql 50381,now running 100328.please use mysql_up.

2020-06-24 15:06:31 812

原创 Linux 后台运行 Tomcat

当我们使用 XShell、Mobaxterm或 SecureCRT 这些 SSH 工具连接上我们的服务器,再启动 tomcat 服务,tomcat能够成功启动,但是当我把这个SSH工具的这个终端窗口关闭之后 tomcat 也会随之关闭。我试过在后台运行 tomcat,比如:在命令后面加上 &./startup.sh &使用 nohup 命令启动nohup ./startup.sh &这两种方式都不行!在我关闭终端窗口之后 tomcat 进程还是会关闭。我的另一个解决

2020-06-23 09:26:52 4054

原创 SpringBoot集成Shiro(二)验证用户角色

SpringBoot集成Shiro(一)验证用户登录验证SpringBoot集成Shiro(三)验证用户权限SpringBoot集成Shiro(四)验证用户角色升级版Shiro 这个安全认证框架已经帮我们做了很多事情,在一般情况下,我们完全可以将它当做一个黑盒来使用。在上一篇文章中,我们通过 Shiro 完成了用户登录验证功能,这篇文章将在它的基础上增加角色的控制。角色控制也很简单,大致分为以下几步:增加想要角色控制的资源Shiro配置角色设置增加需要角色控制的资源我们首先在 Us.

2020-06-22 15:33:42 668

原创 SpringBoot集成Shiro(一)验证用户登录验证

SpringBoot集成Shiro(一)验证用户登录验证SpringBoot集成Shiro(二)验证用户角色SpringBoot集成Shiro(三)验证用户权限SpringBoot集成Shiro(四)验证用户角色升级版学习这篇文章之前,需要对 shiro 有一个简单的了解。在SpringBoot中集成Shiro安全认证框架也很简单,大概可以分为以下几步:创建项目并添加依赖增加登录方法增加验证方法配置Shiro创建项目首先在 https://start.spring.io/ 创建.

2020-06-19 17:16:48 2055 2

原创 SpringBoot整合Mybatis

想要在SpringBoot中整合Mybatis是一件灰常简单的事情,只需以下简单几步即可:创建SpringBoot项目创建数据库表并加上几条数据进行一点点简单的编码创建项目首先,我们创建一个SpringBoot项目,我选择在 https://start.spring.io/ 网站上去下载,也可以在IDEA中去创建SpringBoot项目哦。在创建项目的时候,记得加上 Mybatis 和 MySQL 的依赖,如下图所示:创建完成后,我们使用IDE工具打开,先来看看 pom.xml 文件,会

2020-06-18 11:01:41 254

原创 Java中自定义类加载器

在上文中(Java中双亲委派机制的实现原理),我们了解到双亲委派机制的实现原理,通过了解它,可以帮助我们更好自定义属于我们自己的类加载器。想要自定义类加载器,只需简单三步:继承 ClassLoader重写 findClass() 方法使用 defineClass() 方法生成 Class 对象流程概述下面我们就来实现自己的类加载器,大致流程如下:创建一个需要被自定义加载器加载的类,并且把它放在 classpath 以外的其他地方。继承 ClassLoader,并重写 findClass

2020-06-15 19:02:57 550

原创 Java中双亲委派机制的实现原理

在上文中我们了解到,应用程序都是由3种类加载器相互配合工作的,如果有要求,还可以加上自定义类加载器。而这些类加载器之间的关系如下图所示:图中展示的类加载器之间的这种层次关系,有个专业的名称,叫做:双亲委派模型(Parents Delegation Model)。双亲委派模型要求除了顶层的启动类加载器(Bootstrap ClassLoader)外,其他的类加载器都应该有自己的父类加载器。在上文中已经解释了 Application ClassLoader、Extension ClassLoader 和 B

2020-06-15 14:26:22 716

原创 JVM Java虚拟机中类加载机制

Java 中的类加载器学习总结于-《深入了解JAVA虚拟机》-周自明Java虚拟机的类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是Java虚拟机的类加载机制Java类具体是如何被加载的,请参照文章:https://blog.csdn.net/qq_28082757/article/details/106427403在了解Java虚拟机是如何进行类加载过程之后,就需要弄明白今天的主角儿,什么类加载器?在类

2020-06-03 15:26:47 706 2

原创 Java中类(class)的加载过程

学习总结于:《深入了解JAVA虚拟机》-周志明Java 类的声明周期类从被加载到虚拟机内存中开始,直到卸载出内存,整个生命周期分为以下七个阶段:类加载过程就是指:加载、验证、准备、解析和初始化这五个阶段Java 类加载过程加载在加载阶段,虚拟机会做一下三件事情:通过一个类的全限定名来获取定义此类的二进制流。将这个二进制流所代表的的静态储存结构转化成方法区的运行时数据结构。在内存中生成这个类的java.lang.class对象(不一定是在堆内存中,HotSpot认为这个Class对象.

2020-05-29 16:13:46 522

原创 QT中利用QTimer做延时功能

原理做延迟功能可以充分利用 QTimer 的 timeout 超时特性来做,当QTimer超时时会触发超时的信号,我们可以利用这个信号来连接槽函数来做业务操作。首先在头文件(.h文件)声明 QTimerpublic: QTimer *my_timer;再声明一个槽函数public slots: void handleTimeout();然后再.cpp文件中的构造器里面初始化 QTimer 和 连接 槽函数// 初始化 QTimermy_timer = new QTimer(this)

2020-05-29 11:12:16 7227 1

原创 Java并发编程中使用到的线程池

学习总结于-《Java并发编程实战》为什么要使用线程池?想象一下,如果系统要处理大量简单的并且处理时间很短的任务的话,每一个任务都去创建一个线程的,虽然这种方式能够达到我们的目的,但是有没有更好的方案呢?要知道创建线程不像创建对象那么简单,仅仅是在JVM的堆里分配一块内存而已。创建一个线程,需要调用操作系统内核的API,然后操作系统要为线程分配一系列的资源,这个成本就很高了,所以线程是一个重量级的对象,应该避免频繁创建和销毁。概念区分线程池的设计不像一般意义上池化资源。一般的池化资源是你需要.

2020-05-28 15:35:09 214

原创 Java8-Lambda:内置四大函数式接口

package lambda.builtInFunctions;import org.junit.Test;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.function.Consumer;import java.util.function.Function;import java.util.function.Predicate;import java.uti

2020-05-13 11:07:44 2709

原创 Java8-Lambda:Lambda语法

简单示例需求:对指定数字进行运算先创建一个函数式接口@FunctionalInterfacepublic interface ICalculation<T> { int calc(T x, T y);}再写一个操作方法 operation,具体进行什么运算现在还不知道,我们对传入的参数x和参数y进行运算并返回结果。public int operation(int x, int y, ICalculation<Integer> iCalculation){ r

2020-05-12 10:24:20 217

原创 Java中 FutureTask 的使用

在前面 通过Callable和Future创建线程 已经学习了 Callable 和 Future 两个接口,以及 FutureTask 的简单使用,节约篇幅,这里就不重复介绍了。介绍我觉得 FutureTask 其实就是实实在在的工具类,我们把具体的任务详情在 Callable 接口的实现类中实现,然后将实现类的实例传给 FutureTask,让他来创建任务,它还需要调度者来调度执行。...

2020-04-29 15:56:49 2764 2

原创 Java-CAS学习总结

在前面总结的文章中 详解Java中volatile关键字作用,说到了累加器的线程不安全,不安全的原因就是被累加的成员变量 可见性 和自增时的操作 原子性 上。可见性问题可以用 volatile 来解决,而原子性问题我们可以采用互斥锁的方案,除了互斥的方案,在文章末尾也使用了 AtomicInteger 来保证了自增操作的原子性。用它来改善累加器方法,就可以输出正确的结果。采用 AtomicIn...

2020-04-24 10:25:47 246

原创 Java8-Lambda:初识Lambda

Java8-Lambda:初识LambdaJava8新增的 Lambda 表达式虽然看着很NB,但其实 Lambda 表达式的本质只是一个"语法糖"而已。这篇文章只是初识 Lambda,先看看它的好处是什么,它能给我们带来什么样的体验,至于 Lambda 具体怎么用以及什么时候用,会在后面的文章陆续学习到。都说 Lambda 表达式能够优化内部类,我们先来看看它优化后是怎么样的。我们以前要...

2020-04-23 11:04:21 318

原创 Java集合源码学习—ArrayList

ArrayList是一种以数组实现的List,与数组相比,它具有动态扩展的能力,因此也可称之为动态数组。ArrayList实现了List,提供了基础的添加、删除、遍历等操作。ArrayList实现了RandomAccess,提供了随机访问的能力。ArrayList实现了Cloneable,可以被克隆。ArrayList实现了Serializable,可以被序列化。1. ArrayList...

2020-03-16 16:01:24 382

springboot-shiro-role-demo.zip

这是 SpringBoot 集成 Shiro 并完成 角色控制 的最简单配置,后续其他的安全操作都可以在这个基础上扩展

2020-06-22

springboot-shiro-demo.zip

这是 SpringBoot 集成 Shiro 最简单的配置,后续其他的安全操作都可以在这个基础上扩展

2020-06-22

Springboot-Mybatis-demo.zip

十分钟完成SpringBoot集成Mybatis。下载后使用IDEA可以直接运行,资源文件中包含了数据库SQL文件,运行一下生成数据即可。

2020-06-19

SSM-SRC.zip

这是一个简单的SSM框架,还包括sql数据、事务、简单的网页做数据显示。 其中数据库为 Mysql、JDK版本为1.8、Spring版本为 4.3.9 下载即可使用

2019-12-17

AOP_execution.zip

Java AOP 切点表达式,这个表达式表明了你要在哪个方法或哪些方法织入切面。方法表达式以“*”号开始,表明了我们不关心方法返回值的类型。

2019-12-05

keytoolCert.zip

keytool创建的CA密钥库和待签发的密钥库和导出的CA证书(密钥)

2019-10-31

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

TA关注的人

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