✅7年后端技术专家,清结算,资损防控,架构设计

面试者背景

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

原文: https://www.yuque.com/hollis666/xkm7k3/gc4pi7z1uvhglrb2