自定义博客皮肤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)
  • 资源 (1)
  • 收藏
  • 关注

原创 jstat使用教程

Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。这个工具是纯命令行的,也就是说它没有图形界面;

2023-06-26 20:10:15 2307

原创 superset连接clickhouse不显示列名,时区有问题

superset1.3.2连接clickhouse不显示列名,时区有问题

2022-08-05 17:21:58 734 3

转载 JVM性能调优

JVM调优目标:使用较小的内存占用来获得较高的吞吐量或者较低的延迟。程序在上线前的测试或运行中有时会出现一些大大小小的JVM问题,比如cpu load过高、请求延迟、tps降低等,甚至出现内存泄漏(每次垃圾收集使用的时间越来越长,垃圾收集频率越来越高,每次垃圾收集清理掉的垃圾数据越来越少)、内存溢出导致系统崩溃,因此需要对JVM进行调优,使得程序在正常运行的前提下,获得更高的用户体验和运行效率。这里有几个比较重要的指标:内存占用:程序正常运行需要的内存大小。延迟:由于垃圾收集而引起的程序停顿时间。

2021-10-15 16:38:54 213

转载 JVM运行原理及优化

我们写好的代码,是要通过JVM才能运行的JVM 想要执行一个类,首先要加载类,在加载类之前,需要先编译成字节码class 文件然后就执行类的加载过程,JVM 加载类的话,需要类加载器类加载器是分层级的,遵循双亲委派机制,最上层是Bootstrap ClassLoder,加载java的核心类库,加载java安装目录下的lib目录的class文件第二层是Ext ClassLoder,加载一些java的其他类库,加载java安装目录下的lib/ext目录下的class第三层是Application.

2021-10-14 15:59:05 390

转载 MySQL 内核原理分析(一)

学一个技术,我们先要 跳出来,看整体,先要在脑中有一个这个技术的全貌。然后再 钻进去,看本质,深入的研究细节。这样方便我们建立一个立体的知识网络。不然单学多个知识点,是串不起来的。不容易记住,理解也不会深刻。所以,我们先把 MySQL 拆解一下,看看内部有哪些组件,我们 Java系统执行一条SQL,MySQL的内部是如何运作,给我们返回结果的。我们先从我们访问数据库说起我们想要查询数据库,首先得建立网络连接MySQL 驱动负责建立网络连接,然后请求 MySQL 数据库其实就是创建了一个数据库连.

2021-10-14 15:29:42 182

转载 Java 并发编程总结

并发编程有三大特性,原子性、有序性、可见性。我们先通过volatile 了解下,为什么volatile 能保证并发编程的有序性和可见性 而不能保证原子性。先介绍下什么是 可见性、原子性、有序性可见性可见性就是,一个线程修改了一个变量的值,另外一个线程立刻可以感知到。是由CPU缓存导致的可见性问题并发编程为什么会有可见性的问题?因为CPU是有自己的缓存的,CPU执行计算时,会把变量从内存加载到CPU缓存计算,之后再对这个变量计算就不会再从缓存加载了。这么设计的原因是,CPU从内存加载数

2021-10-14 14:43:11 161

转载 Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)

重量级锁上篇文章中向大家介绍了Synchronized的用法及其实现的原理。现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchronized效率低的原因。因此,这种依赖于操作系统Mutex Lock所实现的锁我们称之为“重量级锁”。JDK中对Synchr

2021-10-14 11:18:03 220

转载 Java并发编程:Synchronized及其实现原理

Synchronized的基本使用Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。从语法上讲,Synchronized总共有三种用法:(1)修饰普通方法(2)修饰静态方法(3)修饰代码块接下来我就通过几个例子程序来说明一下这三种使用方式(为了便于比较,三段代码除了Synchronized的使用方式不同以外,其他基本保持一致

2021-10-14 10:43:11 64

转载 Java 并发编程:核心理论

并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。在此基础上,我们会进一步分析java.util.concurrent包的工具类,包括其使用方式、实现源码及其背后的原理。本文是该系列的

2021-10-14 10:35:07 80

原创 JDK动态代理实现原理

之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白,比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,最近闲下来,看了源码终于吧这些问题弄清楚了。废话不多说,先看一下如何使用JDK动态代理:接口public interface HelloService { /** * description: 目标对象 * * @modified liuxq@isyscore.com * @date 2021-10

2021-10-11 15:58:40 146

原创 Mac安装brew

Mac 安装brew出现curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.githubusercontent.com:443安装命令/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"出现了错误curl: (35) LibreSSL SSL_connect: SSL_E

2021-10-10 16:49:18 317

原创 Redis为什么是单线程、及高并发快

redis是基于内存的,内存的读写速度非常快;redis是单线程的,省去了很多上下文切换线程的时间;单线程不需要锁,避免了竞争redis使用多路复用技术,可以处理并发的连接。详细原因Redis的数据结构并不全是简单的Key-Value,还有list,hash等复杂的结构,这些结构有可能会进行很细粒度的操作,比如在很长的列表后面添加一个元素,在hash当中添加或者删除一个对象。这些操作可能就需要加非常多的锁,导致的结果是同步开销大大增加。总之,在单线程的情况下,就不用去考虑各种锁的问题,不存.

2021-09-17 17:21:34 72

原创 Redis与MySQL双写一致性如何保证

前言面试时被问到Redis与MySQL双写一致性如何保证?这道题其实就是在问缓存和数据库在双写场景下,一致性是如何保证的?本文将跟大家一起来探讨如何回答这个问题。谈谈一致性一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。强一致性 :这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大弱一致性 :这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会

2021-07-17 15:29:07 151

原创 Linux网络I/O模型概述

Linux网络I/O模型概述 Linux内核将所有的外部设备都看成一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符)。 而对一个socket的读写也会有相应的描述符,称为socketfd(socket描述符),描述符就是一个数字,它指向内核中的一个结构体(文件路径,数据区等属性)。 UNIX提供了5种I/O模型,分别如下:阻塞I/O模型 最常用的I/O模型,缺省情况下,所有文件操作都是阻塞的。 我们以

2021-07-14 11:55:42 89

原创 I/O模型概述

什么是同步?同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行。什么是异步?异步就是:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行不会导致整个流程的暂时等待举个简单的例子,假如有一个任务包括两个子任务A和B,对于同步来说,当A在执行的过程中,B只有等待,直至A执行完毕,B才能执行;而对于异步就是A和B可以并发地执行,B不必等待A执行完毕之后再执行,这样就不会由于A的执行导致整

2021-07-14 11:47:17 60

原创 SpringMVC 流程

用户发送请求至前端控制器DispatcherServlet; DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle; 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有)一并返回给DispatcherServlet; DispatcherServlet 调用 HandlerAdapter处理器适配器; HandlerAdapter 经过适配调用 具体处理器(Handler,也..

2021-03-01 15:04:59 59

原创 MySQL too many connections(太多连接)问题排查

1. 查看mysql设置的最大连接数,默认是100show variables LIKE '%max_connections%';2. 查询所有连接到mysql的客户端IPSELECT substring_index(host, ':',1) AS host_name,state,count(*) FROM information_schema.processlist GROUP BY state,host_name;3 . 查看数据库所有客户端执行时间,以及状态show full

2021-02-03 16:47:47 655

原创 Spring源码解读之执行流程

Spring源码解读之执行流程1、加载resources下面的context.xml配置文件public static void main(String[] args){ ClassPathXmlApplicationContext application = new ClassPathXmlApplicationContext("classpath:context.xml");...

2019-08-22 10:19:37 639

原创 Spring源码解读之ClassPathXmlApplicationContext(根据Spring最新版本)

下图为ClassPathXmlApplicationContext 类的继承结构ClassPathXmlApplicationContext的构造方法有:1、public ClassPathXmlApplicationContext()。默认构造方法,创建一个实例2、public ClassPathXmlApplicationContext(ApplicationContext p...

2019-08-21 18:10:55 1124

空空如也

空空如也

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

TA关注的人

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