自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(183)
  • 资源 (1)
  • 收藏
  • 关注

原创 JVM成神之路(十一) -- JVM常用命令解析

3.2 常用命令3.2.1 jps查看java进程The jps command lists the instrumented Java HotSpot VMs on the target system. The command is limited to reporting information on JVMs for which it has the access permissions.3.2.2 jinfo(1)实时查看和调整JVM配置参数The jinfo command

2021-08-16 17:15:25 20873 6

原创 设计模式之观察者模式

简介:当一件事变化时,通知给所有需要知道的人观察者模式主要包括观察者(需要知道的人)和被观察者(被观察的那件事)行为型模式观察者模式属于推的模式,观察者是被动接受的类图:示例:被观察者:import java.util.ArrayList;import java.util.List;/** * 被观察对象 */public class Subject{ // 观察者列表 protected List<Observer> observers = new

2021-09-13 21:41:51 456147

原创 设计模式之工厂模式

工厂模式1、简单工厂模式1.1、定义简单工厂模式(Simple Factory Pattern)是指有一个工厂对象决定创建出哪一种产品类的实例,不属于23种设计模式。简单工厂是产品的工厂1.2、应用场景简单工厂模式适用于工厂类创建的对象较少的场景,且客户端只需要传入工厂参数,对如何创建对象的逻辑不需要关心。1.3、缺点工厂类的职责相对过重,增加新的产品时需要修改工厂类的判断逻辑,违背了开闭原则。不易于扩展过于复杂的产品结构。1.4、实例支付接口规范:public interface

2021-09-13 20:59:50 160519 1

原创 Mysql学习宝典(六) -- 数据库锁表及阻塞的几大常见原因和解决办法

问题说明当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁 相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严重影响应用的正常执行。在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对

2021-09-09 13:32:51 29297

原创 设计模式之单例模式万字长文

单例模式文章目录单例模式一 、单例模式的应用场景二、 单例模式的常见写法2.1 饿汉式单例的2种写法与优缺点2.2 懒汉式单例之简单写法与优缺点2.3 懒汉式单例之双重检查锁写法与优缺点2.4 懒汉式单例之静态内部类写法与优缺点三、 反射是如何破坏单例的?四、 注册式单例4.1 枚举式单例写法与优缺点4.2 容器式单例写法与优缺点五、 序列化是如何破坏单例的?六、 ThreadLocal单例介绍七、单例模式在源码中的应用八、总结1、优点2、缺点3、知识点一 、单例模式的应用场景单例模式(Singlet

2021-09-08 16:52:45 5612

原创 Nacos源码解析 -- 配置中心最全分析

入口当启动springboot项目时,调用SpringApplication.run(…)方法@SpringBootApplication@MapperScan("com.charlotte.gupao.study.logserviceprovider.dubbo.mapper")public class LogServiceProviderApplication { public static void main(String[] args) { SpringApplic

2021-09-08 16:28:42 13169

原创 呕心沥血整理了多线程核心60问<收藏版>,基本可以涵盖多线程全部面试场景

1. 多线程有什么用?1) 发挥多核CPU 的优势随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4 核、8 核甚至 16 核的也都不少见,如果是单线程的程序,那么在双核 CPU 上就浪费了 50%, 在 4 核 CPU 上就浪费了 75%。单核 CPU 上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快, 看着像多个线程"同时"运行罢了。多核 CPU 上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核C

2021-08-25 15:04:33 8681 1

原创 Nacos源码解析 -- 服务注册源码以及服务发现最全分析

public void run() {try {ServiceInfo serviceObj = serviceInfoMap.get(ServiceInfo.getKey(serviceName, clusters)); if (serviceObj == null) { updateServiceNow(serviceName, clusters); executor.schedule(this, DEFAULT_DELAY, TimeUnit.MILLISE

2021-08-23 10:56:58 4275

原创 设计模式之七大设计原则详解

七大设计原则:七大设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特原则、里氏替换原则、合成复用原则Java 有三大特性:封装、继承、多态。而这七大设计原则,更像是对三大特性的一种体现。七大原则并不是分别独立的原则,他们之间是相互有联系的,甚至可以看做是一体的。有时候你为了符合某种原则会无意之间破坏另一个原则有时候你为了符合某种原则还会发现这也符合另外几种原则开闭原则对(类、方法)扩展开放,对修改关闭。开闭原则是七大设计原则中最基础的一个。我觉得开闭很好理解,但是对 扩

2021-08-22 23:09:10 11524 3

原创 Dubbo源码分析(三) -- Dubbo的服务发现源码深入解析4万字长文

前言前面两篇基本上已经对dubbo的SPI,服务发布,注册等功能进行了分析,那么在消费端是如何发现服务,并进行透明的远程调用的呢?带着这个疑问,走入今天的篇章,Dubbo的服务发现服务发现的流程在我们具备的知识体系中,服务的发现应该是会有以下几个步骤的消费端服务启动时,根据服务接口及注解指定的版本,注册中心信息封装成服务名通过配置的注册中心,传入服务名远程获取服务提供者的真实地址为远程服务接口生成代理对象,代理对象保存远程服务的地址和端口调用接口是通过代理对象的方法,通过远程的ip和端口

2021-08-21 23:20:05 18079 4

原创 Dubbo源码分析(二) -- Dubbo中的服务注册源码分析精髓面试点整理

前言在上一篇中,我们已经对Dubbo的SPI机制做了全面的分析,基本上已经了解清楚了Dubbo扩展点的使用方式及其原理,接下再基于Dubbo扩展点的基础之上,我们走入Dubbo源码分析的第二篇,Dubbo中的服务注册服务注册的几个步骤对于RPC框架的服务注册,一般包含了如下的流程:加载服务提供者,可能是通过xml配置的,也可能是通过扫描注解的实例化服务提供者,并以服务接口作为key,实现类作为value存储到一个map容器中开启网络监听将服务提供者的地址路径(ip:port/服务名?参数

2021-08-21 20:52:45 2651

原创 Dubbo源码分析(一) -- Dubbo中的扩展点实现源码分析以及总结

前言Dubbo作为一款开源的,轻量级的Java RPC框架。它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。那么Dubbo是如何提供这样的能力的呢?底层实现是一种怎样的风景?带着疑问,今天我们先来了解Dubbo实现可插拔式插件的设计的基石,走入我们的Dubbo源码分析第一篇-Dubbo扩展点的实现原理。Java中的SPIJDK中的SPI(Service Provider Interface)提供了一种基于接口的扩展机制,主要实现步骤如下:定义一个接口作

2021-08-21 18:12:59 2367 3

原创 Mysql学习宝典(五) -- Mysql性能优化万字长文(慢SQL查询,Explain执行计划,性能调优)

MySQL 性能优化思路和工具一、优化思路​ 作为架构师或者开发人员,说到数据库性能优化,你的思路是什么样的?​ 或者具体一点,如果在面试的时候遇到这个问题:你会从哪些维度来优化数据库,你会怎么回答?​ 我们说到性能调优,大部分时候想要实现的目标是让我们的查询更快。一个查询的动作又是由很多个环节组成的,每个环节都会消耗时间,我们在第一节课讲 SQL 语句的执行流程的时候已经分析过了。​ 我们要减少查询所消耗的时间,就要从每一个环节入手。​二、 连接——配置优化​ 第一个环节是客户

2021-08-20 15:13:29 4317

原创 Mysql学习宝典(四) -- Mysql的事务与锁深入剖析

MySQL 事务与锁详解什么是数据库的事务?什么是事务?​ 事务是数据库最小的工作单元,也就是说我们刚才提到的这些场景,它们是作为一个逻辑单元执行 的,既然是最小的工作单元,意味着它是不可再分的。这里面可能包含了一个或者一系列的 DML 语句。 单条 DDL(create drop)和 DCL(grant revoke)也会有事务。哪些存储引擎支持事务?​ InnoDB,NDB事务的四大特性?​ 原子性,Atomicity,意味着我们对数据库的一系列的操作,要么都是成功,要么都是失败,不

2021-08-19 17:43:24 124214 2

原创 Mysql学习宝典(三) -- Mysql索引原理以及应用解析并对数据结构进行推演

MySQL 索引原理详解一、 索引是什么?1.1. 索引是什么 S​ 当一张表有 500 万条数据,在没有索引的 name 字段上执行一个查询:select * from user_innodb where name ='jim';​ 如果 name 字段上面有索引呢?ALTER TABLE user_innodb DROP INDEX idx_name; ALTER TABLE user_innodb ADD INDEX idx_name (name);​ 索引的创建是需要消耗时

2021-08-18 17:00:51 4722

原创 Mysql学习宝典(二) -- 从更新语句执行流程引出的Mysql各种日志

三、一条更新SQL 是如何执行的?​ 在数据库里面,我们说的 update 操作其实包括了更新、插入和删除。更新流程和查询流程有什么不同呢?​ 基本流程也是一致的,也就是说,它也要经过解析器、优化器的处理,最后交给执行器。​ 区别就在于拿到符合条件的数据之后的操作。​ 首先,在 InnoDB 里面有个内存的缓冲池(buffer pool)。我们对数据的更新,不会每次都直接写到磁盘上,因为 IO 的代价太大了,所以先写入到 buffer pool 里面。内存的数据页和磁盘数据不一致的时候,我们

2021-08-18 16:20:47 26268

原创 Mysql学习宝典(一) --Mysql存储各大存储引擎以及Mysql体系架构

Mysql架构与内部模块​ 演示环境:​ MySQL 5.7​ 存储引擎:InnoDB一、一条查询SQL是如何执行的?​ 程序或者工具要操作数据库,第一步跟数据库建立连接。1、通信协议​ 首先,MySQL 必须要运行一个服务,监听默认的端口(3306)。通信协议MySQL 支持多种通信协议。第一个就是 TCP/IP 协议,编程语言的连接模块都是用 TCP 协议连接到 MySQL 服务器的,比如 mysql-connector-java-x.x.xx.jar。第二种是 Un

2021-08-17 17:57:39 3563 1

原创 JVM成神之路(十三) -- JVM常见问题剖析

4.4常见问题(1)内存泄漏与内存溢出的区别内存泄漏是指不再使用的对象无法得到及时的回收,持续占用内存空间,从而造成内存空间的浪费。内存泄漏很容易导致内存溢出,但内存溢出不一定是内存泄漏导致的。(2)young gc会有stw吗?不管什么 GC,都会发送 stop-the-world,区别是发生的时间长短。而这个时间跟垃圾收集器又有关系,Serial、PartNew、Parallel Scavenge 收集器无论是串行还是并行,都会挂起用户线程,而 CMS和 G1 在并发标记时,是不会挂起用

2021-08-16 17:25:46 3545

原创 JVM成神之路(十二) -- Jvm性能优化指南

# 性能优化JVM的性能优化可以分为代码层面和非代码层面。在代码层面,大家可以结合字节码指令进行优化,比如一个循环语句,可以将循环不相关的代码提取到循环体之外,这样在字节码层面就不需要重复执行这些代码了。在非代码层面,一般情况可以从内存、gc以及cpu占用率等方面进行优化。注意,JVM调优是一个漫长和复杂的过程,而在很多情况下,JVM是不需要优化的,因为JVM本身已经做了很多的内部优化操作。那今天我们就从内存、gc以及cpu这3个方面和大家一起探讨一下JVM的优化,但是大家要注意的是不要为了调优

2021-08-16 17:23:09 3637 1

原创 JVM成神之路(十) -- JVM常见参数详解

3.1 JVM参数经过前面的各种分析学习,我们知道了关于JVM很多的知识,比如版本信息,类加载,堆,方法区,垃圾回收等,但是总觉得心里不踏实,原因是没看到实际的一些东西。所以这一章节,咱们就好好来聊一聊关于怎么将这些内容进行直观地展示在我们面前,包括怎么进行相应的一些设置。OK,let’s go!3.1.1 标准参数(以-开头)-version-help-server-cp3.1.2 非标准参数也就是在JDK各个版本中可能会变动X参数(以-X开头)-Xint 解释执

2021-08-16 16:43:02 3654

原创 JVM成神之路(九) -- 垃圾回收常见面试题

GC常见面试问题9.1 垃圾收集器分类串行收集器->Serial和Serial Old只能有一个垃圾回收线程执行,用户线程暂停。适用于内存比较小的嵌入式设备。并行收集器[吞吐量优先]->Parallel Scanvenge、Parallel Old多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。适用于科学计算、后台处理等若交互场景。并发收集器[停顿时间优先]->CMS、G1用户线程和垃圾收集线程同时执行(但并不一定是并行的,可能是交替执行的),垃圾收

2021-08-16 16:40:29 3577

原创 JVM成神之路(八) -- 垃圾收集器深入解析

2.5.5 垃圾收集器如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。2.5.5.1 SerialSerial收集器是最基本、发展历史最悠久的收集器,曾经(在JDK1.3.1之前)是虚拟机新生代收集的唯一选择。它是一种单线程收集器,不仅仅意味着它只会使用一个CPU或者一条收集线程去完成垃圾收集工作,更重要的是其在进行垃圾收集的时候需要暂停其他线程。优点:简单高效,拥有很高的单线程收集效率缺点:收集过程需要暂停所有线程算法:复制算法适用范围:新生代应用:Clie

2021-08-16 16:23:06 894

原创 JVM成神之路(七) -- 垃圾回收算法

2.5 Garbage Collect(垃圾回收)之前说堆内存中有垃圾回收,比如Young区的Minor GC,Old区的Major GC,Young区和Old区的Full GC。但是对于一个对象而言,怎么确定它是垃圾?是否需要被回收?怎样对它进行回收?等等这些问题我们还需要详细探索。因为Java是自动做内存管理和垃圾回收的,如果不了解垃圾回收的各方面知识,一旦出现问题我们很难进行排查和解决,自动垃圾回收机制就是寻找Java堆中的对象,并对对象进行分类判别,寻找出正在使用的对象和已经不会使用

2021-08-16 16:19:26 1256

原创 JVM成神之路(六) -- 各种内存溢出详解

各种内存溢出详解(附代码)在我们开发过程中,经常会遇到各种各样的内存溢出的情况,所以,我在此准备了几个Demo。以此来验证一下。2.4.5.2 堆内存溢出代码@RestControllerpublic class HeapController { List<Person> list=new ArrayList<Person>(); @GetMapping("/heap") public String heap(){ while(t

2021-08-16 16:16:35 3618

原创 JVM成神之路(五)-- 内存模型与对象创建过程

5.1 栈指向堆如果在栈帧中有一个变量,类型为引用类型,比如Object obj=new Object(),这时候就是典型的栈中元素指向堆中的对象。5.2 方法区指向堆方法区中会存放静态变量,常量等数据。如果是下面这种情况,就是典型的方法区中元素指向堆中的对象。private static Object obj=new Object();5.3 堆指向方法区What?堆还能指向方法区?注意,方法区中会包含类的信息,堆中会有对象,那怎么知道对象是哪个类创建的呢?思考:一个对象怎么

2021-08-16 16:09:23 3391

原创 JVM成神之路(四)--运行数据区与栈帧结构

2.3 运行时数据区(Run-Time Data Areas)在装载阶段的第(2),(3)步可以发现有运行时数据,堆,方法区等名词(2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构(3)在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口说白了就是类文件被类装载器装载进来之后,类中的内容(比如变量,常量,方法,对象等这些数据得要有个去处,也就是要存储起来,存储的位置肯定是在JVM中有对应的空间)2.3.1 官网概括官网:http

2021-08-14 16:26:27 3651 3

原创 JVM成神之路(三)--类加载机制以及类加载器

关于文章JVM系列每一篇文章我都录制了对应的视频,由于CSDN不能直接发送视频资料,如果想要作者录制的免费视频资料,可以加QQ:3139882589。这个是作者QQ,如果有问题想跟作者咨询,也可以加到我们的java技术交流QQ群。加作者请备注暗号 [CSDN]类加载机制类加载机制本质上就是虚拟机把Class文件加载到内存,并对数据进行校验,转换解析和初始化,形成可以虚拟机直接使用的Java类型,即java.lang.Class。同样,我们去官网查看下,还是JDK8版本我们可以看见Loading

2021-08-14 16:05:19 3976 4

原创 JVM成神之路(二)-- JDK,JER与JVM的关系

关于文章JVM系列每一篇文章我都录制了对应的视频,由于CSDN不能直接发送视频资料,如果想要作者录制的免费视频资料,可以加QQ:3139882589。这个是作者QQ,如果有问题想跟作者咨询,也可以加到我们的java技术交流QQ群。加作者请备注暗号 [CSDN]初识JVM我们从这篇文章开始就要正式开始学习JVM了,我们学习一个知识,肯定首先要去最权威的地方进行学习,所以我们学习的节奏是跟着官网来进行学习,同时我们学习的是主流的JDK8这样的一个版本。Java官网:https://docs.oracl

2021-08-14 15:44:02 1305 3

原创 JVM成神之路(一)---咱们为什么要学习JVM

关于作者作者介绍Carl,前科大讯飞软件开发工程师。上海国民集团健康科技有限公司架构师,武汉颐道圆信息科技有限公司架构师。熟悉Java、Spring、Spring Boot、Spring Cloud、Redis、MyBatis、MQ、数据结构、设计模式等等,开发过诸多大型项目,独立架构过单日接口调用量过亿的企业级项目。有丰富的项目经验。热爱编程,乐于分享。关于文章JVM系列每一篇文章我都录制了对应的视频,由于CSDN不能直接发送视频资料,如果想要作者录制的免费视频资料,可以加QQ:313988258

2021-08-14 15:07:05 3488 3

转载 分布式事务中的解决方案,你都会了吗

点击上方 "JAVA开发大本营"关注,置顶或星标一起学习每天上午08点00分,我们不见不散导读分布式事务,微服务至关重要的一环,面试必问。每日鸡汤愿跑起来被拌倒无数次...

2020-05-03 08:00:00 355

转载 (流程图 + 代码)带你实现单点登陆SSO

点击上方 "JAVA开发大本营"关注,置顶或星标一起学习每天上午08点00分,我们不见不散导读努力成为架构师的你,别努力错方向了。每日鸡汤坚持就是胜利,学无止境。责任...

2020-04-29 08:00:00 457

转载 一个不可思议的MySQL慢查分析与解决

点击上方 "JAVA开发大本营"关注,置顶或星标一起学习每天上午08点00分,我们不见不散导读努力成为架构师的你,却连架构师的分类都不清楚,别努力错方向了。每日鸡汤坚...

2020-04-28 08:00:00 224

转载 微服务之间的最佳调用方式,你会了吗

点击上方 "JAVA开发大本营"关注,置顶或星标一起学习每天上午08点00分,我们不见不散导读微服务的调用方式,你认可这套吗?每日鸡汤坚持就是胜利,学无止境。责任编...

2020-04-14 08:00:00 488

转载 用『逐步排除法』定位Java服务线上系统性故障

点击上方 "JAVA开发大本营"关注,置顶或星标一起学习每天上午08点00分,我们不见不散导读由于硬件问题、系统资源紧缺或者程序本身的BUG,Java服务在线上不可...

2020-04-10 08:00:00 455

原创 努力成为架构师的你,却连架构师的分类都不清楚

点击上方 "JAVA开发大本营"关注,置顶或星标一起学习每天上午08点00分,我们不见不散导读努力成为架构师的你,却连架构师的分类都不清楚,别努力错方向了。每日鸡汤...

2020-04-06 08:00:00 1037 1

原创 感谢各位的支持,本账号留言功能已开通

本号从我正式下定决心好好运营已经快大半年了,中间零零总总给大家推送了一些文章,我一直在思考,但是因为没有留言功能,给我们之间的沟通带来了很不好的体验,所以我狠一狠心,掏出了我节省半年的...

2020-04-02 10:44:29 426

转载 面试必问:对象不再使用时,为什么要赋值为 null ?

点击上方 "JAVA开发大本营"关注,置顶或星标一起学习每天晚上10点00分,我们不见不散导读许多Java开发者都曾听说过“不使用的...

2020-03-25 22:00:00 194

转载 Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!...

点击上方 "JAVA开发大本营"关注,置顶或星标一起学习每天晚上10点00分,我们不见不散导读去年我们项目做了微服务1.0的架构转型...

2020-03-19 22:00:00 1093

转载 Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!

点击上方 "JAVA开发大本营"关注,置顶或星标一起学习每天晚上10点00分,我们不见不散导读去年我们项目做了微服务1.0的架构转型,但是服务监控这块却没有跟上。我...

2020-03-19 22:00:00 307

转载 springboot与redis携手完成接口幂等性校验

点击上方 "JAVA开发大本营"关注,置顶或星标一起学习每天晚上10点00分,我们不见不散导读我们常常会遇到一些幂等性问题,怎么进行...

2020-03-18 22:00:00 266

JVM成神之路.rar

这个视频是作者自己录制的一个JVM视频,总共6小时左右,该视频详细的描述了JVM整个体系体系结构以及对应的笔记,笔记54页PDF

2021-08-14

空空如也

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

TA关注的人

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