- 博客(110)
- 收藏
- 关注
原创 MySql查看锁信息
1.查看锁信息参数是否开启:show variables like '%innodb%' 查看innodb_status_output_locks 参数是否开启;2.查看锁信息:show engine innodb status\G
2022-02-22 15:36:54 1497
原创 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 1133
原创 屏蔽表情符-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 197
原创 幂等性保证
幂等性的保证:1.普通加锁,单机可用,分布式时不可用2.悲观锁,通过for update进行查询,再去做更改3.乐观锁,先查询再通过状态进行修改,看修改返回的数量来判断是否修改成功4.唯一约束表5.分布式锁...
2021-03-11 14:07:09 74
原创 监听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 1126
原创 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 296
原创 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 180
原创 redis的五大基础类型及使用场景
1、stringredis的String类型到底存的是什么?redis的存储是二进制安全的,不管什么类型的数据,都会转换成二进制数字节组进行存储,当取数据时,取出来的也是二进制字节数组,然后在客户端对数组进行转换。数据的长度是字节长多,如:k1:99,长度就是2,k2:a,的长度就是1.一个中文字符占用3个字节(编码为utf-8时),如果编码为GBK时,一个中文占2个字节。redis对字符串数字类型进行递增操作时,首先会识别出这个value是数字类型,然后进行数值的操作,同样,存储结构也是字
2020-10-27 17:12:33 452
原创 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 290
原创 布隆过滤器的实现原理
布隆过滤器可以理解为一个不怎么精确的 set 结构,当你使用它的 contains 方法判断某 个对象是否存在时,它可能会误判。但是布隆过滤器也不是特别不精确,只要参数设置的合 理,它的精确度可以控制的相对足够精确,只会有小小的误判概率。 当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存 在。打个比方,当它说不认识你时,肯定就不认识;当它说见过你时,可能根本就没见过 面,不过因为你的脸跟它认识的人中某脸比较相似 (某些熟脸的系数组合),所以误判以前...
2020-10-26 14:59:44 159
原创 redis穿透、击穿、雪崩产生的原因及解决方案
穿透:redis穿透是因为数据在redis中没有而去频繁的访问数据库,这是黑客入侵的一种方式。其实穿透分为两种:一、key相同key相同的情况很好解决,只需将这个key缓存到redis,value用null表示即可二、key不同key不同的情况下可以通过布隆过滤器,将数据库中数据进行标注,只有当过滤器中为1时,才去请求数据库,虽说有一定的错误率(这是根据布隆过滤器的特点决定的)但已经大大降低了请求数据库的频次。击穿:击穿是因为缓存中有一条数据,当有大量请求时,此缓存失效了(比如:
2020-10-26 14:20:29 467
原创 什么是时间片
时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。...
2020-10-22 16:22:19 4863 2
原创 Redis的事物不能保证原子性
一、我们redis数据库中,事务回事什么样子的呢?首先我们给出一个定义:redis的事务中,一次执行多条命令,本质是一组命令的集合,一个事务中所有的命令将被序列化,即按顺序执行而不会被其他命令插入在redis中,事务的作用就是在一个队列中一次性、顺序性、排他性的执行一系列的命令。事务的生命周期:1. 事务的创建:使用MULTI开启一个事务2. 加入队列:在开启事务的时候,每次操作的命令将会被插入到一个队列中,同时这个命令并不会被真的执行3. EXEC命令进行提交事务常用的关于事务
2020-09-01 09:54:28 1044
原创 类加载器及双亲委派,打破双亲委派
类加载器(classloader)先从类加载器说起,凡事先问是什么,首先什么是类加载器?我们知道,一个 *.java 的代码源文件要执行起来之前,必须通过 javac 构建抽象语法树并编译成字节码,字节码仍然是不能被机器所识别,那么一个 .class 文件要被机器识别并执行的前提就是将字节码转化成机器码加载到内存里,这一转化过程就是类加载的执行过程。当然,这整个过程细节并非这个问题的讨论重点。类加载器便是在在这个过程里的加载阶段起作用,负责将 .class 文件字节码提取...
2020-08-11 09:51:36 212
原创 四种引用类型
四种引用类型强引用:强引用又称‘普通引用’,如:T t = new T();这种引用类型永远都不会被回收。软引用:SoftReference<T> m = new SoftReference<>(new T());此种引用只有在内存不足的情况下回收,一般用于缓存对象、图片等对象,用完一次就不用的场景。弱引用:WeakReference<T> m = new WeakReference<>(new T());弱引用在调用 ..
2020-06-10 09:32:52 708
原创 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 1393
原创 CPU飙高原因及解决方案
一、CPU飙高原因: 1.大量中断 中断分为软中断(软中断是一种需要内核为正在运行的进行去做一些事情的请求)和硬中断(外部引起的) 2.系统负载高 负载高表示有很多程序等待调度运行,它会导致上下文切换频繁 3.上下文切换频繁二、排查 1.top命令查看占用CPU的pid ...
2020-04-13 11:19:41 9019 1
原创 idea 中出现Authentication failed for的问题
git config --system --unset credential.helper 输入之后在idea上就可以正常弹出用户名密码验证了
2020-02-10 11:31:28 2143
原创 手写分页
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 134
原创 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 1067
原创 可重入锁和不可重入锁的理解,他们的区别及实现原理解析
首先我们这里提到的锁,是把所需要的代码块,资源,或数据锁上,在操作他们的时候只允许一个线程去做操作。最终结果是为了保证cpu计算结果的正确性。对不可重入锁的理解:public class Test{ Lock lock = new Lock(); public void methodA(){ lock.lock(); ........
2020-01-07 16:17:37 246
原创 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 1782
原创 Spring Boot 使用AOP
https://blog.csdn.net/qq_33576276/article/details/88786090
2019-12-24 17:41:54 85
原创 CountDownLatch实现原理及使用
https://blog.csdn.net/lovezhaohaimig/article/details/88815874
2019-12-24 17:39:17 138
原创 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 180
原创 线程池的使用
线程池的使用 我们有两种常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口。但是我们创建这两种线程在运行结束后都会被虚拟机销毁,如果...
2019-12-05 18:55:17 135
原创 简易实现适配器
1.实现类实现XXXBaseService接口,并重写其getType方法;2.使用方式:注入XXXFactory ,调用getXXXService方法,传入不同类型来获取不同的接口类型。代码实现:public class XXXFactory { private Map<Integer,XXXBaseService> XXXCommonServiceMap; ...
2019-12-04 15:44:00 108
原创 为什么volatile不能保证原子性而Atomic可以
在Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volatile,是java中的一个我觉得这个词在Java规范中从未被解释清楚的神奇关键词,在Sun的JDK官方文档是这样形容volatile的:The Java programming language...
2019-11-06 09:19:36 94
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人