xtransfer二面(Java社招)
面试题目
- 你觉得高并发场景里会有什么技术难点吗?
- 你们自研的脚手架有什么特点?
- 为什么要舍弃 DDD(领域驱动设计)开发模式?
- 除了代码结构,你觉得项目架构上有什么比较关键的亮点?
- 你在公司的绩效和晋升情况怎么样?去年晋升时你具体做了什么事情?
- 埋点重构项目的具体解耦方式是什么?
- 你有没有自己写的比较好的代码可以介绍一下?
- 重构方案中框架的具体设计是怎么约束的?
- 订单重复校验项目的挑战在哪里?
- 为什么会出现用户重复创单的 Bug?
- 你们的技术方案是如何实现业务幂等的?
- 你们的分布式锁在 Redis 里具体是怎么实现的?
- 分布式锁真的能完全解决幂等问题吗?
- 介绍一下分布式事务?项目中saga模式是为了解决什么问题?
- TCC模式如何处理空回滚?
参考解析
- 分布式锁与幂等性:分布式锁仅能保证对临界资源的排他性,但无法处理并发请求在锁释放后的数据状态检查,因此必须结合唯一索引(数据库)或Redis原子操作实现业务幂等。
- TCC空回滚处理:在TCC的Cancel阶段,若Try阶段未执行或未成功,需在Cancel中记录该分支已处理或直接返回成功,确保幂等性与数据一致性。
- DDD舍弃原因:通常是因为业务复杂度不足以支撑DDD的高抽象成本,或者项目迭代节奏过快,导致防腐层、领域层架构显得过于繁琐,影响交付效率。
- 分布式事务(Saga):Saga模式通过一系列本地事务组成的序列来保证最终一致性,适用于长流程事务场景,通过补偿机制应对节点执行失败,避免了分布式锁长时间占用资源。