自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 Supervisor安装

Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用来在UNIX-like系统(不支持 Windows)下启动、重启、关闭进程。

2023-09-19 21:15:46 167

原创 JVM监控: async-profiler与Flame Graphs

通过jstack 和 async-profiler,定位到问题代码,分析产生的原因。记录本次分析的全过程,活学活用,未来掌握更多的问题分析工具。

2023-08-30 21:49:00 221

原创 ThreadLocal源码解析

1 ThreadLocal简单介绍ThreadLocal是JDK包提供的,它提供了线程本地变量。通俗一点说,就是你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多个线程操作这个变量时,实际操作的是自己本地内存里面的变量,避免了线程安全问题。2 ThreadLocal实现原理由上图可得,Thread类里有一个threadLocals和inhe...

2020-04-16 22:15:00 237

原创 CentOS7.X上安装Python3.7

1 安装必要的依赖笔者新安装的CentOS7,没有任何依赖,需要进行安装。如果你安装了gcc和make,可以把以下的命令删除这两个。yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-...

2020-04-10 20:42:17 233

原创 Spring Boot 2.X 设置动态数据源

1 多数据源实现的原理(AbstractRoutingDataSource)Spring Boot 提供了抽象类 AbstractRoutingDataSource,通过扩展这个类实现根据不同的请求切换数据源。AbstractRoutingDataSource继承AbstractDataSource,如果声明一个类DynamicDataSource继承AbstractRoutingDataSo...

2020-04-10 12:04:33 947

原创 Docker及主要软件的安装(基于centos 7.x 以及 root 用户)

1 Docker的安装及启动1.1安装dockeryum包更新到最新yum update安装需要的软件包,yun-uti提供yun-config-manager功能, 另两个是devicemapper驱动依赖的yum install -y yum-utils device-mapper-persistent-data lvm2设置yum源为阿里云yum-config-......

2020-03-29 15:21:11 834 1

原创 AQS实践(一):ReentrantLock概述

1 ReentrantLock类图结构ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取到该锁,其他获取该锁的线程会被阻塞而被放入该锁的AQS阻塞队列里面。上图是ReentrantLock类图结构,通过类图可以对ReentrantLock内部有个大致的了解。ReentrantLock是使用AQS来实现的,并且根据参数来决定内部是一个公平锁还是非公平锁。// 默认是非公...

2019-11-29 17:11:43 239

原创 Java并发编程:AQS概述

1 AQS 锁的底层支持AQS的全称是AbstractQueuedSynchronizer,抽象同步队列。ReentrantLock底层使用了AQS(内部静态类Sync实现了AQS),ThreadPoolExecutor底层也是用了AQS(内部类Worker实现了AQS)。上类图可以看处,AQS是一个FIFO的双向队列,其内部通过结点head和tail记录队首和队尾元素。1.1 内部静态类N...

2019-11-27 18:16:39 627

原创 Java并发编程:ScheduledThreadPoolExecutor源码解析

1 ScheduledThreadPoolExecutor类图ScheduledThreadPoolExecutor继承了ThreadPoolExecutor并实现了ScheduledExecutorService接口。线程池队列是DelayedWorkQueue,是一个延迟队列。ScheduledFutureTask是具有返回值的任务,继承自FutureTask。FutureTask的内部有...

2019-11-14 14:48:47 232

原创 Java并发编程:ThreadPoolExecutor源码解析

1 介绍线程池主要解决两个问题:一是当执行大量异步任务时线程池能够提供较好的性能。二是线程池提供了一种资源限制和管理的手段,比如可以限制线程的个数,动态增加线程数。2 ThreadPoolExecutor类图高清图请点击Integer类型用32位二进制表示,其中高三位表示线程池状态,后面29位用来记录线程池线程个数。 // 默认是Running状态,线程个数为0 private f...

2019-09-29 08:30:11 226

原创 并发编程的基础知识(二)

1 什么是伪共享为了解决计算机系统中主内存与CPU之间运行速度差的问题,会在CPU与主内存之间添加一级或者多级高速缓冲存储器(Cache)。这个Cache一般是被集成到CPU内部的,所以也称为CPU Cache。图1-1是两级Cache结构示意图。在Cache内部是按行进行存储的,其中每一行称为一个Cache行。Cache行是Cache与主内存进行数据交换的单位,Cache行的大小一般为2的...

2019-09-26 11:14:26 169

原创 并发编程的基础知识(一)

1 什么是多线程并发笔者首先阐述两个概念,什么是并行和并发。并发是指同一时间段内多个任务同时都在执行,并且都没有执行结束。并行是在单位时间内多个任务同时在执行。并发强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以并发的多个任务在单位时间内不一定同时在执行。在单CPU的时代多任务是并发执行的,这是因为单个CPU同一时间只能执行一个任务。在单CPU时代,多任务是共享一个C...

2019-09-24 17:37:56 216

原创 深入浅出MySQL索引(二)

1 覆盖索引1.1 回表先搜索二级索引(非主键索引),找到主键,再到主键索引树的过程,称为回表。1.2 问题导入在下面这个表T中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行?create table T (id int primary key,k int NOT NULL DEFAULT 0, ...

2019-09-24 10:38:58 210

原创 深入浅出MySQL索引(一)

1 问题引入首先,笔者在这里明确一点:处理数据都是在内存中进行的,考虑得都是内存中的时间复杂度。如果我们要操作的数据集非常大,大到内存已经没法处理了怎么办?比如数据库表里面上千万条记录。在这种情况下,对数据的处理需要不断从硬盘等存储设备中调入或者调出内存页面。一旦涉及到外部存储设备,关于时间复杂度的计算就会发生很大变化。试想一下,为了要在一个拥有几十万个文件的磁盘里面中查找一个文本文件,读取...

2019-09-23 16:19:05 261

原创 ActiveMQ使用与心得(二):分布式事务

(一)基于ActiveMQ的分布式事务

2019-09-19 16:19:45 1452 2

原创 ActiveMQ使用与心得(一):介绍,配置,使用

(一) 消息队列简单介绍消息队列是分布式系统中的重要组件,主要用于解决应用解耦,异步消息,流量削峰等问题。实现高性能,高可用,可伸缩和最终一致性等。...

2019-08-14 17:45:04 1125

原创 关于MySQL可重复读的理解

(一)问题引入描述问题之前,先理解一下两种锁的概念。共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。排它锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。共享锁和排他锁都属于悲观锁。排他锁又可以可以分为行锁和表锁。MySQL常...

2019-08-07 14:26:00 22625 18

原创 浅谈JVM

浅谈JVMJVM内存布局规定了Java在运行过程中内存申请、分配和管理的策略,保证了JVM高效稳定的运行。结合JVM虚拟机规范,以及自己对JVM的理解,与大家讨论一下JVM内存布局。(一)Heap 堆区Heap存储着几乎所有的实例对象,堆内对象由垃圾回收器自动回收,堆区由各子线程共享使用。显而易见,堆区是内存区域中所占内存最大的。如果没有节制的创建对象,容易消耗完所有空间,产生OutOfM...

2019-08-01 17:53:57 594

原创 HttpClient连接池及重试机制

(一)HttpClient简介HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,基于标准的java语言。功能介绍支持HTTP和HTTPS协议实现了HTTP的方法,GET,POST,PUT,DELETE等方法。连接管理器支持多线程的应用。可以设置连接超时...

2019-07-30 16:50:47 5905 3

空空如也

空空如也

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

TA关注的人

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