自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员小潘

专注于Java后端技术分享!

  • 博客(10)
  • 资源 (1)
  • 收藏
  • 关注

原创 聊聊Synchronized和Lock

目录Synchronized和Lock的区别阻塞线程状态不同阻塞算法-悲观锁非阻塞算法-乐观锁Synchronized和Lock的区别Synchronized和Lock都可以用来做代码块的同步控制,但是它俩的底层实现不一样,性能也不一样,需要根据不同的应用场景来选择合适的同步器,下面总结一下它俩的区别:来源不同Synchronized是Java提供的关键字,属于Java语法层...

2020-01-31 21:18:39 3174

原创 聊聊StringBuffer与StringBuilder

我们知道,String是只读字符串,所引用的字符串一经定义,就无法再修改。对String进行拼接或截取操作会创建新的String对象,如果需要对字符串进行大量修改,使用String性能极低。如下例子,对字符串进行10万次的拼接,String的性能比StringBuilder要慢500倍左右。public static void main(String[] args) { String s ...

2020-01-19 19:58:57 3076

原创 Spring七种事务传播行为

事务传播行为“事务传播行为”描述的是:当一个事务方法被另一个方法调用时,该事务方法如何进行?是创建新事务?丢弃事务?还是加入到已存在的事务呢?针对这些情况,Spring框架定义了七种事务传播行为,开发人员可以根据实际的业务场景来选择合适的传播行为。七种事务传播行为Spring将其定义在一个枚举类Propagation中,分别如下:REQUIRED如果当前没有开启事务,就开启一个新事...

2020-01-16 20:24:17 3262

原创 RabbitMQ常见问题解决方案

上一篇博客记录了一下RabbitMQ的服务搭建和简单入门,但是光这些还远远不够。要想将RabbitMQ用于生产中,需要考虑和解决很多问题。目录消息转换器生产者如何确保消息发送不丢失?消费者如何防止消息丢失?消息预取死信交换机消息转换器原生的RabbitMQ只能发送字节数组,与SpringBoot整合后,Spring允许开发者发送一个对象,原因在于Spri...

2020-01-11 20:55:49 3859

原创 RabbitMQ快速入门

简介RabbitMQ是什么?RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。RabbitMQ是AMQP的一种实现,消息队列的一种,类似的实现还有:ActiveMQ,kafka等。RabbitMQ可...

2020-01-09 20:54:20 3117

原创 如何实现一个比较完美的分布式锁?

在分布式系统中,存在一个让人很头痛的问题:锁。单机器时,控制并发相对简单,使用Java提供的synchronized关键字或者显式锁ReentrantLock。但是在分布式系统中,JVM级别的锁已经不能满足系统的需求,需要实现分布式锁,可以借助Redis或Zookeeper实现,本篇博客记录一下用Redis实现一个比较完美的分布式锁。通过一个“商品秒杀抢购”案例来实现。商品抢购案例购买商...

2020-01-07 21:01:55 3386

原创 Redis分布式锁防止缓存击穿

缓存击穿和缓存穿透不同的是,缓存击穿是指:缓存中没有,但是数据库中存在的热点数据。例如:首页的热点新闻,并发访问量非常大的热点数据,如果缓存过期失效,服务器会去查询DB,这时候如果大量的并发去查询DB,可能会瞬间压垮DB。画了个简图,如下所示:解决方案:DB查询加分布式锁。未加锁的情况解决问题之前,先看一下不做处理的代码和运行情况。根据商品ID查询商品详情代码清空Redis缓存...

2020-01-05 21:44:20 4003

原创 手写布隆过滤器防止缓存穿透

什么是布隆过滤器?布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。如果要判断一个元素是否存在,以前的思路是遍历集合,将元素依次比较。链表、数组等数据结构都是这种思路,只是不同的数据结构判断的...

2020-01-05 16:58:38 3266

原创 Redis Cluster高可用集群搭建

笔者前面的博客分别介绍了Redis“主从复制”和“哨兵模式”服务的搭建,但是这两种服务还有一些问题没有解决,例如:单台Master写性能存在瓶颈数据无法分布式存储,单机内存有限为了解决这些问题,Redis还提供了一种扩展性更强,可用性更好的Cluster集群方案。Redis Cluster集群是什么?Redis Cluster集群是一个由多个主从节点集群组成的分布式服务器群,它具有数...

2020-01-04 19:31:46 3069

原创 Redis哨兵模式

Redis哨兵模式在2.8版本开始引入,它的主要目的是:Master节点的自动故障转移。Redis主从复制,Master只有一台,当Master节点出现故障时,整个服务将无法写入数据,服务可用性较差。此时一般需要人为操作,将其中一台Slave晋升为Master,且其他Slave均需要从新的Master复制数据。人为修改Redis节点角色,首先是不及时,其次是比较麻烦。为了解决这个问题,Re...

2020-01-04 12:54:05 3000

HashMap.java

JDK7的HashMap源码阅读,几乎给每个方法和属性都加上了中文注释。 可以帮助大家更好的阅读源码,可能有理解不对的地方,望指正。

2019-12-27

空空如也

空空如也

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

TA关注的人 TA的粉丝

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