Java高频面试考点场景题28

视频强调微服务高可用设计需平衡服务可用性、数据一致性与性能,重试、熔断、限流是一套防御体系。

面试者因机械背诵 MySQL 三层 B + 树理论数据而被面试官质疑。

理论计算:视频拆解 2000 万数据的来源,基于 InnoDB 默认 16KB 页大小、每条记录 1KB、非叶子节点索引键 + 指针 14 字节的假设,通过 1170×1170×16 的计算得出约 2190 万的理论值。

实际差异:视频指出实际存储量取决于行大小,行宽几十 KB 的表一页可能仅存一条数据,而行宽几十字节的表存 2000 万无压力,甚至有 5 亿数据的表因索引设计合理仍可高效运行。

面试建议:视频强调面试时需说明 2000 万是理论估算,实际需结合行宽和查询场景,补充实际业务经验可提升面试官认可度。视频通过具体案例和计算过程,解释了理论与实际存储量的差异及面试应答策略。

用户付了款还是待支付

业务分级:区分强一致性与最终一致性读,强一致性读(如订单详情页)强制走主库,最终一致性读(如历史订单)走从库。

降级与兜底:监控主从延迟,超过阈值自动切回主库;写入时返回版本号,读请求校验版本;热点数据应用层缓存。

架构优化:开启 MySQL 并行复制提升同步速度;核心写操作后延迟几十毫秒;大促期间强制读主库。

视频通过真实线上事故案例,考察开发者对数据一致性在读写分离下的理解深度。

视频中对 ThreadLocal 的错误说法可能导致面试者误解其内存泄漏原理。

内存泄漏原理:ThreadLocal 的 Map 中,key 是 ThreadLocal 实例的弱引用,会被 GC 回收,但 value 是强引用。若线程(如核心线程)长期存活且未手动清理,value 会持续占用内存,最终引发 OOM。

解决方法:一是使用后必须在 finally 代码块中调用 remove 方法;二是将 ThreadLocal 定义为 static final,减少弱引用实例;三是利用 JDK8 及以上版本的自动清理兜底机制,但不能替代手动 remove。

核心结论:ThreadLocal 的 Map 与线程绑定,线程不销毁则 value 持续占用内存,必须主动清理。

视频强调手动调用 remove 是解决内存泄漏的最可靠方案。

华为高级架构岗面试中,48 核 CPU 满载却无死锁的问题,暴露了候选人对多核环境底层原理的认知盲区。

死锁误区:死锁本质是线程阻塞等待,CPU 应空闲,而 48 核满载说明核心在被调度,面试官借此考察候选人是否突破思维定势。

三大真凶:视频指出 CAS 自旋锁引发的总线风暴、伪共享导致的缓存行失效、缺乏安全点的长循环拖慢全局 STW,是多核环境下 CPU 满载的隐蔽原因。

排查步骤:视频给出三步排查法,包括抓高耗能线程、用 Arthas 火焰图定位问题、针对不同原因优化,如将 AtomicLong 换为 LongAdder 解决 CAS 争抢。

视频提供了该面试题的标准答案模板,涵盖底层原理分析与落地优化方案。

用分布式锁解决缓存击穿的方案被指 "用大炮打蚊子"。

缓存击穿定义:热点 Key 在 Redis 中过期瞬间,大量请求同时查库导致数据库压力剧增。

分布式锁方案问题:作者认为该方案过度复杂,本质应直接从 MySQL 查数据再加载回 Redis,正常配置的 MySQL 能承受短时间内 500 个请求,且热点数据已在 MySQL 的 BufferPool 缓存。

替代方案:建议将 Key 设为永不过期或采用逻辑过期 + 异步刷新,避免在请求链路上加锁。

慢查询处理:慢查询应优化根因而非依赖分布式锁,分布式锁无法解决系统隐患。

视频最后提出问题:若热点 Key 更新频繁(如秒杀库存),应如何解决。

相关推荐
掘金_答案4 分钟前
上线那天,一个 ConcurrentHashMap 差点送走我的 AI 客服——3 天排查 JVM 血泪史
java·后端·架构
怪兽学LLM10 分钟前
LeetCode 105. 从前序与中序遍历序列构造二叉树:分治递归思路详解
算法·leetcode·职场和发展
JackieZhengChina31 分钟前
零依赖轻量级JS悬浮提示插件title2tip-js的使用教程
开发语言·javascript·ecmascript
MindUp36 分钟前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维
NG4771 小时前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程
QQ骞1 小时前
【ECU-HIL 嵌入式车载软件测试学习路线和面试描述方式(1)】
学习·面试·职场和发展
坐而论道_1 小时前
兼容低版本 Android:让现代 Web 应用在旧 WebView 上稳定运行
前端·面试
程序员天天困1 小时前
优雅记录操作日志:从注解到 SpEL 的全链路实践与开源方案对比
java·后端
ssshooter1 小时前
Promise 和 async/await 被 try-catch 包裹时的行为差异
前端·javascript·面试
战血石LoveYY2 小时前
Integer类型超限,导致数据异常
java·算法