- 博客(39)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 oauth2的简单实现
Oauth2的学习总结 这段时间领导叫我学习oauth2准备一下,以后上spring cloud的时候可以上手就使用。陆陆续续学习了两周,三周还是更多,发现oauth2还是很复杂的。这篇文章就是想总结一下这段时间学习oauth2的东西,希望可以给刚学习oauth2的做一些铺垫,有些地方不对的还希望指正。1.oauth2的简单介绍 oauth2总体我的理解是做认证授权的,最常见的就是第三方...
2019-04-11 21:02:33 12146 5
原创 NameServer启动
RocketMq学习1.源码启动准备参考文章:https://www.cnblogs.com/shuiyj/p/13215978.html启动nameserver:需要配置ROCKETMQ_HOME(运行环境)ROCKETMQ_HOME建立conf,logs,store目录,源码里面的distrbution中的logback_namesvr.xml放在conf模块下面,替换${user.home}为ROCKETMQ_HOME2.解析NameServer作用nameserver类似于zk,是一
2021-04-23 16:46:33 567
原创 HotKey学习总结
HotKey学习总结开源地址:https://gitee.com/jd-platform-opensource/hotkey1.它用来解决啥问题? 对任意突发性的无法预先感知的热点数据,包括并不限于热点数据(如突发大量请求同一个商品)、热用户(如恶意爬虫刷子)、热接口(突发海量请求同一个接口)等,进行毫秒级精准探测到。然后对这些热数据、热用户等,推送到所有服务端JVM内存中,以大幅减轻对后端数据存储层的冲击,并可以由使用者决定如何分配、使用这些热key(譬如对热商品做本地缓存、对热用户进行拒绝访
2021-04-21 10:32:48 2363
原创 一致性hash算法
一致性hash算法hash算法取余这种方式有一个坏处就是当增加或者减少的节点的时候都会带来需要重新hash,之前的hash缓存之类的都会失效。之后就提出了一致性hash算法,就是先构造一个2的32次方的整数环,根据每次hash值都放在这个hash环上面,根据hash的值查找距离,放在理服务器最近的服务节点上面,完成映射。实现方式hash环的实现方式有几种:list+排序这种方式每次只要查找到大于list中hash值的就可以停止,每次查找的效率最少是O(1),至多是O(n);所以时间复杂度为
2020-09-15 19:19:02 183
原创 RocketMQ的一些疑问
RocketMQ存疑的问题:http和tcp都可以跨语言开发吗?好处在哪里 支持 HTTP 协议:支持 RESTful 风格 HTTP 协议完成收发消息,可以解决跨语言使用 MQ 问题。 支持 MQTT 协议:支持主动推送模型,多级 Topic 模型支持一次触达 1000万+ 终端,可广泛应用于物联网和社交即时通信场景。pull和push的区别到底在哪里区别是:push方式里,consumer把轮询过程封装了,并注册MessageListener监听器,取到消息后,唤醒Mes
2020-09-14 20:46:05 380
原创 ZK分布式锁的实现
ZK分布式锁的实现1. 类图2. 实现2.1 简单实现通过实现抽象实现AbstractLock,实现共有逻辑简单实现的想法是每次都监听一个节点,当节点失效的时候通过Zk的监听模式通知客户端来重新争取锁。AbstractLockpublic abstract class AbstractLock { public final static String PATH = "/MYLOCK3"; public static final String ADDRESS = "12
2020-09-01 20:47:56 224
原创 ZK分布式锁
zk分布式锁1. 锁的类型实现独占锁:用znode来看做一把锁,通过create znode来实现。只有创建成功的才拥有这把锁。时序锁:在znode的节点下面创建一些临时有序的节点。通过父节点distribute_lock来维持一份sequence,保证子节点创建时序,形成全局时序。2. redis锁和zk锁的区别redis的优点:优点:速度快缺点:在分布式情况下,redis主设置了key,但是没有同步的情况下,主挂了。导致其他线程也能正常上锁了。zk锁的优点:1. 锁失效实现简单,
2020-09-01 20:46:50 298
原创 ZK初识
ZooKeeper1. ZK工作原理Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。两种模式:恢复模式(选主)广播模式(状态同步)1.1 选举节点有三种类型,leader,follower,observer leader:主节点,负责进行投票的发起和决议,更新系统状态 follower:从节点,在主节点挂了之后会参与选举。 observer:观察者,不参与选举过程,只是用来连接client,分担压力。选举过程采取
2020-09-01 20:45:10 145
原创 Redis缓存
缓存技术1. 缓存血崩出现的时机,当一批量的缓存key值同时失效,导致同时查询数据库,造成数据库宕机,从而影响系统。处理方式:并发量不是很多的情况下,可以使用加锁排队的方式每个缓存都有缓存标记,记录缓存是否失效,如果失效的话就去更新缓存为每个key设置不同的过期时间,防止同时失效当数据库里面查询出来没有任何数据的时候,缓存里面也不会存在任何数据。导致用户去查询的时候一直需要查询缓存和数据库。解决办法:布隆过滤器,把明确不存在的通过bitmap过滤掉(这个需要一个缓存所有的bitmap
2020-08-26 13:56:39 112
原创 一个好玩的线程调度Join
可以让线程之间相互等待到结束public class LocalTest { public static void main(String[] args) { Thread thread = Thread.currentThread(); for (int i = 0; i <= 10; i++) { thread = new ThreadTest(thread); thread.start();
2020-08-20 21:07:02 128
原创 JAVA线程状态
JAVA线程状态1. 基础的线程状态Thread源码状态定义:public static enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; private State() { }}初始化状态(NEW)运行状态(RUNNABLE和RUNNING)等待(WAITING)超时等待(TIMED_WAITING)终止状态(TERMINA
2020-07-24 16:41:39 87
原创 redis学习二
Redis进阶学习1. redis的分布式锁1.1 分布式锁的实现理念分布式锁是指的在分布式环境中完成多机器应用操作达到同步的效果,一般都是用redis之类的实现。1.1.1 实现原理1.setnx key value //如果不存在就会插入2.expire key timeout //设置过期时间**Note:1,2原子操作**3.del key value //删除key,释放锁1.2 简单实现代码demo:public void red
2020-06-22 16:38:05 117
原创 Redis 学习一
Redis学习基础学习网站:https://www.runoob.com/redis/redis-lists.html1. 常用数据结构 String 使用命令:set key value hash 使用命令:hmset key field value list 使用命令:lpush key value set 使用命令:sadd key value zset 使用命令:zadd key 1 value2. String.
2020-06-22 16:36:09 130
原创 《Head First 设计模式》读书笔记六--克隆模式
克隆模式简介深入理解克隆模式,出现的意义在于反复创建一样的对象,影响JAVA程序的效率。克隆模式的优势在于底层调用了C,实现了内存之间的复制。克隆模式区分:1.浅克隆:在复制对象的时候里面的对象也是一起复制的过来,即调用的还是同一内存对象。2.深克隆:里面内存对象是重新创建一份的使用区别:浅克隆在修改母对象的时候,子对象也会修改响应的赋值;深克隆则不会影响响应的赋值Note:基本...
2019-07-02 18:29:02 161
原创 《Head First 设计模式》读书笔记五--建造者模式
建造者模式简要通过建造者模式可以简化复杂对象的创建,可以通过工厂模式来创建小的对象;然后装饰者来组装。工厂模式和建造者模式的区别在于:工厂给出了一个响应的产品,而建造者是蓝图,可以通过不同的例子建造出不同的产品。工厂创造出东西,建造者模式去选择使用东西来做出蓝图;后续使用简要的例子可以学习StringBuilder,append的方法就是一个例子。它是通过一个char的数组来一直往里...
2019-07-01 19:18:32 375
原创 SpringBoot 多数据源切换
SpringBoot多数据源切换目的:1)读写库在代码端实现2)需要操作多数据库的时候需要使用核心类核心类AbstractRoutingDataSource,这个类是一个抽象化的DataSource类。可以用来选择多个数据源,确认数据源。核心方法:determineCurrentLookupKey() 通过重写这个方法来决定那个数据源setTargetDataSources(Ma...
2019-06-29 20:40:01 2691 1
原创 《Head First 设计模式》读书笔记四--工厂模式
工厂模式通过工厂模式来达到一个类创建多个不同对象的目的。简单工厂通过创建多个判断条件或者是多个方法,来达到创建多个类的目的。好处:这样能规避调用者对于内部实现细节的了解坏处:这个违反了开闭原则(对于修改是闭合的,对于扩展是开放的);问题是这个东西如果需要扩展就需要修改老的业务代码。public class SimpleFactory { private static Car c...
2019-06-28 21:38:24 152
原创 《Head First 设计模式》读书笔记三--单例模式
单例模式饿汉模式加载类的时候直接加载,加载速度快;但是类没用的时候就会浪费资源public class SingletonDemo1 { private static SingletonDemo1 singletonDemo1=new SingletonDemo1(); /* * 内部构造类,禁止外部加载 */ private SingletonD...
2019-06-28 21:37:42 121
原创 《Head First 设计模式》读书笔记二--观察者模式
观察者模式类图自我实现主题接口:public interface Subject {//最简单的订阅,取消订阅,通知订阅者 void register(Observe observe); void unregister(Observe observe); void notifyObserve();}主题实现:public class MessageDa...
2019-06-11 22:25:04 191
原创 《Head First设计模式》读书笔记一 策略模式
读书笔记策略模式用算法簇去定义,封装起来;这种模式可以是算法独立起来,更加好的调用。Note:在界面调用的时候尽量是用接口定义而不是方法定义//不推荐Dog dog=new Dog(); //推荐,Dog是Animal的实现类Animal dog=new Dog(); 这种模式的定义可以方便的使用,扩展性也会比较好算法推荐的模式:public class DuckDe...
2019-06-11 20:16:10 162
原创 Dubbo+Spring MVC+ZooKeeper初识
Zookeeper介绍ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。(来自于百度百科)Win安装调试下载地址:https://www.apache.org/dyn/closer.cgi/z...
2019-06-04 14:29:46 201
原创 多线程编程详解
多线程编程ExcutorsJava中创建线程池很简单,只需要调用Executors中相应的便捷方法即可;在面试过程中如果问到线程的三种模式,那么指的是fix,cached和single模式创建线程的几种方法newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduledThreadPool为啥上面...
2019-05-30 10:06:40 370
原创 策略模式(如何干掉 if else)
策略模式1.介绍策略模式定义了一系列的算法,并将每一个算法封装起来,使每个算法可以相互替代,使算法本身和使用算法的客户端分割开来,相互独立。策略模式基于的一种开闭原则开闭原则: 对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。 ...
2019-05-27 17:57:45 6799 1
原创 Hystrix杂谈(顺带瞎BB)
初窥熔断器熔断器的作用对来自依赖的延迟和故障进行防护和控制——这些依赖通常都是通过网络访问的阻止故障的连锁反应快速失败并迅速恢复回退并优雅降级提供近实时的监控与告警())Hystrix的方法execute()和queue() 适用于HystrixCommand对象,而observe()和toObservable()适用于HystrixObservableCommand对象e...
2019-05-24 15:47:09 157
转载 Kafka、RabbitMQ、ZeroMQ、RocketMQ、ActiveMQ差异
转载链接:https://www.zhihu.com/question/43557507/answer/370979636一、资料文档Kafka:中。有kafka作者自己写的书,网上资料也有一些。rabbitmq:多。有一些不错的书,网上资料多。zeromq:少。没有专门写zeromq的书,网上的资料多是一些代码的实现和简单介绍。rocketmq:少。没有专门写rocket...
2019-05-14 09:55:52 84
原创 锁杂谈
锁杂谈锁类型:1)乐观锁:认为读多写少,在写入的时候读取版本号,在真的写入的时候判断一下是不是和我上次读的一样;一样就写入,不一样就等待重试。java中的方法是CAS(compare and swap)2)悲观锁:认为并发写的操作多,出现冲突的情况多。每次读取数据的时候都会上锁,java中悲观锁就是Synchronized。AQS框架下的锁则是先尝试cas乐观锁去获取锁,获取不到,才会转换...
2019-05-13 19:32:06 151
原创 ArrayList详解
ArrayListArrayList内部的主要结构:Object[] elementData:实际存储数据size:数组的大小length:数组的容量DEFAULT_CAPACITY:默认的数组大小(10)EMPTY_ELEMENTDATA:空列表DEFAULTCAPACITY_EMPTY_ELEMENTDATA:默认列表,和EMPTY_ELEMENTDATA区别在于add的时候如...
2019-05-09 19:40:18 249
原创 ConcurrentHashMap的详解
ConcurrentHashMap1 ConcurrentHashMap导读HashMap的详解在上篇博客中已经做了详细的解释,最重要的一点是它虽然速度快,但是线程不安全。这都是因为它在get/put的时候没有加锁,HashTable是线程安全的,但是因为用的是synchronized,所以导致get/put的时候锁住的是一整个Hash表,导致性能低下。基于以上原因,Java实现了Concu...
2019-05-08 20:08:11 113
原创 HashMap详解
HashMap1.预备知识1.1 equals= =用于比较引用和比较基本数据类型时具有不同的功能:比较基本数据类型,如果两个值相同,则结果为true而在比较引用时,如果引用指向内存中的同一对象,结果为true;equals()作为方法,实现对象的比较。由于= =运算符不允许我们进行覆盖,也就是说它限制了我们的表达。因此我们复写equals()方法,达到比较对象内容是否相同的目的。而这些通...
2019-05-08 18:25:35 912
原创 lombok详解
lombok使用lombok以注解的形式来简化代码,提高开发的开发效率;比如说getter和setter写的非常隆长,但是用了lomok以后就能源码中不出现getter和setter的方法,编译后在编译文件中自带。引用maven依赖:<dependency> <groupId>org.projectlombok</groupId> <artifa...
2019-05-05 18:40:45 313
原创 http长连接,短连接和websocket
1.链接1.1 长链接http1.1以后默认使用长连接,响应头部会加入响应代码Connection:keep-alive;在使用长连接的时候,比如在使用网页的时候(如果是长连接的),那么在用户多次访问服务端的时候TCP链接不会关闭,会一直复用这个链接。长连接也不是一直保持链接的,时间的设置来自于apache服务器的设定时间。1.2 短链接http1.0之前使用的是短连接,即一个点击...
2019-05-05 12:30:00 958
原创 starUml的破解
starUml的破解starUML破解方法:https://blog.csdn.net/zyc88888/article/details/82149316nodejs的安装:https://www.cnblogs.com/xuhai/p/9955310.htmlapp.asar的下载地址:(3.1.0的)需要的留下地址吧,我上传了csdn但是好像审核有点问题...
2019-04-28 20:23:39 593
转载 springboot启动
自我理解图例(springboot 2.1.4)网上转载的图例,这个和springboot 2.1.4不大一样,功能差不多详细的图例:(转载)加载图例参考文章:https://www.cnblogs.com/trgl/p/7353782.html...
2019-04-25 20:58:21 375
原创 redisTemplate详解
redis的序列化和反序列化基础概念redisFactory:redis的工厂类redisTemplate:spring 封装了 RedisTemplate 对象来进行对redis的各种操作,它支持所有的 redis 原生的 api。序列化序列化能够使java的对象在传输和存储的过程中,能够成功的传输和读取。如果redis不实现序列化的结果: 不实现序列化的话,存储的key字段会出...
2019-04-24 14:02:35 17420 2
转载 分布式:强一致性、顺序一致性、弱一致性
转载文章:https://blog.csdn.net/chao2016/article/details/81149674
2019-04-19 14:31:00 825
转载 java nio和io初识
java中的nio和io区别和比较注明:转载Java NIO系列教程(十二) Java NIO与IOJava NIO与IO的区别和比较Java NIO 与 IO之间的区别及NIO的使用自我笔记理解:主要内容的区别:IONIO面向流面向缓冲阻塞IO非阻塞IO无选择器nio是非阻塞的,可以用一个线程服务所有的socket,但是这样的话不知道哪里...
2019-04-19 14:01:59 167
原创 SpringCache初窥
SpringCache初窥本文的所有实现均基于博客引入Q:为啥要使用缓存?A:对于机器而言,每一次的访问,程序都会按照步骤去执行一遍。但是比如同一个请求,对于服务器而言每次反馈的内容都是一样的,为了避免这种资源的浪费,对于一些重复的操作,而且结果往往是稳定不变的,可以使用缓存。缓存操作就是将第一真实查询的结果进行存储,后续的操作,就直接返回结果,而不再去真正的查询。内存作为缓存代码清单...
2019-04-18 11:35:06 149
原创 SimpleDataFormat多线程不安全问题
SimpleDataFormat线程安全测试介绍 在文章中看见SimpleDataFormat不是一个线程安全的程序,所以自己想在自己空闲的时候测试一些,然后去查看一下原因(很基础,分享一下)过程代码运行错误重现 当把SimpleDataFormat实例化的对象共享出来,给多个线程访问会出现A进程设置好了时间,然后挂起;B进程过来设置时间,A恢复了,读取时间混乱的问题。Simple...
2019-04-12 18:40:49 301
原创 博客伊始
博客伊始工作四年了,从一开始毕业的运维现在转变成为一个小小的程序猿。过程中很多困难,自己慢慢摸索,有很多东西都不懂。开通博客,想慢慢记录一些东西,把自己的一些学习过程中点点滴滴记录下来。然后也把一些学习过程中的资料分享给大家,demo也分享出来,一起讨论一起成长。...
2019-04-11 18:39:33 136
可通过HTTP获取远端WWW服务信息
2017-10-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人