
java知识
文章平均质量分 87
java基础,jvm
码代码的小仙女
这个作者很懒,什么都没留下…
展开
-
学习笔记10——并发编程2线程安全问题与同步机制
线程修改共享变量后,其他线程无法立即看到最新值(CPU缓存与主存不一致)。:编译器或处理器优化可能导致代码执行顺序与源码不一致,破坏预期逻辑。:多个线程对同一资源进行非原子操作,导致结果依赖线程执行顺序。:代码简洁,JVM 自动优化锁升级,适合大多数低竞争场景。可见性:一个线程修改共享变量后,其他线程能立即感知变化。使用读写锁:读操作频率远高于写操作(如热点数据缓存)。原子性:确保操作不可分割,要么全部执行,要么不执行。使用原子类:单一变量的原子操作(如计数器、标志位)。,导致程序行为不符合预期。原创 2025-03-07 07:22:37 · 773 阅读 · 0 评论 -
学习笔记05——HashMap实现原理及源码解析(JDK8)
HashMap通过数组存储Node节点解决快速定位问题,使用链表和红黑树处理哈希冲突。当执行put操作时,首先计算键的扰动哈希值确定桶位置。若发生哈希冲突,JDK8采用尾插法维护链表,当链表长度达到树化阈值时会转换结构提升查询效率。扩容时采用2倍扩容策略,通过位运算快速重新分配节点位置,这个设计避免了重新计算哈希的开销。需要注意的是,HashMap不是线程安全的,多线程put可能导致数据丢失或死循环(JDK7版本)。建议结合手写伪代码/流程图进行说明,展现对底层实现的深入理解。原创 2025-02-25 20:26:03 · 671 阅读 · 0 评论 -
学习笔记04——JMM内存模型
定义了线程如何与主内存(Main Memory)和工作内存(Work Memory)交互,解决多线程并发中的原子性、可见性、有序性问题。JMM定义的保证有序性的规则,若操作A happens-before 操作B,则A的结果对B可见。:所有线程共享的内存区域,存储变量(实例字段、静态字段等),类似于计算机中的物理内存。synchronized关键字:线程退出同步块时,会将工作内存中的变量写回主内存。// 主线程修改flag。:线程只能操作工作内存中的变量副本,修改后需同步回主内存。原创 2025-02-24 21:21:46 · 1192 阅读 · 0 评论 -
学习笔记03——《深入理解Java虚拟机(第三版)》类加载机制知识总结与面试核心要点
关键步骤继承类重写方法(非,避免破坏双亲委派)通过将字节码转换为Class对象代码示例@Override// 从自定义路径加载字节码...原创 2025-02-24 07:39:20 · 774 阅读 · 0 评论 -
学习笔记02——《深入理解Java虚拟机(第三版)》第三章
可达性分析:通过GC Roots链是否可达,具体列举至少4种GC Roots类型。原创 2025-02-23 15:23:09 · 628 阅读 · 0 评论 -
学习笔记01——《深入理解Java虚拟机(第三版)》第二章
一、概述理解JVM内存管理的核心设计思想,掌握内存区域的划分原理、对象生命周期与内存溢出(OOM)的根本原因及排查方法。第二章主要是围绕Java虚拟机的运行时数据区展开,详细介绍了Java虚拟机在运行Java程序时,如何分配和管理内存空间。作用:记录当前线程执行的字节码指令地址(分支、循环、跳转等依赖此区域),是一块很小的内存空间。特性:线程私有,生命周期与线程绑定。唯一无OOM的区域(无垃圾回收,无内存溢出)。核心功能:存储栈帧(Frame),每个方法调用对应一个栈帧的入栈与出栈。栈帧结构:局部变量表原创 2025-02-22 23:02:06 · 1109 阅读 · 0 评论 -
Java高级开发所具知识技能
通过系统掌握以上内容,能够胜任复杂业务场景下的架构设计、性能调优和分布式系统开发任务。建议结合实际项目,深入源码(如Spring、Netty、Kafka)理解实现原理。原创 2025-02-22 21:48:14 · 622 阅读 · 0 评论 -
Java多线程深度解析
在现代计算机架构中,多核CPU已成为主流。为了充分利用硬件资源,提升系统吞吐量和响应速度,多线程编程成为Java开发者必备的核心技能。然而,线程的创建、调度和同步也带来了复杂性——本文将深入剖析Java多线程的核心机制,并给出高并发场景下的实战解决方案。掌握Java多线程开发需要深入理解内存模型、锁机制和并发工具类。无锁 → 偏向锁(单线程) → 轻量级锁(CAS自旋) → 重量级锁(OS互斥量)真正的并发大师,不仅懂得如何创建线程,更懂得如何让线程优雅协作。原创 2025-02-21 21:54:24 · 998 阅读 · 0 评论 -
DAY01-如何合理配置线程池的核心参数
在Java中,如何合理配置线程池的核心参数(corePoolSize、maximumPoolSize、workQueue)?请结合不同的业务场景举例说明。:核心线程数,线程池长期维持的线程数量(即使空闲也不会被回收)。:最大线程数,线程池允许创建的最大线程数量。workQueue:任务队列,用于缓存待执行任务的阻塞队列。:线程数应与CPU核心数相近,避免过多线程导致频繁上下文切换。:可适当增大线程数,以利用线程等待IO时的空闲时间。:根据任务拆分比例调整,或通过压测确定最优值。原创 2025-02-20 19:42:35 · 377 阅读 · 0 评论 -
synchronized的8大应用场景分析
synchronized的8大应用场景分析synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; ---对象锁 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; --对象锁 3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; ---类锁 4.原创 2020-12-19 10:16:59 · 2219 阅读 · 2 评论 -
Java面试核心知识点1——JVM
1 JVM的运行机制我们知道JVM是用于运行Java字节码的虚拟机,主要包括一套字节码指令集、一组程序计数器、一个虚拟机栈、一个虚拟机堆、一个方法区和一个垃圾回收器。JVM运行在操作系统之上,不与硬件设备直接交互。Java源文件(.java文件)通过编译器被编译成.class文件(字节码文件),.class文件又被JVM中的解释器编译成机器吗在不同操作系统上运行(Windows,Mac,Linux)。每种操作系统的解释器都是不同的,但是基于解释器的虚拟机是一样的,这也是为什么Java能够跨平台的原因原创 2020-07-19 22:04:08 · 246 阅读 · 0 评论 -
多线程处理大数据量数据
最近公司需要一个新的需求,需要一个接口去跑数据。数据量还蛮大的,大约50-60万数据(一条一条执行),其中还涉及到与其他接口的交互,因此这些数据跑下来要耗时很久,因此设计了一个方案,使用多线程的方式进行处理。方案1 每次重数据库表中取一定量的数据(自己按实际情况定义)放在线程池缓存队列里,启动10个线程去线程池里去取数据。(相当于生产者和消费者的关系),这里需要有一个触发点,当我缓存里没有数据时,需要再次从数据库中再次获取数据。方案2 在数据库表中添加一个线程号字段,用来记录该条数据...原创 2020-07-01 22:22:25 · 6251 阅读 · 1 评论 -
深入理解Java虚拟机(Java面试常问知识点)
第一章 走进Java第二章 Java内存区域与内存溢出异常第一章Java程序设计语言、Java虚拟机、Java原创 2020-07-01 19:42:53 · 443 阅读 · 0 评论 -
若依管理系统用户管理-导出功能改造为EasyExcel
阿里巴巴的组件easyExcel原创 2020-05-10 17:42:44 · 3872 阅读 · 2 评论 -
JAVA集合总结——Set
1.java集合结构:java集合类主要有两个接口派生而出:Collection和map。Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类2.Set的介绍set表示数学意义上的集合概念。其主要的特点是集合中的元素不能重复,因此存入set中的每个元素都必须定义equals()方法来确保对象的唯一性。set接口中常用的几种方法:s...原创 2019-05-24 23:47:47 · 401 阅读 · 0 评论 -
ArrayList实现原理及源码解析
ArrayList简介: ArrayList实现了List接口它是一个可调整大小的数组可以用来存放各种形式的数据。并提供了包括CRUD在内的多种方法可以对数据进行操作但是它不是线程安全的,另外ArrayList按照插入的顺序来存放数据。ArrayList是一个动态数组,实现了List<E>, RandomAccess, Cloneable, java.io.Serial...原创 2019-05-27 09:46:27 · 358 阅读 · 0 评论 -
LinkedList实现原理及源码解析
LinkedList简介:LinkedList的底层是基于双向链表实现的,它具有插入删除快而查找修改慢的特点,此外,通过对双向链表的操作还可以实现队列和栈的功能。public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>,...原创 2019-05-27 10:29:47 · 537 阅读 · 0 评论 -
Java面试——基础知识
目录1.java平台无关性解释?2.java程序初始化的顺利是怎样的?3.java的作用域有哪些?4.什么是构造函数5.object中的方法1.java平台无关性解释?C/C++之所以不能跨平台,就是因为C/C++源程序是对平台编译的,所以与平台密切相关。如果有这样的一个环境:它既可以向下兼容(对平台兼容),又可以向上兼容(程序可以运行),那么不就可以跨平台了吗...原创 2019-05-23 11:16:30 · 155 阅读 · 0 评论 -
HashMap实现原理及源码解析
HashMap简介:在介绍hashmap之前,介绍几种常见的数据结构:数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平...原创 2019-05-27 16:41:56 · 192 阅读 · 0 评论 -
ConcurrentHashMap实现原理及源码解析
为什么要用ConcurrentHashMapHashMap线程不安全,而Hashtable是线程安全,但是它使用了synchronized进行方法同步,插入、读取数据都使用了synchronized,当插入数据的时候不能进行读取(相当于把整个Hashtable都锁住了,全表锁),当多线程并发的情况下,都要竞争同一把锁,导致效率极其低下。而在JDK1.5后为了改进Hashtable的痛点,Con...原创 2019-05-27 17:01:24 · 4099 阅读 · 3 评论 -
java高级工程师具备技能
转载 2019-06-06 10:40:08 · 1011 阅读 · 0 评论 -
java高级工程师具备技能
原创 2019-06-05 22:55:22 · 605 阅读 · 0 评论 -
2019Java面试整理——集合
1.HashMap与HashTable的区别 HashTable是线程安全,方法上添加了synchronized同步修饰,HashMap非线程安全 HashMap的key和value可以为空,HashTable的key不可以为空 HashMap继承AbstractMap,HashTable继承Dictionary,都实现了map接口 HashMap的初始容量是1...原创 2019-06-02 16:32:35 · 4091 阅读 · 1 评论 -
Java内存模型
原创 2019-06-24 09:13:41 · 172 阅读 · 0 评论 -
2019-JAVA基础部分
第一章 JAVA基础部分1.java平台无关性解释C/C++之所以不能跨平台,就是因为C/C++源程序是对平台编译的,所以与平台密切相关。如果有这样的一个环境:它既可以向下兼容(对平台兼容),又可以向上兼容(程序可以运行),那么不就可以跨平台了吗。基于这样的原理,Java在计算机的操作系统上又提供了一个Java运行环境——JRE(安装JDK)。 JRE由Java虚拟机,类库和一些核心文件组成,...原创 2019-05-24 16:37:28 · 165 阅读 · 0 评论