Java面试题之分布式事务篇

简介: 关于分布式这块的面试中,面试官问得最多的就是如何解决分布式事务,用什么方法,还有没有更好的方法,题目是开放性的,所以结合工作中的遇到的问题和解决方案回答即可。

一.题目介绍


1.题目来源


实际面试中遇到,形式的话有书面解答也有口述。


2.题目


1)你是如何看待分布式系统,微服务架构的?


2)你系统里是如何处理分布式事务的?


二.具体解答


1.你是如何看待分布式系统,微服务架构的?


分布式系统,微服务架构在16年开始火,但是真正的普及是18年,其中有多少公司尝试使用这种新的架构体系可能数不胜数,分布式系统与传统的单体集成系统的最大区别是分为多个业务子服务,这些子服务为一个大的业务服务,而这套系统就是所谓的分布式系统,很多的公司一般在拆分微服务的时候都是按业务拆分,比如订单服务,会员服务,商品服务等等,按具体的业务拆分成子系统即微服务,但是其带来的挑战也是巨大的,之前在同在一个数据库里表,经过拆分以后会分到不同的数据库里,这时候想要查询一条包含其他业务的数据就得依靠一个数据中心去提供查询,还有就是分布式系统面临的最大问题,分布式事务的处理问题。


2.系统里是如何处理分布式事务的?


服务拆分后都会面临服务与服务之间交叉业务的处理,比如购买一件商品,先扣库存服务里相应商品的数量如何再发起支付在支付服务中扣除银行卡中的商品金额,如果扣库存时失败,没有处理接着往下走就有可能出现“超买”的情况,使所以在微服务里我们得保持服务与服务之间数据的一致性,也就是保证服务于服务之间的事务正常,那让我们来看看有哪些解决方案:


1)常见得有2PC、TCC和基于Spring的事务消息,但是2PC和TCC过于笨重,而且对系统代码侵入性很高,很多事务得嵌套到代码里,如果后期进行替换,工作量有点大


2)还有就是目前的开源项目中最稳定的Seata


3)中间表,针对订单这种有中间业务流转的,我们可以使用中间表结合ACK机制去确保数据的一致性


4)使用RocketMQ,目前的RocketMQ是支持事务消息的


三.题后思考


关于分布式这块的面试中,面试官问得最多的就是如何解决分布式事务,用什么方法,还有没有更好的方法,题目是开放性的,所以结合工作中的遇到的问题和解决方案回答即可。

自由
+关注
目录
打赏
0
0
0
0
2
分享
相关文章
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
109 14
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
57 13
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
87 9
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
103 16
|
2月前
|
Java中的分布式缓存与Memcached集成实战
通过在Java项目中集成Memcached,可以显著提升系统的性能和响应速度。合理的缓存策略、分布式架构设计和异常处理机制是实现高效缓存的关键。希望本文提供的实战示例和优化建议能够帮助开发者更好地应用Memcached,实现高性能的分布式缓存解决方案。
50 9
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
202 60
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
78 12
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
75 7
Java MyBatis 面试题
Java MyBatis相关基础面试题
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等