- 博客(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
原创 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垃圾收集器详解之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自带故障处理工具之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
原创 Java实现---归并排序与分析
归并排序是一种建立在归并操作上的稳定性算法,是典型分治法的应用,把一个大的集合分成左右两个小的集合,然后分别排序两个小集合,最终再把已经排序好的集合合并成一个大集合。算法分析把一个大集合拆分为两个小集合,再分别对两个小集合进行拆分,直到不能拆分为止,然后对拆分后的小集合进行排序,排序完成后再向上合并,最终合并为一个有序的集合。复杂度分析平均时间复杂度:O(nlogn)空间复杂度:T(n)Java版代码实现public class MergeSort { static int[] ar
2020-09-15 14:03:18 202
原创 【设计模式实践系列】单例模式
单例模式单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例。意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。优点:1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。2、避免对资源的多重占用(比如写文件操作)。缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面
2020-09-07 15:46:47 274
原创 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突击面试宝典
2023-08-03
如何写好代码的一些建议(Java版)
2023-08-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人