最新内容

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

前言今天继续算法学习,本次学习的是高级排序之快速排序。本文代码部分存在调用公共方法,可在文章:简单排序算法之冒泡、插入和选择排序-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)。然而,这个看似简单的方法背后却隐藏着一个大坑,如果不小心处理,可能会导致线上事故,本文也是本人自身项目遇到的惨痛经历,希望能够通过讲解这个问题,让大家在实际工作中避开这个坑。事故回顾这个问题 …

ArrayList应该怎么用 arraylist

ArrayList是JDK提供的一个集合工具类,也是最常用的工具类之一。ArrayList特点底层数据结构为数组,查询快增删慢元素可重复,值可为null线程不安全经典面试题问题一:既然ArrayList底层的数据结构是数据,那么它的初始长度是多少,当数据增加时数组长度又是怎么增长的呢?从JDK源码我们看到ArrayList有两个构造函数:public Arr …

理解集合框架的扩展机制与实现细节,优化自定义集合的性能

一、集合框架基础(一)单列集合List 集合ArrayList:底层原理为数组,扩容机制为当添加元素时每次都会校验数组大小。当初始化一个空的集合时,第一次 add 元素时集合的大小会被初始化为 10。然后随着集合元素不断增加,当第 11 个元素插入时,这个时候集合需要扩容,扩容后的容量就是 10+10>>1=15。扩容完成后,需要将旧集合的元素全 …