Java高频面试场景题19

微服务循环依赖调用引发的死锁,即使加超时和熔断降级也无法完全避免。

事故现象:凌晨两点线上系统大面积卡死,所有请求超时,但 CPU 利用率不足 10%,加机器扩容无效。

事故原因:服务 A 调用服务 B,B 调用服务 C,C 的底层老接口反向调用 A,形成循环依赖。服务 A 的 200 个线程全部被外部请求占用,无法处理 C 的反向调用,导致线程池耗尽引发死锁。

解决方法:使用链路追踪工具(如 Skywalking、Pingpoint)排查循环调用;重构微服务架构,禁止底层服务反向调用高层服务;隔离线程池,将接收外部请求和内部调用的线程池分开。视频强调技术调优需理解请求在线程池中的流转,而非仅背八股文。

3 年 Java 开发面试者仅能回答 MySQL 事务的 ACID 特性,无法解释底层实现逻辑。

核心考点:视频指出 MySQL 事务底层依赖锁、Redo Log、Undo Log、MVCC 四个机制。

机制作用:锁用于控制并发修改,保障隔离性;Redo Log 记录修改操作,实现持久性;Undo Log 存储历史版本,支持原子性回滚;MVCC 通过多版本控制,在不加锁的情况下实现读已提交和可重复读。

一致性实现:一致性并非由单一机制完成,而是原子性、隔离性、持久性三者共同作用的结果。

视频提供了包含 JVM、Spring、高并发、Redis、MySQL 等内容的 Java 面试题库。

仅用 MD5 校验 API 接口签名会被黑客篡改金额后重算签名,导致服务端误执行扣款操作。

防篡改方案:客户端将请求参数与保密的 AppSecret 拼接后计算签名,网络传输仅发送参数和签名,服务端通过相同方式验签,黑客因未知 AppSecret 无法生成合法签名。

防重放方案:客户端请求携带时间戳和一次性随机流水号(Nonce),服务端先校验时间戳是否在 60 秒内,再通过 Redis 检查 Nonce 是否已存在,存在则拦截,不存在则存入 Redis 并设置 60 秒过期时间。

安全补充:若 AppSecret 被反编译,可通过代码混淆、SO 动态库保护、HTTPS 证书双向绑定等方式提高破解成本。视频通过三层校验(时间戳、Nonce、签名)形成完整的 API 安全防护闭环。

全链路压测的流量隔离需从网关到中间件进行全环节改造。

流量打标:通过 HTTP 请求头添加特定标识(如 XTest Flag),由网关识别压测流量并标记为 "影子流量"。

全链路透传:使用 Spring 拦截器将标记存入 ThreadLocal,再通过 Feign/Dubbo 客户端拦截器将标记透传到下游服务,确保调用链全程携带标记。

基础设施隔离:数据库通过 MyBatis 拦截器替换表名到影子表;Redis 通过代理在 Key 前加前缀隔离缓存;消息队列通过影子 Topic 或标记过滤避免影响真实业务。

该设计需对网关、中间件等基础设施进行系统性改造。

电话簿的递进排序规则可直接解释 MySQL 联合索引的最左前缀法则,让你在面试中应对连环追问时不露馅。

电话簿类比:将联合索引(如姓名 + 年龄)比作按姓氏→名字排序的电话簿,找姓张的人或姓张且名三的人时索引生效,仅找名三的人时索引失效。

匹配规则:明确三个核心规则:不能跳过第一列(仅查 b=2 时索引失效)、不能跳过中间列(a=1 且 c=3 时 c 未用索引)、范围查询阻断后续字段(a=1 且 b>2 且 c=3 时 c 失效)。

连环追问:提出面试常见问题 ------where 条件顺序错误是否影响索引生效,引导观众在评论区留言。

视频指出计算机底层设计常与生活常识相通,理顺逻辑可提升面试表现。

面试者对 JDK1.7 的 ConcurrentHashMap 实现细节不了解,暴露了仅背诵知识点而未结合实际使用场景的问题。

JDK1.7 实现:通过继承 ReentrantLock 的 Segment 分段锁实现线程安全,默认创建 16 个 Segment。

JDK1.8 实现:写操作通过 CAS+synchronized 保证原子性,无哈希冲突时用 CAS 写入,有冲突时锁住链表头节点或红黑树根节点,避免全局锁。

扩容机制:支持多线程并发扩容,不阻塞读写操作。

视频强调面试准备需结合实际使用场景,重点掌握 JDK1.8 的实现逻辑即可。

相关推荐
初心未改HD1 小时前
Go语言net/http与Web开发:构建高性能HTTP服务
开发语言·golang
leoufung2 小时前
LeetCode 42:接雨水 —— 从“矩形法”到双指针的完整思考过程
java·算法·leetcode
小碗羊肉2 小时前
【MySQL | 第十一篇】InnoDB引擎
java·数据库·mysql
Dylan的码园2 小时前
Maven基础架构与整体认识
java·junit·maven
叼烟扛炮2 小时前
C++第一讲:C++ 入门基础
开发语言·c++·函数重载·引用·内联函数·nullptr
Ulyanov2 小时前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》:QML 声明式语法与霓虹按钮 —— 当 Python 遇见现代美学
开发语言·python·ui·qml·系统仿真·雷达电子对抗仿真
弹不出的5h3ll2 小时前
Ghost Bits:高位截断如何让 Java WAF 形同虚设
java·开发语言
码界筑梦坊2 小时前
113-基于Python的国际超市电商销售数据可视化分析系统
开发语言·python·信息可视化·毕业设计·fastapi
memories1982 小时前
Go 语言 Channel(管道/通道)
开发语言·后端·golang