java
文章平均质量分 78
PostTruth
书写是对思维的缓存
展开
-
分析定位Java问题利器: MAT 和 Arthas 使用
今天,介绍如何使用JVM堆转储的工具MAT来分析OOM问题,以及如何使用全能的故障诊断工具Arthas来分析、定位高CPU问题。原创 2024-07-18 17:22:35 · 839 阅读 · 0 评论 -
JVM 调优案例分析
现象:系统日常运行正常突然发生fullgc甚至内存溢出,重启后恢复正常但是过了几天又会突然发生频繁fullgc触发告警,告警信息如下:首先发生fullgc,我们需要定位fullgc发生在jvm哪个区域?我们可以通过cat也可以通过gc日志查询发生的区域,目前有两种方式可以快速定位到gc区域:1、Cat的Problem中可以直接查询error的详细信息(时间比较久了找不到对应的cat截图了)2、通过gclog查询(大部分系统没有添加gc日志打印),常见配置如下。...原创 2022-08-11 16:32:24 · 787 阅读 · 0 评论 -
JVM参数调优推荐
学习开源项目的启动脚本是个不错的主意,比如ElasticSearch家的,Cassandra家的。VJTools的 jvm-options.sh,伸手党们最爱,根据自己需要稍微定制一下就行,详见 http://github.com/vipshop/vjtools。《JVM调优的"标准参数"的各种陷阱》 ,R大的文章,在JDK6时写的,期待更新。当你在网上兴冲冲找到一个可优化的参数时,先打印看看,它可能已经默认打开了,再找到一个,还是默认打开了…...原创 2022-08-11 16:31:32 · 424 阅读 · 0 评论 -
java List 排序
java 排序原创 2022-06-09 11:48:37 · 271 阅读 · 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 · 382 阅读 · 0 评论 -
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 · 699 阅读 · 0 评论 -
Jmeter 压测接口编写指北
电商领域中, 每到各种活动, 什么 618, 双十一, 双十二, 各种优惠活动就纷至沓来, 对营销工具是一个巨大的挑战, 因此, 营销相关系统的压测是保障系统稳定运行,应对突发流量的必要手段.优惠券系统作为营销工具中的一种大杀器, 其稳定性保障必不可少.下面主要介绍我负责的优惠券系统在应对双十一突发流量的压测过程:1. 压测前准备下载 压测工具: Jmeter提前统计好每个要压测接口的数据: 日常QPS, 99线, 双十一预估QPS压测线程数计算: 1000/接口99线 x 线程数 = 目标Q原创 2021-10-19 11:44:23 · 477 阅读 · 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 · 837 阅读 · 0 评论 -
接口性能优化思路
接口性能优化思路背景HIS 这边有一个扫码取药的接口,涉及到整个就诊流程:预约–》签到–》开始就诊–》添加处方及药品–》确认处方–》确认账单–》创建交易及订单 --》付款 --》 结束就诊 --》 签退。整个流程业务非常复杂,涉及接口和远程服务也非常多,因此接口响应很慢,耗时很长。类似的涉及到整个就诊流程的操作还有很多,比如:核销,也是要走一遍上面的流程,只是在【诊中】的操作不同,可能是添加药品,也可能是添加检查,体检,诊次套餐之类。这类操作每个步骤都非常明确,常常以一个 Pipeline 的形式封原创 2021-01-29 17:17:15 · 2418 阅读 · 1 评论 -
可靠消息一致性的 2 种解决方案
讲的可太棒了: https://cloud.tencent.com/developer/article/1430020"可靠消息最终一致性"是为了解决Producer端的消息发送与本地事务执行的原子性问题,是一种柔性事务,属于异步确保型,软状态,最终一致。**问题典型场景是:**本地往DB中插入一条记录,同时往MQ中发送一条消息,必须保证二者同时成功或者同时失败。由于DB和MQ是不同的系统,可能插入DB成功,但是发消息到MQ中失败;也可能插入DB失败,但是发送消息到MQ成功。如何保证二者的一致性,就.转载 2021-01-14 18:32:06 · 888 阅读 · 0 评论 -
使用 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 · 3183 阅读 · 0 评论 -
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 · 354 阅读 · 0 评论 -
InheritableThreadLocal 的作用?
直接看总结:InheritableThreadLocal主要用于子线程创建时,需要自动继承父线程的ThreadLocal变量,方便必要信息的进一步传递。线程间传递实现原理:说到InheritableThreadLocal,还要从Thread类说起:public class Thread implements Runnable { ......(其他源码) /* * 当前线程的ThreadLocalMap,主要存储该线程自身的ThreadLocal */ T原创 2020-12-03 16:34:41 · 675 阅读 · 0 评论 -
字符串转 OffSetDateTime 你真的会用吗?
要创建OffsetDateTime ,需要日期 (日,月和年), 时间 (小时,分钟,秒和纳秒)和偏移量 (与UTC的差异)。如果输入只有日期,将会报错.如果只有 日期 小时,分钟和秒,也会报错.因此必须构建其余的,或者假设它们的默认值。下面是我写好的工具类,拿去用吧:public class OffSetDateTimeConverter { private static DateTimeFormatter DATE_FORMAT = new DateTimeFormatterBuil原创 2020-11-26 19:24:54 · 4592 阅读 · 2 评论 -
说说 Java 程序优雅宕机的几种策略?
在实际应用中是如何停止一个 进程呢?kill -15 pid通过该命令发送一个关闭信号给到jvm, 然后就开始执行 Shutdown Hook 了,你可以做很多:1、 关闭 socket 链接2、 清理临时文件3、 发送消息通知给订阅方,告知自己下线4、 将自己将要被销毁的消息通知给子进程5、 各种资源的释放…所谓 优雅停机,就是在要关闭服务之前,不是立马全部关停,而是做好一些善后操作,比如:关闭线程、释放连接资源等。再比如,就是不会让调用方的请求处理了一增,一下就中断了。而处理完本次原创 2020-11-24 20:59:40 · 529 阅读 · 0 评论 -
布隆过滤器在爬虫的几种使用场景以及布谷鸟过滤器的优点
布隆过滤器(概率型数据结构): 某样东西一定不存在或可能存在布隆过滤器原理?把一个 key 进行好几个 hash 运算后,得到的 hash 值,对一个 bit 数组取模放进去,用 1 表示, 比如下面示例:这个 再有其他 key 到来,再用同样的 方法计算 hash 值,判断bit数组的该位置是否为 1,都为 1 表示已存在(可能误判),不为 1,表示一定不存在.应用场景:1. 判断一个数据是否在数据库存在, 不存在再插入.(爬虫场景的幂等性入库操作)(对已经爬取过的 URL 去重)2.原创 2020-11-18 14:25:46 · 567 阅读 · 0 评论 -
CAP
参考: CAPCAP这个听起来很高大上的概念,在分布式系统中,如果选择了可用性(A) + 分区容错性§ , 就要放弃一致性©如果选在一致性© + 分区容错性§ , 就得放弃可用性(A) , 这种情况下,虽然系统的有些功能是不能使用的, 因为需要等待数据的同步, 但是那些和数据同步无关的功能还是可以访问的 , 相当于系统做了功能的降级。既然有AP和CP, 会不会出现仅仅是CA(一致性+可用性)这种组合呢?就是没有分区容错性, 只保留可用性和一致性?仔细想想, P(网络分区)其实是不可避免的,是原创 2020-09-29 09:56:03 · 241 阅读 · 0 评论 -
DIP , DI , IoC 傻傻分不清?
一张图看懂 DIP , DI , IoC 的关系Design Principle vs Design PatternIn software engineering, design principle and design pattern are not the same.Design PrincipleDesign principles provide high level guidelines to design better software applications. They do not原创 2020-09-05 15:57:31 · 505 阅读 · 0 评论 -
AOP,Spring AOP ,Aspectj,CGLIB 傻傻分不清?
一张图看懂 AOP,Spring AOP ,Aspect,CGLIB的关系 !Spring AOP , AspectJ , CGLIB 概念AOPAOP(Aspect Orient Programming) 作为面向对象的一种补充,广泛用于处理具有横切性质的系统级服务,如 事务,安全检查,缓存,对象池管理等。AOP 实现的关键就在于 AOP 框架自动创建代理对象,AOP 代理可分为 静态代理 和 动态代理 两大类,静态代理在编译阶段就可以生成代理类,因此也称为 编译时增强;动态代理 在运行原创 2020-09-05 15:41:20 · 854 阅读 · 4 评论 -
Mac 打造
1. 终端打造在 Mac 上将 zsh 用作默认 Shell让你的 Mac 提前用上 macOS Catalina 的 Shell——Oh My Zsh 配置指南iTerm2 设置字体(Mac OS X)[zsh 配置] zsh 命令自动补全插件2. 写作打造Typorapicgo原创 2020-08-23 09:21:17 · 150 阅读 · 0 评论 -
IPv4,IPv6 字符串与 int 互转
不要重复造轮子, google guava 包里面已经提供好了工具类,直接拿来用 !原理: IPv4 32 位, java 中int 也是32 位, 故可以互转,但是 IPv6 地址需要转为 IPv4 才能转 int/*** IPv4 或者 IPv6 地址转换为int类型数字*/public static int ip2Integer(String ip) {InetAddress inetAddress = InetAddresses.forString(ip);Inet4Address原创 2020-07-13 14:27:28 · 2595 阅读 · 0 评论 -
延时队列的几种实现方式
延时队列的几种实现方式何为延迟队列?顾名思义,首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。延时队列能做什么?延时队列多用于需要延时工作的场景。最常见的是以下场景:延迟消费,比如:1 ,订单成功后,在 30 分钟内没有支付,自动取消订单2 ,如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存3 ,支付成功后, 2 秒后查询支付结果4 , ……如何实现?实现延时队列的方式有很多种,本文主要介绍以下几种常见的方式:原创 2020-07-10 16:57:56 · 8608 阅读 · 5 评论 -
Spring @Import 注解妙用
1. 前言很多时候我们的Spring项目使用多模块,或者我们需要将自己特定的类库打成依赖。默认情况下Spring Boot应用只会扫描main方法所在的包路径下的Bean和通过spring.factories进行注册发现自动装配到Spring IoC中去。像下面这个Maven项目中,如果Spring Boot的Main类在cn.felord.yaml包下的话cn.felord.common包的Spring Bean是无法被扫描注册到Spring IoC容器中的。Maven多目录项目今天我们将借助于@I原创 2020-07-08 18:43:30 · 415 阅读 · 0 评论 -
Spring Resource和策略模式应用
Spring 把所有能记录信息的载体,如各种类型的文件、二进制流等都称为资源,对 Spring 开发者来说,最常用的资源就是 Spring 配置文件(通常是一份 XML 格式的文件)。在 Sun 所提供的标准 API 里,资源访问通常由 java.net.URL 和文件 IO 来完成,尤其是当我们需要访问来自网络的资源时,通常会选择 URL 类。URL 类可以处理一些常规的资源访问问题,但依然不能很好地满足所有底层资源访问的需要,比如,暂时还无法从类加载路径、或相对于 ServletContext 的路原创 2020-06-29 12:01:14 · 1086 阅读 · 0 评论 -
Excel 导入导出太麻烦? Easy excel 了解一下 !
Easy-Excel它是什么?easy-excel 是基于 Apache POI 框架的一款扩展封装库,让我们在开发中更快速的完成导入导出的需求。 尽管很多人会提出 poi 能干这事儿为什么还要封装一层呢?easy-excel 很大程度上简化了代码、让使用者更轻松的 读、写 Excel 文档,也不用去关心格式兼容等问题,很多时候我们在代码中会写很多的 for 循环,各种 getXXXInde...原创 2020-04-23 18:25:56 · 1575 阅读 · 0 评论 -
上传Gradle项目到 mvnrepository
前言当我们封装完成我们自己做的工具之后,那我们肯定想要发给别人让别人来进行使用,上传到中央仓库是一种引入时最方便的选择。网上有很多教程,但是大多都是maven和windows的环境。今天就来记录一下,在mac上使用gradle上传jar到mvn中央仓库所要踩的坑。大致步骤:1、注册issues.sonatype.org2、创建issue3、根据issue完成相应操作4、生成公钥私钥...原创 2020-03-14 16:43:20 · 643 阅读 · 0 评论 -
Java 获取月初时间
网上说的一大堆都是炒来炒去的, 神烦! 我来说个简单的方法吧:OffsetDateTime dateBegin = OffsetDateTime.now() .withDayOfMonth(1).withHour(0).withMinute(0).withMinute(0).withSecond(0);LocalDateTime dateBegin = LocalDa...原创 2020-01-20 18:22:11 · 1527 阅读 · 0 评论