- 博客(36)
- 收藏
- 关注
原创 volatile作用
volatile 的主要作用有两点: - 保证变量的内存可见性 - 禁止指令重排序内存可见性举例如下:package zhao.thread.base;//该代码在主线程修改了vt线程的属性值,即vt.flag = true;此时会将flag值刷新到主存中,但是//vt线程此时读取的flag值还是在其线程自己的副本中,即false,就会造成vt线程一直在执行,从而//实现不了通过一个线程来控制另一个线程的功能public class VolatileTest extends Threa
2021-11-25 15:48:21 2238
原创 spring揭密-容器类型
Spring提供了两种容器类型,一个是BeanFactory,另一个是ApplicationContext。BeanFactory基础类型的IOC容器,提供完整的IOC服务支持。默认采用延迟初始化策略,即只有当客户端对象需要访问容器中的受管对象时,才对该受管对象进行初始化以及依赖注入操作。ApplicationContext是在BeanFactory基础上构建(间接继承),是比较高级的容器实现。除了拥有BeanFactory的所有支持,还提供了其他高级特性,比如事件发布,国际化信息支持等。App
2021-10-10 22:03:26 575
原创 spring揭密-spring框架组成
spring框架提供各种服务,以帮助我们简化基于POJO的Java应用程序开发。目的是构建出基于POJO的健壮而强大的应用。组成整个Spring框架的各种服务实现被划分到了多个相互独立却又相互依赖的模块之中(各个jar)如上图所示整个spring框架构建在core核心模块之上,core是整个框架的基础。该模块提供了一个IoC容器实现,用于帮助我们以依赖注入的方式管理对象之间的依赖关系。还有框架使用的工具类。Spring AOP模块,可以让我们以AOP的形式增强各POJ...
2021-09-27 17:26:56 201
原创 深入理解java虚拟机---gc root
GC管理的主要区域是Java堆,一般情况下只针对堆进行垃圾回收。方法区、栈和本地方法区不被GC所管理,因而选择这些区域内的对象作为GC roots,被GC roots引用的对象不被GC回收。GC会收集那些不是GC roots且没有被GC roots引用的对象。------------------------------------------------------------------------------------------------------可达性分析算法主流的商用程序语言
2021-09-18 18:12:40 567
原创 生产问题排查之---cpu飙升
什么是线程堆栈Java线程堆栈是虚拟机中线程(包括锁)状态的一个瞬间快照,即系统在某个时刻所有线程的运行状态。包括每一个线程的调用堆栈,锁的持有情况等信息,从线程堆栈中可以得到以下信息: 线程的名字,ID,线程的数量等; 线程的运行状态,锁的状态(锁被那个线程持有,哪个线程在等待锁等); 函数间的调用关系,包括完整类名,所执行的方法,源代码的行数等; 可以通过Jstack获取应用运行时的线程堆栈,可以通过如下方式获取线程堆栈:jstack pid>>
2021-09-08 08:55:02 180
原创 java诊断工具-Arthas(stack)输出当前方法被调用的调用路径
很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。参数说明参数名称 参数说明 class-pattern 类名表达式匹配 method-pattern 方法名表达式匹配 condition-express 条件表达式 [E] 开启正则表达式匹配,默认为通配符匹配 [n:] 执行次数限制 这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl
2021-09-07 09:56:11 654
原创 java诊断工具-Arthas(dashboard)实时查看系统线程和内存
参数说明参数名称 参数说明 [i:] 刷新实时数据的时间间隔 (ms),默认5000ms [n:] 刷新实时数据的次数 使用参考$ dashboardID NAME GROUP PRIORITY STATE %CPU DELTA_TIME TIME INTERRUPTE DAEMON-1 C2 CompilerThread0 -
2021-09-07 09:51:37 6285
原创 java诊断工具-Arthas(thread命令)查看当前线程堆栈
cpu使用率与linux 命令top -H -p <pid>的线程CPU类似1、支持一键展示当前最忙的前N个线程并打印堆栈thread -n 3 没有线程ID,包含[Internal]表示为JVM内部线程,参考dashboard命令的介绍。 cpuUsage为采样间隔时间内线程的CPU使用率,与dashboard命令的数据一致。 deltaTime为采样间隔时间内线程的增量CPU时间,小于1ms时被取整显示为0ms。 time线程运行总CPU...
2021-09-06 16:58:46 7650
原创 java诊断工具-Arthas(vmtool命令)查看spring中的对象及属性
1、查看spring所管理的所有的bean名称vmtool --action getInstances --className org.springframework.context.ApplicationContext --express 'instances[0].getBeanDefinitionNames()'2、查看具体的某个bean及其属性vmtool --action getInstances --className org.springframework.context.Ap
2021-09-06 16:34:19 8224 1
原创 java诊断工具-Arthas(watch命令)方法观察神器
参数说明watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象参数名称 参数说明 class-pattern 类名表达式匹配 method-pattern 方法名表达式匹配 express 观察表达式,默认值:{params, target, returnObj} condition-express 条件表达式 [b] 在方法调用之前观察 [e] 在方法异常之后观察 [s] 在方法返回之后观察 [f]
2021-09-06 14:27:34 4668
原创 java诊断工具-Arthas(sc命令)查看JVM已加载的类信息
sc“Search-Class” 的简写。这个命令能搜索出所有已经加载到 JVM 中的 Class 信息。class-pattern支持全限定名,如com.taobao.test.AAA,也支持com/taobao/test/AAA这样的格式,这样,我们从异常堆栈里面把类名拷贝过来的时候,不需要在手动把/替换为.啦。sc 默认开启了子类匹配功能,也就是说所有当前类的子类也会被搜索出来,想要精确的匹配,请打开options disable-sub-class true开关1、模糊搜索类
2021-09-01 17:10:52 5520
原创 java诊断工具-Arthas(trace命令)接口性能优化
trace命令作用输出方法路径上的每个节点上耗时。每次只能跟踪一级方法的调用链路。1、trace demo.MathGame run作用是持续打印出来,调用该方法的链路以及每步执行时间。结果里的#24,表示在run函数里,在源文件的第24行调用了primeFactors()函数。[0.409579ms]表示该primeFactors方法执行的用时。[2.069657ms]表示run方法执行的总用时。下图为通过jad demo.MathGame反编译类后的代码2、如..
2021-09-01 16:08:44 2423
原创 java诊断工具-Arthas(阿尔赛斯)入门
Arthas是什么?Arthas 是Alibaba开源的Java诊断工具。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运.
2021-08-31 16:52:16 430
原创 mysql-Innodb存储引擎-Explain
使用explain/desc sql查看SQL执行计划,明确语句执行是否高效。示例: explain select id,name from t1 where name=’zhangsan’; desc select id,name from t1 where name=’zhangsan’; 执行计划重要信息possible_keys: 该列上可使用的索引 key: 最终使用的索引 key_length: 索引长...
2021-08-15 17:07:07 123
原创 mysql-Innodb存储引擎-联合索引
联合索引联合索引是什么?MySQL可以使用多个字段同时建立一个索引,叫做联合索引。当我们的where查询存在多个条件查询的时候,我们需要对查询的列创建组合索引。什么时候用单列索引,什么时候使用联合索引我一个表 students 表,有3个字段 ,id,name,age 我要查询 通过 name 和age,在这两个字段 是创建联合索引?还是分别在name和age上创建单列索引呢? 多个字段查询什么情况下用联合索引 什么时候分别创建单列索引呢?1,首先要确定优化的目标,在什么样的业务场景
2021-08-15 16:31:53 485
原创 mysql-Innodb存储引擎-覆盖索引
select id,name where name='shenjian'select id,name,sexwhere name='shenjian'多查询了一个属性,为何检索过程完全不同?什么是回表查询?什么是索引覆盖?如何实现索引覆盖?哪些场景,可以利用索引覆盖来优化SQL?画外音:本文试验基于MySQL5.6-InnoDB。一、什么是回表查询?这先要从InnoDB的索引实现说起,InnoDB有两大类索引: 聚集索引(clustered index) ..
2021-08-15 15:54:11 206
转载 mysql-Innodb存储引擎-cardinality值
查看索引是否建的合理查看索引show index from t_iscgaurd_visitor;通过判断cardinality值来判断是否合理,如果这个值比较大,这比较合理,如果值比较小,则索引建的效果不好。什么字段适合建索引,什么字段不适合?选择性现在又回到前面的例子,我们通过观察执行计划发现,不论cardinality大小,相对值大小,发现还是会走索引,那为什么要说对于相对值非常小的不建议建索引呢?这就涉及到一个选择性的问题比如有一个用户表,有一列性别sex,现在要查询所以性别
2021-08-15 09:16:22 138
原创 mysql-Innodb存储引擎
在InnoDB存储引擎中,每张表都有个主键(Primary key)如果在创建表时没有定义主键,则InnoDB存储引擎会选择表中符合条件的列去创建主键。条件:1. 首先判断表中是否有非空的唯一索引(Unique NOT NULL),如果有,则该列即为主键。2. 如果不符合上述条件,InnoDB存储引擎自动创建一个6字节大小的指针。当表中存在多个非空的唯一索引的时候,InnoDB存储引擎会根据建表时所创建的第一个非空唯一索引作为主键。InnoDB的表中的数据记录本身被存于主键索引(一.
2021-08-14 23:01:13 444
转载 数据结构与算法之美-26讲红黑树(下)
红黑树是一个让我又爱又恨的数据结构,“爱”是因为它稳定、高效的性能,“恨”是因为实现起来实在太难了。我今天讲的红黑树的实现,对于基础不太好的同学,理解起来可能会有些困难。但是,我觉得没必要去死磕它。我为什么这么说呢?因为,即便你将左右旋背得滚瓜烂熟,我保证你过不几天就忘光了。因为,学习红黑树的代码实现,对于你平时做项目开发没有太大帮助。对于绝大部分开发工程师来说,这辈子你可能都用不着亲手写一个红黑树。除此之外,它对于算法面试也几乎没什么用,一般情况下,靠谱的面试官也不会让你手写红黑树的。如果你对数据
2021-08-04 10:05:01 72
转载 数据结构与算法之美-25讲红黑树(上)
上两节,我们依次讲了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是O(logn)。不过,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于logn的情况,从而导致各个操作的效率下降。极端情况下,二叉树会退化为链表,时间复杂度会退化到O(n)。我上一节说了,要解决这个复杂度退化的问题,我们需要设计一种平衡二叉查找树,也就是今天要讲的这种数据结构。很多书籍里,但凡讲到平衡二叉查找树,就会拿红黑
2021-08-03 11:30:37 89
转载 数据结构与算法之美-24讲二叉树基础(下)
二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。我们之前说过,散列表也是支持这些操作的,并且散列表的这些操作比二叉查找树更高效,时间复杂度是O(1)。既然有了这么高效的散列表,使用二叉树的地方是不是都可以替换成散列表呢?有没有哪些地方是散列表做不了,必须要用二叉树来做的呢?二叉查找树(Binary Search Tree)二叉查找树是二叉树中最常用的一种类型,也叫二叉搜索树。顾名思义,二叉查找树是为了实现快速查找而生的。不过,它不仅仅支持快速查找一个数据,还支持快速插入、删
2021-08-03 10:48:18 51
转载 数据结构算法之美(23)二叉树基础(上):树、二叉树
树中的每个元素我们叫作“节点”;比如下面这幅图,A节点就是B节点的父节点,B节点是A节点的子节点。B、C、D这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点。我们把没有父节点的节点叫作根节点,也就是图中的节点E。我们把没有子节点的节点叫作叶子节点或者叶节点,比如图中的G、H、I、J、K、L都是叶子节点。其他概念边(Edge):两个节点中间的连线。 高度(Height)、深度(Depth)、层(Level) 二叉树(Binary Tree)树结构多...
2021-08-02 22:26:24 61
转载 java数组内存分配内存结构详解
Java 中的每一个数组存储的数据类型是一致的。Java 的数组的确是放在一块连续内存里的,否则不可能做到在 O(1) 时间复杂度内存取元素。基本类型的数据都非常小,可以直接放在数组里,这跟 C 里面的数组是一样的;但引用类型的对象就不一样了,存在数组里的都只是引用,不是真正的对象数据。我们通过数组拿到的还是引用,真正的对象分散地存在堆里,并不是连续的。数组是静态的Java 语言是典型的静态语言,因此 Java 数组是静态的,即当数组被初始化之后,该数组 所占的内存空间、数组长度都是不可
2021-07-28 11:17:40 1921
转载 算法的时间与空间复杂度
法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。因此,评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况。然而,有
2021-07-27 12:29:21 59
原创 java.lang.String--String常用方法介绍
1、length方法获取字符串的长度public int length() { return value.length; }得到一个字符串的字符个数(中、英、空格、转义字符皆为字符,计入长度),具体例子如下所示package string;public class MethodTest { public static void main(String[] args) { String a="中移fwyxgs \t\n"; lengThMethod(a);...
2021-07-14 18:43:11 547
原创 java.lang.String--String类型传参
Java只有一种参数传递方式:值传递基本数据类型:传参传递的就是数值的副本,也就说把实参的数据复制给形参一份,不管形参怎么改变,实参是不受影响的。引用类型:引用数据类型,参数传递的是引用的副本。即把实参的引用(指向对象的地址)复制一份,然后赋给形参,此时形参与实参都指向同一个对象,因为他们的值相同(都是引用对象的地址)。1、把形参引用指向一个新对象------------将实参的引用地址赋给形参,此时形参中保留的是对象在堆中的引用地址。1、把形参引用指向一个新对象-------.
2021-07-06 18:54:36 960
原创 java.lang.String--不可变类
什么是不可变类这个类的实例一旦创建完成后,就不能改变其成员变量值(不可改变----基本类型是值,引用类型是指向的地址)。如JDK内部自带的很多不可变类:Interger、Long和String等。成员变量如果是基本类型,则初始化后其值不会改变,如果是引用类型,则其初始化后指向的内存地址不会变,但是引用地址对应的对象的属性有可能会变。String s="abcd";s="abcdef";此时输出一下s的内容,会发现s的内容是abcdef,即其内容变了。字符串不是不可改变的么?可以这样
2021-07-01 17:25:29 113
原创 java.lang.String--字符串字面量
String类的源码介绍All string literals in Java programs, such as "abc", are implemented as instances of this class.java中的所有字符串字面量都是String类的实例For example:String str = "abc";字符串字面量可以直接调用字符串类的方法,如下所示System.out.println("rfdf".length());字符串常量池是一用来保存字符串..
2021-06-30 18:24:49 655
原创 java.lang.Integer-自动装箱和拆箱
什么是装箱和拆箱装箱:把基本数据类型转换成包装类。拆箱:把包装类转换成基本数据类型。在JDK1.5中,为了减少开发人员的工作,Java提供了自动拆箱与自动装箱功能。自动装箱与自动拆箱的实现原理如下所示源代码生成class文件后,再反编译得到的源代码如下所示装箱操作是通过以下代码实现Integer a = Integer.valueOf(1);拆箱操作是通过如下代码实现int c = a.intValue();是编译器自动加上的代码。图二哪些场景会自动拆装箱
2021-06-25 12:50:03 312
原创 java.lang.Integer介绍
源码介绍The Integer class wraps a value of the primitive type int in an object. An object of type Integer contains a single field whose type is int.Integer类将原始类型int的值包装在Integer对象中。Integer类型的对象包含一个类型为int的属性。In addition, this class provides several method.
2021-06-25 09:43:09 769
原创 java.lang.Object-wait()方法介绍
源码介绍Causes the current thread to wait until another thread invokes the java.lang.Object.notify() method or the java.lang.Object.notifyAll() method for this object.使当前线程一直等待直到另一个线程调用此对象的java.lang.Object.notify()方法或java.lang.Object.notifyAll()方法。The cu
2021-06-24 12:16:37 843
原创 java.lang.Object-notify()方法介绍
notify()方法源码介绍Wakes up a single thread that is waiting on this object's monitor. If any threads are waiting on this object, one of them is chosen to be awakened. The choice is arbitrary and occurs at the discretion of the implementation.唤醒正在等待此对象监视器的
2021-06-24 10:04:32 149
原创 java.lang.Object-clone()方法介绍
源码介绍Creates and returns a copy of this object. The precise meaning of "copy" may depend on the class of the object.
2021-06-22 15:40:03 412
原创 java.lang.Object-hashCode()方法介绍
源码介绍Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided by java.util.HashMap.The general contract of hashCode is:Whenever it is invoked on the same object more than once during an e
2021-06-08 18:53:30 153
原创 java.lang.Object-getClass()方法介绍
源码介绍Returns the runtime class of this Object. The returned Class object is the object that is locked by static synchronized methods of the represented class.
2021-06-01 11:23:50 710
原创 java.lang.Object介绍
源码介绍Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.
2021-05-30 11:06:33 2332
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人