自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

诚的博客

每天进步一点点

  • 博客(161)
  • 资源 (3)
  • 收藏
  • 关注

原创 生产者消费者模式-java原生、Disruptor实现方案

生产者消费者模式介绍生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。阻塞队列如何实现高并发多线程安全也是生产者消费者模式中的核心关键。在日常开发过程中,我们常常会遇到一些高并发场景,例如很多秒杀场景,其实真实的

2021-03-31 14:02:58 34 1

原创 Disruptor入门

翻译自Disruptor git库教程 英文地址获得Disruptor可以通过Maven或者下载jar来安装Disruptor。只要把对应的jar放在Java classpath就可以了。基本的事件生产和消费我们从一个简单的例子开始学习Disruptor:生产者传递一个long类型的值给消费者,而消费者消费这个数据的方式仅仅是把它打印出来。首先声明一个Event来包含需要传递的数据:public class LongEvent { private long value;..

2021-03-31 14:00:44 21

原创 Java并发编程框架Disruptor

Disruptor是什么?Disruptor是一个高性能的异步处理框架,一个轻量级的JMS,和JDK中的BlockingQueue有相似处,但是它的处理速度非常快,获得2011年程序框架创新大奖,号称“一个线程一秒钟可以处理600W个订单”(这有点吓人吧),并且Disruptor不仅仅只有buffer,它提供的功能非常强大,比如它可以帮助我们轻松构建数据流处理(比如一个数据先交给A和B这2个消费者并行处理后在交给C处理,是不是有点想起storm这种流处理,实际上strom的底层就是应用了disrupto

2021-03-31 13:59:14 13

原创 Java并发编程之ConcurrentLinkedQueue详解

简介在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,下面我们一起来研究下Doug Lea是如何使用非阻塞的方式来实现线程安全队列ConcurrentLinkedQueue的。ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,它采用先进先

2021-03-31 13:20:39 21

原创 spring boot 限制初始值大小及参数中文详解

要加“m”说明是MB,否则就是KB了.-Xms:初始值-Xmx:最大值-Xmn:最小值java -Xms10m -Xmx80m -jar mod.jar&时区设置java -jar -Duser.timezone=GMT+08 mod.jar &#----------------------------------------#核心属性#----------------------------------------#BANNER...

2021-03-31 13:14:39 49

原创 文件大小换算

1 byte = 8 bits[1] 1KiB= 1,024 bytes[1] 1MiB= 1,048,576 bytes[1] 1GiB= 1,073,741,824 bytes[1] 1TiB= 1,099,511,627,776 bytes[1] 名称    符号    二进制计量    十进制计量 字节数    等于    KiloByte[1] KB ...

2021-03-31 13:13:56 17

原创 springboot配置请求头大小

如果使用nginx还需要在nginx.conf配置文件中修改client_max_body_size的值,修改完成后重新加载配置文件 nginx -s reload

2021-03-31 12:15:48 67

原创 MYSQL修改传输数据包大小值(max_allowed_packet)

#查询允许的数据包大小 4194304字节为4MBselect @@max_allowed_packet;#临时生效,设置最大值 30Mset global max_allowed_packet =31457280#永久生效,改配置文件#linuxvim /etc/my.cnf#windows#D:\Program Files\MySQL\MySQL Server 5.6\my-default.ini##配置文件添加[mysqld]max_allowed_packet = 30.

2021-03-31 12:13:44 84

原创 springboot响应结果超长(7.8M)浏览器无法接收

原因:浏览器的接收数据长度是有限制的,超过长度就不能接收 解决办法:将服务器返回的数据进行压缩,添加如下配置即可,如下图

2021-03-31 10:19:41 47

原创 RabbitMQ控制台详解

属性 说明overview→Totals 所有队列的阻塞情况Ready 待消费的消息总数Unacked 待应答的消息总数Total 总数 Ready+Unacked属性 说明Publish producter pub消息的速率Publisher confirm broker确认pub消息的速率Deliver(manual ack) ustomer手动确认的速率Deliver( auto ack) customer自动确认的速率C...

2021-03-31 09:08:47 38

原创 websocket连接出现 HTTP Authentication failed; no valid credentials available

说明没有权限 原因auth拦截的websocket地址 解决:auth地址拦截忽略websocket地址

2021-03-30 09:11:40 603

原创 vsCode切换分支git

2021-03-29 14:46:57 398

原创 MyBatis中大于号以及小于号的表达方式

以下介绍两种可行方法:①转义法大于:&gt;小于:&lt;大于等于:&gt;=小于等于:&lt;=笔者案例:<select id="view" parameterType="map" resultMap="BaseResultMap"> SELECT * FROM task t,staff s,product p WHERE t.staff_id = s.id AND t.product_id = p.id &l.

2021-03-28 23:34:08 56 1

原创 RabbitMQ-Failed to check/redeclare auto-delete queue(s).

RabbitMQ的一个问题,我的解决办法是1、清空队列2、给用户分配权限(通常是这个问题)一、队列清空输入命令:rabbitmqctl list_queues查看所有队列接下来1、执行 rabbitmqctl stop_app关闭应用的命令为:2、2、rabbitmqctl reset 清除队列3、rabbitmqctl start_app 启动队列4、再次查看 rabbitmqctl list_queues这个时候队列应该是空的二、添加admin,并赋予administ

2021-03-28 23:33:05 70

原创 The .NET Core runtime can be found at:(Windows)

原因缺少.NET Core环境 下载dotnet安装包.NET Core 3.1 SDK (v3.1.407) - Windows x64 Installer!

2021-03-27 18:13:57 67

原创 SpringBoot几种定时任务的实现方式

定时任务实现的几种方式:Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。ScheduledExecutorService:也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。Spring Task:Spring3.0以后自带的task,可以将它看成一个轻量级

2021-03-27 11:05:43 19

原创 SpringBoot几种定时任务的实现方式

Spring Task:Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。在SpringBoot项目中,首先创建项目,导入依赖:<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</arti

2021-03-27 11:04:32 15

原创 SpringBoot 多种定时任务实现方式

1、实现定时任务的实现方式Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。ScheduledExecutorService:也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。Spring Task:Spring3.0以后自带的task,可以将它看成一个轻量.

2021-03-27 11:03:01 10

原创 SpringBoot整合Quartz实现定时任务

1、Quartz简介Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。1.1 Quartz的三大核心组件调度器:Scheduler。任务:JobDetail。触发器:Trigger,包括 SimpleTrigger 和 CronTrigger。(1)Job(任务

2021-03-27 11:02:02 54

原创 java标准化日期格式与毫秒时间戳之间的转换

import java.text.ParseException;import java.text.SimpleDateFormat;public class dateFormatUtil { public static void main(String[] args) throws ParseException { long time = System.currentTimeMillis(); System.out.println(time); .

2021-03-27 10:10:45 64

原创 Java队列Queue的使用

首先我们需要知道使用队列是什么,以及使用队列的意义。一个队列基本上可以认为是一个先入先出(FIFO)的数据结构,队列和数组的主要区别就在于,我们在使用数组时,必须在前面就定义好数组的长度,这就有了很大的局限性,而队列的长度无需之前就设定好,这是队列优于数组的一点,不过队列只可以在前端进行删除操作,在末端进行增添操作。队列的使用目的就是,在一般情况下,如果是一些即时消息的处理,并且在处理时间很短的情况下是不需要使用队列的,但是如果消息处理比较浪费时间,这个时候有新的消息来了,就只能处于阻塞状态,造成用

2021-03-27 10:09:19 34

原创 Java 的内存分类

目录内存(Memory)1. 栈内存(Stack)2. 堆内存(Heap)3. 栈和队列(Queue)内存(Memory)Java 把内存分成两种,一种叫做栈内存,一种叫做堆内存;每个栈帧不能共享,但是能共享堆内存;1. 栈内存(Stack)方法运行时使用的内存,比如main方法运行,进入方法栈中执行;每个方法在栈内存中都有独立的栈空间,方法结束后会弹栈消失;储存局部变量(即方法级变量);2. 堆内存(Heap)存储对象或数组,储存成员变量(对象实例级变量),凡是 new 来创建的

2021-03-27 10:06:24 17

原创 rabbitmq的通配符模式(Topic Exchange)的*和#区别

符号“#”匹配路由键的一个或多个词,符号“*”匹配路由键的一个词。 例如:topic.#那么这个队列会会接收topic开头的消息topic.*.queue那么这个队列会接收topic.aaaa.queue这样格式的消息,不接收能topic.aaaa.bbbb.queue这样格式的消息例如,绑定时设置了routing key为”abc”,那么客户端提交的消息,只有设置了key为”abc”的才会投递到队列。对key进行模式匹配后进行投递的叫做Topic交换机,符号”#”匹配一个或多个词,符 号

2021-03-27 10:05:08 65

原创 实现java内存队列消费事件-ConcurrentLinkedQueue

import com.google.common.collect.Queues;public class Pusher implements Runnable { private Queue<String> msgs = Queues.newConcurrentLinkedQueue(); // 怼事件到内存队列 void push(String event) { msgs.add(event); } @Override public void run() .

2021-03-27 10:04:59 39

原创 RabbitMQ-使用@RabbitListener注解消费消息

@RabbitListener注解指定目标方法来作为消费消息的方法,通过注解参数指定所监听的队列或者Binding。使用@RabbitListener可以设置一个自己明确默认值的RabbitListenerContainerFactory对象。可以在配置文件中设置RabbitListenerAnnotationBeanPostProcessor并通过<rabbit:annotation-driven/>来设置@RabbitListener的执行,当然也可以通过@EnableRabbit注解来.

2021-03-26 15:46:27 235

原创 springboot整合rabbitMQ-路由模型

路由的模型,这个就是多了一个路由键,消息里面有路由键,队列里面有路由键,只有路由键匹配之后,才可以消费者获取到数据。生产者 @Test void testRouter() {//使用rabbitmq直接往队列里面放数据// convertAndSend()第一个参数 是 rabbitTemplate.convertAndSend("directs","info","direct 模型里面发送的消息"); }这个生产者在发送消息的时候,就可...

2021-03-26 15:43:04 13

原创 RabbitMQ之路由键转发消息

消息队列:目前流行的有 Kafka、RabbitMQ、ActiveMQ等功能:为了解决消息的分布式消费,完成项目、服务之间的解耦动作。消息的生产者与消费者之间完全采用异步通信方式,极大的提高了系统的响应能力,从而提高系统的网络请求吞吐量。Spring-Boot 整合RabbitMQ依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifact...

2021-03-26 15:41:19 26

原创 RabbitMQ添加新用户并支持远程访问

第一步:添加 mq 用户并设置密码C:\Users\80002345>rabbitmqctl add_user mq 123456Adding user "mq" ...第二步:添加 mq 用户为administrator角色C:\Users\80002345>rabbitmqctl set_user_tags mq administratorSetting tags for user "mq" to [administrator] ...查看用户列表C:\User

2021-03-26 15:38:30 42

原创 SpringBoot使用@Scheduled创建定时任务

定时任务一般会存在中大型企业级项目中,为了减少服务器、数据库的压力往往会采用时间段性的去完成某些业务逻辑。比较常见的就是金融服务系统推送回调,一般支付系统订单在没有收到成功的回调返回内容时会持续性的回调,这种回调一般都是定时任务来完成的。还有就是报表的生成,我们一般会在客户访问量过小的时候来完成这个操作,那往往都是在凌晨。这时我们也可以采用定时任务来完成逻辑。SpringBoot为我们内置了定时任务,我们只需要一个注解就可以开启定时为我们所用了。本章目标基于SpringBoot架构完成注解@S.

2021-03-26 15:37:39 10

原创 @Scheduled定时任务不生效的原因

1)定时方法里不能有任何参数2)定时方法不能有返回值3)定时方法里不可以有其他带注解的方法

2021-03-26 15:34:49 450

原创 RabbitMQ 基本使用(注解的方式)

RabbitMQ 可以采用基于注解的方式来创建队列,如下:1. 手动在 RabbitMQ 管理界面创建 myQueue队列 1. 发送者代码:1@Autowired private AmqpTemplate amqpTemplate; public void send(){ String msg = "mqsender send ..." + new Date(); amqpTemplate.convertAndSend("myQueue...

2021-03-26 15:26:20 68

原创 RabbitMQ-Java实现Publish/Subscribe订阅模式

订阅模式一个生成者,多个消费者,每个消费者有自己的队列,生产者没有直接把消息发到队列,而是发给了交换机exchange适合场景举例:对于同一个消息,要发邮件,也要发短信,因此拆分成两个队列新建连接RabbitMQ的工具类utilsimport com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;import java.util..

2021-03-26 15:25:10 40

原创 RasbbitMQ 交换机、路由键与队列绑定

交换器Exchange我们之前讲述的是将消息投递到队列中再有消费者区消费,实际上RabbitM的运作流程不是这样的。真实情况是,生产者将消息发送到 Exchange (交换器:“X”),由交换器将消息路由到一个或者多个队列中,消费者再去消费消息。如果路由不到,或许会返回给生产者,或许直接丢弃(这个看具体配置后面会讲到:)。首先明白两个概念:BindingKey:绑定键,交换机都是需要与队列进行绑定,这里交换键可以简单的理解为交换器与队列之间的路径的名称(可以重复,即可以把多条队列以同一绑定键与路由器绑

2021-03-26 15:23:38 46

原创 Java使用RabbitMQ之订阅分发(Topic)

使用RabbitMQ进行消息发布和订阅,生产者将消息发送给转发器(exchange),转发器根据路由键匹配已绑定的消息队列并转发消息,主题模式支持路由键的通配。生产者代码: 1 package org.study.exchange3.topic3; 2 3 import com.rabbitmq.client.Channel; 4 import com.rabbitmq.client.Connection; 5 import org.junit.Test; 6 import or...

2021-03-26 15:19:27 24

原创 scheduled只执行一次,有个定时任务突然不执行了?

当ScheduledThreadPoolExecutor碰到 Uncaught Exception 时的源码处理逻辑。我们自己在使用这个线程池时,需要注意对任务运行时异常的处理(最简单的方式就是在最外层加个try-catch,然后捕捉打印日志)。...

2021-03-25 15:28:12 136

原创 撤销操作的快捷键是ctrl + z, 那相反的,向前一步的 快捷键是ctrl + y

撤销操作的快捷键是ctrl + z 那相反的,向前一步的 快捷键是ctrl + y

2021-03-25 09:38:46 278

原创 utf8 和utf8mb4 的区别

低版本的MySQL支持的utf8编码,最大字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。也就是说,任何不在基本多文平面的 Unicode字符,都无法使用MySQL原有的 utf8 字符集存储。这些不在BMP中的字符包括哪些呢?最常见的就是Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和一些不常用的汉字

2021-03-24 15:30:39 9

原创 球面坐标系与指标坐标系转换

墨卡托投影的正解和反解公式

2021-03-24 15:18:18 134

原创 Java经纬度坐标与高斯坐标的转换

以中央子午线114.0为例。 // 由高斯投影坐标反算成经纬度 public static double[] GaussToBL(double X, double Y) { double[] output = new double[2]; double longitude1,latitude1, longitude0, X0,Y0, xval,yval; //NN曲率半径,测量学里面用N表示 //M为子午线弧长,测量学里用大X表示 //fai为底点纬度,由子午弧长反

2021-03-24 15:15:53 101

原创 Java经纬度坐标转换到平面坐标

米勒坐标系package sg.edu.ntu.huangcheng; public class MillerCoordinate { public static double[] MillierConvertion(double lat, double lon) { double L = 6381372 * Math.PI * 2;//地球周长 double W=L;// 平面展开后,x轴等于周长 double H=L/2;// y轴约等于周长一半

2021-03-24 15:12:58 120

Java多线程--等待所有子线程执行完的五种方法.docx

Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法

2020-09-14

为什么我的Redis这么“慢”?.docx

为什么我的Redis这么“慢”? 为什么我的Redis这么“慢”? 为什么我的Redis这么“慢”? 为什么我的Redis这么“慢”? 为什么我的Redis这么“慢”? 为什么我的Redis这么“慢”? 为什么我的Redis这么“慢”? 为什么我的Redis这么“慢”? 为什么我的Redis这么“慢”? 为什么我的Redis这么“慢”? 为什么我的Redis这么“慢”? 为什么我的Redis这么“慢”?

2020-09-14

Typora更换主题步骤 20200318.md

Typora更换主题步骤

2020-09-13

空空如也

空空如也

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

TA关注的人 TA的粉丝

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