自定义博客皮肤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)
  • 收藏
  • 关注

转载 Disruptor去锁化

取而代之的是,在需要确保操作是线程安全的(特别是,在多生产者的环境下,更新下一个可用的序列号)地方,我们使用CAS(Compare And Swap/Set)操作。这是一个CPU级别的指令,在我的意识中,它的工作方式有点像乐观锁——CPU去更新一个值,但如果想改的值不再是原来的值,操作就失败,因为很明显,有其它操作先改变了这个值。情况三显然是唯一一个是错误的。线程2可能不会关心变量value的值是什么,主要的意图就是在后面加上字符 ‘y'而不管它原来的值是什么,在这种前提下,情况一和情况二都是正确的。

2024-03-26 22:19:32 33

原创 Disruptor消费线程等待策略

以下按等待最快到最慢策略排序。

2024-03-26 12:42:19 232

原创 CPU缓存行及伪共享

随着CPU的频率不断提升,而内存的访问速度却没有质的突破,为了弥补访问内存的速度慢,充分发挥CPU的计算资源,提高CPU整体吞吐量,在CPU与内存之间引入了一级Cache。随着热点数据体积越来越大,一级Cache L1已经不满足发展的要求,引入了二级Cache L2,三级Cache L3。(注:若无特别说明,本文的Cache指CPU Cache,高速缓存)CPU Cache在存储器层次结构中的示意如下图:计算机早已进入多核时代,软件也越来越多的支持多核运行。

2024-03-25 22:20:14 984

原创 Disruptor

Disruptor是一个提供并发环缓冲区数据结构的库。它旨在异步事件处理架构中提供低延迟、高吞吐量的工作队列。为了理解Disruptor的好处,我们可以将其与一些很容易理解且目的相当相似的队列进行比较。在Disruptor的情况下,这将是Java的BlockingQueue。和队列一样,Disruptor的目的是在同一进程中的线程之间移动数据(例如消息或事件)。然而,Disruptor提供的一些关键特性将其与队列区分开来。它们是:在我们能够理解Disruptor如何工作之前,需要了解Disruptor一些

2022-06-21 16:05:56 238 1

原创 ConcurrentHashMap概述

The primary design goal of this hash table is to maintain concurrent readability (typically method get(), but also iterators and related methods) while minimizing update contention. Secondary goals are to keep space consumption about the same or better th.

2022-04-01 15:55:54 293

转载 注解@ConfigurationProperties使用方法

前言以前传统的Spring一般都是基本xml配置的,后来spring3.0新增了许多java config的注解,特别是spring boot,基本都是清一色的java config。Spring配置方式第一阶段:xml配置在spring 1.x时代,使用spring开发满眼都是xml配置的bean,随着项目的扩大,我们需要把xml配置文件分放到不同的配置文件中,那时候需要频繁地在开发的类和配置文件间切换。第二阶段:注解配置在spring 2.x时代,随着JDK1.5带来的注解支持,spring

2021-10-12 21:24:42 644

原创 RequestBodyAdvice和ResponseBodyAdvice

在项目中我们往往需要对请求参数在其被Controller层接收前和响应回客户端前做一些公共的操作,比如参数过滤、解密、加密,验签等操作。SpringMVC为我们提供了RequestBodyAdvice和ResponseBodyAdvice这两个接口就很方便的帮助我处理了这些问题。相比过滤器和拦截器更灵活。RequestBodyAdvicepackage com.lpp.encrytdemo.beans;/** * 在请求体被读取或转换为对象前,允许我们自定义请求。还允许在其被发送给Contr

2021-10-11 21:59:42 604

原创 MySQL case when 用法

MySQL 的 case when 的语法有两种:简单函数CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END搜索函数CASE WHEN [expr] THEN [result1]…ELSE [default] END注意:简单函数和搜索函数的区别,简单函数case后面有字段,when是值。搜索函数case没有,when 后面是表达式...

2021-02-09 11:25:41 461

原创 MySQL DATEDIFF函数:获取两个日期的时间间隔

MySQL 中 DATEDIFF(date1,date2) 返回起始时间 date1 和结束时间 date2 之间的天数。date1 和 date2 为日期或 date-and-time 表达式。计算时只用到这些值的日期部分。【实例】使用 DATEDIFF() 函数计算两个日期之间的间隔天数,输入的 SQL 语句和执行结果如下所示。mysql> SELECT DATEDIFF('2017-11-30','2017-11-29') AS COL1, -> DATEDIFF('2017-

2021-02-08 23:55:27 1151

原创 You can‘t specify target table ‘表名‘ for update in FROM clause错误

环境:MySQL8.0比如我要将用户表里名字(name)为空字符串("")的用户的状态(status)改成"1",我的写的SQL如下:UPDATE user_info SET STATUS = '1' WHERE USER_ID IN (SELECT USER_ID FROM user_info WHERE NAME != '');但是报了如下错误:You can’t specify target table ‘user_info’ for update in FROM clause因为在MY

2021-02-08 23:39:53 160

原创 MySQL SQL语句执行顺序

sql执行顺序fromjoinonwheregroup by(开始使用select中的别名,后面的语句中都可以使用)avg,sum…havingselectdistinctorder bylimit

2021-02-08 23:23:59 148

原创 LENGTH()和CHAR_LENGTH()的区别

1、char_length(str)(1)计算单位:字符(2)不管汉字还是数字或者是字母都算是一个字符2、length(str)(1)计算单位:字节(2)utf8编码:一个汉字三个字节,一个数字或字母一个字节。(3)gbk编码:一个汉字两个字节,一个数字或字母一个字节。...

2021-02-08 17:34:28 1778

原创 MYSQL实现排名函数RANK,DENSE_RANK和ROW_NUMBER

1. 排名分类1.1 区别RANK,DENSE_RANK和ROW_NUMBERRANK并列跳跃排名,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,跳跃到总共的排名。DENSE_RANK并列连续排序,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,依然按照连续数字排名。ROW_NUMBER连续排名,即使相同的值,依旧按照连续数字进行排名。区别如图:1.2 分组排名将数据分组后排名,区别如图:2. 准备数据创建一张分数表,里面有字段:分数score,课程号course

2021-02-08 16:28:48 372

原创 Oracle函数lag和lead详解

1.函数功能Lag和Lead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAG和LEAD有更高的效率。2.lag和lead语法:ag(exp_str,offset,defval) over()exp_str 是要做对比的字段offset 是exp_str字段的偏移量 比如说 offset 为2 则 拿exp_str的第一行和第三行对比,第二行和第四行,依次类推,offset的默认值为1!defval是当该函数无值可用的情况下返

2021-02-03 23:49:14 7517

转载 理解group by和聚合函数

先来看下表1,表名为test: 执行如下SQL语句:SELECT name FROM testGROUP BY name你应该很容易知道运行的结果,没错,就是下表2:可是为了能够更好的理解“group by”多个列“和”聚合函数“的应用,我建议在思考的过程中,由表1到表2的过程中,增加一个虚构的中间表:虚拟表3。下面说说如何来思考上面SQL语句执行情况:FROM test:该句执行后,应该结果和表1一样,就是原来的表。FROM test Group BY name:该句执行后

2021-01-18 22:16:16 275

原创 图解并查集

前言并查集是一种非常有用且高效的数据结构,千万不要被这个极具专业性的名字吓到了,它的算法思想和代码实现都非常简单,不需要花太大力气就可以轻松掌握。下面就通过画图等方式为大家介绍一下这种神奇的数据结构。一、 图解并查集并查集有两个英文名:1、Disjoint Set,2、Union Find。它的作用就是把一个数据集分成若干个子集,每个子集内部数据可以互联互通,而子集之间则不具有连通性。并查集的底层结构类似于堆(不熟悉堆的同学赶紧去复习一下堆排序,面试频率很高哦),也是用数组描述一种树结构,但不同的是,

2021-01-13 23:54:49 683

原创 证明辗转相除法(欧几里德算法)

定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数。最大公约数(greatest common divisor)缩写为gcd。证明:gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0) a可以表示成a = kb + r(a,b,k,r皆为正整数),则r = a mod b12,18的公因数有:1,2,3,6。由算法gcd(a,b)=gcd(b,a%b)有gcd(12,18)=gcd(18,12%18)=gcd(18,1

2021-01-08 21:49:19 660

原创 除余定理

模的四则运算:(a + b) % p = (a % p + b % p) % p(a - b) % p = (a % p - b % p ) % p(a * b) % p = (a % p * b % p) % pa ^ b % p = ((a % p)^b) % p结合律:((a+b) % p + c) % p = (a + (b+c) % p) % p((ab) % p * c)% p = (a * (bc) % p) % p交换律:(a + b) % p = (b+a) % p(.

2020-12-24 17:24:57 1156 1

转载 卡特兰数

一、关于卡特兰数卡特兰数是一种经典的组合数,经常出现在各种计算中,其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, …

2020-12-19 23:08:44 286 1

原创 树的高度、深度、层

2020-12-18 22:20:35 385 1

转载 Java 整数的高效互换(位运算)

/** * * * 本实例用更高效的方法,省略临时变量,交换两个整数类型的变量 * 实现整数的高效互换 */public class Example { public static void main(String[] args) { int a = 5; int b = 10; a = a^b; b = a^b; a = a^b; System.out.println(a+":"+b);.

2020-11-09 22:28:47 514

原创 算法:1. 两数之和

给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]方法一:暴力枚举 思路及算法最容易想到的方法是枚举数组中的每一个数x,寻找数组中是否存在target - x。c...

2020-10-23 21:28:23 209

原创 OkHttpClient进行Https请求(信任所有证书)

//创建信任所有证书的OkHttpClient public static OkHttpClient getHttps() { OkHttpClient okHttpClient = new OkHttpClient.Builder() .hostnameVerifier(new HostnameVerifier() { @Override .

2020-09-02 09:32:46 4409

原创 springCloud gateway 302重定向问题

2020-08-25 09:28:59 2765

原创 根据银行卡号判断所属银行

public class BankUtil { //传入卡号 得到银行名称 public static String getNameOfBank(String idCard) { int index = -1; if(idCard==null || idCard.length()<16 || idCard.length()>19){ return ""; } //6位Bin号 String cardbin_6 = idCard.substring(.

2020-08-19 09:40:19 3178

原创 JAVA实现Oracle decode函数功能

public static String oraDecode(String keyword, String... kvs) { int len = 0; if (StringUtils.isBlank(keyword) || Objects.isNull(kvs) || (len = kvs.length) < 2)// throw new IllegalArgumentException(); return null; //动态参数为奇数.

2020-07-29 09:29:11 769

转载 Windows环境下安装RocketMQ

https://www.cnblogs.com/linjiqin/p/9553663.html

2020-07-22 11:12:37 280

转载 【RabbitMQ】如何进行消息可靠投递【下篇】

说明上一篇文章里,我们了解了如何保证消息被可靠投递到RabbitMQ的交换机中,但还有一些不完美的地方,试想一下,如果向RabbitMQ服务器发送一条消息,服务器确实也接收到了这条消息,于是给你返回了ACK确认消息,但服务器拿到这条消息一看,找不到路由它的队列,于是就把它丢进了垃圾桶,emmm,我猜应该属于可回收垃圾。如何让消息可靠投递到队列如果你对上面的描述还不是很清楚,那我再用代码来说明一次。在仅开启了生产者确认机制的情况下,交换机接收到消息后,会直接给消息生产者发送确认消息,如果发现该消息不

2020-06-20 11:44:28 289

转载 【RabbitMQ】如何进行消息可靠投递【上篇】

一、说明先来说明一个概念,什么是可靠投递呢?在RabbitMQ中,一个消息从生产者发送到RabbitMQ服务器,需要经历这么几个步骤:生产者准备好需要投递的消息。生产者与RabbitMQ服务器建立连接。生产者发送消息。RabbitMQ服务器接收到消息,并将其路由到指定队列。RabbitMQ服务器发起回调,告知生产者消息发送成功。所谓可靠投递,就是确保消息能够百分百从生产者发送到服务器。为了避免争议,补充说明一下,如果没有设置Mandatory参数,是不需要先路由消息才发起回调的,服务器

2020-06-20 11:28:24 175

转载 【RabbitMQ】一文带你搞定RabbitMQ延迟队列

一、说明在上一篇中,介绍了RabbitMQ中的死信队列是什么,何时使用以及如何使用RabbitMQ的死信队列。相信通过上一篇的学习,对于死信队列已经有了更多的了解,这一篇的内容也跟死信队列息息相关,如果你还不了解死信队列,那么建议你先进行上一篇文章的阅读。这一篇里,我们将继续介绍RabbitMQ的高级特性,通过本篇的学习,你将收获:什么是延时队列延时队列使用场景RabbitMQ中的TTL如何利用RabbitMQ来实现延时队列二、 本文大纲:以下是本文大纲:本文阅读前,需要对Rabbi

2020-06-20 11:03:48 232 1

转载 【RabbitMQ】一文带你搞定RabbitMQ死信队列

一、说明RabbitMQ是流行的开源消息队列系统,使用erlang语言开发,由于其社区活跃度高,维护更新较快,性能稳定,深得很多企业的欢心(当然,也包括我现在所在公司【手动滑稽】)。为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ的死信队列机制,当消息消费发生异常时,将消息投入死信队列中。但由于对死信队列的概念及配置不熟悉,导致曾一度陷入百度的汪洋大海,无法自拔,很多文章都看起来可行,但是实际上却并不能帮我解决实际问题。最终,在官网文档中找到了我想要的答案,通过官网文档的学习,才发现对于死信

2020-06-20 10:28:32 841

转载 RabbitMQ学习——交换机(Exchange)

RabbitMQ中的交换机有四种类型,分为:Direct Exchange(直连交换机)Fanout Exchange(扇型交换机)Topic Exchange(主题交换机)Headers Exchange(头交换机)我们知道在RabbitMQ工作流程当中,当我们要使用时需要指定Exchange和Queue才能传递消息,接下来我们便介绍一下各个交换机的特点,然后通过建立一个简单的SpringBoot例子来讲解各个交换机类型的用法,在开始例子前,我们先来说一说各个交换机的特点。一、Rabbit

2020-06-09 21:56:30 501

转载 RabbitMQ——AMQP协议

本篇博文将会对RabbitMQ的基本知识进行介绍。主要包括以下几点的知识介绍:AMQP协议介绍RabbitMQ中常用的基本术语RabbitMQ的工作流程介绍RabbitMQ是消息传输的中间者,可以把它当做是一个消息代理,你把消息传送给它,它再把消息发送给具体的接收人。这就像是邮局一样,你把邮件放入邮箱当中,邮件员会把邮件发送给你的收件人。不同的是RabbitMQ是接受,存储和转发二进制数据块——消息。一、 AMQP协议RabbitMQ是Advanced Message Queuing Pr

2020-06-09 21:17:06 2275

原创 RabbitMQ实战

1.什么是RabbitMQRabbitMQ是一个免费的,开源的,可扩展的消息队列解决方案。本质是一个消息代理,可以理解AMQP(高级消息队列协议),但也可以与其他流行的消息解决方案一起使用。它具有高可用性,容错性和可扩展性。它是一个中间件层,使您的应用程序中的不同服务可以彼此通信,而不必担心消息丢失。本质是使不同的进程或程序进行解耦。2.RabbitMQ环境搭建参考:https://www.cnblogs.com/saryli/p/9729591.html3.学习5种队列3.1创建Rabbit

2020-06-08 08:59:59 513

原创 Linux命令:修改文件权限命令chmod、chgrp、chown详解

Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权 限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件作为一个程序执行。文 件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任何组合。有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。

2020-05-20 21:40:44 1002

原创 Spring事件监听:ApplicationListener、ApplicationEvent

听到监听这个词,不难理解,一个事物根据另一个事物的变化自发的作出响应,而且每次都作出同样的响应。就像点击按钮一样。每次点击登入按钮,都会访问登入接口url,这就是监听。那么监听需要哪些条件呢。三要素,1.事件2.监听器3.触发动作。点击按钮就是事件,点击之后要怎么处理,就是监听器的事了。那么问题来了,监听器肯定有很多个,每个监听器职责不一样,它们怎么知道要监听哪个事件的。当然是事先就告诉它们了。也就是说在发布事件的时候,所有监听器就已经准备就绪,然后根据事件类型匹配对应监听器。事实上,spring就是

2020-05-12 16:30:39 1182

转载 springboot启动时执行任务CommandLineRunner

# SpringBoot中CommandLineRunner的作用> 平常开发中有可能需要实现在项目启动后执行的功能,SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的代码放在实现的run方法中# 简单例子``` javapackage org.springboot.sample.runner;import o...

2020-04-13 21:38:23 97

原创 java对字符串进行压缩转换复原

import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.zip.GZIPInputStream;import java.util.zip.GZIPOutputStream;/** * 字符串压缩 */...

2019-12-24 16:55:42 2299

原创 java 读取.cer证书公钥字符串

import sun.misc.BASE64Encoder;import java.io.FileInputStream;import java.security.PublicKey;import java.security.cert.CertificateFactory;import java.security.cert.X509Certificate; public clas...

2019-11-29 09:53:08 4049

原创 java 读取.pfx证书文件公钥私钥字符串

import cn.hutool.core.codec.Base64Encoder;import java.io.FileInputStream;import java.security.KeyStore;import java.security.PrivateKey;import java.security.PublicKey;import java.security.cert...

2019-11-23 15:35:15 2066 2

空空如也

空空如也

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

TA关注的人

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