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 更新频繁(如秒杀库存),应如何解决。

相关推荐
user_admin_god1 小时前
Spring Boot 3 + WebFlux 企业级流式SSE接口最佳实践
java·spring boot·后端
fly_over1 小时前
AI Agent 开发实战教程(二):Prompt 工程与工具调用
开发语言·python·langchain·prompt·ai编程·ai agent
csbysj20201 小时前
并查集基础
开发语言
雨落在了我的手上1 小时前
初识java(四):程序逻辑控制
java·开发语言·前端
jllllyuz1 小时前
VC++ 读写 Excel 文件实现
开发语言·c++·excel
Lucky_ldy1 小时前
C语言学习:字符函数和字符串函数(内容丰富且易懂)
c语言·开发语言·学习
她说彩礼65万1 小时前
C# WIFI连接状态检测方法
java·spring·c#
小小编程能手1 小时前
C++文件从操作:
开发语言·c++
czxyvX1 小时前
5-Qt系统相关
开发语言·qt