无锡友文物联科技Java一面面经
面试题目
- 基本信息,学校学了哪些课程?
- 你实习主要负责哪些内容?请概括一下。
- 你主要是负责后端开发,是吗?
- 你实习项目的整体技术架构是什么样的?你了解的多吗?
- 你负责的模块里,有没有你认为比较有意思 / 有难点的点,分享一下。
- 我看你有 MCP 相关的大模型应用实践,是做过小案例还是完整项目?
- 请你解释一下这个 Text to SQL 项目 / 论文里的核心技术实现。
- NL2SQL 的模型是你自己做的训练吗?
- 针对复杂 SQL 场景,怎么防止模型生成不安全的查询、全表扫描、大量数据返回的问题?
- 目前只支持生成查询类的 SQL 吗?
- 生成的 SQL 主要是针对结构化数据吗?
- AI 辅助开发这块,你用过哪些工具?
- 你了解 Skill 的相关规范吗?
- 你自己有写过哪些方面的 Skill 吗?
- 如果让你设计一个功能 Skill,你有什么设计思路?
- 讲一下 Java 并发操作中的 CAS 底层实现原理,以及相关的原子类。
- Java 并发包中有哪些实现的原子类?
- 多线程并发编排这块你用得多吗?
- 能举几个并发编排里常用的方法吗?
- 设计模式这块,挑一两个大概讲一讲。
参考解析
1. CAS底层实现原理:
CAS(Compare And Swap)通过 CPU 的 cmpxchg 指令实现,属于硬件原语。它包含三个参数:内存地址 V、旧预期值 A、要更新的目标值 B。只有当 V 的值等于 A 时,才将 V 更新为 B,否则重试或失败,保证了非阻塞同步。
2. Java并发原子类:
位于 java.util.concurrent.atomic 包中,如 AtomicInteger, AtomicLong, AtomicReference 等。底层多利用 Unsafe 类直接操作内存地址,并结合 CAS 操作确保原子性。针对高并发场景,推荐使用 LongAdder,它通过分段锁/数组槽来减少竞争。
3. 多线程编排常用方法:
常使用 CompletableFuture 进行异步编排,核心方法包括:supplyAsync(异步执行)、thenCompose(组合任务)、thenCombine(合并结果)、allOf(等待所有任务完成)、exceptionally(异常处理)。
4. 防止SQL注入与安全查询:
在 AI 生成 SQL 时,核心策略是:1. 强制使用参数化查询(PreparedStatement);2. 在 SQL 解析层增加权限校验,拦截全表扫描关键字(如无 WHERE 条件);3. 限制 LIMIT 最大返回条数;4. 在数据库层面使用只读账号进行查询操作。