自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Elastic 中文社区 (elasticsearch.cn)

Elastic 中文社区 (elasticsearch.cn)

2022-12-13 14:37:53 595 1

原创 POI解析word\pdf中表格

【代码】POI解析word\pdf中表格。

2022-10-10 14:11:35 1136

原创 深入理解RocketMQ延迟消息

深入理解RocketMQ延迟消息_码上得天下的博客-CSDN博客_rocketmq延迟消息时间轮

2022-04-19 11:15:19 329

原创 MySql查看锁信息

1.查看锁信息参数是否开启:show variables like '%innodb%' 查看innodb_status_output_locks 参数是否开启;2.查看锁信息:show engine innodb status\G

2022-02-22 15:36:54 1480

原创 Spring AOP的两种代理方式

Spring AOP主要有两种代理方式:1.JDK动态代理 2.cglib代理1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换注:JDK动态代理要比cglib代理执行速度快,但性能不如cglib好。所以在选择用哪种代理还是要看具体情况,一般单例模式用cglib比较好,具体原因请自行百度。...

2022-02-10 10:00:53 1116

原创 屏蔽表情符-java

<!-- 表情符 --><dependency> <groupId>com.vdurmont</groupId> <artifactId>emoji-java</artifactId> <version>5.1.1</version></dependency>EmojiParser.removeAllEmojis(str)

2021-03-31 16:45:51 186

原创 幂等性保证

幂等性的保证:1.普通加锁,单机可用,分布式时不可用2.悲观锁,通过for update进行查询,再去做更改3.乐观锁,先查询再通过状态进行修改,看修改返回的数量来判断是否修改成功4.唯一约束表5.分布式锁...

2021-03-11 14:07:09 72

原创 监听binlog的实现方式---java

引入依赖:<dependency> <groupId>com.github.shyiko</groupId> <artifactId>mysql-binlog-connector-java</artifactId> <version>0.21.0</version></dependency>配置连接:BinaryLogClient logClient = new Bina

2020-11-19 09:50:06 1112

原创 IO多路复用器--select、poll、epoll

I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪,能够通知程序进行相应的操作。IO多路复用器的应用场景很多,比如:Netty、Redis、Nginx等。下面详细介绍下IO多路复用器--select、poll、epoll的区别。IO多路复用有很多实现方式,select、poll、epoll就是其众多方式中的三种,这三种中,epoll的优势更为明显:1.epoll 没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于 2048, 一般来说这个数目和..

2020-10-29 17:22:47 282

原创 redis分布式锁实现

非springBoot应用时的处理方式:1.一般会自己引入jedis的包,通过jedis.setnx() + expire() + finally 去实现,但是会有问题,无法保证原子操作。2.通过redis对lua脚本的支持,通过redis.call()进行多语句的原子操作,如果是java端进行编写的话,再通过eval()对lua脚本进行解析并执行。代码如下:private static final Long lockReleaseOK = 1L;static String luaSc.

2020-10-28 19:28:47 176

原创 redis的五大基础类型及使用场景

1、stringredis的String类型到底存的是什么?redis的存储是二进制安全的,不管什么类型的数据,都会转换成二进制数字节组进行存储,当取数据时,取出来的也是二进制字节数组,然后在客户端对数组进行转换。数据的长度是字节长多,如:k1:99,长度就是2,k2:a,的长度就是1.一个中文字符占用3个字节(编码为utf-8时),如果编码为GBK时,一个中文占2个字节。redis对字符串数字类型进行递增操作时,首先会识别出这个value是数字类型,然后进行数值的操作,同样,存储结构也是字

2020-10-27 17:12:33 449

原创 redis的特点

redis是基于内存的(k,v形式)、单线程的(这个单线程说的是工作线程)、io模型(epoll、poll、selector----多路复用器)、valua是有类型的(五大类型)同时它具有本地方法----计算向数据移动。注:redis也有说是多线程的,这个多线程说的是他的IO,IO是多线程的。redis使用多路复用器并不是可以决定精准的去读谁,它只是反映多路复用器和redis之间的IO事件,也就是说那些IO可以读写了。(包括nginx、netty使用多路复用器都是这种原理)red..

2020-10-26 19:40:04 282

原创 布隆过滤器的实现原理

布隆过滤器可以理解为一个不怎么精确的 set 结构,当你使用它的 contains 方法判断某 个对象是否存在时,它可能会误判。但是布隆过滤器也不是特别不精确,只要参数设置的合 理,它的精确度可以控制的相对足够精确,只会有小小的误判概率。 当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存 在。打个比方,当它说不认识你时,肯定就不认识;当它说见过你时,可能根本就没见过 面,不过因为你的脸跟它认识的人中某脸比较相似 (某些熟脸的系数组合),所以误判以前...

2020-10-26 14:59:44 158

原创 redis穿透、击穿、雪崩产生的原因及解决方案

穿透:redis穿透是因为数据在redis中没有而去频繁的访问数据库,这是黑客入侵的一种方式。其实穿透分为两种:一、key相同key相同的情况很好解决,只需将这个key缓存到redis,value用null表示即可二、key不同key不同的情况下可以通过布隆过滤器,将数据库中数据进行标注,只有当过滤器中为1时,才去请求数据库,虽说有一定的错误率(这是根据布隆过滤器的特点决定的)但已经大大降低了请求数据库的频次。击穿:击穿是因为缓存中有一条数据,当有大量请求时,此缓存失效了(比如:

2020-10-26 14:20:29 460

原创 什么是时间片

时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。...

2020-10-22 16:22:19 4389 2

原创 HashMap流程图

2020-10-22 16:16:33 733

转载 深入分析AQS实现原理

https://segmentfault.com/a/1190000017372067

2020-10-14 19:04:55 118

原创 Redis的事物不能保证原子性

一、我们redis数据库中,事务回事什么样子的呢?首先我们给出一个定义:redis的事务中,一次执行多条命令,本质是一组命令的集合,一个事务中所有的命令将被序列化,即按顺序执行而不会被其他命令插入在redis中,事务的作用就是在一个队列中一次性、顺序性、排他性的执行一系列的命令。事务的生命周期:1. 事务的创建:使用MULTI开启一个事务2. 加入队列:在开启事务的时候,每次操作的命令将会被插入到一个队列中,同时这个命令并不会被真的执行3. EXEC命令进行提交事务常用的关于事务

2020-09-01 09:54:28 1028

转载 Rocketmq原理

https://www.jianshu.com/p/2838890f3284

2020-08-11 14:23:13 105

转载 Threadlocal

https://blog.csdn.net/Geffin/article/details/104747778

2020-08-11 10:56:55 103

原创 类加载器及双亲委派,打破双亲委派

类加载器(classloader)先从类加载器说起,凡事先问是什么,首先什么是类加载器?我们知道,一个 *.java 的代码源文件要执行起来之前,必须通过 javac 构建抽象语法树并编译成字节码,字节码仍然是不能被机器所识别,那么一个 .class 文件要被机器识别并执行的前提就是将字节码转化成机器码加载到内存里,这一转化过程就是类加载的执行过程。当然,这整个过程细节并非这个问题的讨论重点。类加载器便是在在这个过程里的加载阶段起作用,负责将 .class 文件字节码提取...

2020-08-11 09:51:36 203

原创 四种引用类型

四种引用类型强引用:强引用又称‘普通引用’,如:T t = new T();这种引用类型永远都不会被回收。软引用:SoftReference<T> m = new SoftReference<>(new T());此种引用只有在内存不足的情况下回收,一般用于缓存对象、图片等对象,用完一次就不用的场景。弱引用:WeakReference<T> m = new WeakReference<>(new T());弱引用在调用 ..

2020-06-10 09:32:52 680

原创 curl 使用json传输数据

curl -H "Content-Type: application/json" -X POST --data '{"commoditys":[{"brandId":"10158","orgCode":" _439_440_","skuId":"53232015","spuId":"53232015"}],"uid":"245373268078","requestId":"10.0.253.38-1591148029979","state":1}' http://10.0.254.182:5555/api.

2020-06-03 16:17:21 1367

转载 JOL工具分析java对象信息

https://www.jianshu.com/p/6d62c3ee48d0

2020-04-13 14:55:51 484

原创 CPU飙高原因及解决方案

一、CPU飙高原因: 1.大量中断 中断分为软中断(软中断是一种需要内核为正在运行的进行去做一些事情的请求)和硬中断(外部引起的) 2.系统负载高 负载高表示有很多程序等待调度运行,它会导致上下文切换频繁 3.上下文切换频繁二、排查 1.top命令查看占用CPU的pid ...

2020-04-13 11:19:41 8901 1

原创 MySql 四大目录解释

2020-03-08 22:32:57 136

转载 top命令详解

https://blog.csdn.net/yjclsx/article/details/81508455

2020-03-08 22:17:18 137

原创 idea 中出现Authentication failed for的问题

git config --system --unset credential.helper  输入之后在idea上就可以正常弹出用户名密码验证了

2020-02-10 11:31:28 2012

原创 手写分页

Integer pageSize = PAGE_SIZE;long totalPage = (total + pageSize - 1) / pageSize;for (int page = 1; page <= totalPage; page++) { Integer startLimit = (page - 1) * pageSize; mapper.selectF...

2020-01-15 10:04:30 129

原创 Redis-Cell 漏斗限流的使用

(1)下载安装包https://github.com/brandur/redis-cell/releases(2)解压到某个目录(3)进入redis-cli,执行命令moduleload/aaa/bbb/libredis_cell.so这是临时的办法,重启redis就没了(4)想永久的,需要这样$redis-server--loadmodule/aaa/bbb/libred...

2020-01-10 17:46:50 1060

原创 可重入锁和不可重入锁的理解,他们的区别及实现原理解析

首先我们这里提到的锁,是把所需要的代码块,资源,或数据锁上,在操作他们的时候只允许一个线程去做操作。最终结果是为了保证cpu计算结果的正确性。对不可重入锁的理解:public class Test{ Lock lock = new Lock(); public void methodA(){ lock.lock(); ........

2020-01-07 16:17:37 237

原创 MySQL 查询大于“时间字段”15分钟、1小时、1天的数据

以下代码中times为时间字段,类型为datetime1.查询大于times十五分钟的数据//大于号后面都是获取times十五分钟后的时间select*from table where now() >SUBDATE(times,interval -15 minute);select*from table where now() > SUBDATE(times,interva...

2019-12-27 16:39:30 1703

原创 Spring Boot 使用AOP

https://blog.csdn.net/qq_33576276/article/details/88786090

2019-12-24 17:41:54 78

原创 CountDownLatch实现原理及使用

https://blog.csdn.net/lovezhaohaimig/article/details/88815874

2019-12-24 17:39:17 133

原创 @Transactional 注解的使用和注意事项

https://www.cnblogs.com/jpfss/p/11152264.html

2019-12-20 11:38:57 254

原创 Redis集群配置SpringBoot

https://blog.csdn.net/qq_31256487/article/details/83144088http://www.zhihengshi.com/2019/04/18/%E8%AE%B0%E4%B8%80%E6%AC%A1RedisLettuce%E8%BF%9E%E6%8E%A5%E6%B1%A0ConnectionResetByPeer%E6%8E%92%E6%...

2019-12-20 10:37:18 165

原创 线程池的使用

线程池的使用 我们有两种常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口。但是我们创建这两种线程在运行结束后都会被虚拟机销毁,如果...

2019-12-05 18:55:17 133

转载 分布式锁实现方式

https://blog.csdn.net/xlgen157387/article/details/79036337

2019-12-05 10:25:15 80

原创 简易实现适配器

1.实现类实现XXXBaseService接口,并重写其getType方法;2.使用方式:注入XXXFactory ,调用getXXXService方法,传入不同类型来获取不同的接口类型。代码实现:public class XXXFactory { private Map<Integer,XXXBaseService> XXXCommonServiceMap; ...

2019-12-04 15:44:00 107

原创 为什么volatile不能保证原子性而Atomic可以

在Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volatile,是java中的一个我觉得这个词在Java规范中从未被解释清楚的神奇关键词,在Sun的JDK官方文档是这样形容volatile的:The Java programming language...

2019-11-06 09:19:36 91

空空如也

空空如也

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

TA关注的人

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