当前位置: 首页 > news >正文

Java面试-MySQL事务

一、事务特性(ACID):

  • 原子性(Atomicity):事务是不可分隔的最小操作单元,要么全部成功,要么全部失败,如转账操作要么都完成要么都不完成。
  • 一致性(Consistency):事务完成时必须使所有数据保持一致状态,转账时一方扣款另一方必须加款。
  • 隔离性(Isolation):数据库系统提供隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,对数据的改变是永久的,即落盘操作。

二、并发事务问题及解决:

  • 问题:并发事务有脏读(一个事务读到另一个未提交事务的数据)、不可重复读(同一事务先后读取同一条记录数据不同)和幻读(按条件查询无对应数据,插入时却发现数据已存在)三种问题。
  • 解决:通过MySQL的四种隔离级别解决,分别是读未提交(不能解决任何问题)、读已提交(解决脏读)、可重复读(解决脏读和不可重复读)、串行化(解决所有问题但效率低),MySQL默认隔离级别是可重复读。

三、Undo log和Redo log区别:

  • Redo log:记录事务提交时数据页的物理修改,由内存中的redo log buffer和磁盘中的redo log file组成,用于实现事务的持久性,采用先写日志(WAL)方式提升性能。
  • Undo log:记录数据被修改前的信息,是逻辑日志,用于事务回滚和MVCC,保证事务的原子性和一致性。

四、事务隔离性保证:

  • :如排他锁,insert、update、delete会自动添加,防止其他事务修改数据。
  • MVCC(多版本并发控制):维护数据多个版本,使读写无冲突,依赖隐藏字段(事务ID和回滚指针)、undo log(生成版本链)和readview(快照读依据,定义数据访问规则)实现,不同隔离级别下readview生成方式不同。
    已帮你记录好《MySQL相关内容讨论》,详细内容请点击下方查看:
    MySQL相关内容讨论
    会议讨论了MySQL主从同步原理和分库分表的相关内容,包括其概念、策略和应对问题的方法等,具体如下:

五、主从同步原理:

  • 提问时机:面试官问主从同步原理问题的时机,一是面试者之前提过主从,二是简历上说过主从相关内容。
  • 应用架构:Java应用先连接数据库中间件,中间件至少连接主库和从库,主库负责写数据,从库负责读数据。
  • binlog日志:即二进制文件,记录数据定义语言(DDL,如create、alter、drop)和数据操纵语言(DML,如insert、update、delete)操作,不包含查询操作。
  • 同步流程:主库数据变化时将变化数据写入binlog日志;从库的IO THREAD线程从主库binlog日志读取数据并写入从库的中继日志(relay log);从库的SQL Server线程读取中继日志文件并重新执行命令,实现主从数据同步。
  • 面试回答:强调binlog日志记录DDL和DML操作,主库将变化数据写入binlog,从库读取并写入中继日志,再从中继日志读取数据写入自身数据库实现同步。

六、分库分表概述:

  • 需求背景:主从架构主要解决访问压力和读写分离问题,无法解决海量数据存储问题。当单表数据量达到1000万或单表存储超过20G,或业务数据增多、用户量上升导致出现IO瓶颈和CPU瓶颈时,需要分库分表。
  • 主要作用:分库分表可解决存储压力,增加用户连接数。
  • 分库分表策略
    • 垂直分库:以表为依据,按业务将不同表拆分到不同库中,如电商数据库按用户、订单、商品业务拆分为三个库。类似微服务架构,每个微服务对应一个数据库。特点是按业务分级管理,可在高并发时提高磁盘IO和数据量连接数。
    • 垂直分表:以字段为依据,将不常用字段和大文本、二进制大字段拆分到不同表中,如将商品描述字段从SKU表拆分到附件表。拆分后可实现冷热数据分离,减少IO争抢。
    • 水平分库:将一个库的数据拆分到多个库中,各库存储数据不同,所有库数据总和为业务全量数据。查询时可按ID取模或ID范围路由。可解决单库大数据量高并发的性能瓶颈问题,提高系统稳定性和可用性。
    • 水平分表:将一个表的数据拆分到多个表中,表可在同一库内。操作时按区域模方式查找、存储、删除。可优化单表数据量过大的性能问题,避免IO争抢,减少锁表几率。
  • 分库分表后的问题及解决方法
    • 产生的问题:包括分布式事务问题,可能导致事务不一致;跨节点关联查询和跨节点分页排序问题;主键重复问题。
    • 解决方法:使用中间件,如Mycat、ShardingSphere,可降低开发难度,解决上述问题。
  • 面试回答建议
    • 介绍业务:根据简历项目介绍业务,说明达到分库分表量级的情况。
    • 选择策略:海量数据存储优先选水平分库;水平分表解决单表存储和性能问题,实际开发用得相对少;垂直分库在微服务项目中常用,可提高磁盘IO和网络连接数;垂直分表可分离冷热数据,多表查询互不影响。同时要考虑中间件使用问题。
http://www.dtcms.com/a/356831.html

相关文章:

  • Word文档怎么打印?Word打印技巧?【图文详解】单面/双面/指定页面/逆序等Word打印选项
  • 微信小程序中蓝牙打印机中文编码处理:使用iconv-lite库
  • Java 大视界 -- Java 大数据在智能安防入侵检测系统中的多模态数据融合与检测精度提升(405)
  • 将数据赋值到多个文档里,并将多个word放入压缩包并下载
  • Elasticsearch 9.X 使用推理 API 进行语义搜索
  • JAVA 请求第三方接口,将JSON数据转为对象
  • 微软正在公开测试其首个完全自主训练的大语言模型——MAI-1-preview
  • week5-[二维数组]翻转
  • 【性能优化】Unity 渲染优化全解析:Draw Call、Batch、SetPass 与批处理技术
  • 整理python接口自动化相关——10、自动考虑点(待续)
  • 动态规划--Day02--爬楼梯--2466. 统计构造好字符串的方案数,2533. 好二进制字符串的数量,2266. 统计打字方案数
  • 匠心传承,古韵新生——记木雕名家龙巍的艺术人生
  • v-model与v-bind区别
  • 吴恩达机器学习作业五:神经网络正向传播
  • Python Imaging Library (PIL) 全面指南:PIL基础入门-图像合成与处理技巧
  • 基于 Python asyncio 和币安 WebSocket 打造高频加密货币预警机器人
  • TypeScript: Reflect.ownKeys 操作(针对 Symbol)
  • Lenovo C225 一体机拆机维修教程
  • 2025牛客暑期多校训练营4 G Ghost in the Parentheses 题解记录
  • LoRA三种不同训练流程在配置和保存权重的差异(64)
  • 《Shell 大道:筑基篇(下)—— 流控筑根基,数据任驱驰》
  • shell学习笔记-实战:创建、运行与变量操作
  • Python Imaging Library (PIL) 全面指南:PIL基础入门-构建简易图像编辑器
  • matlab利用模糊算法控制PID参数实现模糊控制
  • LabVIEW实现跨 VI 簇按钮控制功能
  • 2026届大数据毕业设计选题推荐-基于Python的出行路线规划与推荐系统 爬虫数据可视化分析
  • 如何为在线医疗问诊小程序实现音视频通话功能?
  • Spring Boot整合MyBatis Plus实现多维度数据权限控制
  • Day17_【机器学习—在线数据集 鸢尾花案例】
  • Java面试实战:Spring Boot微服务在电商场景的技术深度解析