自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

.... 永远年轻,永远热泪盈眶

_ _ _ _ _ _ _ _ _ _QQ:644319460 - 邮箱:644319460@qq.com

原创 记一次通过优化日志解决高并发服务性能瓶颈问题

事故发现 服务在生产环境中,由于同一时间段请求量过大,导致服务响应速度急剧下降。甚至会出现拒绝服务的问题,第一时间想到是机器性能问题,无法满足并发如此大的场景,需要进行扩容或者服务限流。经过扩容之后平稳了一个多月之后,又一次大量请求打进来的时候出现了此问题。这时才意识到开始从各个角度去排查问题。 ...

2020-03-18 17:50:24 14035 0

原创 JVM内存模型和GC算法分析

JVM运行时数据区 JVM在运行过程中会把它所管理的内存划分成若干不同的数据区域。 线程私有:程序计数器、虚拟机栈、本地方法栈 (主要存放指令) 线程共享:堆、方法区 (主要存放数据) 一、程序计数器 程序计数器是用于存放下一条指令所在单元的地址的地方。 我们可以随意拿一个class文件进...

2019-05-09 12:32:19 27925 0

原创 同步锁的优化思路及JDK对锁的一些优化

一、锁优化的思路和方法 主要有以下5点: 减少锁持有时间 主要就是精准的确定需要加锁的模块,不需要加锁的代码模块分离在同步块之外。 减小锁粒度 将大对象(这个对象可能会被很多线程访问),拆成小对象,大大增加并行度,降低锁竞争。降低了锁的竞争,偏向锁,轻量级锁成功率才会提高。最最典型的减小锁...

2019-04-10 16:47:08 31750 0

原创 springmvc运行流程分析,手写spring框架尝试

该文章主要是分析Springmvc启动的流程(配置阶段、初始化阶段和运行阶段),可以让自己对spring框架有更深一层的理解。对框架比较感兴趣的朋友都可以了解阅读下,对于我所描述的内容有错误的还望能不吝指出。 对于springmvc中的整个流程我个人把他分为这几个阶段,包括个人手写的spri...

2018-06-10 23:28:18 118712 11

原创 时间、空间复杂度分析

时间复杂度 时间复杂度表示算法的执行时间与数据规模之间的增长关系。 虽然代码千差万别,但是常见的复杂度量级并不多。我稍微总结了一下,这些复杂度量级几乎涵盖了你今后可以接触的所有代码的复杂度量级。 O(1) 首先你必须明确一个概念,O(1) 只是常量级时间复杂度的一种表示方法,并不是指只执行了一行...

2020-04-15 18:38:10 103 0

原创 MQ的常用场景 && 最佳实践
原力计划

RocketMQ 消息队列 RocketMQ 版是阿里云基于 Apache RocketMQ 构建的低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 版既可为分布式应用系统提供异步解耦和削峰填谷的能 力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性...

2020-04-01 16:10:22 12162 0

原创 HashMap引发死链问题(HashMap、ConcurrentHashMap原理解析)
原力计划

事故背景 一个CPU使用率飙升至100%的线上故障,原因是在并发情况下使用HashMap导致死循环。 当cpu使用率100%时,查看堆栈,发现程序都卡在了HashMap.get()这个方法上了,重启程序后问题消失。但是过段时间又会来。 HashMap结构 HashMap 是我们经常会用到的集合类,...

2020-03-31 23:06:12 319 2

原创 消息队列 RocketMQ原理和使用整理

背景 由于公司之前使用的队列中间件是kafka,近期变更为使用阿里的RocketMQ,所以对RocketMQ进行一下简单的知识整理。后续研究其内部原理后,再来一篇深入理解。 说明 消息队列 RocketMQ 版是阿里云基于 Apache RocketMQ 构建的低延迟、高并发、高可用、高可靠的分布...

2020-03-23 15:11:17 887 0

原创 Java动态代理相关简述

一、概念: Java动态代理的优势是实现无侵入式的代码扩展,也就是方法的增强;让你可以在不用修改源码的情况下,增强一些方法;在方法的前后你可以做你任何想做的事情(如Spring AOP、cglib等)。 代理模式: 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能...

2020-01-20 11:53:39 104 0

原创 Sentry基本原理

官方文档:sentry官网 Sentry基本介绍 Sentry 是一个实时事件日志记录和汇集的平台。其专注于错误监控以及提取一切事后处理所需信息而不依赖于麻烦的用户反馈。它分为客户端和服务端,客户端(目前客户端有Python, PHP,C#, Ruby等多种语言)就嵌入在你的应用程序中间,程序出现...

2019-11-08 19:30:37 987 0

原创 Java位运算符

一、Java中所支持的位运算符一共有7个 符号 说明 & 按位与。当两位同时为1时才返回1。 | 按位或。只要有一位为1即可返回1。 ~ 按位非(取反)。单目运算符,将操作数的每个位(包括符号位)全部取反。 ^ “异或”运算。当两位相同时返回0,不同时返回1。 ...

2019-09-17 22:04:52 83 0

转载 KMP、BM、Sunday、Horspool、strstr 字符串匹配算法介绍和性能比较

文章转自:https://blog.csdn.net/qq_33515733/article/details/81163135

2019-08-26 16:25:46 406 0

原创 kafka架构分析和配置使用整理

一、软件简介 Apache Kafka是开源的分布式流处理平台,也是高吞吐量的分布式跨平台订阅消息系统,主要包含Broker服务器、Topic消息类别、Partition物理分区、Producer生产者、Consumer消费者、Consumer Group消费组部分。 二、架构图 总结: •...

2019-06-21 17:41:43 443 0

原创 JVM调优和垃圾回收相关参数整理

一、内存调优 -Xms and -Xmx (or: -XX:InitialHeapSize and -XX:MaxHeapSize) -Xms和-Xmx可以说是最流行的JVM参数,它们可以允许我们指定JVM的初始和最大堆内存大小。一般来说,这两个参数的数值单位是Byte,但同时它们也支持使用速记符...

2019-05-10 11:42:12 27269 0

转载 Spring Boot引起的“堆外内存泄漏”排查及经验总结

背景 为了更好地实现对项目的管理,我们将组内一个项目迁移到MDP框架(基于Spring Boot),随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因,发现配置了4G堆内内存,但是实际使用的物理内存竟然高达7G,确实不正常。JVM参数配置是“-XX:Metaspace...

2019-04-29 19:04:06 1258 0

原创 基于Dubbo的分布式服务日志追踪实现

日志系统中的MDC可以在服务内部提供很好的日志追踪支持。 MDC.put(C.LOG.TRACE_ID, "唯一标识串"); 但是分布式(RPC)的情况下,如何实现呢? 以Dubbo为例,我们可以借助Dubbo的上下文信息RpcContext配合Dubbo的SPI扩展...

2019-04-26 11:03:33 30335 2

原创 基于Redis实现分布式锁剖析

之前的文章《分布式锁详解 - 分别利用Zookeeper和数据库实现分布式锁》,由于篇幅太长,又碰上加班时间不够充裕,所以没有把Redis的实现也顺带进去,特此做一些利用Redis实现分布式锁的分析。 PS:让我做选择的话,分布式锁的选择还是更愿意选择利用Zookeeper去实现的。 原因的话可以...

2019-04-25 21:30:34 29407 2

原创 雪花算法

雪花算法 雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等。 结构: 算法描述: 最高位是符号位,始终为0,不可用。 41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。 10位的机器标识,10位的长度...

2019-04-23 17:07:21 30867 0

原创 分布式锁详解 - 分别利用Zookeeper和数据库实现分布式锁

一、锁的相关描述 1、锁的使用流程: 首先参考一下JDK所实现的锁的通用接口Lock.java接口: /* * @since 1.5 * @author Doug Lea */ public interface Lock { /** * 加锁 */ vo...

2019-04-23 15:10:16 6943 0

原创 总结一些索引使用和优化规范

1、索引列的数据长度能少则少。 答:这个原因很简单,B-Tree各个节点能存储信息更多,减少树的告诉,效率自然也能得到提示。 2、索引一定不是越多越好,越全越好,一定是建合适的。 答:索引多了,检索速度虽然可能得到提升。但是“写”相关操作的效率可就不容小觑了。 3、匹配列前缀可用到索引like a...

2019-04-01 20:40:15 31373 0

原创 自旋锁、阻塞锁、可重入锁使用解析

自旋锁 自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时 才能进入临界区。如下: public class SpinLock { private AtomicReference<Thread> sign =new AtomicReference&...

2019-03-29 16:39:46 34355 0

转载 Fork/Join - 并发框架源码解析

什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行...

2019-03-28 22:01:47 33918 0

原创 ConcurrentLinkedQueue线程安全的队列源码解析

ConcurrentLinkedQueue简介 在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现...

2019-03-28 19:43:17 33583 0

原创 XStream注解使用简介

Xstream简介 Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列化,使用非常方便。本文章...

2019-03-20 10:17:14 35018 0

原创 【xxl-job分布式任务调度系统】特性整理

一、概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 二、使用细节 1、调度中心集群 调度中心支持集群部署,提升调度系统容灾和可用性。 调度中心集群部署时,几点要求和建议: DB配置保持一致; 登陆账号配置保持一致; 集群机器时钟保持一致(...

2019-02-27 14:51:36 34504 0

原创 Dubbo原理简述四:服务暴露、服务引用和调用流程

关于服务暴露,首先需要了解:ServiceBean.java 此类实现了几个Spring中比较重要的接口:如InitializingBean、ApplicationContextAware、ApplicationListener等,查看该类结构图: 接下来分析一下该类的一些主要方法: 在Serv...

2019-01-15 19:38:41 35976 0

原创 Dubbo原理简述三:启动解析、加载配置信息

&lt;dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"&gt;&lt;/dubbo:registry&gt; &lt;dubbo:proto...

2019-01-15 19:24:51 34446 2

原创 Dubbo原理简述二:Dubbo框架设计分析

Dubbo框架设计: 看起来比较复杂一些,但是其标注的非常清晰。 层次结构分为三层: (1)、Business:主要实现业务内容,也就是作为Dubbo用户的我们最经常见到的。其内部仅包含了Interface和其对应的实现Implement。 (2)、RPC: config 配置层:对外配置接口...

2019-01-15 19:14:10 264 0

原创 Dubbo原理简述一:RPC原理和Netty通信原理

一、RPC原理: 一次完整的RPC调用流程(同步调用,异步另说)如下: 1)服务消费方(client)调用以本地调用方式调用服务; 2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体; 3)client stub找到服务地址,并将消息发送到服务端; 4)ser...

2019-01-15 18:25:20 24396 0

原创 Java进程CPU占用率高的排查和常见解决方案

当系统出现卡顿或者应用程序的响应速度非常慢,就可能要考虑到服务其上排查一番,以下是我常用的排查流程: 1、top:观察占用CPU或者MEN(内存)使用情况最高的进程,记录PID; TIP: (1)、“1” 显示出多个逻辑CPU使用情况; (2)、“X” 高亮显示CPU列,并排序,&quot...

2019-01-10 17:13:15 37838 0

转载 JAVA 内存泄露详解(示例及解决方式)

尝试了通过一张图片转载,效果还可以,就是原博主的代码格式太酷炫,亮瞎了。

2019-01-10 15:10:42 33926 0

原创 JVM监控工具jstat使用详解

一、常用的JVM监控工具有如下几项: 1、VisualVM:是一种集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力。所有这些都是免费的!它囊括的命令行工具包括jps,jstat,jmap,jinfo,jstack,JConsole,这些工具与JDK的标准版本是一致的。 2、jps...

2019-01-02 15:36:12 12420 0

原创 借助sharding-jdbc实现数据分片

1、引入依赖: &lt;!-- 引入sharding-jdbc --&gt; &lt;dependency&gt; &lt;groupId&gt;com.dangdang&lt;/groupId&...

2018-12-28 12:28:20 12684 0

原创 sharding-jdbc读写分离的使用详解

一、不使用Spring 1、引入Maven依赖 &lt;dependency&gt; &lt;groupId&gt;io.shardingsphere&lt;/groupId&gt; &lt;artifactId&gt...

2018-12-28 10:54:53 13783 6

原创 一套适用于大部分系统的优化流程

常规系统优化流程: 1.0 应用程序优化 分析应用程序等GC日志,查看程序是否有优化等空间,或者某些业务代码是否可以进行优化,这个涉及的面比较广。 1.1 数据表索引优化 WEB服务器的CPU闲来无事,但数据库服务器的CPU使用率高居不下。经过初步分析,发现瓶颈在数据库。 解决方案:监控数据库...

2018-12-28 10:22:00 12555 0

转载 深度认识 Sharding-JDBC:做最轻量级的数据库中间层

Sharding-JDBC 采用在 JDBC 协议层扩展分库分表,是一个以 jar 形式提供服务的轻量级组件,其核心思路是小而美地完成最核心的事情。 对于这么优秀的一个项目, 在高手问答第 144 期中策划了 “ 轻量级数据库中间层 Sharding-JDBC 深度解析 ” 的主题,并邀请了 @当...

2018-12-19 10:17:36 12616 0

原创 SpringBoot与Dubbo整合的三种方式

前置条件(导入依赖) (1)、导入dubbo-starter (2)、导入dubbo的其他依赖 SpringBoot与dubbo整合的三种方式: 一、导入dubbo-starter依赖,在 application.properties 或者 application.yml 配置属性,使用@Ser...

2018-12-17 11:11:20 17777 1

原创 比较JDBC和Mybatis进行批处理时的性能比较

执行批量操作时,做了个比较Mybatis和JDBC执行时间的记录,JDBC还是强大太多了! jdbc.properties文件 jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncodi...

2018-12-05 21:48:11 15531 7

原创 Ngrok 实现内网穿透教程(Ngrok 和 Sunny-Ngrok )

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。 ngrok是什么我这边就不多介绍了,百度一找一大堆。你可以把它理解为内网穿透的工具。(简而言之就是将内网IP映射成...

2018-12-03 17:23:42 106332 34

原创 InputStream 源码分析

InputStream是所有输入字节流类的超类。 下面是对InputStream源码对一些基本解读: public abstract class InputStream implements Closeable { private static final int SKIP_BUFFER...

2018-11-21 11:02:15 12518 1

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