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