广东元海Java后端开发实习一面面经
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 如何限制带有
@tool注解的大模型调用,避免查询到不应返回的隐私信息? - Java 类加载器有哪些?类加载机制是什么?
- 项目中的缓存优化是怎么做的?
- 分布式锁的看门狗会在锁到期时自动续期吗?
- 遇到慢查询时如何定位和解决?
- 聚簇索引和非聚簇索引有什么区别?
- MyBatis 中
#{}和${}有什么不同? - 什么是 CAS?
synchronized是什么?- OpenFeign 的使用步骤是什么?调用时网络请求的流程是怎样的?
《参考解析》
- 工具调用安全:服务端应按用户身份、租户和字段级权限生成工具参数白名单,并在执行前再次校验;模型输出只能作为请求意图,不能直接绕过授权读取或拼接敏感字段。
- 类加载:常见加载器包括启动、平台和应用类加载器,按双亲委派顺序尝试加载。类生命周期通常经历加载、验证、准备、解析、初始化,委派模型可避免核心类被重复或恶意替换。
- 缓存优化:先识别热点和一致性要求,再选择合适的过期时间、预热、互斥重建或逻辑过期策略;写路径要处理缓存击穿、雪崩和与数据库的最终一致性。
- 看门狗续期:分布式锁实现可在持有者仍存活且业务未完成时续期,但必须校验锁的唯一 token,并在进程异常时让 TTL 自然过期,不能无限续期。
- 慢查询:结合慢查询日志、执行计划和实际扫描行数定位瓶颈,再从索引、SQL 写法、数据分布和分页方式优化,修改后用同一负载复测。
- 索引类型:聚簇索引的叶子节点保存整行数据,非聚簇索引叶子保存索引键和行定位信息;InnoDB 主键索引是聚簇索引,二级索引回表可能带来额外开销。
- MyBatis 占位符:
#{}使用预编译参数绑定,能防止 SQL 注入;${}直接字符串拼接,只应对经过严格白名单校验的表名、排序字段等结构性片段使用。 - CAS 与 synchronized:CAS 以比较并交换实现无锁更新,但可能遭遇 ABA 和自旋开销;
synchronized由 JVM 管理互斥、可见性和异常释放,适合临界区清晰的同步场景。 - OpenFeign 流程:声明接口并启用 Feign 客户端后,代理根据注解生成 HTTP 请求,经编码器、拦截器和负载均衡客户端发送,响应再由解码器转换为返回对象。