arrays.copyof用法

看完这篇ArrayList,offer还不来?

前言我们在提高开发效率,也应该提高代码的执行效率,注重代码的质量。如何提高,其中的一个好办法就是阅读源码,知其然知其所以然。下面我就以面试问答的形式学习我们的最常用的装载容器——ArrayList(源码分析基于JDK8)问答内容1.问:ArrayList有用过吗?它是一个什么东西?可以用来干嘛?答:有用过,ArrayList就是数组列表,主要用来装载数据,当 …

大顶堆的实现(基于数组存储的完全二叉树)

完全二叉树完全二叉树的定义满二叉树非完全二叉树,非满二叉树完全二叉树完全二叉树的特点叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。完全二叉树的实现二叉链表:直观,但占用内存大。数组:简洁,但拓展麻烦。比较推荐使用数组存储,本文也将基于数组存储介绍大顶堆的实现。基于数组存储的完全二叉树节点与数组下标的关系假设完全二叉树的 节点 A 存储在 …

高级排序算法之快速排序 快速排序示例

前言今天继续算法学习,本次学习的是高级排序之快速排序。本文代码部分存在调用公共方法,可在文章:简单排序算法之冒泡、插入和选择排序-Java实现版 ,高级排序之归并排序、希尔排序。中查找相关方法,另外,本文也提供测试时使用的完整代码,对其他算法不感兴趣,可在文末找到完整源代码。快速排序快速排序的本质就是把一个数组划分为两个子数组,然后递归地调用自身为每一个数组 …

面试官:你都工作3年了,怎么连ArrayList是线程不安全都没有搞清楚

作为一名java程序员,对ArrayList,相信再熟悉不过了。这个类我们平时接触得最多的一个列表集合类。面试时,也有不少面试官会针对此知识点考察求职者。小爱最近又去面试了,最近到某知名互联网公司面试,做了笔试题后,面试官刚好问ArrayList是线程安全还是非线程安全?小爱说是非线程安全,面试官问,你能说说为什么是非线程安全吗?小爱一时间说不出个所以然。面 …

JVM运行时内存区域划分 jvm内存分为几个区域

1. 概述Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域。它们各有用途,有些随着虚拟机进程的启动一直存在(堆、方法区),有些则随着用户线程的启动和结束而建立和销毁(程序计数器、虚拟机栈、本地方法栈)。《Java 虚拟机规范》中规定 Java 虚拟机管理的内存包括以下几个区域:下面简要分析各个区域的特点。2. JVM …

JVM系列-使用jmap和MAT进行堆内存分析

引言Java程序运行中常常会遇到各种关于内存的问题,例如内存泄漏、内存溢出、内存使用率太高等问题,如果没有合适的工具和方法,则定位问题时常常感觉难以入手。本文介绍如何使用Jmap配合MAT进行Java堆内存分析,快速定位问题。一、使用Jmap获取堆内存信息1.1 作用Jmap是Java提供的用于打印进程的堆内存信息的命令,使用这个命令可以查看堆内存的具体使用 …

Java 最细的集合类总结 常用的java集合类

数据结构作为每一个开发者不可回避的问题,而 Java 对于不同的数据结构提供了非常成熟的实现,这一个又一个实现既是面试中的难点,也是工作中必不可少的工具,在此,笔者经历漫长的剖析,将其抽丝剥茧的呈现出来,在此仅作抛砖引玉,望得诸君高见,若君能有所获则在下甚是不亦乐乎,若有疑惑亦愿与诸君共求之! 本文一共 3.5 W字,25 张图,预计阅读 2h。可以收藏这篇 …

Arrays.asList() 数组转换成集合酿成的线上事故

引言在Java开发中,数组与集合之间的转换是一个常见的操作。Arrays.asList()方法因其简洁的语法和便捷的使用方式,被广泛应用于将数组转换为集合(如List)。然而,这个看似简单的方法背后却隐藏着一个大坑,如果不小心处理,可能会导致线上事故,本文也是本人自身项目遇到的惨痛经历,希望能够通过讲解这个问题,让大家在实际工作中避开这个坑。事故回顾这个问题 …