JAVA
文章平均质量分 80
Evan_su
天道酬勤
展开
-
BloomFilter 布隆过滤器
如图所示,当字符串存储要加入到布隆过滤器中时,该字符串首先由多个哈希函数生成不同的哈希值,然后将对应的位数组的下标设置为 1(当位数组初始化时,所有位置均为 0)。当第二次存储相同字符串时,因为先前的对应位置已设置为 1,所以很容易知道此值已经存在(去重非常方便)。如果我们需要判断某个字符串是否在布隆过滤器中时,只需要对给定字符串再次进行相同的哈希计算,得到值之后判断位数组中的每个元素是否都为 1,如果值都为 1,那么说明这个值在布隆过滤器中,如果存在一个值不为 1,说明该元素不在布隆过滤器中。原创 2024-07-15 18:19:58 · 268 阅读 · 0 评论 -
ThreadLocal原理及注意点
中就会出现 key 为 null 的 Entry。假如我们不做任何措施的话,value 永远无法被 GC 回收,这个时候就可能会产生内存泄露。没有被外部强引用的情况下,在垃圾回收的时候,key 会被清理掉,而 value 不会被清理掉。方法的时候,会清理掉 key 为 null 的记录。的弱引用,而 value 是强引用。实现中已经考虑了这种情况,在调用。中使用的 key 为。原创 2024-07-15 18:15:47 · 348 阅读 · 0 评论 -
JAVA对象的创建及内存分配详解
对象头、实例数据和对齐填充。有数组情况下4字节 数组长度。原创 2024-07-15 18:13:11 · 1038 阅读 · 0 评论 -
JDK垃圾回收机制和垃圾回收算法
查看java相关信息UseParallelGC 即 Parallel Scavenge + Parallel Old,再查看详细信息。原创 2024-07-15 18:10:55 · 1187 阅读 · 0 评论 -
JVM参数调优经验
首先既然需要调优那么我们的系统肯定是出现了一些问题。可能会有现象:Tp99分钟响应时间超过300ms,Tp999的毛刺很多,系统率可用率下降。先排除应用代码导致,上游接口的问题,中间件的问题目前各大互联网公司的系统基本都更追求低延时,避免一次 GC 停顿的时间过长对用户体验造成损失,衡量指标需要结合一下应用服务的 SLA,主要如下两点来判断:CMS。原创 2024-07-15 17:41:26 · 936 阅读 · 0 评论 -
Java AQS 核心数据结构
CLH 锁是对自旋锁的一种改进,是一个虚拟的双向队列(虚拟的双向队列即不存在队列实例,仅存在结点之间的关联关系),暂时获取不到锁的线程将被加入到该队列中。在 CLH 队列锁中,一个节点表示一个线程,它保存着线程的引用(thread)、 当前节点在队列中的状态(waitStatus)、前驱节点(prev)、后继节点(next)。AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。修饰,用于展示当前临界资源的获锁情况。原创 2024-07-15 17:33:10 · 342 阅读 · 0 评论 -
java 反射相关API使用
Java-反射原创 2023-12-04 19:48:35 · 413 阅读 · 0 评论 -
Java基础(一)—— Java概述
Java 编程语言的风格十分接近C++语言。继承了 C++ 语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间。在 Java SE 1.5 版本中Java又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。原创 2022-11-03 16:00:28 · 512 阅读 · 0 评论 -
Java基础5大机制——反射机制详解(一)
一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.下面是详细说明:...原创 2019-08-09 16:07:25 · 752 阅读 · 1 评论 -
Java基础五大机制 —— 异常机制基础(一)
Java异常是一个描述在代码段中发生异常的对象,当发生异常情况时,一个代表该异常的对象被创建并且在导致该异常的方法中被抛出,而该方法可以选择自己处理异常或者传递该异常。异常指不期而至的各种状况,如:文件找不到、网络连接失败、除0操作、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误;如果你用,那么你是因为你用0做了除数,会抛出的异常。原创 2022-11-18 15:36:18 · 377 阅读 · 0 评论 -
Java 反射详解(二)
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的法的功能称为java语言的反射机制。 通过java语言中的反射机制可以操作字节码文件(可以读和修改字节码文件。)通过反射机制可以操作代码片段。(class文件。) .class说明:在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。J原创 2022-06-22 21:41:27 · 239 阅读 · 0 评论 -
Java基础五大机制 —— 泛型机制解析(一)
说明一下,定义泛型方法时,必须在返回值前边加一个,来声明这是一个泛型方法,持有一个泛型T,然后才可以用泛型T作为方法的返回值。Class的作用就是指明泛型的具体类型,而Class类型的变量c,可以用来创建泛型类的对象。为什么要用变量c来创建对象呢?既然是泛型方法,就代表着我们不知道具体的类型是什么,也不知道构造方法如何,因此没有办法去new一个对象,但可以利用变量c的newInstance方法去创建对象,也就是利用反射创建对象。泛型方法要求的参数是Class类型,而。原创 2022-11-15 16:16:53 · 329 阅读 · 0 评论 -
京东神灯文档:JVM参数GC线程数ParallelGCThreads合理性设置
过多的GC线程数抢占了业务线程的CPU时间,加上线程切换的开销,较大的降低了吞吐量。JVM会使用特定的GC收集线程,当GC开始的时候,GC线程会和业务线程抢占CPU时间,吞吐量定义为CPU用于业务线程的时间与CPU总消耗时间的比值。为了安全的垃圾回收,在GC或者GC某个阶段,所有业务线程都会被暂停,也就是STW(Stop The World),STW持续时间就是停顿时长,停顿时长影响响应速度,因此越小越好。这两个优化目标是有冲突的,在一定范围内,参与GC的线程数越多,停顿时长越小,但吞吐量也越小。原创 2022-11-21 15:59:52 · 627 阅读 · 0 评论 -
Java之多线程(一)—技术简介
进程(process):是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 例如上图所示,当通过windows打开任务管理时,你所有正在使用的软件都会对应一个进程。无论是看不到的,还是看的到的程序,都会有一个进程。 现在操纵系统在运行一个程序时,比如:在Wind原创 2022-07-12 17:49:20 · 411 阅读 · 0 评论 -
二叉树之层序遍历
遍历规则:二叉树的层次遍历就是按照从上到下每行,然后每行中从左到右依次遍历,得到的二叉树的元素值。思路:对于层次遍历,我们通常会使用队列来辅助:因为队列是一种先进先出的数据结构,我们依照它的性质,如果从左到右访问完一行节点,并在访问的时候依次把它们的子节点加入队列,那么它们的子节点也是从左到右的次序,且排在本行节点的后面,因此队列中出现的顺序正好也是从左到右,正好符合层次遍历的特点具体做法: 代码:...原创 2022-06-29 18:15:28 · 1304 阅读 · 0 评论 -
二叉树之后序遍历(非递归)
遍历规则:优先访问根节点的左子树的全部节点,然后再访问根节点的右子树的全部节点,最后再访问根节点。对于每棵子树的访问也按照这个逻辑,因此叫做“左右根”的顺序。思路:既然二叉树的前序遍历和中序遍历都可以使用栈来代替递归,那后序遍历是否也可以呢?答案是可以的,但是会比前二者复杂一点点。根据后序遍历“左右中”的顺序,那么后序遍历也与中序遍历类似,要先找到每棵子树的最左端节点:然后我们就要访问该节点了嘛?不不不,如果它还有一个右节点呢?根据“左右根”的原则,我还要先访问右子树。我们只能说它是最左端的节点,它左原创 2022-06-29 17:38:18 · 2932 阅读 · 2 评论 -
二叉树之中序遍历(非递归)
二叉树中序遍历遍历方式:优先访问它的左子树,等到左子树全部节点都访问完毕,再访问根节点,最后访问右子树。同时访问子树的时候,顺序也与访问整棵树相同。口诀:根左右。思路:与前序遍历类似,我们利用栈来代替递归。如果一棵二叉树,对于每个根节点都优先访问左子树意味着:从根节点开始不断往左,放进栈中,直到没有左节点,那么第一个被访问的一定是最左的节点。然后访问该节点的右子树,最后向上回到父问题。因为每次访问最左的元素不止对一整棵二叉树成立,而是对所有子问题都成立,因此循环的时候自然最开始都是遍历到最左,然后访问原创 2022-06-29 16:56:47 · 2408 阅读 · 0 评论 -
二叉树之前序遍历-非递归
口诀:根左右知识点:栈栈是一种仅支持在表尾进行插入和删除操作的线性表,这一端被称为栈顶,另一端被称为栈底。元素入栈指的是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;元素出栈指的是从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。思路:我们都知道递归,是不断调用自己,计算内部实现递归的时候,是将之前的父问题存储在栈中,先去计算子问题,等到子问题返回给父问题后再从栈中将父问题弹出,继续运算父问题。因此能够递归解决的问题,我们似乎也可以用栈来试一试。根据前序遍历“根左右原创 2022-06-29 16:46:54 · 3374 阅读 · 0 评论 -
数据结构之二叉树
1、基本概念:树就是一种类似现实生活中的树的数据结构(倒置的树)。任何一颗非空树只有一个根节点。2、一棵树具有以下特点:3、树的形状如下图所示: 4、区别: 层数:从根节点开始算,为第一层。 高度:从最下面的叶子节点开始算,且从0开始计数。 深度:从根节点开始算,从0开始计数。树的基本名词解释:二叉树(Binary tree)是每个节点最多只有两个分支(即不存在分支度大于 2 的节点)的树结构。二叉树 的分支通常被称作“左子树”或“右子树”。并且,二叉树 的分支具有原创 2022-06-27 17:28:17 · 6166 阅读 · 0 评论 -
Volatile关键字
一、Volatile关键字说明Volatile是Java提供的轻量级同步工具,它能保证可见性和做到禁止指令重排做到有序性,但是它不能保证原子性,如果你的程序必须做到原子性的话,那么可以考虑使用JUC的原子包下的原子类或者加锁的方式来保证,但是我们假设如果使用volatile来修饰共享变量,那么它能够保证的是一个线程对它所修饰的变量进行更改操作后总是能对其他线程可见,如下:对于如上代码,虽然我们对成员变量i使用volatile修饰,意味着,对于执行addOne()方法的任意线程来说,看到这个变量的值是一原创 2022-06-23 17:18:56 · 341 阅读 · 0 评论 -
Java对象拷贝的那些事以及必坑指南
在工作中经常会涉及到对象的复制和拷贝。特别是在调用外部的RPC接口时,经常不会直接使用调用结果的dto,而是按照需要自己定义的需要的字段,包装成新的dto,用于后续的业务,进行逻辑处理。在这中间就涉及到对象复制的问题。不仅仅局限于调用远程接口,在实际的开发中的一些增删改查操作,也涉及到对对象复制的操作。总之,对象复制是在工作中非常常用的一个操作。需要我们重视。 浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝。 深拷贝:当一个类的拷贝构造方法,不仅要复制对象的原创 2022-06-06 17:52:50 · 895 阅读 · 1 评论 -
SpringIOC的引入
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。一、分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spr...原创 2021-08-24 10:27:19 · 119 阅读 · 0 评论 -
java精确除法运算(BigDecimal)
一、BigDecimal介绍Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算. 其中 BigInteger 类是针对大整数的处理类,而 BigDecimal 类则是针对大小数的处理类. BigDecimal 类的实现用到了 BigInteger类,不同的是 BigDeci......原创 2019-08-12 10:01:28 · 69947 阅读 · 0 评论 -
详解Class.forName和ClassLoader
一、问题产生这本来是工作上的一个需求:将两个domain对象的字段进行适配,这两个实体类都是根据数据库表的映射,我要做的就是将这两个对象中的字段几个进行映射。虽然有的字段的方法名是一样的但有好多是不同的(其中set/getXxx()都是自动生成的),所以我想先写一个方法将那些同名的字段过滤出来,这样大概率能保证映射的正确性。为了拿到这些类对象对应的属性名我想到了用Class.forName获取...原创 2019-08-07 14:07:18 · 509 阅读 · 0 评论 -
JVM之Java字节码(.class)文件详解
我们在使用IDEA工具编写java代码时,当执行程序时,IDEA会使用JDK帮我们执行编译命令,在target目录下生成对应的.class文件,为了加深对.class文件的理解。写了这篇文章,加深对字节码文件的理解。编译前: 执行程序后:这一步操作,就是将.java文件编译成JVM可执行的.class文件,也叫做字节码文件。 在 Java 中,JVM 可以执行的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过原创 2022-06-17 16:54:04 · 4379 阅读 · 1 评论