主题
面试速答(先看这里)
**一句话结论:**Java7年,技术专家,供应链财务,开发+设计+管理,应收应付\清结算\dubbo,架构设计,资损防控有经验心得。
60秒标准回答:
Java7年,技术专家,供应链财务,开发+设计+管理,应收应付\清结算\dubbo,架构设计,资损防控有经验心得
资损防控的平台的介绍。如何实现的?事前事中事后
事前:反查上游系统,做校验。(事务发消息,上游回滚了?)
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**资损防控的平台的介绍。
- **要点2:**分布式系统的数据一致性如何保证的?
- **要点3:**rocketMQ 如何保证消息不丢的呢?
- **要点4:**MQ 的顺序消息是如何保证有序的?
- **要点5:**资损防控的平台的介绍。
**记忆锚点:**laiyanhong-9tr5c → wwwyuquecom → zwpzru → https → 分布式锁 → TCC
关键取舍:
- 这里其实涉及到一个领域边界的问题,有些能力强的开发,总想着啥都自己多做一点,但是其实,我们应该想清楚,有些东西,到底放在哪里做才合适。
- 要有清晰的系统边界。
易错提醒:
- 分布式事务: 这里候选人说下游提供了一个解冻接口和转账接口,有的是会出现解冻了转账失败的问题。
加分表达:
- 而这个问题如果交给上游系统做,那一定是很复杂的。
追问准备:
- (事务发消息,上游回滚了?
- ) 事后:大数据平台,离线数据核对 事中:唯一键做幂等,分布式锁(脑裂?
- ),乐观锁,(上游的后门,bops入口?
- ) 你的系统做了很多反查的逻辑,帮上游系统做防错,这种高耦合的方案真的好吗?
面试者背景
Java7年,技术专家,供应链财务,开发+设计+管理,应收应付\清结算\dubbo,架构设计,资损防控有经验心得。
面试过程
> 资损防控的平台的介绍。如何实现的?事前事中事后 > > 事前:反查上游系统,做校验。(事务发消息,上游回滚了?) > > 事后:大数据平台,离线数据核对 > > 事中:唯一键做幂等,分布式锁(脑裂?),乐观锁,(上游的后门,bops入口?) > > 你的系统做了很多反查的逻辑,帮上游系统做防错,这种高耦合的方案真的好吗? > > 校验规则的配置,脚本校验。 > > 有考虑过遇到什么样的问题,或者业务上有什么变化后会考虑新的方案吗(准实时同步、准实时核对), > > 分布式锁会不会导致并发度降低?B端系统没有高并发? > > 分布式系统的数据一致性如何保证的?TCC最终一致性,还有其他的方案吗? > > 为什么不让下游提供一个原子性的冻结并转账接口? > > Seata,2PC 3PC XA, > > 消息最终一致性,有哪些点需要的呢?有哪些问题需要考虑? > > 下游系统接受到消息的时候会落库么?如何防止消息的重复消费? > > 二阶段提交和三阶段提交有什么区别?解决什么问题呢? > > 二阶段提交和TCC是一回事么? > > rocketMQ如何保证消息不丢的呢?异步发送、异步刷盘还能保证消息不丢吗? > > MQ的顺序消息是如何保证有序的?接收方先接收到了后发送的消息,这种怎么办? > > 假如让你实现一个消息队列,会如何实现?考虑哪些问题呢? > > 消息的消费会采用推还是拉呢?消息的推的功能如何实现呢?注册监听器到MQ上? > > 消息中间件和消费者网络这块是如何处理呢?
题目解析
> 资损防控的平台的介绍。如何实现的?事前事中事后 > > 事前:反查上游系统,做校验。(事务发消息,上游回滚了?) > > 事后:大数据平台,离线数据核对 > > 事中:唯一键做幂等,分布式锁(脑裂?),乐观锁,(上游的后门,bops入口?)
这部分是因为候选人主要做了个资损防控平台,并且简历&自我介绍中提到了有资损防控相关经验,所以问了一下关于资损防控的细节,主要分事前、事中和事后。
事务消息:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/gnqz6bpr1u8v2x9e
数据核对:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/ugim1pyrv3y6bf1c
幂等处理:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/vvvs64ryeu0ykkk2
> 你的系统做了很多反查的逻辑,帮上游系统做防错,这种高耦合的方案真的好吗? > > 校验规则的配置,脚本校验。 > > 有考虑过遇到什么样的问题,或者业务上有什么变化后会考虑新的方案吗(准实时同步、准实时核对),
这里面试者说自己在和上游交互的时候,自己做了很多反查的逻辑来确保数据一致性及做资损防控。所以这里抛出个问题,毕竟他工作7年,所以问问他,自己有没有想过更好的方案。
这也是很多人平时不会考虑的问题,其实很多时候,应该跳出来看一看,站在第三方的视角看看自己已有的方案是否最优。
这里其实涉及到一个领域边界的问题,有些能力强的开发,总想着啥都自己多做一点,但是其实,我们应该想清楚,有些东西,到底放在哪里做才合适。让他该放在哪里就放在哪里。要有清晰的系统边界。
> 分布式锁会不会导致并发度降低?B端系统没有高并发?
分布式锁是一定会降低并发度的,这没啥说的,锁的机制就是要做排队,排队了并发就会有所影响。
> 分布式系统的数据一致性如何保证的?TCC最终一致性,还有其他的方案吗? > > 为什么不让下游提供一个原子性的解冻并转账接口?
分布式事务:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/bfwb9ednaugso6g1
这里候选人说下游提供了一个解冻接口和转账接口,有的是会出现解冻了转账失败的问题。其实,这就是我们作为工作7年的同学,要有的架构思维,其实只需要下游提供一个原子性的 解冻并转账 接口就能很大程度上解决这个问题了。而且对于下游系统来说,他们做这个即合理有简单。而这个问题如果交给上游系统做,那一定是很复杂的。
> 消息最终一致性,有哪些点需要的呢?有哪些问题需要考虑? > > 下游系统接受到消息的时候会落库么?如何防止消息的重复消费?
消息重复问题:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/gsy5o14gmvfp69ci
> 二阶段提交和三阶段提交有什么区别?解决什么问题呢? > > 二阶段提交和TCC是一回事么?
2PC&3PC:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/vn6cvlh6gg93aid3
2PC 和 TCC:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/wp7t094gimyg7t27
> rocketMQ如何保证消息不丢的呢?异步发送、异步刷盘还能保证消息不丢吗? > > MQ的顺序消息是如何保证有序的?接收方先接收到了后发送的消息,这种怎么办? > > 假如让你实现一个消息队列,会如何实现?考虑哪些问题呢? > > 消息的消费会采用推还是拉呢?消息的推的功能如何实现呢?注册监听器到MQ上? > > 消息中间件和消费者网络这块是如何处理呢?
RocketMQ可靠性:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/vxei3p1fqdfysec2
顺序消息:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/fg1oavowoanwy7nh
消息队列实现:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/gki3em5gb1a24rng
推&拉:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/my89xqpkxbwqzz62