
JAVA-基础系列
文章平均质量分 80
波波烤鸭
10余年架构和线上讲师工作经验。精通Java,微服务和云原生相关,致力于Java技术的免费分享。
展开
-
JMeter帮你找到系统瓶颈-升职加薪就在眼前
系统性能压力测试 一、压力测试 压力测试是给软件不断加压,强制其在极限的情况下运行,观察它可以运行到何种程度,从而发现性能缺陷,是通过搭建与实际环境相似的测试环境,通过测试程序在同一时间内或某一段时间内,向系统发送预期数量的交易请求、测试系统在不同压力情况下的效率状况,以及系统可以承受的压力情况。然后做针对性的测试与分析,找到影响系统性能的瓶颈,评估系统在实际使用环境下的效率情况,评价系统性能以及判断是否需要对应用系统进行优化处理或结构调整。并对系统资源进行优化。 在压力测试中我们会涉及到相关的一.原创 2022-03-10 16:43:22 · 2921 阅读 · 0 评论 -
工欲善其事必先利其器,反射你真的掌握了吗?本文详细给你讲解,没时间看的建议收藏!!!
本文继续来给大家巩固基础,详细的来给大家介绍下反射的原理。Java Reflection 探寻反射的本质 1. 反射快速入门 反向探知,在程序运行过程中动态的获取类的相关属性 这种动态获取类的内容以及动态调用对象的方法和获取属性的机制.就叫做JAVA的反射机制 /** * 反射的基本应用 * @param args */ public static void main(String[] args) throws Exception {原创 2021-06-18 11:39:46 · 1342 阅读 · 8 评论 -
红黑树的删除真的很难吗?其实是你没找到好的解题思路,不信你点击进来看看,建议收藏哦!!!
上一篇介绍了红黑树的插入操作,这篇来给大家介绍下红黑树的删除操作。 红黑树删除节点 红黑树的节点的删除其实也分为两步: 先删除节点(这步和普通的二叉树删除是一样的) 然后再调整 1.删除节点 要删除这个节点先需要找到这个节点,找到节点就是普通的二分查找,具体代码如下 private RBNode getNode(K key){ RBNode node = this.root; while (node != null ){ int原创 2021-06-15 10:34:51 · 1893 阅读 · 7 评论 -
住上铺的师兄面试去了TX,就因为他和面试官光红黑树就聊了半个小时
上篇文章详细的给大家介绍了2-3-4树,本文就详细的介绍下红黑树的内容 红黑树 红黑树,Red-Black Tree 「RBT」是一个自平衡(不是绝对的平衡)的二叉查找树(BST),树上的每个节点都遵循下面的规则: 每个节点要么是黑色,要么是红色。 根节点是黑色。 每个叶子节点(NIL)是黑色。 每个红色结点的两个子结点一定都是黑色。 任意一结点到每个叶子结点的路径都包含数量相同的黑结点。 红黑树能自平衡,它靠的是什么?三种操作:左旋、右旋和变色 操作 描述 左旋 以某个结点原创 2021-06-15 10:20:58 · 11183 阅读 · 18 评论 -
掌握了2-3-4树也就掌握了红黑树,不信进来看看,建议收藏!
红黑树的本质是2-3-4树,所以我们先掌握了2-3-4树,那么红黑树就非常容易了。本文重点来介绍2-3-4树。 2-3-4树 1 概念介绍 2-3-4树是四阶的 B树(Balance Tree),他属于一种多路查找树,它的结构有以下限制: 所有叶子节点都拥有相同的深度。 节点只能是 2-节点、3-节点、4-节点之一。 2-节点:包含 1 个元素的节点,有 2 个子节点; 3-节点:包含 2 个元素的节点,有 3 个子节点; 4-节点:包含 3 个元素的节点,有 4 个子节点; 所有节点原创 2021-06-14 22:40:56 · 5338 阅读 · 2 评论 -
Java集合核心内容之二叉树,大厂越来越注重基础了,建议收藏
数组查询的效率很高但是添加和删除的效率会很低,链表的添加和删除的效率很高但是查询的效率又很低,这时有没有更好的选择方案呢?这时二叉树出现了。 二叉树 1 相关概念 二叉树:每个子节点只有两个节点的树,每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。 二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质: 任意节点左子树不为空,则左子树的值均小于根节点的值 任意节点右子树不为空,则右子树的值均大.原创 2021-06-14 22:30:23 · 26137 阅读 · 49 评论 -
Java集合核心内容之数组和链表,大厂越来越注重基础了,建议收藏
现在出去找工作,如果你不能很好的和面试官去聊聊Java基础里面的算法和用到的数据结构,基本是没戏的,所以本篇开始我们会给大家详细的聊聊Java集合中的相关实现涉及到的数据结构和算法实现,本文先来介绍下最最简单的数据结构,数组和链表。 一、数组 数组是我们使用到的最简单的一个数据结构,数组的使用 // 动态初始化:初始化时由程序员只指定数组长度,由系统为数组元素分配初始值 char c1[] = new char[5]; // 静态初始化: 初始化时由程序员显示置顶每个数组的初始值,由系统决定数组原创 2021-06-14 22:14:44 · 18687 阅读 · 30 评论 -
给大伙来梳理下Java中的各种锁的分类
大伙在面试的时候应该会经常碰到线程 并发方面的问题,而且也会问到你各种分布式锁的概念,本文就给大家整理了下各种锁的分类,希望对你有所帮助。 锁的分类 我们先总体的来看看有哪些具体的分类 序号 分类 1 乐观锁/悲观锁 2 独享锁/共享锁 3 互斥锁/读写锁 4 可重入锁 5 公平锁/非公平锁 6 分段锁 7 偏向锁/轻量级锁/重量级锁 8 自旋锁 一、乐观锁/悲观锁 注意,乐观锁与悲观锁并不是具体的两种锁的实现,而一种设计思想。 乐观锁 顾名原创 2020-06-12 18:27:08 · 1637 阅读 · 0 评论 -
虚拟机字节码指令表
字节码 助记符 指令含义 0x00 nop None 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2 将int型2推送至栈顶 0x06 iconst_3 将int型...原创 2019-03-13 21:23:00 · 2342 阅读 · 1 评论 -
JVM中的类加载器
类加载器 把类加载阶段中的"通过一个类的全限定名来获取描述此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类,实现这个动作的代码模块称为类加载器。 自定义类加载器 现在有个需求在项目中我们需要加载一个特定目录下的class文件【c:\tools\myClassLoader】,这时我们需要自己来定义特定的类加载器。 1.创建自定义类加载器 ...原创 2019-03-11 00:31:50 · 1936 阅读 · 0 评论 -
JVM中类加载的过程
前面看了类加载的时机,本文来记录下类加载的过程,也就是加载的每个阶段都做了哪些事情 类的生命周期 加载 "加载"是类加载过程中的一个阶段,在这个阶段虚拟机做了3件事 通过一个类的全限定名获取定义此类的二进制流 通过这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 在内存中生成一个代表这个类的 java.lang.Class对象,作为方法区这个类的各种数据访问的入口。 注...原创 2019-03-10 21:22:36 · 2016 阅读 · 0 评论 -
JVM中的垃圾收集器
垃圾收集器 前面介绍的收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。这里讨论的是JDK1.7 Update14之后的HotSpot虚拟机。该虚拟机包含的收集器如下: 注意:到现在为止还没有一个完美的收集器,通过比较我们可以在具体的应用中选择最合适的收集器,这个是我们的目的。 Serial Serial是最基本的,发展历史最悠久的收集器。单线程,垃圾收集的时候必须暂停所...原创 2019-03-02 23:01:02 · 2017 阅读 · 0 评论 -
JVM垃圾回收算法实现的方式
通过前面的介绍我们清楚了JVM中对象是如何判断存活及垃圾回收算法。那么垃圾回收的算法到底是怎么实现的呢?因为HotSpot虚拟机在对对象回收的时候对执行的效率要求是非常严格的,只有这样才能保证虚拟机的高效运行。 垃圾收集算法 枚举根节点 我们知道可达性分析算法是需要GC Roots对象的,而GR Roots对象的组成是这四种。 序号 类型 1 虚拟机栈(本地变量表)中引用的...原创 2019-03-01 22:59:41 · 2276 阅读 · 0 评论 -
Java虚拟机中对象内存的分配情况
在前面的文章介绍了对象在虚拟机中的创建过程。本文主要是介绍下对象在虚拟机中的内存布局分配情况。 JVM的内存对象介绍[创建和访问] 对象的内存布局 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头,实例数据和对齐填充。 对象头 ...原创 2019-02-20 17:50:16 · 2137 阅读 · 1 评论 -
JVM的内存对象介绍[创建和访问]
作为java程序员对应Object应该是非常熟悉的,但是对于对象在JVM中的一些情况并不是很清楚,所以本文就来记录下对象在JVM中的一些内容 对象的创建 java程序中创建对象的常用方式是: Object obj = new Object(); 该行代码的执行过程如下: 从图中我们可以发现对象创建的步骤如下 执行new执行 检查这个指令参数是否能够在常量池中定位到一个类的符号引用,并且检...原创 2019-02-18 23:32:34 · 2147 阅读 · 0 评论 -
java虚拟机运行时数据区介绍
最近打算将java虚拟机的相关知识点整理出来。本文先介绍下java虚拟机运行时分配的各个区域的作用 运行时数据区域 java虚拟机在程序执行的过程中会把它所管理的内存划分为若干个不同的数据区域,每个区域都有各自的用途。结构图如下: 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,这块区域是线程私有的。作用是当前线程所执行的字节码的行号指示器...原创 2019-02-14 22:10:53 · 2170 阅读 · 0 评论