- 博客(21)
- 资源 (1)
- 收藏
- 关注
原创 3个线程交替打印ABC
package com.interview;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class ABC { private static final int COUNT = 20 * 3;//20是每个字母输出20遍 private static int state = 1; // 3是有3个字母交替输出,COUN
2021-03-20 12:23:41 530 1
转载 redis限制指定时间登录指定次数
package com.zxl.redis.rediscode; import redis.clients.jedis.Jedis; import java.util.List; /** - @author xiaoliang - @date 2020/5/12 21:30 - @since V1.0 */ public class LoginValidate { ...
2021-03-16 16:23:34 496
原创 pageHelper使用及原理源码
pageHelper分页插件原理一: 使用篇pom中引入 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.0.0</version> </dependency>mybatis-config.xml
2021-01-26 20:14:55 585 1
原创 DelayQueue是什么
一、DelayQueue是什么DelayQueue是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。注意:不能将null元素放置到这种队列中。二、DelayQueue能做什么1. 淘宝订单业务:下单之后如果三十分钟之内没有付款就自动取消订单。 2. 饿了吗订餐通知:下单成功后60s之后给用户发送短信通知。3.关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。
2021-01-19 19:15:57 184
原创 序列化的几种方式及区别
序列化的几种方式什么是序列化?内存中的数据对象只有转换为二进制流才可以进行数据持久化和网络传输。将数据对象转换为二进制流的过程称为对象的序列化(Serialization)。反之,将二进制流恢复为数据对象的过程称为反序列化(Deserialization)。序列化需要保留充分的信息以恢复数据对象,但是为了节约存储空间和网络带宽,序列化后的二进制流又要尽可能小。序列化常见的使用场景是RPC框架的数据传输。常见的序列化方式有三种:1.Java原生序列化Java类通过实现Serializable接口来实现
2021-01-17 17:02:43 5197
原创 nginx的安装和nginx的几个作用
nginx的安装和nginx的几个作用1.centerOs7上安装nginx1.1 下载// 要把ningx下载到linux下的哪目录cd /usr/local/soft // 下载wget http://nginx.org/download/nginx-1.18.0.tar.gz1.2 解压tar -xzvf nginx-1.18.0.tar.gz1.3 安装依赖环境 gcc环境:基本运行环境 pcre:用于nginx的http模块解析正则表达式 zlib:用户进行
2021-01-17 16:57:16 435
原创 ReentrantLocak源码分析
ReentrantLock重入锁的源码分析1.基本使用 创建锁对象static Lock lock=new ReentrantLock();// 构造方法传入true参数即为公平锁,后面会分析源码为什么加入true就为公平锁,及公平锁和非公平锁的区别在哪,什么是非公平锁,什么是公平锁。static Lock fairLock=new ReentrantLock(true);public static void inc(){ lock.lock(); //获得锁(互斥锁) ThreadA
2021-01-09 14:36:37 150
原创 mybatis foreach in 查询超过1000条解决办法
mybatis foreach in 查询超过1000条解决办法mybaits 中的foreach in的查询时候,上限in的个数是1000个,如超过1000怎么办呢?下面介绍两种办法,一是从java代码层面,分批查询,1000个是一批,循环查。最终把结果统计在一起。而是 从sql层面分组查,1000个查一次,利用mybatis的if标签来手动拼接一段sql解决问题。1.java层面// 1. 装有最终查询总数据条数的集合List<xxxxDTO> allMxDTOList = ne
2020-12-18 20:38:55 12581 4
原创 动态代理之谜底揭晓
动态代理之谜底揭晓动态代理分为JDK以及CGlib两种,前者是JDK的后者是第三方的。一:简谈两者区别之处? //JDK是采用读取接口的信息(生成的代理类是implement实现了被代理类的接口,从而拥有了接口所有 的方法。而cglib是继承了被代理的类,不是接口。) //CGLib覆盖父类方法 //目的:都是生成一个新的类,去实现增强代码逻辑的功能 //JDK Proxy 对于用户而言,必须要有一个接口实现,目标类相
2020-12-13 17:16:12 130
原创 动态代理之谜底揭晓
动态代理之谜底揭晓动态代理分为JDK以及CGlib两种,前者是JDK的后者是第三方的。一:简谈两者区别之处? //JDK是采用读取接口的信息 //CGLib覆盖父类方法 //目的:都是生成一个新的类,去实现增强代码逻辑的功能 //JDK Proxy 对于用户而言,必须要有一个接口实现,目标类相对来说复杂 //CGLib 可以代理任意一个普通的类,没有任何要求
2020-12-13 16:51:33 81
原创 nacos作为配置中心使用的长轮询是怎么一回事及长轮询重要源码解读
配置中心和客户端(我们自己的业务工程)实现配置的动态感知一般无外乎两种办法,一种是客户端主动发起pull模式,或者配置中心发起push。1.nacos作为配置中心和客户端是通过客户端主动发起的pull模式,但是这不是单纯的pull,是一个httppost的长轮询,过期时间默认是30S,什么意思呢,客户端发起一个http请求发给配置中心,配置中心接到了请求那一刻如果正好配置有变化就立即返回变化后的...
2020-04-06 22:21:42 2911 1
原创 单例模式
单例模式的前提:1.有私有的构造方法(为了代码中不可以直接new),2.全局唯一的访问点懒汉式单例:懒汉的双重加锁机制package com.java8.java8.singleton;public class LazySingleton { public static void main(String[] args) { System.out.println(L...
2020-03-26 22:28:05 161 1
原创 dubboo的SPI扩展点基于2.7.2源码讲解
这个连接写了下关于spi的静态,自适应扩展点的源码实现,需要的可以自取。文件是emmx的可以下载个。https://pan.baidu.com/s/1Cptn7sYseBPqpThJeYRq-w提取码:55hx...
2020-03-21 11:40:48 152 1
原创 kafka是怎么把消息写入磁盘,又把磁盘的消息拿出来发给用户进程的
讲解下kafka是怎么把消息写到磁盘,怎么把消息从磁盘上拿走发给客户端的,看下图,这里用到了mmap,零拷贝的知识。消息存储:客户端c发来了消息,正常流程来讲这条消息是先到kernal内核中的,kafka先要把消息读取到自己里面来做个数据的加工的,然后在写道kernal上,keranal在输出到磁盘上的,看见没有这经历了好几次过成的。这时候mmap来了,kafka和磁盘直接建立通道就是mmap...
2020-03-15 10:21:57 1099
原创 controller调用feignClient接口为什么这个feignClient接口注入容器失败
今天工作中遇到一个问题这里记录下。微服务中服务间的调用采用的是微服务的方法。我用的是feignCliet,这里配置我就不说了哈,大家都知道。啪啪啪配置都配好了,项目启动报错了,提示是feignClient这个接口注入容器失败,开始就以为配置配错了,采用了好多种依然没有解决,一样的错误提示。真特码奇怪了。突然间想到这个东西是不是和什么其他的东西有冲突呢。把swagger去掉试下,swagger是什么...
2020-03-10 22:16:27 2215
原创 zookeeper实现leader选举的基本原理
简单总结下leader选举 就是服务器先起2181端口,然后各个机器自己构建自己的票据,epoch,zxid,myid。所有机器构建好了之后,myid小的节点去链接myid大的机器,并且把自己的票据发过去,那端接收到了数据后会进行一个票据的比较,如果自己的票据没有人家发过来的大那么就把人家的票据写成自己的。反之发送自己的。他们之间的通信采用的是socket。第二轮甚至多轮后如果这时候的票据过半...
2020-03-08 17:30:01 209
原创 ZAB 协议原理简述
ZAB协议是zookeeper专门设计的一种支持崩溃恢复的原子广播协议。zab协议包含两种基本模式:1,崩溃恢复2,原子广播1,崩溃恢复:假如说现在zookeeper及zk的集群中有3台机器,一台leader,两台flower。如果说leader挂了,这时候集群内要重新选举出leader,原来的leader变成了flower。新选出来的leader是根据什么来的呢,那就是zxid,集群内z...
2020-03-08 11:45:07 791
原创 通过zookeeper实现分布式锁的原理浅谈
基于 Curator 实现分布式锁,curator是zk的一个客户端,像zkClient一样。1.先说下工作原理:我们可以利用 zookeeper 节点的特性来实现独占锁,就是同级节点的唯一性,多进程往 zookeeper 的指定节点下创建一个相同名称的节点,只有一个能成功,另外一个是创建失败;创建失败的节点全部通过 zookeeper 的 watcher 机制来监听zookeeper 这个子...
2020-03-01 23:06:52 347
原创 springboot项目下读取resources下的文件遇到的问题
工作中遇到个需求,把一封模板作为附件发送给客户邮箱。本着简单省事的想法出发,就把附件模板放在resourecs下,用到时直接从path下拉出来,改个名字发送完活了不就。开干吧。。。。。好了测试,妈的发出去了那边下载下来提示文件损坏了。百思不得其解啊,,,,,咋能呢。最后想起来它应该读取流是target下的吧,去目录下看看,果不其然这时候就已经顺坏了打不开文件了。mvn clean下重来,,,还是...
2020-03-01 17:59:36 880
原创 简述NIO,BIO的区别
BIO就是我们传统意义上的Inputstream,Outputstream。这个东西是同步阻塞的,效率不高,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。NIO 随着分布式的如火如荼,为了提高访问效率,引进了NIO,同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发...
2020-03-01 17:26:35 458
原创 kafka中ISR是什么
一个topic可以有多个分区,多个副本(一般副本数量不大于分区数量)。一份分区下有多个副本,ISR表示目前消息量与leader相差不多的副本集合,这是整个副本集合的一个子集”。怎么去理解可用和相差不多这两个词呢?具体来说,ISR集合中的副本必须满足两个条件副本所在节点必须维持着与zookeeper的连接副本最后一条消息的offset与leader副本的最后一条消息的offset之间的差值...
2019-08-24 16:29:20 3500
rocketmq.png
2019-09-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人