- 博客(18)
- 收藏
- 关注
原创 【Java每日一练-Day15】Lock接口全解析!ReentrantLock与synchronized核心对比
AQS是Java并发工具的“基石”,许多并发类(如ReentrantLock、ThreadPoolExecutor、CountDownLatch等)都基于AQS实现。AQS的核心逻辑的是“状态管理+阻塞队列状态管理:AQS内部维护一个volatile修饰的int变量state,用于表示锁的状态(如state=0表示锁未被持有,state>0表示锁被持有,且state的值等于线程获取锁的次数——体现可重入性);阻塞队列。
2025-12-31 10:00:00
369
原创 【Java每日一练-Day14】synchronized底层实现全解析!锁升级与线程安全核心
核心逻辑:通过synchronized(锁对象)修饰代码块,锁对象可自定义(可以是this、Class对象,或任意Object实例)。仅对进入该代码块的线程进行互斥控制,粒度更细,性能更优(推荐优先使用)。// 自定义锁对象(推荐使用专门的锁对象,避免锁对象被意外修改)// 锁对象为lock,仅临界区代码被同步count++;// 临界区代码,保证原子性// 非临界区代码,多个线程可并行执行System.out.println("非临界区代码,无需同步");i++) {
2025-12-30 10:00:00
670
原创 【Java每日一练-Day13】Java线程入门:概念、创建方式与生命周期全解析
进程:操作系统进行资源分配和调度的基本单位,是一个正在运行的程序实例(如我们打开的Chrome浏览器、IDE,本质都是一个进程);线程:进程内部的一个独立执行流,负责执行进程中的部分代码逻辑(如Chrome浏览器中,一个线程负责渲染页面,一个线程负责处理网络请求)。NEW(新建状态):线程对象已创建,但未调用start()方法(此时线程未真正启动);RUNNABLE(可运行状态):调用start()方法后,线程进入此状态;
2025-12-29 10:00:00
1219
原创 【Java每日一练-Day12】Java集合框架大复盘!Collection与Map核心体系梳理
不允许null:TreeMap(key)、TreeSet(元素)、ConcurrentHashMap(key/value)、Hashtable(key/value)。:无序、不可重复、部分支持null元素(如HashSet允许1个null,TreeSet不允许),核心作用是“去重”;:有序(FIFO先进先出,优先级队列除外)、支持队列的入队(offer)、出队(poll)操作,用于实现排队逻辑。用户登录系统,需要存储已登录用户的“用户名-用户信息”映射,支持高并发的登录(添加)和注销(删除)操作;
2025-12-28 10:00:00
451
原创 【Java每日一练-Day11】TreeSet底层实现?有序去重原理与TreeMap关联一次说透!
原因分析:虽然两个“001”的Student对象equals返回false、hashCode不同,但定制排序的compare方法仅按id比较,返回0,TreeSet就认为是重复元素,因此第二个“001”无法添加成功。HashSet平均O(1),最坏O(n)(JDK1.8前)/ O(log n)(JDK1.8后)。:TreeSet提供headSet(获取小于指定元素的集合)、tailSet(获取大于指定元素的集合)、subSet(获取指定范围的集合)等范围查询方法,HashSet无此功能。
2025-12-27 10:00:00
764
原创 【Java每日一练-Day10】TreeMap底层实现?有序性如何保证?与HashMap核心区别
有序性核心:红黑树是一种“二叉查找树(BST)”,其特性是“左子树所有节点的key小于根节点key,右子树所有节点的key大于根节点key”,TreeMap通过红黑树的遍历(如中序遍历)实现key的有序输出;如何保证元素有序且不重复?原因:红黑树的查找、插入、删除操作都需要从根节点遍历到叶子节点,遍历的层数为树的高度,而红黑树是自平衡的,树的高度始终保持为log n(n为节点数量),因此时间复杂度稳定为O(log n)。实现,没有数组结构,核心是通过红黑树的特性保证key的有序性和查找效率;
2025-12-26 10:00:00
475
原创 【Java每日一练-Day9】HashSet底层实现?如何保证元素不重复?与HashMap的关联一次说透!
若key已存在(哈希值相同 + equals方法返回true):HashMap的put方法会返回旧的value(即PRESENT),HashSet会认为元素已存在,不执行添加操作;时,默认调用Object类的hashCode(),返回对象的内存地址哈希值;:HashSet不保证元素的存储顺序,也不保证顺序永久不变(如HashMap扩容时,元素的索引位置会变化,HashSet的遍历顺序也会变);若key不存在:HashMap会插入新的key-value对,HashSet会认为元素添加成功,返回true。
2025-12-25 10:00:00
1241
原创 【Java每日一练-Day8】HashMap线程不安全?ConcurrentHashMap线程安全实现原理
缺陷:Segment锁粒度仍不够细,当多个线程访问同一Segment时,仍需串行执行;:ConcurrentHashMap的读操作是弱一致性的,可能读取到旧数据(如扩容过程中未迁移完成的元素),但保证最终一致性,适合读多写少的并发场景。:仅保证单个操作(put、get、remove)的原子性,复合操作(如“先get判断是否存在,再put”)仍需手动加锁,否则可能出现竞态条件;锁粒度:从Segment锁(大粒度)细化到Node节点锁(小粒度),仅对哈希冲突的链表头节点或红黑树根节点加锁,其他节点可并行访问。
2025-12-24 10:00:00
910
原创 【Java每日一练-Day7】HashMap底层实现原理?JDK1.7vs1.8区别+哈希冲突解决
本文深入解析HashMap的底层实现,对比JDK1.7和1.8的核心差异。JDK1.7采用数组+链表结构,1.8引入红黑树优化查询效率。
2025-12-23 10:47:35
882
原创 【Java每日一练-Day6】ArrayList和LinkedList的区别?底层实现+性能对比+适用场景
Java集合框架中ArrayList和LinkedList的核心区别:ArrayList基于动态数组实现,支持快速随机访问(O(1)),尾部操作高效但中间插入/删除需移动元素(O(n));LinkedList基于双向链表实现,中间插入/删除高效(O(1))但随机访问需遍历(O(n))。
2025-12-20 10:00:00
603
原创 【Java 每日一练 - Day5】static 关键字全解析!静态方法 / 变量 / 代码块 + 面试避坑指南
今天咱们攻克 Java 基础中极具实用性的考点 ——static 关键字,这题不仅考用法,还常结合类加载机制、对象实例化流程出题,是面试高频加分项,赶紧往下看!3.不要滥用 static:静态成员生命周期长,过度使用可能导致内存泄漏(如静态集合缓存大量对象)。(提示:结合静态代码块、构造代码块、构造方法的执行顺序分析)。3.静态代码块、构造代码块、构造方法的执行顺序是什么?静态代码块 → 构造代码块 → 构造方法。与类的生命周期一致(JVM 退出时销毁)。与对象的生命周期一致(GC 回收时销毁)。
2025-12-19 20:03:49
517
原创 【Java 每日一练 - Day4】Java 异常体系全解析!Checked/Unchecked 区别+finally 避坑指南
本文解析Java异常体系核心知识点:1)异常继承结构以Throwable为根类,分为Error(系统错误)和Exception(程序异常);2)受检异常(CheckedException)需强制处理,非受检异常(UncheckedException)无需处理;3)try-catch-finally执行顺序及finally必执行特性,重点指出finally中return会覆盖try/catch返回值;4)提供异常处理最佳实践,如避免捕获通用异常、推荐try-with-resources语法等。文章最后通过代码
2025-12-18 15:00:38
852
原创 【Java 每日一练 - Day3】String、StringBuffer、StringBuilder 的区别?性能对比 + 适用场景一次说透!
底层实现 | final char []/byte [] | char [] | char [] |。| 适用场景 | 字符串不频繁修改 | 多线程 + 字符串修改 | 单线程 + 字符串修改 |。| 特性 | String | StringBuffer | StringBuilder |。| 线程安全 | 安全(无修改方法) | 安全(synchronized 锁)| 不安全 |。| 性能 | 最低(频繁创建对象) | 中等(锁开销) | 最高(无锁) |。二、深度拆解(面试加分项)。
2025-12-18 14:45:29
631
原创 【Java 每日一练 - Day2】== 和 equals 的区别?hashCode 和 equals 的关系?
HashMap 中会把 p1 和 p2 视为两个不同的 key,导致数据查询异常,违背 “相同内容的对象应作为同一个键” 的预期。:String、StringBuffer、StringBuilder 的区别?面试中如何回答性能对比和适用场景?(提示:intern () 方法会将字符串存入常量池,返回常量池中的引用)评论区留下你的答案:以下代码输出什么?
2025-12-17 10:00:00
592
原创 【Java 每日一练 - Day1】Java 基本数据类型 & 包装类,90% 的人都会踩的缓存池坑!
Java基本数据类型与包装类要点:包含8种基本类型(byte、short、int、long、float、double、char、boolean)及其对应的包装类。主要区别在于存储位置(栈/堆)、默认值(0/null)和泛型支持。重点掌握自动装箱拆箱机制及包装类缓存池特性(如Integer缓存-128~127)。面试需注意==比较陷阱,建议使用equals方法,并避免包装类空指针问题。Byte类型的缓存池范围为全部值(-128~127)。
2025-12-16 15:10:43
141
原创 主表跟关联表添加级联更新触发器
当我们两个表有一个字段做关联关系的时候,我们在更新一张表的关联字段的同时,想将另外一张表的关联字段也更新,这时我们可以在字段上添加触发器。在副表添加与主表关联的外键。
2024-07-07 09:40:27
410
原创 查询锁表进程并杀死进程
'sid'和'serial#'是查询锁表进程相对应查出来的字段。如果有ora-00031错误,则在后面加immediate;查询锁表进程(直接运行下列代码)
2024-07-06 13:49:32
473
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1