得物Java后端面经
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 分布式 ID 有哪些生成策略?各有什么优缺点?
- 常见 RPC 框架有哪些?各有什么优缺点?
- 如何定位和解决 JVM 内存泄漏?
- 项目中的日志如何处理?
- 扫码支付是如何实现的?
- 接口幂等性如何实现?
- 百万数据导入导出如何实现?有哪些注意事项?
- 分布式事务有哪些解决方案?如何实现?
- 订单掉单如何解决?
- 创建线程池有哪些参数?分别有什么作用?
- 项目中哪些地方使用了多线程?
《参考解析》
雪花算法适合高吞吐且可排序的长整型 ID,但必须处理时钟回拨;号段模式减少数据库访问但要接受号段空洞。RPC 选型要同时看协议性能、语言覆盖、服务治理和团队维护成本。
内存泄漏应通过 GC 曲线、堆转储和 GC Roots 定位,重点检查静态集合、监听器、ThreadLocal 和未关闭资源。日志要带请求/业务标识、级别和完整异常,异步落盘并脱敏。
扫码支付通常是下单生成二维码、用户支付、平台异步通知、验签更新订单,前端再查询状态兜底。幂等可组合业务唯一键、状态机、唯一约束和幂等令牌。大批量导入导出采用分页/流式读取与批量写入,控制内存和失败重试。
2PC 偏强一致但阻塞,TCC 侵入业务,Saga 和本地消息表更适合最终一致。订单掉单必须依赖平台重试、回调幂等和定时主动查询。线程池的核心线程数、最大线程数、存活时间、单位、队列、线程工厂和拒绝策略要结合业务压测配置。