自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 CentOS7常用命令大全

常用命令1. cd /etc/sysconfig/network-script/ 切换到网卡所在目录2. ls 查看当前目录下的所有文件和文件夹3. vi /etc/sysconfig/network-scripts/ifcfg-ens33 编辑网卡配置4. vi模式下,按Ins键 启动编辑5. vi模式下,按esc键 退出编辑6. ...

2019-07-31 08:25:30 2185 18

原创 IDEA常用快捷键

常用快捷键一览Alt+回车:导入包,自动修正代码Ctrl+Y:删除光标所在行Ctrl+D:复制光标所在行,插入光标位置下面Ctrl+Alt+L:格式化代码Ctrl+/:单行注释/** + enter: 方法注释快捷键Ctrl+Shift+/:选中代码注释,多行注释,再次按取消注释Alt+Ins:自动生成代码,toString,get,set等方法A...

2019-04-24 13:49:53 208 22

原创 小技巧——如何快速删除大文件

一、shift+右击要删除的文件,选择在此处打开Powershell窗口二、打开之后,输入cd..跳到上一层路径。 输入 rimraf + 要删除的这个文件夹名字。稍等一会就删掉了~没有rimraf命令,请全局安装npm install -g rimraf...

2019-03-26 17:39:50 1987 24

原创 分布式事务之2PC、3PC、TCC

目录什么是2PC关系型数据库的2PC=>XA方案分布式事务框架Seata的2PC=》AT方案Seata的2PC和传统2PC比较2PC的问题什么是3PC什么是TCC什么是2PC2PC即两阶段提交协议,将整个事务流程分为两个阶段:准备阶段、提交阶段。简单来说准备阶段就执行事务代码,但不一定提交,提交阶段决定是最终提交事务还是回滚事务。为什么要简单来说?因为基于数据库的2PC和分布式框架Seata的2PC有差异,不能一概而论。关系...

2020-08-11 15:36:31 11

原创 什么是分布式事务?

目录什么是事务什么是分布式事务分布式事务使用场景什么是事务我们先来回顾下什么是事务https://blog.csdn.net/Delicious_Life/article/details/105466757什么是分布式事务指的是分布式环境下不同服务之间通过网络远程协作完成的事务。传统的方式无法解决分布式事务问题:上图是一个分布式事务小例,你会想到@Transactional,这个注解是spring对数据库事务的java...

2020-08-11 08:59:53 16

原创 SpringBoot操作POI-Excel

导入POI-Excelspringboot项目引入下面jar包即可 <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.10.1</version> </dependen...

2020-08-10 21:13:43 20

原创 POI与EasyExcel

什么是POIPOI是Apache提供的开源代码库,这个代码库用来提供Java客户端对Microsoft Office格式文件的读写操作POI有五种结构HSSF——提供读写Microsoft Excel(2003)格式档案功能XSSF——提供读写Microsoft Excel OOXML(2007-今)格式档案的功能HWPF——提供读写Microsoft Word格式档案的功能HSLF——提供读写Microsoft PPT格式档案功能HDGF——提供读写Mic...

2020-08-10 19:18:21 14

原创 Redisson实现分布式锁

目录Redisson工作原理图Redisson工作原理1.lua脚本2.加锁3.锁互斥机制4.watch dog自动延期机制5.可重入锁机制6.释放锁机制代码实现步骤Redisson工作原理图Redisson工作原理1.lua脚本现在某个客户端要加锁,且该客户端面对是上图中的Redis Cluster集群,他会首先根据hash节点选择一台机器,紧接着会发送一段lua脚本(胶水语言)到redis上。为什么用...

2020-08-10 17:02:22 17

原创 分布式锁的实现思路

目录秒杀案例分布式锁应具备的条件三种方案的分布式锁基于数据库实现分布式锁基于缓存实现分布式锁基于Zookeeper实现分布式锁三种方案比较秒杀案例我们来看一个秒杀小案例,每有一个用户下单库存就-1,在单环境部署情况下,我们添加了synchronized锁,锁住扣除库存代码块,这样不会出现多线程并发导致库存数量出现重复或负数问题。但分布式部署,synchronized就无法解决此问题了,多个项目就有多个synchronized锁,锁之间会覆盖冲...

2020-08-10 16:19:13 16

原创 策略模式

目录经典的鸭子问题策略模式的UML图策略模式解决鸭子问题什么是策略模式策略模式在Arrays工具类中的应用用策略模式来替代if-else使用策略模式的注意事项经典的鸭子问题我们先通过一个例子来逐步分析,为什么要使用“策略模式”解决鸭子问题。现在有各种鸭子(比如野鸭、北京鸭、水鸭等,而鸭子有各种行为,例如叫和飞行),各种鸭子的行为是不一样的,如野鸭会飞,水鸭不会飞。怎么用程序实现各种鸭子的代码呢?传统的方案是这样的。定义一个抽象类Duck,具...

2020-08-09 20:29:56 18

原创 GitHub常用技巧

目录常用词in关键字的范围搜索stars或fork数量关键字查找awesome加强搜索高亮显示某行代码项目内搜索搜索大佬常用词watch:关注项目 fork:转发数 star:点赞数 clone:下载数 follow:关注作者in关键字的范围搜索公式:name代表项目名称、description代表项目描述、readme代表说明文档xxx in:name,description,readmest...

2020-08-08 13:40:43

原创 生产环境服务器慢如何诊断问题?

首先使用top命令找出cpu占比最高的进程 然后使用ps -ef或者jps进一步定位,得知是哪一个后台程序出了问题 使用命令定位到具体的线程或代码 ps -mp 进程 -o THREAD,tid,time ①-m:显示所有的线程 ②-p:pid进程使用CPU的时间 ③-o:该参数后是用户自定义格式 4.将需要的线程ID转换为16进制格式(英文小写格式)printf “%x\n” 有问题的线程ID...

2020-08-08 11:44:09 7

原创 Linux硬件命令大全

目录TopCPU:vmstat内存:free硬盘:df网络IO:ifstatToptop命令用来查看整机系统的性能使用top命令的话,重点关注的是 %CPU、%MEM 、load average 三个指标。在这个命令下,按1的话,可以看到每个CPU的占用情况uptime:系统性能命令的精简版CPU:vmstat命令格式:vmstat -n 2 3一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样...

2020-08-08 11:35:17 31

原创 G1垃圾回收器

目录G1是什么G1的原理区域化的垃圾回收回收步骤回收过程参数配置G1和CMS比较SpringBoot结合JVMGCG1是什么Garbage-First收集器,是一款面向服务端应用的收集器,应用在多处理器和大容量内存环境中,实现了高吞吐量的同时尽可能满足垃圾收集暂停时间的要求。具有以下特征:像CMS收集器一样,能与应用程序并发执行 整理空闲空间更快 需要更多时间来预测GC停顿时间 不希望牺牲大量的吞吐量性能 不需要更大的Java Heap ..

2020-08-06 18:53:12 27

原创 JVM的垃圾收集器 

目录垃圾回收算法和垃圾回收器的关系四种主要的垃圾收集器SerialParallelCMS(Concurrent Mark Sweep)G1如何查看默认的垃圾回收器JVM的七大垃圾回收器新生代的垃圾收集器串行GC(Serial Copying)并行GC(ParNew)双并行回收GC(Parallel Scavenge)老年代的垃圾收集器串行GC(Serial Old)并行GC(Parallel Old)并发标记清除GC(CMS)垃圾收集器如何

2020-08-06 17:43:51 30

原创 JVM线上常见问题

目录StackoverFlowErrorjava.lang.OutOfMemoryError:java heap spacejava.lang.OutOfMemoryError:GC overhead limit exceeededjava.lang.OutOfMemoryError:Direct buffer memoryjava.lang.OutOfMemoryError:unable to create new native threadjava.lang.OutOfMemo.

2020-08-06 10:16:54 35

原创 强、软、弱、虚引用与垃圾回收

目录什么是引用引用的结构图强引用软引用弱引用虚引用引用队列 ReferenceQueue什么是引用我们在java中经常会对类进行实例化Person p = new Person等号左边是对象的“引用”,存储在栈中。等号右边是实例化的对象,存储在堆中。这种引用也被称为强引用。引用的结构图引用类分强软弱虚以及引用队列,它们都继承于Object类,结构图如下强引用在Java中最常见的就...

2020-08-06 08:50:19 28

原创 什么是GC Roots——垃圾回收的可达性分析

为了解决引用计数法的循环引用个问题,Java使用了可达性分析的方法:所谓 GC Roots 或者说 Tracing Roots的“根集合” 就是一组必须活跃的引用基本思路就是通过一系列名为 GC Roots的对象作为起始点,从这个被称为GC Roots的对象开始向下搜索,如果一个对象到GC Roots没有任何引用链相连,则说明此对象不可用。也即给定一个集合的引用作为根出发,通过引用关系遍历对象图,能被遍历到的(可到达的)对象就被判定为存活,没有被遍历到的对象就被判定为死亡哪...

2020-08-04 21:14:54 51

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

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

2020-07-22 11:08:17 76 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 32 1

原创 Java中线程的概念

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

2020-07-22 10:02:05 42 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 50 1

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

Redis实现限时抢购

2020-07-16 11:55:59 39 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 43 1

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

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

2020-07-15 16:29:24 50 1

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

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

2020-07-14 11:17:00 63 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 52 1

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

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

2020-07-07 15:39:28 351 1

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

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

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

原创 RabbitMQ的集群监控的方式

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

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

原创 RabbitMQ的高级特性

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

2020-07-07 11:11:25 50 1

原创 Netty的基本概念

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

2020-07-06 17:10:08 53 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 59

原创 Dubbo的原理

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

2020-07-05 14:53:11 46

原创 RPC的概念及工作原理

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

2020-07-05 14:17:54 37

原创 Dubbo的高可用性

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

2020-07-05 14:00:01 60

原创 Spring的常用注解

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

2020-07-05 08:39:55 69

原创 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 85

原创 Zookeeper的基本概念

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

2020-07-02 23:22:37 83

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

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

2020-07-02 11:03:59 123

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