Java高频面试场景题25

5 年 Java 开发因仅回答 "加索引、加缓存" 被面试官淘汰。

面试考点:面试官考察 MySQL 调优的实战与原理,而非基础操作。

调优三字诀:先查(开启慢日志、用 EXPLAIN 分析 SQL)、再治(优化索引覆盖、避免函数计算等)、最后省(减少不必要查询、使用缓存)。

总结要点:慢日志 + EXPLAIN 定位问题,覆盖索引 + 最左匹配原则,避免 SELECT*、函数计算、前置 % 模糊查询,排序和 JOIN 列需有索引且字符集一致。

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

分布式事务面试中,仅会使用 Seata 而不懂底层原理的求职者,80% 会被 P8 面试官淘汰。

核心痛点揭示:视频指出分布式事务的核心矛盾是跨服务、跨数据源无法像单机事务那样原子提交,而非简单的 "要么都成功要么都回滚"。

Seata 深度拷问:面试官追问 Seata AT 模式与传统 2PC 的区别、undo 日志作用、空回滚和悬挂问题,暴露求职者仅会调用 API 的问题。

方案拆解:视频详细拆解 5 种分布式事务方案,包括 2PC、TCC、SAGA、本地消息表 + 消息队列、最大努力通知,分析各方案的原理、优缺点及适用场景。

选型逻辑:强调分布式事务的核心是平衡一致性、可用性和性能,大多数互联网场景追求最终一致性即可。

视频最后指出,中级与初级后端的核心差距在于懂原理、会选型、能避坑,这也是大厂面试的必考点。

该问题的核心解法是通过SynchronousQueue的特性绕开队列存储逻辑。

线程池工作原理:视频拆解线程池任务处理四步流程,包括预热核心线程、添加阻塞队列、启用非核心线程、触发拒绝策略。

关键队列特性:SynchronousQueue 不存储任务,提交任务时若核心线程无空闲,直接尝试启用非核心线程,避免任务进入队列。

面试技巧:视频提供该问题的深度分析及回答思路,同时提及配套的学习路线图和高频面试题资源。

视频通过煎饼摊的类比解释 SynchronousQueue 的 "现做现卖" 特性,帮助理解任务不排队的实现逻辑。

代码双写方案在核心系统迁移中存在高风险。

零侵入数据同步:使用 Canal 订阅 MySQL 的 Binlog,结合 DataX 迁移历史数据,实现老系统代码零修改的存量与增量数据并行迁移。

数据校验与补偿:通过对账服务对比新老库数据,发现差异时触发补偿队列自动修正,需确保数据 100% 一致。

灰度切流:按内部测试账号、1% 真实用户、10%、30%、50% 的梯度切流,监控异常时秒切回老系统。

反向同步回滚:新库产生的增量数据通过反向 Canal 实时回写老库,确保流量切回时老库数据最新。

反向同步回滚链路是迁移架构中最关键的兜底机制。

统一权限控制系统的设计需覆盖数据模型、权限颗粒度、后端实现等六个核心维度。

核心数据模型:标准 RBAC 包含用户表、角色表、权限表、用户角色关联表、角色权限关联表 5 张核心表,复杂业务可引入 RBAC1 或 RBAC2。

权限颗粒度:分为菜单级、按钮 / 数据级权限,菜单权限用于前端动态渲染导航,操作权限在后端 API 拦截,数据权限需在 SQL 层面拼接过滤条件。

后端实现:推荐 Spring Security+JWT 方案,用户登录生成 JWT Token,后端通过拦截器解析 Token,从缓存加载权限列表与接口权限码匹配,可使用 @PreAuthorize 注解声明方法权限。

权限缓存与刷新:以用户 ID 为 key 在 Redis 缓存权限列表并设置 TTL,管理员修改权限后主动失效对应缓存,超级管理员可设置跳过权限校验。

前端配合:前端登录后获取菜单权限列表动态生成路由和导航,同时需注意前端仅做体验优化,真正校验需在后端完成。

审计与日志:记录权限交易失败操作及管理员对角色权限的变更记录,便于安全审计。

视频提供了基于 RBAC 模型的统一权限控制系统完整设计方案,可通过 Sa-Token 或 Spring Security 落地。

3 年经验 Java 后端候选人能熟练回答 Redis 缓存问题,但在缓存一致性场景题中卡壳。

场景题内容:用户修改商品名称后刷新页面仍显示旧名称,主包追问并发更新时如何避免旧数据回写、缓存删除失败如何处理。

主包期待答案:更新数据库后删除缓存 + 延迟双删(间隔 500ms 再删一次);缓存删除失败用消息队列重试,失败记录日志人工介入;并发写冲突用 Redis 分布式锁控制同一商品 ID 更新串行化;缓存设置合理过期时间(如 30 分钟),每日跑对账任务比对数据库与缓存数据,差异超阈值告警。

建议方向:建立缓存一致性方案清单,包含更新顺序、并发控制、失败重试、兜底策略;深入学习 Canal 订阅 MySQL binlog、延迟双删代码实现,在测试环境模拟并发更新场景验证方案有效性。

视频指出开发者对缓存一致性方案理解碎片化,缺乏落地细节和兜底思维。

相关推荐
沉默王二11 分钟前
面试结束后,我反问:“就面个实习至于上这么大强度吗?”面试官:“你对 RAG、Agent、MCP、Skill 理解得很到位,所以要求高一点。”
面试·agent·ai编程
假如让我当三天老蒯2 小时前
Options API(选项式 API) 和 Composition API(组合式 API)
前端·vue.js·面试
nanxun88618 小时前
记一次诡异的 Docker 容器"串包"故障排查
java
用户15630681035120 小时前
Day01 | Java 基础(Java SE)
java
行者全栈架构师1 天前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师1 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
假如让我当三天老蒯1 天前
前端跨域解决方案(学习用)
前端·javascript·面试
令人头秃的代码0_01 天前
mac(m5)平台编译openjdk
java
Colin草率地做慢慢地改1 天前
关于QuickStore这个项目的重构(2)- 数据库建表文件
后端·面试·架构
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试