自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

只有变秃 才能变强

书写是对思维的缓存

  • 博客(359)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 分析定位Java问题利器: MAT 和 Arthas 使用

今天,介绍如何使用JVM堆转储的工具MAT来分析OOM问题,以及如何使用全能的故障诊断工具Arthas来分析、定位高CPU问题。

2024-07-18 17:22:35 777

原创 定位应用问题,排错套路很重要

对于下游服务,不能想当然就认为是我们的Java程序,比如在拓扑上可能Nginx代理的是Kubernetes的Traefik Ingress,链路是Nginx->Traefik->应用,如果一味排查Java程序的健康情况,那么始终不会找到根因。第二,定位问题要先对原因进行大致分类,比如是内部问题还是外部问题、CPU相关问题还是内存相关问题、仅仅是A接口的问题还是整个应用的问题,然后再去进一步细化探索,一定是从大到小来思考问题;第一,分析问题一定是需要依据的,靠猜是猜不出来的,需要提前做好基础监控的建设。

2024-07-18 16:43:54 753

原创 业务开发常见的坑之-缓存设计

因为缓存中的数据一直在所以一开始没什么问题,但半年后的一天缓存中数据过期了,就从数据库中查询到了空数据加入缓存,爆发了大面积的事故。我们看到,“先更新数据库再删除缓存,访问的时候按需加载数据到缓存”的策略是最为妥当的,并且要尽量设置合适的缓存过期时间,这样即便真的发生不一致,也可以在缓存过期后数据得到及时同步。我们看到,“先更新数据库再删除缓存,访问的时候按需加载数据到缓存”的策略是最为妥当的,并且要尽量设置合适的缓存过期时间,这样即便真的发生不一致,也可以在缓存过期后数据得到及时同步。

2024-07-18 15:07:26 970

转载 架构师日记-从技术角度揭露电商大促备战的奥秘

好文推荐:

2023-11-09 10:56:25 138

原创 ITSource 分享 第6期【网址云收藏系统】

系统提供了 两种网页收集工具,一个是 bookmarklet,一个是浏览器扩展插件。数据库初始化语句: 打开 navicat,导入数据库SQL 脚本,执行即可。

2023-10-29 21:54:21 235

原创 ITSource 分享 第5期【校园信息墙系统】

服务端+管理后台+小程序构建后文件 https://github.com/panji-tech/campus-example。web 端: https://github.com/panji-tech/nuxt_campus_example。小程序源码: https://github.com/panji-tech/uni-app_campus_web。本项目设计系统较多, 分为服务端,管理后台端,小程序端,web端等,部署起来稍微有点难度。还有表白墙,买卖墙,综合墙等,并且分类可以自定义配置.

2023-10-29 20:08:55 297

原创 ITSource 分享 第4期【简洁的问卷调查系统】

链接:https://pan.baidu.com/s/1Cxd6pujaiab23sAI9dVpvw?https://itguang.lanzoub.com/b02x76ued 密码:8ysj。目前只有单选,多选,简答三种问题类型,并且可以选择手动结束和自动结束模式。登录: 输入账号密码: admin 123456 即可登录成功!以上环境需要准备好, 在自己的本地搭建好,方可进行下面步骤。Idea 运行后端项目,看到以下信息,表示运行成功。数据库 : MYSQL 8.x,

2023-10-24 19:24:23 125

原创 ITSource 分享 第3期【在线个人网盘】

配置 FTP 服务器相关配置即可,如果你的用户名密码,和我上面要求的一样,这里可以不用配置。如果你想要qq 登录和发邮件的功能,需要配置qq 邮箱相关配置,这里就不再介绍了。此模块可以上传文件,默认上传到根目录,可以点击右侧的文件夹,选择文件见上传。除了账号密码登录,如果配置了qq邮箱配置的话,还支持qq一键授权登录。添加一个用户:这里配置FTP服务器的用户名为:ftp 密码: root。全部文件模块可以查看所有的文件以及文件夹,还可以创建文件夹。数据库配置: 用户名:root,密码:root,可以在。

2023-10-24 19:03:26 199

原创 ITSource 分享 第2期【在线考试系统】

可以检查你的 node 版本,是否高于 17. 可以参考这边博客解决: https://blog.csdn.net/m0_65933139/article/details/130690790。链接: https://pan.baidu.com/s/1RiVFa5qt-wLa3MW2lnYrlw?考试卡片可以理解为是一份试卷,里面是一些试题的集合,当我们以 学生身份登录时,可以看到考试卡片和我的考试。考试管理,可以管理考试卡片,可以理解为创建试卷的地方。点击下一步,可以继续完善问题类型:题型,归类,难度。

2023-10-24 18:59:52 118

原创 ITSource 分享 第1期【在线考试系统】

链接:https://pan.baidu.com/s/1omhrRxHBUuLDAyOSb2oWHw?问卷编辑完成后,即可保存并发布,发布成功会生成一个在线地址,把这个地址发给别人.就可以收集问卷啦。https://itguang.lanzoub.com/b02x6lpxg 密码:730y。可以查看创建的所有问卷, 包括 收集中,编辑中,已关闭等状态。Idea 运行后端项目,看到以下信息,表示运行成功。在管理后台选中问卷,点击分析,即可看到统计结果。三 Quick Start。

2023-10-24 17:52:41 84

原创 对账平台设计

随着公司业务的蓬勃发展,交易履约清结算业务的复杂性也在不断的增高,资金以及各种数据的一致性和准确性也变得越发重要。

2023-03-01 11:47:52 2525 1

原创 Mysql 索引基数与选择性

先看一下 wiki 定义:索引(英语:Index),是一本书籍的重要组成部分,它把书中的重要名词名称罗列出来,并给出它们相应的页码,方便读者快速查找该名词的定义和含义。在 Mysql 中,索引也叫做 “键(key)”,是存储引擎用于快速找到记录的一种数据结构。这是索引的基本功能。恰当的索引对于良好的性能非常关键。当数据量较小是,不恰当的索引对性能的影响可能不明显,但是,当数据量很大时,性能可能会急剧下降。本小节我们就 Mysql 中索引的基数和选择性做一些讨论。

2022-11-29 17:40:58 1054

原创 线程池使用不当总结

主线程执行join()进入阻塞状态,因为永远获取不到结果,永远无法恢复,造成服务故障。但是父任务的完成又依赖于子任务,这时由于子任务得不到线程,父任务无法完成。10个请求同时到达时,线程池被打满,子任务请求被迫进入阻塞队列。假设 executorService 线程数最大为10。拒绝策略设置为 丢弃,如果再去 get 会一直阻塞。

2022-11-24 14:23:40 598

原创 Spring 事务编程实践

Spring的事务框架将开发过程中事务管理相关的关注点进行适当的分离,通过Spring的事务框架,我们可以按照统一的编程模型来进行事务编程,却不用关心所使用的数据访问技术以及具体要访问什么 类型的事务资源。Spring 事务的设计理念的基本原则是:让 事务管理 与 数据访问,相分离。当在业务层使用事务的抽象API进行事务管理的时候,不需要关心事务将要管理的资 源是什么,对不同的事务资源的管理将由相应的框架实现类来完成。

2022-11-04 14:03:57 2782 1

转载 mat 使用指南

MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。读者可以在http://www.eclipse.org/mat/下载并使用MAT。

2022-10-20 11:57:34 306

原创 JVM 调优案例分析

现象:系统日常运行正常突然发生fullgc甚至内存溢出,重启后恢复正常但是过了几天又会突然发生频繁fullgc触发告警,告警信息如下:首先发生fullgc,我们需要定位fullgc发生在jvm哪个区域?我们可以通过cat也可以通过gc日志查询发生的区域,目前有两种方式可以快速定位到gc区域:1、Cat的Problem中可以直接查询error的详细信息(时间比较久了找不到对应的cat截图了)2、通过gclog查询(大部分系统没有添加gc日志打印),常见配置如下。...

2022-08-11 16:32:24 736

原创 JVM参数调优推荐

学习开源项目的启动脚本是个不错的主意,比如ElasticSearch家的,Cassandra家的。VJTools的 jvm-options.sh,伸手党们最爱,根据自己需要稍微定制一下就行,详见 http://github.com/vipshop/vjtools。《JVM调优的"标准参数"的各种陷阱》 ,R大的文章,在JDK6时写的,期待更新。当你在网上兴冲冲找到一个可优化的参数时,先打印看看,它可能已经默认打开了,再找到一个,还是默认打开了…...

2022-08-11 16:31:32 410

原创 java List 排序

java 排序

2022-06-09 11:48:37 249 3

原创 Guava中这些Map的骚操作,让我的代码量减少了50%

https://mp.weixin.qq.com/s/4XegAIdixcAywHF9-XDZzwGuava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更为高效。今天Hydra要给大家分享的就是Guava中封装的一些关于Map的骚操作,在使用了这些功能后,不得不说一句真香。先引入依赖坐标,然后开始我们的正式体验吧~...

2022-03-10 16:39:37 367

原创 记一次API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析

API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析背景我有一个服务 A ,写了一个接口定义如下:@RequestMapping({"/config/coupon"})public interface CouponOperateTaskService { @PostMapping({"/list"}) @ApiOperation("优惠券操作任务列表") BizPageResponse<CouponOperateListRespo

2022-02-28 17:07:04 2466 1

原创 @FeignClient 上传文件时报错 解决方案

Feign 作为 Spring Cloud 中 RPC 工具,利用注解来描述接口,简化了 Java HTTP Client 的调用过程。但是在文件上传时,我们需要做一些额外的配置,不然会调用异常。背景我有一个服务 A,里面有个接口,需要接受上传的文件和一些参数, @PostMapping({"/validityPeriod/update"}) BizResponse proofValidityPeriodUpdate(@Validated ValidityPeriodUpdateRequest

2022-02-28 17:06:07 2209

原创 Redis大key 问题

Redis大key 问题背景双十一大促期间, 收到客服反馈通知,说 APP 领券接口缓慢。找到一个case,通过调用链路发现,是操作redis 缓慢,并且还搜到一些redis 异常。最后定位到原因:是发券场景下拿redis 做了一个缓存券批次的操作,记录用户当天领取的所有券批次发券场景: key = userId, value = 券批次ID 列表, 而redis 查询发现多了许多大key,体现在 一个用户领取的几千甚至上万张优惠券,导致Redis 查询缓慢,甚至异常。至于为何有的用户会领取这么多优

2022-02-21 16:11:50 9778 1

原创 Code Review 指南

Code Review 指南PPT: https://www.yuque.com/itguang/mweb/code-review-zhi-nan文章目录Code Review 指南前言CR 是什么?为什么要做 Code Review ?CR 的标准进行 CR 的一些原则CR 中需要关注什么?关注代码规范代码坏味道Duplicated Code (重复代码)Long Method (长函数)Large Class (过大的类)Long Parameter List (过长参数列)降低圈复杂度关注性能问题

2022-02-18 14:35:47 677

原创 Spring Boot 的 @Value 注解用法详解

一、前言在日常开发中,经常会遇到需要在配置文件中,存储 List 或是 Map 这种类型的数据。Spring 原生是支持这种数据类型的,以配置 List 类型为例,对于 .yaml 文件配置如下:test: list: - aaa - bbb - ccc对于 .properties 文件配置如下所示:test.list[0]=aaatest.list[1]=bbbtest.list[2]=ccc当我们想要在程序中使用时候,想当然的使用 @Value 注解去读取这

2022-01-04 17:17:53 1570

原创 由 CPU Load 过高告警引发的对 线程数和 CPU 的思考

线程池 数设置你真的会吗?可能很多人都看到过一个线程数设置的理论:CPU 密集型的程序 - 核心数 + 1I/O 密集型的程序 - 核心数 * 2这个理论看起来很合理,但实际操作起来,总是不仅如此人意。下面,我们就来看一下 线程数, CPU 的关心先说一个基本的理论,大家应该都知道:一个CPU核心,单位时间内只能执行一个线程的指令那么理论上,我一个线程只需要不停的执行指令,就可以跑满一个核心的利用率。下面我们用一段程序来测试下 CPU 和线程数 之间的关系。CPU 利用率测试测

2021-12-28 18:39:57 3174

原创 Brew换源

Brew换源简介Homebrew 是一款自由及开放源代码的软件包管理系统,用以简化 macOS 和 linux 系统上的软件安装过程。它拥有安装、卸载、更新、查看、搜索等很多实用的功能,通过简单的一条指令,就可以实现包管理,十分方便快捷。Homebrew 主要有四个部分组成: brew、homebrew-core 、homebrew-bottles、homebrew-cask。名称 说明brew Homebrew 源代码仓库homebrew-core Homebrew 核心软件仓库homebr

2021-12-28 14:36:01 8320 1

原创 Jmeter 压测接口编写指北

电商领域中, 每到各种活动, 什么 618, 双十一, 双十二, 各种优惠活动就纷至沓来, 对营销工具是一个巨大的挑战, 因此, 营销相关系统的压测是保障系统稳定运行,应对突发流量的必要手段.优惠券系统作为营销工具中的一种大杀器, 其稳定性保障必不可少.下面主要介绍我负责的优惠券系统在应对双十一突发流量的压测过程:1. 压测前准备下载 压测工具: Jmeter提前统计好每个要压测接口的数据: 日常QPS, 99线, 双十一预估QPS压测线程数计算: 1000/接口99线 x 线程数 = 目标Q

2021-10-19 11:44:23 462 1

转载 使用CompletableFuture优化你的代码执行效率

使用CompletableFuture优化你的代码执行效率这篇文章详细讲解java8中CompletableFuture的特性,方法以及实例.在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值,这时候,大家可能会去尝试使用Callable中的call方法,然后用Future返回结果,如下:public static void main(String[] args) throws Exception {

2021-06-23 19:48:55 821

原创 Spring Security 与 SSO 整合思路

因为HIS登录认证采用了 Spring Security , 因此, 要想理解目前的HIS登录流程,需要对 Spring Security 有一定了解,才能在其基础上添加新功能和额外扩展。Spring Security 登录流程解析:一句话来总结Spring Security 的认证流程就是: 验证信息 (Authentication) 在 过滤器链中传播认证的过程。Spring Security 的核心组件易于理解,其基本校验流程是: 验证信息(Authentication)传递过来,验证

2021-02-21 09:49:38 2806 2

转载 消息中间件的四种投递模式对比

消息中间件的四种投递模式对比https://cloud.tencent.com/developer/article/1540042消息中间件( Message Oriented Middleware,简称MOM)在企业开发中变得越来越重要。本文介绍消息中间件中的四种消息投递模型,主要是介绍模型的核心特性,以及不同模型之前的区别。这四种模型分别是:PTP模型Pub/Sub模型Partition模型Transfer模型其中PTP模型和Pub/Sub模型在JMS规范中有定义,消息中间件Act

2021-02-19 18:34:39 344

原创 接口性能优化思路

接口性能优化思路背景HIS 这边有一个扫码取药的接口,涉及到整个就诊流程:预约–》签到–》开始就诊–》添加处方及药品–》确认处方–》确认账单–》创建交易及订单 --》付款 --》 结束就诊 --》 签退。整个流程业务非常复杂,涉及接口和远程服务也非常多,因此接口响应很慢,耗时很长。类似的涉及到整个就诊流程的操作还有很多,比如:核销,也是要走一遍上面的流程,只是在【诊中】的操作不同,可能是添加药品,也可能是添加检查,体检,诊次套餐之类。这类操作每个步骤都非常明确,常常以一个 Pipeline 的形式封

2021-01-29 17:17:15 2384 1

转载 可靠消息一致性的 2 种解决方案

讲的可太棒了: https://cloud.tencent.com/developer/article/1430020"可靠消息最终一致性"是为了解决Producer端的消息发送与本地事务执行的原子性问题,是一种柔性事务,属于异步确保型,软状态,最终一致。**问题典型场景是:**本地往DB中插入一条记录,同时往MQ中发送一条消息,必须保证二者同时成功或者同时失败。由于DB和MQ是不同的系统,可能插入DB成功,但是发消息到MQ中失败;也可能插入DB失败,但是发送消息到MQ成功。如何保证二者的一致性,就.

2021-01-14 18:32:06 867

原创 使用 Lombok @Singular 注解需要注意的 BUG

先看下面一个 java 类, 这是在业务代码中的一段真实代码,做了部分简化。@Getter@Builder@NoArgsConstructorpublic class PatientQuery { @Singular private List<Long> patientIds = Lists.newArrayList();}首先我们先分析下上面这段代码存在的问题:**第一:**添加了 Lombok 的 @Builder 注解,但是 patientIds 属性有默认

2021-01-14 12:56:35 3159

原创 Binlog 日志应用场景

Binlog 日志应用场景https://www.cnblogs.com/kingszelda/p/8362612.htmlhttps://cloud.tencent.com/developer/article/1444390什么是binlog?Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制。复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他MySQL数据库服务器(slave),以实现灾难恢复、水平扩展、统计分析、远程数据分发等

2021-01-12 18:46:11 340

原创 InheritableThreadLocal 的作用?

直接看总结:InheritableThreadLocal主要用于子线程创建时,需要自动继承父线程的ThreadLocal变量,方便必要信息的进一步传递。线程间传递实现原理:说到InheritableThreadLocal,还要从Thread类说起:public class Thread implements Runnable { ......(其他源码) /* * 当前线程的ThreadLocalMap,主要存储该线程自身的ThreadLocal */ T

2020-12-03 16:34:41 653

原创 Feign 和 Hytrix 在微服务上下游的请求头信息传递丢失问题

在 Spring Cloud 中 微服务之间的调用会用到Feign,但是在默认情况下,Feign 调用远程服务存在Header请求头丢失问题。解决方案首先需要写一个 Feign请求拦截器,通过实现RequestInterceptor接口,完成对所有的Feign请求,传递请求头和请求参数。Feign 请求拦截器public class FeignBasicAuthRequestInterceptor implements RequestInterceptor { private static

2020-11-30 22:38:26 921 1

原创 K8S 命名空间

K8S 命名空间命名空间提供的隔离命名空间只是将对象(资源)分到不同的组,只允许你对特定命名空间的对象进行操作;但实际上,命名空间不提供对正在运行的的对象的任何隔离;一个 namespace 内只允许一个 Pod, 不同namespace 内的 Pod ,是平等的,比如同一节点不同 namespace 的 Pod 可以相互通信命名空间可允许不同团队使用同一集群,就像他们使用单独的 kubernetes 集群一样获取所有命名空间kubectl get ns创建 Pod 时指定

2020-11-28 18:15:01 1044

原创 记一次 Mysql 日期使用不当造成的 bug

众所周知, MySQL 中有多处表示日期的数据类型:YEAR、TIME、DATE、DTAETIME、TIMESTAMP。当只记录年信息的时候,可以只使用 YEAR 类型。每一个类型都有合法的取值范围,当指定确定不合法的值时,系统将“零”值插入数据库中。下表中列出了 MySQL 中的日期与时间类型。由于我在存储 生日 字段的时候,数据库不恰当的选取了 timestamp 字段,所以在我的生日字段在小于 1980 的时候就会报错:java.sql.BatchUpdateException: Data

2020-11-27 11:29:29 467

原创 字符串转 OffSetDateTime 你真的会用吗?

要创建OffsetDateTime ,需要日期 (日,月和年), 时间 (小时,分钟,秒和纳秒)和偏移量 (与UTC的差异)。如果输入只有日期,将会报错.如果只有 日期 小时,分钟和秒,也会报错.因此必须构建其余的,或者假设它们的默认值。下面是我写好的工具类,拿去用吧:public class OffSetDateTimeConverter { private static DateTimeFormatter DATE_FORMAT = new DateTimeFormatterBuil

2020-11-26 19:24:54 4482 2

原创 说说 Java 程序优雅宕机的几种策略?

在实际应用中是如何停止一个 进程呢?kill -15 pid通过该命令发送一个关闭信号给到jvm, 然后就开始执行 Shutdown Hook 了,你可以做很多:1、 关闭 socket 链接2、 清理临时文件3、 发送消息通知给订阅方,告知自己下线4、 将自己将要被销毁的消息通知给子进程5、 各种资源的释放…所谓 优雅停机,就是在要关闭服务之前,不是立马全部关停,而是做好一些善后操作,比如:关闭线程、释放连接资源等。再比如,就是不会让调用方的请求处理了一增,一下就中断了。而处理完本次

2020-11-24 20:59:40 505

javaSE课件

世上最适合java初学者的资料,这是PPT,要视频的私聊我

2015-08-31

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

TA关注的人

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