自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringAOP中@EnableAspectJAutoProxy注解的作用

理解@EnableAspectJAutoProxy注解的作用

2020-09-30 17:25:55 16046 1

原创 SpringAOP相关名词解释

之前已经写过不少文章分析SpringIOC相关的源码部分,接下来准备研究一下AOP部分,个人觉得AOP相比IOC要困难一些,因为AOP的概念显得更加抽象,所以在分析AOP相关源码之间,首先必须要搞清楚一些概念问题。Advice(通知)Advice就是具体的你想要增加的功能了。Pointcut(切入点)Pointcut主要就是用来申明哪些类、哪些方法需要使用到Advice。Aspect(切面)Aspect从源码部分来理解,就是Advice和Pointcut组合后变成了一类功能的抽象,比如事务切面、

2020-09-30 14:12:10 282

原创 如何保证kafka消费端接收到消息的有序性

kafka自身可以保证一个分区中的消息是有序的

2020-09-29 15:53:48 1710

原创 Spring整合Kafka消费端concurrency参数设置

Spring整合Kafka时在消费端为我们提供了一个参数concurrency,这个参数可主要是用来设置消费者的线程数,提高消费的能力,当然与所有线程数设置的套路一样,这个值并不是越大越好。Spring中提供的这个参数其原理就和启动多个消费者一样,kafka在启动时会根据你的消费者数量与主题中的分区数进行匹配,比如你有3个消费者订阅了‘test_topic’主题,这个主题又有3个分区,那么kafka就会为每一个消费者分配一个分区,服务端再发送消息时,可以把消费均匀的发送到3个分区中,这样就可以实现3个消费

2020-09-28 18:57:08 9529 4

原创 线上告警CPU使用率过高排查分析

本文主要列举了如下几种可能造成CPU过高的场景进行排查分析。1、代码死循环启动了两个线程(线程一定要起一个合适的名称,出了问题时方便排查),一个线程空循环,一个线程每500ms循环一次。public class Test { public static void main(String[] args) { Thread t1 = new Thread(() -> { while (true) {

2020-09-25 17:54:10 897

原创 JVM常用垃圾回收器相关参数配置

JVM常用垃圾回收期参数配置

2020-09-24 17:39:39 873

原创 JVM垃圾收集器详解之Garbage First(G1)

G1简介G1是一款非常具有特殊意义垃圾收集器的技术发展体现,因为相比G1之前的垃圾收集器,G1首次打破了基于老年代或者新生代一整块内存进行收集的设计思想,G1设计上依然有分代的思想,但是在内存上不在进行分代上的物理划分,也就是在一块大的内存区域中,既有年轻代也有老年代。G1与CMS一样都是追求低停顿时间的垃圾收集器,但是由于G1在设计上的突破,使其能在更大的内存空间回收时,保持优秀的垃圾回收效率,这是G1之前的所有垃圾收集器所不能做到的。G1中的分代设计G1与其他的垃圾收集器相比不再有物理上的区域划

2020-09-23 22:08:35 440

原创 JVM垃圾收集器详解之Parallel Scavenge

Parallel Scavenge是一款新生代垃圾收集器,我们非常有必要了解这款垃圾收集器,因为这款收集器可是JDK1.7和JDK1.8默认的新生代垃圾收集器。对于新生代的垃圾回收一般都采用标记-复制算法,Parallel Scavenge也不例外,Parallel Scavenge也与ParNew收集器一样都是能够通过多线程并行收集的,那么Parallel Scavenge与ParNew相比有什么特别之处呢?Parallel Scavenge的特别之处就在于它关注的是吞吐量,也就是运行代码时间与(运行

2020-09-22 12:17:46 2640

原创 JVM垃圾收集器详解之CMS

CMS(Concurrent Mark Sweep)是HotSpot虚拟机中第一款实现并发收集的垃圾回收器,是为那些希望使用较短的垃圾收集暂停时间并且可以在应用程序运行时与垃圾收集器共享处理器资源的应用程序而设计的,简单来说,CMS就是追求最短停顿时间的垃圾收集器。CMS主要针对老年代进行垃圾回收,可以配合Serial或者ParNew新生代垃圾收集器进行回收,并且从名字上包含“Mark Sweep”就可以看出CMS收集器是基于标记-清除算法实现的,相对之前的垃圾收集器CMS整个回收过程要稍微复杂一些,大致

2020-09-21 20:05:45 1382

原创 jvm自带故障处理工具之jstack

jvm自带故障处理工具之jstack

2020-09-19 22:14:59 326

原创 jvm自带故障处理工具之jstat

jstat主要是用来监控虚拟机各种运行状态信息的一种工具,通过jstat命令主要可以用来观察虚拟机在运行时垃圾收集状况,以及类加载和编译状况。命令格式为:jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]下面我们通过几个演示案例,看一下具体的使用方式,环境声明:JDK1.8,使用-XX:+UseSerialGC垃圾回收器常用的命令:jstat -gc pid interval[ms] count示例每一列含义

2020-09-18 15:17:03 285

原创 JVM对象内存分配策略详解

JVM中对象分配的原则

2020-09-17 17:17:16 441

原创 垃圾回收算法分析与JVM具体应用

JVM垃圾回收算法分析与使用选择

2020-09-15 19:36:13 264

原创 Java实现---归并排序与分析

归并排序是一种建立在归并操作上的稳定性算法,是典型分治法的应用,把一个大的集合分成左右两个小的集合,然后分别排序两个小集合,最终再把已经排序好的集合合并成一个大集合。算法分析把一个大集合拆分为两个小集合,再分别对两个小集合进行拆分,直到不能拆分为止,然后对拆分后的小集合进行排序,排序完成后再向上合并,最终合并为一个有序的集合。复杂度分析平均时间复杂度:O(nlogn)空间复杂度:T(n)Java版代码实现public class MergeSort { static int[] ar

2020-09-15 14:03:18 202

原创 Redis6.0多线程设计分析

Redis6.0到底是单线程还是多线程?

2020-09-14 15:22:24 247

原创 Redis为什么要设计成单线程?

单线程的Redis为什么还那么快

2020-09-12 21:37:16 447

原创 Redis五种数据类型常用命令时间复杂度分析

Redis各种数据类型的时间复杂度分析

2020-09-11 17:26:20 1618

原创 使用Integer进行==比较的注意事项

使用Integer进行==比较的注意事项

2020-09-10 15:17:02 418

原创 JVM中如何判断一个对象是否为可回收

JVM中如何判断一个对象是否为垃圾对象

2020-09-08 19:00:59 390

原创 详细图解JVM三色标记法

JVM垃圾回收—三色标记

2020-09-08 14:18:37 2608

原创 【设计模式实践系列】单例模式

单例模式单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例。意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。优点:1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。2、避免对资源的多重占用(比如写文件操作)。缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面

2020-09-07 15:46:47 274

原创 Java中四种引用类型的分析与应用场景

JVM中四种引用类型的分析与应用场景

2020-09-05 22:47:16 327

原创 JVM内存结构设计详解

什么是JVM内存结构?Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。为什么要了解JVM内存结构?如果Java和C语言都用过的人就能明显感受到,Java程序写起来方便的多,因为在Java中不需要开发人员为每一个new出来的对象分配内存,以及

2020-09-04 13:58:14 355

原创 【设计模式实践系列】应用责任链模式实现申请退款审批

责任链模式在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请

2020-09-02 17:30:50 477

原创 结合源码深入分析SpringBoot整合MyBatis的原理

本文重点不是说明SpringBoot中如何使用MyBatis,而是主要关注SpringBoot是如何实现引入MyBatis的,要想了解这个过程,实际上还是需要对spring和mybatis的源码有一定的了解,尤其是spring,如果你不熟悉spring源码,那么可能理解本文会有一定的难度。首先我们知道SpringBoot整合MyBatis是非常简单的(springboot整合啥都简单。。。)引入jar包 <dependency> <groupId

2020-09-01 22:32:36 518

MySQL突击面试宝典

本文主要介绍了索引的结构、失效场景以及执行计划,讨论了建立索引的条件、该在哪些列上建索引,并解决了大表带来的增删改查、添加索引、数据同步等问题。此外,还介绍了ACID特性、脏读、幻读和日志以及主从复制等相关内容。文章提供了SQL语句的优化建议和大表问题解决方法,旨在帮助读者提升数据库查询效率。

2023-08-03

如何写好代码的一些建议(Java版)

本文主要介绍了软件工程中的基础内容,包括命名规范、函数和参数的长度、日志规范、线程安全、圈复杂度、数据结构与算法、异常处理、事务管理和注释设计原则。文章详细解释了命名的含义和规则、日志打印的不同级别和要求、线程池和线程安全的相关概念、数组和链表的特点和使用场景、异常类型和使用误区、事务的传播方式和应用,以及设计原则中的单一职责和开闭原则等。

2023-08-03

空空如也

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

TA关注的人

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