首页
AI Coding
数据标注
NEW
沸点
课程
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
Java场景面试题
用户6854537597769
创建于2025-10-08
订阅专栏
用于场景面试
等 10 人订阅
共290篇文章
创建于2025-10-08
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
并行流Parallel Stream:便捷但有陷阱🌊
一、基本使用 串行 vs 并行 二、底层实现 ForkJoinPool 自定义线程池 三、使用陷阱⚠️ 陷阱1:线程安全问题 陷阱2:IO操作 陷阱3:任务太小 四、适用场景判断 ✅ 适合并行流 CP
高性能对象池:对象复用的艺术🏊
一、为什么需要对象池? 问题:频繁创建销毁对象 解决:对象池复用 二、简单对象池实现 三、Apache Commons Pool 四、使用场景 数据库连接池:HikariCP、Druid 线程池:Th
Fork/Join框架:分治法的完美实践🌲
一、核心思想 二、基本使用 三、任务拆分策略 阈值设置 经验值 四、工作窃取(Work Stealing) 双端队列: 自己从头部取任务 别人从尾部偷任务 五、面试高频问答💯 Q: Fork/Join
Executor框架:任务与执行的解耦🏗️
一、Executor框架层次 二、核心接口 Executor 最简单实现: ExecutorService 三、设计思想 1. 任务抽象 2. 执行策略 3. 结果获取 四、生命周期管理 五、使用示例
手写无锁栈和队列:CAS的极致应用🔓
一、无锁栈(Treiber Stack) 实现 ABA问题解决 二、无锁队列(Michael-Scott Queue) 实现 三、性能对比 结果: 实现 吞吐量(ops/秒) 竞争程度 synchro
SynchronousQueue:零容量的交接站🎭
一、SynchronousQueue是什么? 核心特点 容量为0:不存储元素 直接交付:生产者阻塞,直到消费者取走 配对模式:生产者和消费者必须同时到达 生活类比 普通队列像快递柜📦: 快递员放进柜子
读写锁的锁降级:只降不升🔽
一、什么是锁降级? 锁降级(Downgrade)✅ 顺序: 写锁 → 读锁 → 释放写锁 = 降级成功 二、为什么不能锁升级? 锁升级(Upgrade)❌会死锁 原因: 三、完整的锁降级示例 缓存更新
并发三性:可见性、原子性、有序性🔺
一、可见性(Visibility)👁️ 问题:一个线程的修改,另一个线程看不到 解决方案 方案1:volatile✅ 方案2:synchronized✅ 方案3:Atomic类✅ 方案4:final✅
活锁检测与避免:比死锁更隐蔽🔄
一、什么是活锁? 死锁 vs 活锁 死锁: 线程阻塞,互相等待 活锁: 线程运行,但无进展 生活类比 死锁像两辆车在窄路相遇🚗🚙: 谁都不让,卡死 活锁像两个人在走廊相遇🚶🚶: 都想让路 同时左移 →
为什么禁止用Executors创建线程池?💣
一、Executors的三大陷阱 陷阱1:newFixedThreadPool - 无界队列OOM 源码: 问题: LinkedBlockingQueue默认容量Integer.MAX_VALUE(2
Future.cancel的假象:协作式取消🛑
一、Future.cancel的签名 参数: true:如果任务正在运行,发送中断信号 false:如果任务还未开始,取消;如果已开始,让它完成 二、cancel()的三种情况 情况1:任务还未开始
手写限流器:令牌桶与漏桶算法🚰
一、四大限流算法 1. 固定窗口计数器(最简单) 缺点: 临界问题 2. 滑动窗口(改进) 3. 令牌桶(Token Bucket)⭐推荐 特点: ✅ 支持突发流量(桶内有令牌就放行) ✅ 平均速率控
并发编程的内存泄漏场景:隐藏的杀手💣
一、ThreadLocal导致的内存泄漏⚠️ 问题代码 内存泄漏原理 正确做法✅ 二、线程池未关闭 问题代码 正确做法✅ 三、监听器未移除 问题代码 正确做法✅ 四、静态集合持有对象 问题代码 正确做
ThreadLocalRandom:并发场景的随机数生成器🎲
一、Random的性能问题 问题代码 Random的内部实现 问题: 所有线程竞争同一个seed,高并发下性能差! 二、ThreadLocalRandom的解决方案 正确用法 原理 关键: 每个线程独
优雅关闭线程池:shutdown vs shutdownNow🛑
一、两种关闭方式对比 shutdown() - 温柔派 行为: ✅ 不再接受新任务 ✅ 执行已提交的任务(队列中的继续执行) ⏳ 等待所有任务完成 生活类比: 餐厅打烊🍽️ 不接新客人 服务完已经点单
Exchanger:线程间的数据交换站🔄
一、Exchanger是什么? 核心概念 生活类比: Exchanger像快递代收点📦: 你把包裹放在代收点 等对方也放一个包裹 双方交换后各自取走 二、基本使用 输出: 三、实战场景 场景1:遗传算
DCL双重检查锁定的陷阱与修复💣
一、经典DCL单例模式 错误的实现❌ 二、问题:指令重排序 字节码分析 实际执行三步: 分配内存空间 初始化对象 instance指向内存 可能重排序为: 分配内存 instance指向内存(此时对象
线程安全过期缓存:手写Guava Cache🗄️
一、开场:缓存的核心需求🎯 基础需求 线程安全:多线程并发读写 过期淘汰:自动删除过期数据 容量限制:防止内存溢出 性能优化:高并发访问 生活类比: 缓存像冰箱🧊: 存储食物(数据) 定期检查过期(过
线程池拒绝策略:优雅说不的艺术🚫
一、开场:线程池什么时候会拒绝任务?🤔 触发拒绝的条件 拒绝时机: 可视化: 二、JDK自带的4种拒绝策略🎯 策略1:AbortPolicy(中止策略)⛔ 默认 特点: 直接抛出RejectedExe
CopyOnWriteArrayList:写时复制的艺术🎨
一、开场:并发List的痛点😫 问题1:ArrayList线程不安全 问题: 数组扩容时并发修改 size计数不准确 数据丢失或覆盖 问题2:Collections.synchronizedList性
下一页