自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JAVA知识体系之问题处理篇(七)——上游传参错误导致Redis集群某个节点缓存命中率低(缓存击穿)

还是上文提到的核心应用,为了提升系统查询性能,我们在观察缓存命中率时,发现整体命中率都比较高,但是其中04集群的某个节点(99:36382)命中率一直比其他节点的命中率低。缓存命中率是我们非常关注的一个点,因为每一次未命中的请求都意味着对数据库的一次压力。

2022-10-13 17:56:56 497 1

原创 JAVA知识体系之问题处理篇(六)——Jedis批量操作API导致Redis Cluster缓存热点问题

还是上文提到的核心应用,为了保障活动流量,我们对该客户系统进行扩容,应用节点由100扩容到300,过一段时间后,发现Redis监控数据CPU使用率存在热点异常。图中100:36408节点的CPU使用率7.32%,其他只有0.8%,差了近10倍。拉到模拟生产压测时的数据,发现该节点比其他节点稍高一些,但是并没有特别大差距。但是到了活动当天,100:36408节点的CPU使用率达到了20%,相比于其他节点平均值都在2%-3%,还是差了将近10倍。如果任由问题持续,整个缓存将因为热点问题导致部分节点不可用。

2022-10-10 17:01:14 806

原创 JAVA知识体系之问题处理篇(五)——Gson日期序列化同步锁导致核心应用线程池满

公司生产上核心客户系统涉及整个用户信息的管理和维护,QPS在万级别,是非常典型的读多写少的场景。这个系统一直有一个遗留问题:间断性出现某个节点Dubbo线程池满,过一段时间后又自动恢复。

2022-09-28 17:28:29 808

原创 JAVA知识体系之问题处理篇(四)——开放平台JVM优化

开放平台2.0 GC(ParNew+CMS)会出现频率飙升怀疑接口请求量增加,导致内存占用比较多,造成年轻代频繁进行young gc,但是查看开放平台的请求并没有发现流量的突增。所以并没有什么有效的结论。尝试替换成G1垃圾收集器替换掉(ParNew+CMS),对应gc的参数如下:-Xms4g-Xmx4g-Xss512k-XX:MetaspaceSize=256m-XX:MaxMetaspaceSize=512m-XX:MaxDirectMemorySize=1536m-XX:NativeMe

2022-06-05 19:19:50 263 1

原创 JAVA知识体系之问题处理篇(三)——用错CompletionService导致的内存泄漏问题

  某应用线上运行较长时间后出现Full GC告警,重启后恢复正常。  由于之前基本上半个月就会发一次版,导致问题一直没有暴露出来,这次较长时间没有对应用进行发版(或重启)。根据现象初步怀疑是由内存泄漏引起。  拉取dump文件分析。发现线程池ConsumerQueryExecuteImpl和NoAccQb2cQueryExecuteImpl引用了大对象,引用的队列LinkedBlockingQueue和FutureTask都存在数量极大的Object,基本证实是由内存泄漏引起。  分析代码,发现Co

2022-06-05 17:26:17 646

原创 JAVA知识体系之设计模式篇

目录1、设计原则1.1 开闭原则1.2 单一职责原则1.3 里式替换原则1.4 接口隔离原则1.5 最小知道原则(迪米特法则)1.6 依赖倒置原则2、单例模式2.1 单例模式概述2.2 实现方式2.2.1 饿汉模式2.2.2 懒汉模式2.2.3 加锁懒汉模式2.2.4 双重检查锁2.2.5 静态内部类2.2.6 枚举3、工厂模式3.1 简单工厂模式3.2 工厂方法模式4、代理模式4.1 静态代理4.2 动态代理4.2.1 JDK动态代理4.2.2 CGLIB动态代理5、策略模式6、模板方法模式7、原型模式8

2022-05-29 21:48:05 142

原创 Java技术体系之框架原理篇(一)——Spring源码解析

目录1、IoC:从配置文件到BeanDefinition1.1 初始化spring容器入口(以xml为例)1.2 根据配置文件路径定位配置文件并设置到configLocations1.3 容器启动核心方法1.4 预处理1.5 创建BeanFactory1.5 通过BeanDefinitionReader加载配置文件到内存中1.6 将已加载的Dom对象注册到BeanDefinition容器中(委派模式)1.7 给BeanFactory做一些初始化赋值操作1.8 在特定的ApplicationContext实现

2022-05-26 00:14:52 359

原创 Java技术体系之基础能力篇(六)——并发编程原理解析

目录1、线程概述1.1 线程的定义1.2 多线程的优势1.2.1 更多的处理器核心1.2.2 更快的响应时间1.3 多线程的挑战1.3.1 上下文切换1.3.2 死锁1.3.3 资源限制1.4 线程的状态1.5 线程的终止1.5.1 存在循环的线程1.5.2 interrupt方法1.5.3 处于阻塞状态下的线程中断1.6 线程的通信2、并发编程的安全性2.1 XXX2.2 XXX2.3 XXX3、synchronized关键字3.1 synchronized的基本应用3.2 synchronized的原理

2022-05-14 00:06:58 1815 1

原创 Java技术体系之基础能力篇(五)——深入理解JVM原理

1、Java概述1.1 Java技术体系  从广义上讲,Kotlin、Clojure、JRuby、Groovy等运行于Java虚拟机上的编程语言及其相关的程序都属于Java技术体系中的一员。如果仅从传统意义上来看,JCP官方所定义的Java技术体系包括了以下几个组成部分:Java程序设计语言各种硬件平台上的Java虚拟机实现Class文件格式Java类库API来自商业机构和开源社区的第三方Java类库  以上是根据Java各个组成部分的功能来进行划分,如果按照技术所服务的领域来划分,或者

2022-05-01 15:48:14 1353 1

原创 JAVA技术体系之分布式篇(六)——MySQL数据库

1、一条查询语句的执行流程1.1 连接1.2 查询缓存1.3 解析器(Parser)1.4 预处理器(Preprocessor)1.5 查询优化器(Query Optimizer)1.6 存储引擎(Store Engine)1.7 执行引擎(Execution Engine)1.8 Mysql基本架构2、InnoDB总体架构2.1 InnoDB内存结构2.1.1 Buffer Pool2.1.2 LRU2.1.3 Change Buffer2.1.4 Log Buffer2.1

2022-03-05 16:07:37 2571

原创 JAVA知识体系之问题处理篇(二)——mysql时间毫秒四舍五入导致的生产问题

1、问题发现  近期,生产上订单系统出现了一笔问题交易:一笔订单调用支付系统进行支付,支付系统返回处理中订单系统异步查询支付结果,被告知订单不存在导致订单失败。最终支付系统支付成功,订单系统启动异常处理机制撤销该支付。2、背景描述  调用链为业务系统->订单系统下单->支付系统支付。  订单系统和支付系统都有幂等的要求,且幂等主键为上游请求系统、请求流水号、请求日期(截取自请求时间)。当查询时传入的请求三要素与下单/支付传入的请求三要素不同时则无法查询到订单。3、问题追踪

2021-10-21 10:21:39 659

原创 JAVA知识体系之问题处理篇(一)——记一次神奇的mysql死锁排查过程

1、问题  由于公司业务和技术性需求,新上线一个独立支付系统,其中部分退款功能在进行并发测试时出现偶发性mysql死锁:[2021-09-22 15:46:18,760][c.b.a.s.i.ReverseServiceImpl][thread0][ERROR][816fbe90-a4fa-4dea-b52c-719f1f2a8c37][]call [ReverseServiceImpl][refund] EXCEPTION:Cause[org.springframework.dao.DeadlockL

2021-09-22 19:47:43 411 1

原创 JAVA技术体系之分布式篇(四)——Redis缓存

1、Redis概述1.1 XXX1.2 XXX2、Redis数据类型2.1 XXX2.2 XXX2.3 XXX3、Redis核心原理3.1 XXX3.2 XXX3.3 XXX4、Redis分布式实现4.1 XXX4.2 XXX4.3 XXX5、Redis常见问题及解决方案5.1 XXX5.2 XXX5.3 XXX6、Redis6.0新特性6.1 XXX6.2 XXX6.3 XXX  ...

2021-06-15 23:31:23 2669

原创 JAVA技术体系之分布式篇(八)——ShardingSphere-jdbc分库分表

0、写在前面  当笔者试图收集ShardingSphere-jdbc相关信息时,发现ShardingSphere官网做了非常完善的内容总结,并且通俗易懂,符合国人阅读习惯。基于此,本文大多数摘录自ShardingSphere官网,提炼出笔者认为较为重要的内容,有兴趣的同学可以前往官网获取更为完善的信息。  https://shardingsphere.apache.org/document/current/cn/overview/1、概述1.1 背景  传统的将数据集中存储至单一数据节点的解决方案

2021-05-25 20:37:29 1886

原创 JAVA技术体系之分布式篇(五)——Kafka消息中间件

1

2021-04-19 02:10:40 5833 2

原创 JAVA知识体系之JVM篇

一、从源码到类文件  当我们写好一个java文件,如下图:class Person{ private String name; private int age; private static String address; private final static String hobby="Programming"; public void say(){ System.out.println("person say..."); } public int calc(int

2020-11-11 18:31:35 507

原创 JAVA知识体系之设计模式篇(二)——原型模式

1、原型模式概述  原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。——百度百科2、原型模式实现方式(浅克隆和深克隆)1、Work类package com.parttern.prototype;import lombok.Getter;import lombok.Setter;import lombok

2020-08-13 14:28:17 132

原创 JAVA知识体系之设计模式篇(一)——单例模式

1、单例模式概述  单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。——百度百科2、单例模式分类及特点注意:一般的单例在序列化和反射攻击的情境下会被破坏单例,即可能生成多个实例,也可以用其他方法解决,以静态内部类为例防止反射攻击方法: private StaticInner(){ //构造器判断,防止反射攻

2020-05-17 16:46:28 232

原创 JAVA知识体系之基础篇(一)——异常类

1、异常概述  程序在编写运行过程中,难免会出现意料之外的错误,异常为程序退出提供了安全通道,提高程序的健壮性和容错性。2、异常的结构  Throwable是所有异常的父类,分为异常Exception和错误Error。  Error是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题,如OutOfMemoryError、StackOverflowError。Exception是在程序层级发生的,并且可以由

2020-05-15 23:36:01 169

原创 JAVA知识体系之工具篇(一)——IDEA常用快捷键

IDEA常用快捷键一、引子二、快捷键一、引子工欲善其事必先利其器,学习JAVA,一个好的IDE是必不可少的。而熟练掌握一个IDE的快捷键,不仅可以大大加快你的开发效率、提升开发质量,而且日常工作中还可以不显山露水地装装逼,可谓一举多得。IDEA作为目前非常火热且好评率较高的IDE,具有较高的学习价值。本文主要记录笔者在学习使用IDEA过程中使用到一些较为常用的快捷键,其他价值不高的快捷键并没...

2020-04-24 23:18:44 222

空空如也

空空如也

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

TA关注的人

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