面灵AI

用友金融 Java 一面:缓存一致性、AOP 与 MyBatis

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. 能否介绍一下自己的背景?
  2. 项目以 Python 为主,你对 Java 熟悉到什么程度?
  3. 能实习多久,每周可以到岗几天?
  4. 对 Java 基础、数据库优化、索引和事务有哪些了解?
  5. 数据库优化有哪些常用方法?
  6. 如何处理 Redis 缓存与数据库的一致性?
  7. 除 MySQL、PostgreSQL 外,是否了解达梦等国产数据库?
  8. Agent 项目有哪些自己开发的部分,哪些使用了辅助编程工具?
  9. 对 Spring Boot 是否熟悉?
  10. AOP 是什么,适合处理哪些问题?
  11. MyBatis 的 #{}${} 有什么区别?
  12. 项目如何用 Git 管理代码?
  13. 面试有几轮,何时会收到结果?
  14. 岗位具体承担什么业务?
  15. 团队如何协作和进行代码评审?
  16. 工作地点是否为北京总部,实习期间出差安排如何?

《参考解析》

数据库优化先确认慢在哪里

从实际 SQL、查询频率、返回行数和执行计划入手,区分扫描过多、排序、回表、锁等待与连接池等待。索引需要匹配过滤和排序方式;加索引也会增加写入成本,不能靠给每个字段都建索引解决问题。

缓存不能自动参加数据库事务

常见做法是数据库提交后删除相关缓存,再为删除失败安排可重试的补偿。还要考虑并发读把旧值重新写回的情况。设置过期时间可以限制部分旧值的存活时间,但不等于强一致;余额、库存这类关键判断应在具备相应事务或原子保证的数据层完成。

MyBatis 参数绑定与文本替换

#{} 通常生成预编译参数占位符,值由驱动绑定;${} 则把文本直接替换进 SQL。普通查询条件应使用参数绑定。表名、排序字段等不能直接作为值参数绑定的部分,应映射到服务端允许的标识符,不能把外部输入原样拼进去。

AOP 回答一个完整调用就够了

可以用审计日志举例:切点选中方法,代理在调用前后执行通知,目标方法继续承担业务逻辑。再说明同类内部调用通常绕过代理,以及异常、返回值怎样透传。Git 协作则讲自己实际用过的分支、提交和评审流程,不必把命令名全部背一遍。