自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Soongp的博客

温故知新

  • 博客(46)
  • 资源 (3)
  • 收藏
  • 关注

原创 RabbitMQ-消息可靠性

消息的可靠性体现在两个层面:消息发送的可靠性和消息消费的可靠性。下文解释了如何使用AMQP和RabbitMQ的各种特性来实现可靠的传递——确保消息始终被传递,即使在系统的任何部分遇到故障。What Can Fail?网络问题可能是最常见的故障类型。不仅网络会失败,防火墙会中断空闲Connection,而且网络故障并不总是立即检测到。除了Connection失败之外,代理(服务端br...

2019-02-16 14:05:54 1434

原创 Redis缓存穿透、缓存击穿、缓存雪崩

参考资料:《Redis开发与运维》、《数学之美》缓存的好处1.减少数据库压力(减少数据库连接)2.减少计算过程(缓存异构数据)3.提交查询响应速度(Redis基于内存的kv缓存)缓存层开发的常规流程1.客户端请求查询数据2.根据参数key查询缓存3.如果存在数据,直接返回结果4.如果不存在数据,查询数据库5.如果数据库查询结果不为空,则将返回值写入缓存层(并...

2020-04-25 15:08:54 337

原创 如何保证缓存一致性?

参考资料:《Redis开发与运维》何为缓存不一致?缓存层与存储层在一定时间窗口内存在数据不一致的情况,称此为缓存不一致。缓存中的数据通常是有生命周期的,需要在指定的时间后更新或删除,这样就可以保证缓存空间在一个可控的范围之内。Redis对此提供了一些策略来更新数据。算法剔除Redis提供了一些更新算法,LRU、LFU等等。使用场景:通常应用于缓存使用量超过了预设的最大值的时...

2020-04-25 13:59:54 430

原创 JAVA死锁:概念、原因、诊断、避免

参考书籍:《java高并发编程详解》什么是死锁?死锁,是指两个或两个以上的线程在执行过程中,由于资源竞争或彼此间通信或某原因造成的死循环而造成的一种(线程)阻塞的现象。若无外力作用,它们都将无法继续执行下去。此时成系统陷入了死锁状态或系统产生了死锁。这些永远处于阻塞等待的进程称为死锁进程。死锁产生的原因?1.交叉锁,例如,线程T1持有锁A,等待获取锁B;线程T2持有锁B,等待获...

2020-04-23 22:51:35 365

原创 InnoDB如何解决幻读?MVCC?

参考文档:https://dev.mysql.com/doc/refman/5.7/en/innodb-next-key-locking.html。InnoDB是一种多版本(multi-version)存储引擎,支持事务。很多书籍、资料中都说MVCC解决了幻读的问题,NO,其实MVCC并没有解决幻读问题。MVCC只是通过undo log解决了RR事务隔离级别中的consitent read问题...

2020-04-21 20:59:10 725

原创 JDK8垃圾回收调优指南--(9)G1

原文:Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide--Garbage First Garbage Collector。G1垃圾收集器是一种服务器风格的垃圾收集器,针对的是内存较大的多处理器机器。它试图在满足GC停顿时间目标的同时,高概率的实现高吞吐量。整个堆操作(例...

2019-09-24 15:18:02 1863

原创 JDK8垃圾回收调优指南--(8)CMS

原文:Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide--Concurrent Mark Sweep (CMS) Collector。并发标记清除收集器(CMS)是为了那些要求更短GC停顿的应用设计的,它能够在应用运行期间共享处理器资源。通常这种应用的“长生命周期”数据...

2019-09-24 14:57:12 1563

原创 JDK8垃圾回收调优指南--(7)并发收集器

原文:Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide--The Mostly Concurrent Collectors。JDK8中Hotspot虚拟机有2种常用的并发收集器:Concurrent Mark Sweep (CMS) Collector:此收集器适用...

2019-09-20 11:10:59 242

原创 JDK8垃圾回收调优指南--(6)并行收集器

原文:Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide--The Parallel Collector。并行收集器(也称为吞吐量收集器),与串行收集器类似都是分代收集器;主要的区别是使用多个线程来加速垃圾回收。使用命令行选项'-XX:+UseParallelGC'启用...

2019-09-19 16:14:18 498

原创 JDK8垃圾回收调优指南--(5)可用垃圾收集器

原文:Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide--Available Collectors。截止目前讨论的都是关于串行收集器的。Java HotSpot VM包含三种不同类型的收集器,每种收集器具有不同的性能特征。串行收集器,使用一个线程执行所有垃圾收集工作...

2019-09-19 15:23:01 823 1

原创 JDK8垃圾回收调优指南--(4)设置代大小

原文:Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide--Sizing the Generations。许多参数会影响代的大小。图4-1说明了堆中提交空间和虚拟空间之间的差异。在虚拟机初始化时,为堆保留了整个空间。(堆)保留空间的大小可以使用'-Xmx'选项指定。如果...

2019-09-19 09:23:08 940

原创 JDK8垃圾回收调优指南--(3)代

原文:Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide--Generations。Java SE平台的一个优点是它使开发人员免受内存分配和垃圾收集的复杂性的影响。然而,当垃圾收集是主要瓶颈时,理解这种隐藏实现的某些方面是有用的。垃圾收集器对应用程序使用对象的方式进行假设...

2019-09-18 17:39:58 496

原创 JDK8垃圾回收调优指南--(2)人机工程

原文:Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide--Ergonomics。人机工程学是通过Java虚拟机(JVM)和垃圾收集调优(如基于行为的调优)提高应用程序性能的过程。JVM为垃圾收集器、堆大小和运行时编译器提供了与平台相关的默认选择。这些选择匹配不同类型...

2019-09-18 10:31:18 238

原创 JDK8垃圾回收调优指南--(1)说明

原文地址:Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide--Introduction。从台式机上的小applet到大型服务器上的web服务,各种应用程序都使用Java。为了支持这种不同范围的部署,满足不同的要求,JVM提供了多个垃圾收集器。这是满足大型和小型应用程序需...

2019-09-17 09:07:07 562

原创 RabbitMQ流控-内存控制

RabbitMQ服务器启动和执行rabbitmqctl set_vm_memory_high_watermark fraction命令时会检测计算机中安装的RAM(内存)总量。默认情况下,当RabbitMQ服务器使用超过40%的可用RAM时,它会发出内存警报并阻塞所有正在发布消息的Connection。一旦内存警报清除(例如,由于服务器将消息写到磁盘或将其投递给客户端消费并进行投递确认),服务恢复...

2019-02-15 22:49:27 1944

原创 RabbitMQ流控-磁盘控制

当磁盘空间低于配置(disk_free_limit)的限制时(默认disk_free_limit.absolute=50MB),将触发警报,并阻塞所有生产者。目的是避免填充整个磁盘,否则将导致节点上的所有写操作失败,并可能导致RabbitMQ终止。为了减少磁盘被填满的风险,所有正在传入的消息都将被阻塞。在内存压力下,非持久化的暂态消息仍将page到磁盘,并将耗尽已经有限的磁盘空间。如果磁盘警报阈值...

2019-02-15 22:22:04 2051

原创 RabbitMQ流控-FLow Control

当Connection发布消息的速度太快,队列无法跟上(消费速度低于生产速度),RabbitMQ会降低Connection的速度,无需配置。流控的Connection可以在rabbitmqctl、管理UI和HTTP API响应中显示flow状态。这意味着连接每秒要经历多次阻塞和解除阻塞,以便将消息传入的速度保持在服务器其他部分(例如,将这些消息路由到的队列)能够处理的速度。一般来说,处于流...

2019-02-15 18:35:21 1696

原创 阿里云ECS安装Docker

Docker Documentation(Docker 文档)标准的安装流程Docker文档中已经提供,只是每个人在安装的过程中,或多或少的会遇到一些问题,下面的安装过程中,我会列出我在安装过程中遇到的一些问题及其解决办法,顺利的话,参照官方文档提供的安装流程即可安装成功。想要在Centos上使用Docker CE(Docker社区版本),必须满足一些先决条件,然后再去安装。先决条件...

2019-01-09 14:41:56 2249 2

原创 阿里云ECS安装RabbitMQ

rabbitMQ官网教程安装RabbitMQ之前,必需要先导入RabbitMQ signing key:rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asccd /etc/yum.repos.d/为了可以使用yum,...

2018-12-28 16:39:00 932

原创 RabbitMQ tutorials 中文翻译

官方地址:http://www.rabbitmq.com/getstarted.html这些教程覆盖了使用RabbitMQ创建消息应用的基础。首先安装一个RabbitMQ服务(地址:http://www.rabbitmq.com/download.html),代码示例是开源的(地址:https://github.com/rabbitmq/rabbitmq-tutorials),同样,Sprin...

2018-11-24 10:05:50 821

原创 Java虚拟机高效并发之先行发生原则

上两篇关于JMM和volatile变量特殊规则的博文中,都提起了happens-before原则。之前关于线程池ThreadPoolExecutor类的学习中也浅度的介绍了一下先行发生原则。之前在学习Java内存模型时,了解到Java内存模型中的内存交互规则,以及volatile关键字的特殊规则,基本就能判断出内存访问在并发环境下的安全,但是这种定义相当严谨又十分繁琐,实践起来很麻烦,所以JMM中...

2018-05-13 16:12:30 377

原创 Java虚拟机高效并发之对于long和double类型变量的特殊规则以及JMM的三大特性总结

上一篇博文,刚刚介绍了volatile的2种语义,以及JMM中对volatile变量定义的特殊规则,这些规则保证了volatile的可见性和禁止指令重排优化两种语义。以及在什么场景下可以选择JVM中最轻量级的同步同步机制来保证并发安全(满足volatile变量的2种语义)。这篇博文主要补充一下JMM对于long和double类型变量的特殊规则,补充总结JMM的三大特性,可见性、有序性、原子性。一、...

2018-05-12 18:38:35 1457

原创 Java虚拟机高效并发之volatile变量的特殊规则

粗糙的回忆一下上篇博文的知识点,JMM,工作内存与主内存,以及内存间的交互规则,内存交互的几种操作(lock、unlock、read、load、use、assign、store、write),其中lock、unlock、read、write作用于主内存,其余操作作用于工作内存,最后以内存间交互规则,引出并发安全,引出等效判断规则(先行发生原则,happens-before)。关键字volatile...

2018-05-12 12:26:30 421

原创 Java虚拟机高效并发之Java内存模型

Java Memory Model,JMM,什么是Java内存模型?Java虚拟机试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果(Java跨平台语言)。一、物理机中的内存模型“让计算机并发执行若干个计算任务”与“更充分的利用计算机处理器的效能”之间的因果关系,看起来顺理成章,实际并非如此,绝大多数的运算任务并不仅仅依...

2018-05-10 14:10:34 256 1

原创 java源码学习之ThreadPoolExecutor类

上一篇博文学习分享了Thread类的一些源码,本来打算这一周学习分享一下java虚拟机的垃圾回收,但是目前还没有一个好的思路去分享这部分知识,所以,我们暂时先继续学习分享多线程的知识;老规矩,复习一下上篇博文的内容:①java线程的生命周期②线程的实现方式③引起线程等待 WAITTING 的几种方法然后这篇博文主要包括以下内容点:①ThreadPoolExecutor类做一个简要的分析。②类比ja...

2018-04-27 19:11:06 254 1

原创 java源码学习之Thread类

继上两篇博文,学习,分享了虚拟机的内存自动管理机制,分别包括了java运行时数据区域和HotSpot虚拟机中对象的内存分配、布局、以及访问定位,今天穿插着学习一下java多线程,首先以java.lang.Thread类入手,学习研究Thread类的源码。线程就是程序中的一个执行任务。java虚拟机允许一个应用同时执行多个线程,此处引出java多线程实现原理:多个线程轮流切换并分配处理器执行时间。每...

2018-04-22 12:52:33 335

原创 java虚拟机内存管理机制之HotSpot虚拟机对象探秘

继java内存区域相关知识点学习分享后,今天来学习分享一下HotSpot虚拟机对象的创建,内存分配,访问定位相关知识。学习新内容之前,先回忆一些内存区域的知识点:①方法区的概念。②运行时常量池的概念。③虚拟机栈的概念。④java堆分类。再带上一些疑问:①java对象的生命周期。②CAS原理。③什么是JNI。基于优先实用原则,我们以常用的虚拟机HotSpot和常用的内存区域java堆为例,深入探讨H...

2018-04-18 22:32:56 377 2

原创 java虚拟机内存管理机制之java内存区域

一、与C、C++语言区别①对于C语言来说,既拥有每一个对象的“所有权”,又担负这每一个对象生命开始到终结的维护责任。②对于java语言而言,在虚拟机自动内存管理的机制下,无需为每一个new操作去写对应的delete/free代码,不容易出现内存泄漏和内存溢出。二、运行时数据区域当程序员们讨论起java内存的时候,大部分都是以“堆内存”,“栈内存”来区分,这样区分是比较粗糙的。java虚拟机在运行j...

2018-04-16 18:46:30 499

原创 微信服务号开发-推广二维码

扫码加群:微信公众平台技术文档二维码部分如下:生成带参数的二维码为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。目前有2中类型的二维码:1.临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号...

2018-03-05 11:44:02 4225

原创 微信服务号开发-整合微信支付

最近的项目在对接微信支付,所以抽出一些时间,将方法总结一下:欢迎加群交流:724225958官方开发文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=1_1;文档中分别对支付账户(参数)、接口规则、支付业务场景,流程、API做了详细介绍,并提供了SDK以及DEMO ,大部分有一定基础的开发或研发,均可参照文档及其demo,一步一...

2018-03-01 12:59:39 3243

原创 微信服务号之公众号支付配置

0.相关问题及源码咨询,请加群:724225958。1.登录微信支付平台:https://pay.weixin.qq.com/index.php/core/info,使用微信支付商户账号登录(微信支付申请审核通过后,邮件中包含此信息)。2.点击产品中心,我的产品。3.点击H5支付,申请开通,此时会提示安装证书。4.点击安装安全控件,或点击账户中心,点击操作证书。安装操作证书,注意此处一定要使用IE...

2018-02-28 21:02:40 5126

原创 mysql存储引擎

一、【mysql存储引擎概述】插件式存储引擎是Mysql数据库重要特征之一5.5之前的默认存储引擎为MyISAM5.5之后的默认存储引擎为InnoDB如果要修改默认的存储引擎,可以在参数文件中设置default_table_type;查询当前数据库支持的存储引擎:SHOW ENGINES \G可以通过创建表语句设置指定表的存储引擎:①create table ai

2017-10-25 20:18:05 417

原创 log.error("异常:", e);与log.error(e.getMessage());区别

昨天接到消息,要去海尔商城做一个CM系统,但是海尔那边还需做一下简单的面试,把把关。废话不多说,讨论问题:不知道大家在正常的开发中,有没有细心留意过这个问题,看似很小,还是能体现一个人工作上的认真程度的。反正我是没有做到这么仔细.......大家也可以写代码试一试结果:以空指针为例:(1).log.error("异常:" + e);的打印结果为异常信息+堆栈信息:异常:

2017-04-28 14:51:32 29674 2

原创 telegraf+influxdb+grafana+spring boot构建监控平台

一、数据采集Telegraf 是一个用 Go 编写的代理程序,可收集系统和服务的统计数据,并写入到 InfluxDB 数据库,Telegraf 具有内存占用小的特点,通过插件系统开发人员可轻松添加支持其他服务的扩展。Telegraf是完全配置驱动,所有的数据都通过声明的数据输入源(inputs)收集,并发送给声明的数据输出源(outputs)。所以,我们通过配置inputs来实现对

2017-03-27 18:05:02 10770 5

原创 zookeeper实战与源码分析----ZooKeeper中ACL权限认证使用

初衷:本人做的这个一系列总结的初衷就是为那些Zookeeper的入门者以及想在工作之余提高自己能力的有志之士节省去查资料的时间,帮助大家提高自学的能力,迅速的掌握Zookeeper,以至于在这个饱和的行业中提高自己技术方面的竞争力。现在市场上有很多买卖的架构方面的学习资料,少则几百,多则上千上万,视频水的不行,而且大部分人还是一时脑热,钱花了,视频不看。笔者是过来人,所以我特别希望、建议你们静下心

2017-03-22 16:58:27 1312

原创 zookeeper实战与源码分析----用ZooKeeper封装自己的客户端工具

初衷:本人做的这个一系列总结的初衷就是为那些Zookeeper的入门者以及想在工作之余提高自己能力的有志之士节省去查资料的时间,帮助大家提高自学的能力,迅速的掌握Zookeeper,以至于在这个饱和的行业中提高自己技术方面的竞争力。现在市场上有很多买卖的架构方面的学习资料,少则几百,多则上千上万,视频水的不行,而且大部分人还是一时脑热,钱花了,视频不看。笔者是过来人,所以我特别希望、建议你们静下心

2017-03-22 14:50:52 668

原创 zookeeper实战与源码分析----第三方客户端ZkClient使用之监听器

初衷:本人做的这个一系列总结的初衷就是为那些Zookeeper的入门者以及想在工作之余提高自己能力的有志之士节省去查资料的时间,帮助大家提高自学的能力,迅速的掌握Zookeeper,以至于在这个饱和的行业中提高自己技术方面的竞争力。现在市场上有很多买卖的架构方面的学习资料,少则几百,多则上千上万,视频水的不行,而且大部分人还是一时脑热,钱花了,视频不看。笔者是过来人,所以我特别希望、建议你们静下心

2017-03-20 17:10:57 4004 2

原创 zookeeper实战与源码分析----zookeeper安装

废话不多说,直接上步骤:zk的安装支持2种方式,一种是单机,一种是集群,集群环境要求服务器之间系统时间保持一致1.上传 zookeeper-3.4.5.tar.gz  到目录/usr/local2.解压 tar -zxvf zookeeper-3.4.5.tar.gz3.修改文件夹名称 mv zookeeper-3.4.5 zookeeper4.修改conf目录下配置文件名

2017-03-16 11:02:09 1012

原创 zookeeper实战与源码分析----ACL访问控制

最近工作一般忙吧,利用工作之余学习学习zookeeper。Zookeeper是一个分布式的、开源的分布式应用协调服务。这个介绍很简单吧?详情zk简介参照:http://zookeeper.majunwei.com/document/3.4.8/OverView.html。中文参考文档:http://zookeeper.majunwei.com/document/3.4.8/。但是其开发者部

2017-03-14 15:15:58 1158

原创 nginx实战--nginx反向代理同一域名不同端口

实战场景:网站上线,要保证在不影响原正式网站的前提下,部署一套网站的测试环境,供客户测试;网站域名:www.xxxxx.com解决此问题有2中解决方案:①通过域名+指定路径的方式部署,即:www.xxxxx.com/test,客户可以直接通过域名访问测试环境;②通过内网IP方式部署,即:选择一台nginx服务器,对测试环境做反向代理,客户只能通过VPN+内网IP的方式访问测试环境;

2017-02-24 11:38:35 2662

zookeeper 第三方客户端 curator源文件

zookeeper 第三方客户端 curator源文件,拿走不谢,留名雷锋

2017-03-15

zookeeper第三方客户端zkClient源文件

zookeeper 第三方客户端 zkClient源文件,拿走不谢,留名雷锋

2017-03-15

zookeeper第三方客户端zkClient源码

zookeeper第三方客户端zkClient源码,拿走不谢,留名雷锋

2017-03-15

空空如也

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

TA关注的人

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