无锡友文物联科技Java一面面经

无锡友文物联科技 · Java后端开发 · 一面 · 无锡 · 2026-03

面试题目

  1. 基本信息,学校学了哪些课程?
  2. 你实习主要负责哪些内容?请概括一下。
  3. 你主要是负责后端开发,是吗?
  4. 你实习项目的整体技术架构是什么样的?你了解的多吗?
  5. 你负责的模块里,有没有你认为比较有意思 / 有难点的点,分享一下。
  6. 我看你有 MCP 相关的大模型应用实践,是做过小案例还是完整项目?
  7. 请你解释一下这个 Text to SQL 项目 / 论文里的核心技术实现。
  8. NL2SQL 的模型是你自己做的训练吗?
  9. 针对复杂 SQL 场景,怎么防止模型生成不安全的查询、全表扫描、大量数据返回的问题?
  10. 目前只支持生成查询类的 SQL 吗?
  11. 生成的 SQL 主要是针对结构化数据吗?
  12. AI 辅助开发这块,你用过哪些工具?
  13. 你了解 Skill 的相关规范吗?
  14. 你自己有写过哪些方面的 Skill 吗?
  15. 如果让你设计一个功能 Skill,你有什么设计思路?
  16. 讲一下 Java 并发操作中的 CAS 底层实现原理,以及相关的原子类。
  17. Java 并发包中有哪些实现的原子类?
  18. 多线程并发编排这块你用得多吗?
  19. 能举几个并发编排里常用的方法吗?
  20. 设计模式这块,挑一两个大概讲一讲。

参考解析

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. 在数据库层面使用只读账号进行查询操作。