面灵AI

Xtransfer Java后端社招二面面经

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

《面试题目》

  1. 一个功能从前端到后端的完整链路如何设计?
  2. MyBatis Mapper 将数据插入数据库经历了哪些步骤?
  3. JDBC 数据库连接默认超时时间如何配置?数据库抖动时如何保证业务不出异常?
  4. String、StringBuilder 和 StringBuffer 有什么区别?为什么性能不同?
  5. Java 常见并发锁有哪些?各自优劣是什么?
  6. 反射原理及其问题是什么?
  7. @Configuration 注解底层做了什么?Spring 事务做了什么?
  8. 订单表如何设计索引?
  9. 如何实现多个生产者和多个消费者?

《参考解析》

  1. 设计要覆盖鉴权、参数校验、业务服务、数据访问、缓存、消息和观测,并明确超时、重试与幂等边界。
  2. Mapper 代理生成 SQL,参数绑定后经数据源获取连接、执行预编译语句,再映射结果并由事务管理器提交或回滚。
  3. 连接、读写和连接池超时应按链路分别配置;数据库抖动时限流、熔断、降级并保护线程池,恢复后补偿失败请求。
  4. String 不可变,拼接会产生新对象;StringBuilder 非线程安全但开销低,StringBuffer 通过同步保证线程安全,单线程拼接优先 Builder。
  5. synchronized 简单可靠,ReentrantLock 支持可中断、公平和多条件队列;读写锁适合读多写少,分布式锁需额外处理租约和故障。
  6. 反射运行时获取类型和调用成员,灵活但有访问、性能和可维护性成本;可缓存元数据并限制反射边界。
  7. Configuration 类由容器解析并注册 Bean,代理可保证配置方法返回单例;事务通过代理拦截方法,按传播级别开启、加入或回滚事务。
  8. 按高频过滤、排序和连接条件设计联合索引,遵循选择性和最左匹配,避免无效冗余索引。
  9. 生产者写入有界队列,消费者线程安全地取出并处理;用确认、重试、死信、幂等键和优雅停机保证可靠性。