自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我能在河边钓一整天的鱼

欢迎来到我的酒馆

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

原创 Java中的锁机制——可重入锁(递归锁)

目录什么是可重入锁(递归锁)sychronized版lock版为什么可重入锁能防止死锁什么是可重入锁(递归锁)可重入锁也叫递归锁。它指的是同一个线程在外层获取锁之后,内层方法也会自动获取锁。lock和sychronized都是可重入锁可重入锁最大的作用就是避免死锁看这个小例子,method01和02都是加锁的方法,根据可重入锁的原理,线程只要获得了01的锁就能访问02,即使02也是个带锁的方法。sychronized版一...

2020-07-22 11:08:17 386 1

原创 Java中的锁机制——公平锁与非公平锁

我们先创建一个lock对象 public static void main(String[] args) { Lock lock = new ReentrantLock(); }上图我们没有传入参数,它调用的默认构造方法如下,可以看到不传参默认使用了非公平锁public ReentrantLock() {sync = new NonfairSync();}如果你传的参数为true public static void main(...

2020-07-22 10:21:43 158 2

原创 Java中线程的概念

目录并发和并行进程与线程线程调度的方式并发和并行并发:同一时间段发生并行:同时发生进程与线程进程进入到内存中的程序叫做进程线程程序运行时,会开启一条应用程序到CPU的执行路径,CPU通过这个路径执行进程,这个路径就叫做线程多线程的好处:效率高、多个线程之间互不影响线程调度的方式分时调度所有线程轮流使用CPU的使用权,平均分配每一个线程占用CPU的时间抢占式调度优先让优...

2020-07-22 10:02:05 163 1

原创 ☆HashMap深层原理

什么是HashMapHashMap是JDK提供的双列集合类, 它继承于Map接口。HashMap的数据结构是哈希表,作为一种数据结构,哈希表由“桶+链表组成”,而“hashmap使用的哈希表”在JDK1.8之前由数组+单向链表组成,JDK1.8开始哈希表的数据结构由数组+单向链表/红黑树(链表长度超过8变成红黑树)组成HashMap集合的特点:1.存取无序2.可以存null值3.多线程下不安全HashMap的哈希表以3号为例,3下面的所有...

2020-07-18 15:15:10 239 1

原创 如何设计一个秒杀系统(三)

Redis实现限时抢购

2020-07-16 11:55:59 194 1

原创 如何设计一个秒杀系统(二)

整理Service代码上篇https://blog.csdn.net/Delicious_Life/article/details/107331912在添加乐观锁操作前,我们先整理下之前的service代码的书写,让其更加清晰直观。@Service@Transactionalpublic class msServiceImpl implements msService { @Autowired private StockDAO stockDAO; ...

2020-07-15 16:30:41 284 1

原创 漏斗算法和令牌桶算法

目录干什么用的?什么是漏斗算法令牌桶算法令牌锁的使用干什么用的?这两个算法来源于计算机网络。在网络传输数据时,为了防止网络拥塞,需要限制网络中的流量,即限流什么是漏斗算法水(大量并发的用户请求)进入漏斗里,漏斗以一定的速度出水。当水流入的速度过大也就是漏斗满了的话,直接进行溢出。漏斗算法被认为是一种粗暴的限流算法,因为并不是所有情况下当前没抢到商品的请求都要被抛弃,因此这种强制性过滤算法并不具备灵活性令牌桶算法...

2020-07-15 16:29:24 3863 2

原创 如何设计一个秒杀系统(一)

目录秒杀的业务逻辑秒杀的代码逻辑基于事务的秒杀悲观锁解决多线程并发事务问题秒杀的业务逻辑首先看数据库有两张表,一张订单表,一张库存表。库存表中的count字段代表“一开始一共有多少库存”、sale字段代表“已售了多少”、version用来记录“乐观锁的版本号”再来看业务“秒杀”代表这抢购,抢购就先查库存是否有剩余然后创建订单,后面可能还要支付啊,取消订单退回库存等一系列事务操作。秒杀的保证措施除了上面说的事务操作外、还可以加上乐观锁防止...

2020-07-14 11:17:00 245 2

原创 ☆B树与B+树

前言关于索引的基本概念可参考这篇博客https://blog.csdn.net/Delicious_Life/article/details/105466368我们知道MySQL的索引结构使用了B+树,想必读者很想知道为什么百度B+树会搜出来个B树,B树和B+树到底有什么异同?要清楚这些内容,首先我们要了解平衡二叉树平衡二叉树我们知道程序运行时需要从本地磁盘加载到内存中。每次从磁盘加载到内存都可以看做是一次I/O操作,而这种I/O操作是很耗费时间和...

2020-07-14 09:34:52 344 1

原创 RabbitMQ如何保证有序消费消息?如何防止消息被重复消费?

目录有序消费消息防止消息被重复消费有序消费消息造成消息乱序消费的原因有两种情况一:情况二如何保证消息有序被消费情况一:情况二:防止消息被重复消费消息被重复消费的原因造成消费被重复消费的原因来源于我们之前为了防止消息在消费者端丢失,采用的手动回复MQ的解决方案。如果消费者处理消息成功,手动向MQ回复消息时,网络不稳定,无法回复MQ消费完毕。此时MQ因为收不到消费者的回复而仍然把这条消息保存到MQ中,并...

2020-07-07 15:39:28 4774 5

原创 如何解决RabbitMQ的消息堆积与消息丢失

目录消息堆积消息丢失消息堆积消息堆积的本质当消息生产速度远远大于消息消费的速度,就会造成消息堆积。消息堆积的后果新消息无法进入队列、旧消息无法丢失、消息等待消费时间过长以至于超出了业务容忍范围。消息堆积的原因生产者突然大量发布消息、消费者消费失败、消费者出现性能瓶颈、消费者直接挂掉了如何解决消息堆积1.排查消费者的消费性能瓶颈2.增加消费者的多线程处理3.部署增加多个消费者4.新增消息队列,可以想办法把消息按顺序的转移...

2020-07-07 15:16:35 2634 1

原创 RabbitMQ的集群监控的方式

目录前言启动插件tracing监控Zabbix监控自定义监控信息前言监控RabbitMQ有四种方式:启动插件、查看Track日志、自定义监控信息、使用第三方组件如Zabbix启动插件这种办法用的很少,注意是自带的插件监控的粒度不够rabbitmq-plugins enable rabbitmq_managementtracing监控之前有提到https://blog.csdn.net/Deli...

2020-07-07 11:24:19 788 1

原创 RabbitMQ的死信队列及延迟队列

目录过期时间TTL死信队列延迟队列消息确认机制消息追踪机制过期时间TTLTTL表示可以对消息设置预期时间,在这个时间内的消息可以被消费者接收获取,过了之后消息自动被删除。RabbitMQ设置TTL有两种方式~通过队列属性进行设置,队列中的所有消息都有相同的过期时间 对消息进行单独设置,每条消息TTL可以不同如果同时使用上述两种方法,则消息过期时间以两者之间的TTL较小数值为准。消息在队列的生存时间一旦超过了TTL值,就称为dead message并被投递到..

2020-07-07 11:11:25 474 1

原创 Netty的基本概念

什么是NettyNetty是由JBOSS提供的一个Java开源框架。Netty同时也是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠的网络IO程序Netty主要针对TCP协议下,面向Clients端的高并发应用,或者P2P场景下大量数据持续传输的应用Netty的本质是一个NIO框架,适用于服务器通讯相关的多种应用场景Netty的应用场景1.RPC框架的底层使用Netty作为基础通信组件,用来实现各进程节点间的内部通信2.网络...

2020-07-06 17:10:08 257 1

原创 Java的I/O模型

目录什么是I/O模型三种I/O模型比较NIO和BIOBIO、NIO、AIO的适用场景什么是I/O模型I/O模型指的是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。(好比马路,宽的和窄的有明显流量差别)Java支持3中网络I/O模型:BIO、NIO、AIO三种I/O模型Java BIO同步并阻塞(传统阻塞型),服务器实现模型为一个请求连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果...

2020-07-06 17:09:42 223

原创 Dubbo的原理

Dubbo工作原理config配置层:对外配置接口,以ServiceConfig、ReferenceConfig为中心,可以直接初始化配置类,也可以通过spring解析配置生成配置类 proxy服务代理层:服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory registry注册中心层:封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry、R...

2020-07-05 14:53:11 273

原创 RPC的概念及工作原理

目录什么是RPCRPC的工作原理(同步调用)什么是RPCRPC指的是远程过程调用,这个概念是相对于本地过程调用而言的。远程~ 主机A调用主机B的某服务 本地~ 主机A的某服务调用主机A的其他服务RPC的核心模块:通信和序列化RPC框架:Dubbo、谷歌的gRPC、阿里的HSFRPC的工作原理(同步调用)1.消费方(client)以本地调用的方式调用服务=>消费方存根。2.消费方存根(client stub)负...

2020-07-05 14:17:54 406

原创 Dubbo的高可用性

目录前言zk宕机后的高可用dubbo的负载均衡dubbo整合Hystrix前言作为一个微服务治理框架,dubbo提供了一些高可用操作。zk宕机后的高可用我们一直把zk和dubbo放在一起谈。如果zk宕机,只要之前dubbo+zk架构中曾经进行过对应的RPC通信,那么dubbo就会有本地缓存记录。对应的服务之间仍然可以通过dubbo直接进行通信dubbo的负载均衡针对于客户端调用多个服务端时,进行的算法选择策略Ran...

2020-07-05 14:00:01 290

原创 Spring的常用注解

1.比较@PathVariable注解和@RequestParam@PathVariable用在请求url中携带参数的请求上@RequestParam用在请求url中不携带参数,但方法执行时需要参数的情况

2020-07-05 08:39:55 168

原创 Zookeeper的工作原理

目录zk的选举机制zk的节点类型zk的监听器原理向zk集群中注册服务的原理zk的选举机制我们已经知道只有zk集群半数以上处于正常启动时,zk才会提供服务。现在让我们来说说zk的选举机制。假设有zk集群中有5台服务器。id为1-5,如果它们都同时启动,选举机制是怎么产生leader和follower的呢?1.即使同时启动,总有一个是最先启动成功的。这台服务器假设编号为1,此时它检测到集群中没有半数以上的服务器启动,此时它的选举状态是LOOKING(代表寻找...

2020-07-04 10:35:58 318

原创 Zookeeper的基本概念

目录什么是Zookeeper?zk的工作机制zk的特点zk的数据结构zk的应用场景什么是Zookeeper?zk是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据。然后接受观察者的注册,一旦zk中的注册的对象配置信息发生变化,zk就会通知这些注册的服务器做出相应的反映。zk由文件系统+通知机制组成~zk的工作机制.zk的特点zk的集群中只有一个leader,当且仅当集群中有...

2020-07-02 23:22:37 273

原创 为什么要用定时任务框架代替SpringBoot的原生任务调度注解

目录SpringBoot中的@Scheduled注解原生定时任务的缺陷定时任务框架的工作流程SpringBoot中的@Scheduled注解在springboot中直接使用@Scheduled注解十分方便,看似能解决我们的需求。但应用在生产中远远不够原生定时任务的缺陷定时任务框架的工作流程市面上流行的定时任务框架很多,Quartz、elasticjob、xxl-job等等,其工作流程如下...

2020-07-02 11:03:59 439

Ubuntu16.04安装文档

1. 创建虚拟机 2. 安装Ubuntu系统 设置光盘镜像: 点击“开启此虚拟机”。 输入主机名: 输入用户名: 输入密码:itcast123 确认密码: 选择不更新: 至此,安装完成。 3. 安装完成后的配置 3.1. 设置root用户的密码 设置root用户的密码为root 3.1.1设置静态IP https://blog.csdn.net/Delicious_Life/article/details/104603312 3.2. 设

2020-09-18

空空如也

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

TA关注的人

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