自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 maven修改版本

maven批量修改版本信息

2023-02-03 16:48:20 1040 1

原创 拼音字母表

拼音字母表

2023-02-03 16:31:57 413

原创 sed全文字符串替换

sed全文字符串替换

2023-01-18 15:57:27 382

原创 Ubuntu sources.list源文件格式详解

Ubuntu sources.list源文件格式详解

2023-01-18 15:53:59 550

原创 vi/vim末行模式全局替换

vi vim 全文替换

2023-01-18 15:33:21 641

原创 基于干净的ubuntu或者debian构建java环境或者构建mvn环境

ubuntu Docker镜像环境

2023-01-18 15:01:02 905

原创 LinkedBlockingQueue源码解析

E item;item = x;} } // 指定队列的长度,如果不传值,默认为Integer.MAX private final int capacity;// 记录数据条数 private final AtomicInteger count = new AtomicInteger();// 读锁 private final ReentrantLock takeLock = new ReentrantLock();

2023-01-11 18:33:34 315

原创 ArrayBlockingQueue源码解析

ArrayBlockingQueue底层使用了一个数组来实现队列,阻塞的实现使用了ReentrantLock

2023-01-11 18:32:36 324

原创 Java lettuce实现分布式限流

分布式限流方案实现

2022-12-02 14:02:55 207

原创 python批量修改文件名工具脚本

2022-07-11 15:32:20 419

原创 最全的CentOS7腾讯云yum源

最近工作需要,整理了一下腾讯云的Centos7源,方便查阅,里面可能有部分你用不着,反正全部都在这儿了!# CentOS-Base.repo## The mirror system uses the connecting IP address of the client and the# update status of each mirror to pick mirrors that are updated to and# geographically close to the client.

2022-05-16 11:41:50 3307 1

原创 MacOS下使用CLion编译调试MySQL8.x

基本环境操作系统:MacOS Monterey(版本 12.2.1) M1 16GB内存CLion 版本:CLion 2021.2.1MySQL 版本:8.0首先要确保系统装有cmake,如果没有需要提前按照,笔者采用的是brew按照:brew install cmakeCLion 调试配置1、获取MySQL源码,笔者采用从github获取:[email protected]:mysql/mysql-server.git2、创建构建代码存放路径,笔者选择存放在源码的build目录下3、配置 C

2022-04-18 18:49:48 1021 1

原创 伪共享问题

原理程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。执行所访问的存储空间也局限于某个内存区域。这就是程序的局部,因为这一规律,所以在设计计算机系统时会使用该原理来优化程序执行。同时,在设计整个计算机系统时,为了解决磁盘-内存、内存-寄存器速度不匹配的问题,加入了缓存的概念,今天要分享的问题出现在内存-寄存器之间缓存上面。在传统的64位CPU中,存在一个缓存行的概念,即程序会将连续的64字节内容load到CPU高速缓存中,提升CPU执行数据处理的速度。但是,现在主流的

2022-02-18 10:56:45 315

原创 MinIO服务部署和使用

采用Docker部署方式老版本docker run -d -p 9000:9000 --name minio-server\ -e "MINIO_ACCESS_KEY=minio" \ -e "MINIO_SECRET_KEY=minio@123" \ -v /Users/zjw/data/minio/data:/data \ -v /Users/zjw/data/minio/config:/root/.minio \ minio/minio:RELEASE.2021-06-17

2022-02-15 16:19:37 1309

原创 logback.xml 配置文件详解

<?xml version="1.0" encoding="utf-8"?><!--根节点<configuration>,包含下面三个属性:scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。debug: 当此属性设置为true时,将打印出logback内部日志信息,实

2022-01-24 17:54:27 1558

原创 消息队列 — RabbitMQ07

7 延迟队列7.1 概念延时队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,延时队列是用来存放需要在指定时间被处理的元素的队列。7.2 使用场景订单在十分钟之内未支付则自动取消新创建的店铺,如果在十天内都没有上传过商品,则自动发送消息提醒用户注册成功后,如果三天内没有登陆则进行短信提醒用户发起退款,如果三天内没有得到处理则通知相关运营人员预定会议后,需要在预定的时间点前十分钟通知各个与会人员参加会议7.

2021-12-23 18:04:32 992

原创 消息队列 — RabbitMQ06

6 死信队列6.1 死信的概念死信,顾名思义就是无法被消费的消息,一般来说,producer将消息投递到broker或者直接到queue里了,consumer从queue取出消息进行消费,但某些时候由于特定的原因导致queue中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有了死信队列。6.2. 死信的来源消息TTL过期队列达到最大长度(队列满了,无法再添加数据到mq中)消息被拒绝(basic.reject或basic.nack)并且requeue=f

2021-12-23 15:50:27 781

原创 消息队列 — RabbitMQ05

5 交换机前面创建了一个工作队列。我们假设的是工作队列背后,每个任务都恰好交付给一个消费者(工作进程)。在这一部分中,我们将做一些完全不同的事情-我们将消息传达给多个消费者。这种模式称为 ”发布/订阅”.为了说明这种模式,我们将构建一个简单的日志系统。它将由两个程序组成:第一个程序将发出日志消息,第二个程序是消费者。其中我们会启动两个消费者,其中一个消费者接收到消息后把日志存储在磁盘,另外一个消费者接收到消息后把消息打印在屏幕上,事实上第一个程序发出的日志消息将广播给所有消费者。5.1. Exchang

2021-12-22 14:36:03 137

原创 消息队列 — RabbitMQ04

4 发布确认4.1 发布确认原理生产者将信道设置成confirm模式,一旦信道进入confirm模式,所有在该信道上面发布的消息都将会被指派一个唯一的ID(从1开始),一旦消息被投递到所有匹配的队列之后,broke就会发送一个确认给生产者(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的队列了,如果消息和队列是可持久化的,那么确认消息会在将消息写入磁盘之后发出,broker回传给生产者的确认消息中delivery-tag域包含了确认消息的序列号,此外broker也可以设置basic.ack的

2021-12-22 11:43:22 448

原创 消息队列 — RabbitMQ03

3 工作队列工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。3.1 轮询分发消息在这个案例中我们会启动两个工作线程,一个消息发送线程,我们来看看他们两个工作线程是如何工作的。3.1.1 抽取工具类package com.zjw.rabbitmq.util;import com.rabbitmq.c

2021-12-22 11:42:36 688

原创 消息队列 — RabbitMQ02

2 RabbitMQ1.2.1 RabbitMQ 的概念RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件。RabbitMQ 与快递站的主要区别在于,它不处理快件而是接收,存储和转发消息数据。1.2.2 四大核心概念生产者:产生数据发送消息的程序是生产者交换机:交换机是 RabbitMQ 非常重要的一个部件,一方面它

2021-12-22 11:41:42 94

原创 消息队列 — RabbitMQ01

1 MQ 的相关概念1.1.1 什么是MQMQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。1.1.2 为什么要用MQ1、流量消峰举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段

2021-12-22 11:40:15 70

原创 Log4j-2.15.0之前版本通过JNDI远程拉取代码本地执行复现

1. 原理log4j具有一个功能lookups的功能,它能够支持你在日志打印中通过简单的表达式输出操作系统、Java相关的信息,如下代码:@Slf4jpublic class Log4j2Main { public static void main(String[] args) { log.info("runtime: {}", "${java:runtime}"); log.warn("vm: {}", "${java:vm}"); log.error("os: {}"

2021-12-19 19:12:24 469

原创 消息中间件之ActiveMQ — 07

集群配置官方文档主备集群官方文档Master Slave TypeRequirementsProsConsShared File System Master Slave共享文件系统,如SAN需要运行多个slave。当master挂掉之后会自动进行故障恢复需要共享文件系统JDBC Master Slave共享数据库需要运行多个slave。当master挂掉之后会自动进行故障恢复需要一个共享的数据库。 也相对缓慢,因为它不能使用高性能日志Replicate

2021-12-19 19:07:48 232

原创 JVM 内存分析工具笔记

jmap 命令1. 获取heap dump文件jmap -dump:live,format=b,file=h.hprof [pid] # 会触发gc,只转存存活对象或者jmap -dump:format=b,file=h3.hprof [pid]jmap的作用并不仅仅是为了获取堆转储快照,它还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。jmap工具的主要选项如下:选项描述-dump用于生成JVM的heap快照

2021-12-18 16:10:25 1203

原创 消息中间件之ActiveMQ — 06

使用细节Topic加强 可追溯消息避免topic下错过消息. 官方文档消费者设置Destination topic = session.createTopic("test?consumer.retroactive=true");可用的恢复策略策略Sample Configuration描述FixedSizedSubscriptionRecoveryPolicy在RAM中为按时间顺序清除的消息历史记录保留固定数量的内存。FixedCountSubscription

2021-12-17 15:39:09 317

原创 消息中间件之ActiveMQ — 05

高级使用queue browser可以查看队列中的消息而不消费,没有订阅的功能package com.zjw.activemq.browser;import java.util.Enumeration;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.QueueBrowser;import javax.jms.Session;import javax.jms.TextMessag

2021-12-16 00:45:25 1719

原创 消息中间件之ActiveMQ — 04

ActiveMQ服务监控Hawtio官方网站https://hawt.io独立jar包的形式运行java -jarhawtio单程序运行,可以对多个远程ActiveMQ服务器进行监控嵌入ActiveMQ下载war包复制到webapps下jetty.xml bean标签下添加<bean class="org.eclipse.jetty.webapp.WebAppContext"> <property name="contextPath" v

2021-12-15 21:19:56 384

原创 消息中间件之ActiveMQ — 03

Springboot整合ActiveMQPOM依赖配置<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apa

2021-12-15 20:59:42 217

原创 消息中间件之ActiveMQ — 02

常用API事务事务采用commit和rollback来提交和回滚事务:session.commit();session.rollback();签收模式签收代表接收端的session已收到消息的一次确认,反馈给broker,分别为以下三种:Session.AUTO_ACKNOWLEDGE:当客户端从receiver或onMessage成功返回时,Session自动签收客户端的这条消息的收条。Session.CLIENT_ACKNOWLEDGE:客户端通过调用消息(Message)的a

2021-12-15 19:40:30 833 1

原创 消息中间件之ActiveMQ — 01

什么是JMS MQ全称:Java MessageService 中文:Java 消息服务。JMS是Java的一套API标准,最初的目的是为了使应用程序能够访问现有的MO系统(MessageOriented Middleware),MOM指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。后来被许多现有的MOM供应商采用,并实现为MOM系统。常见MOM系统包括Apache的ActiveMQ、 阿里巴巴的RocketMQ、IBM的MQSeries、Microsof

2021-12-15 18:28:54 294

原创 剑指Offer算法题11-20

11. 数字的整数次方描述:实现函数 double power(double base, int exp),求base的exp次方,不需要考虑大数问题。思路:需要考虑数字的负数次方和base为0的情况代码:public static double power(double base, int exp) { if (base == 0 && exp == 0) { throw new RuntimeException("0的0次方没有数学意义"); } if (

2021-09-16 11:45:38 72

原创 剑指Offer算法题03-10

03. 二维数组中查找描述:在一个二维数组中,每一行都从小到大排列,每一列都从上到下排列,实现查找目标数字是否在二维数组中存在思路:从最右一列开始或者最下一行开始,判断目标值是否小于(或者大于)该列(行)第一个值,用于淘汰该列或者该列或者行的依据代码:public static boolean exist(int[][] arr, int target) { if (arr == null || arr.length == 0 || arr[0].length == 0) { retur

2021-09-16 11:44:38 99

原创 算法笔记-第04节课

第04节课1. 归并排序1.1 递归方式实现思路:数组一分为二,先保证分别有序,然后再合并为有序数组,一直拆分,直到最多只有以个元素(一定有序)时再归并代码:// 递归方式void mergeSort(int[] arr) { if (arr == null || arr.length < 2) { return; } process(arr, 0, arr.length - 1);}void process(int[] arr, int L, int R) {

2021-09-14 13:10:35 72

原创 算法笔记-第03节课

第03节课1. 单向链表反转思路:带头指针的链表可以不使用返回值进行翻转,不带头指针的必须有返回值,函数的形参改变不影响调用端的值,引用改变影响调用端。代码展示:// 带链表头public void reverse1(ListNode head) { if(head == null) return; ListNode ptr = head.next; ListNode ptrNext; head.next = null; // 这个必须置为null,否则会出现环 while(p

2021-09-13 15:06:40 78

原创 算法笔记-第02节课

第02节课1. 安位异或交换两个数如何不用额外变量交换两个数代码展示:static void swap(int[] arr, int i, int j) { if(arr == null || arr.length < 2 || i == j) return; arr[i] = arr[i]^arr[j]; arr[j] = arr[i]^arr[j]; arr[i] = arr[i]^arr[j];}2. 找出数组中唯一出现奇数次的数一个数组中有一种数出现了奇数次,其

2021-09-13 15:05:47 98

原创 算法笔记-第01节课

第01节课1. 选择排序思路:i~N-1找最小的放到第i号位置(i从0到N-1)代码:void selectSort(int[] arr) {if (arr == null || arr.length < 2) return; for (int i = 0; i < arr.length; i++) { int minIndex = i; for (int j = i; j < arr.length; j++) { if (arr[j] <

2021-09-13 15:05:00 54

原创 Scala实现万年历

package com.zjw.componentimport java.text.SimpleDateFormatimport java.util.Calendarimport scala.io.StdInobject PermanentCalendar { def main(args: Array[String]): Unit = { println("请输入年份") val year = StdIn.readLine().toInt println("请输入月

2021-09-01 18:11:08 238

原创 Redis配置项详解

序号配置项案例说明1daemonizedaemonize no默认情况下,redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为yes2pidfilepidfile /var/run/redis.pid当Redis 在后台运行的时候,Redis 默认会把pid 文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis服务时,需要指定不同的pid 文件和端3portport 6379监听端口,默认为6379...

2021-08-30 16:42:49 151

原创 MySQL-Plus QueryWrapper函数与SQL语句对比表

函数说明例子eq等于=eq("name", "张三") -> name = '张三'ne不等于<>ne("name", "张三") -> name <> '张三'gt大于 >gt('age', 18) -> age > 18ge大于等于 >=ge('age', 18) -> age >= 18lt小于 <lt('age', 18) -> age < 18...

2021-08-30 11:41:35 2220

空空如也

空空如也

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

TA关注的人

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