用友金融 Java 一面:缓存一致性、AOP 与 MyBatis
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 能否介绍一下自己的背景?
- 项目以 Python 为主,你对 Java 熟悉到什么程度?
- 能实习多久,每周可以到岗几天?
- 对 Java 基础、数据库优化、索引和事务有哪些了解?
- 数据库优化有哪些常用方法?
- 如何处理 Redis 缓存与数据库的一致性?
- 除 MySQL、PostgreSQL 外,是否了解达梦等国产数据库?
- Agent 项目有哪些自己开发的部分,哪些使用了辅助编程工具?
- 对 Spring Boot 是否熟悉?
- AOP 是什么,适合处理哪些问题?
- MyBatis 的
#{}和${}有什么区别? - 项目如何用 Git 管理代码?
- 面试有几轮,何时会收到结果?
- 岗位具体承担什么业务?
- 团队如何协作和进行代码评审?
- 工作地点是否为北京总部,实习期间出差安排如何?
《参考解析》
数据库优化先确认慢在哪里
从实际 SQL、查询频率、返回行数和执行计划入手,区分扫描过多、排序、回表、锁等待与连接池等待。索引需要匹配过滤和排序方式;加索引也会增加写入成本,不能靠给每个字段都建索引解决问题。
缓存不能自动参加数据库事务
常见做法是数据库提交后删除相关缓存,再为删除失败安排可重试的补偿。还要考虑并发读把旧值重新写回的情况。设置过期时间可以限制部分旧值的存活时间,但不等于强一致;余额、库存这类关键判断应在具备相应事务或原子保证的数据层完成。
MyBatis 参数绑定与文本替换
#{} 通常生成预编译参数占位符,值由驱动绑定;${} 则把文本直接替换进 SQL。普通查询条件应使用参数绑定。表名、排序字段等不能直接作为值参数绑定的部分,应映射到服务端允许的标识符,不能把外部输入原样拼进去。
AOP 回答一个完整调用就够了
可以用审计日志举例:切点选中方法,代理在调用前后执行通知,目标方法继续承担业务逻辑。再说明同类内部调用通常绕过代理,以及异常、返回值怎样透传。Git 协作则讲自己实际用过的分支、提交和评审流程,不必把命令名全部背一遍。