Java面试准备-Mysql

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Java面试准备-Mysql

Mysql常用的数据引擎有哪些


InnoDB:行及锁、主要有事务的支持,支持自增长列,支持外健约束,并发能力强。

MyISAM:全表锁、不支持事务、不支持外健,并发性能差,占用空间相对较少。

Memory:全表锁、速度快、存储内存中,重启数据会丢失。

Merge:MyISAM表的组合。

区别:

InnoDB不保存具体的行数,每次需要进行求和,也就是全表扫描、而MyISAM用一变量保存了整个表的行数,执行变量即可读出函数,速度很快。

InnoDB不支持全文索引、而MyISAM支持全文索引,查询效率更高。


数据库事务的特性


ACID:原子性、一致性、隔离性、持久性

原子性(Atomic):要么全部成功、要么全部失败。

一致性(Consistency):事务操作成功后,数据库状态和业务规则保持一致。

隔离性(Isolation):在并发操作时,不同的事务拥有各自的空间,彼此不互相干扰

持久性(Durabiliy):事务超过成功后,所有数据都需持久化到数据库中。


什么是索引


是Mysql高效获取数据的数据算法,通俗的讲:数据库的索引就好比一本书的目录,能够加快数据库表的查询速度。

索引往往是存在于磁盘中的,没有特别说明,默认是B+树结构。


SQL优化手段有哪些


查询不要用 select *

尽量减少子查询,采用联合关联查询

尽量减少not in 等查询效率比较低的查询条件,特别是整表扫描。

尽量避免where条件后面 使用 != <> 操作符,这样会导致全表扫描


简单说下 drop、delete、truncate的区别


drop 删除表、delete、truncate 删除表的数据。


什么是内连接、左连接、右连接


内连接(Inner Join):匹配两张表中相关联的记录

左连接(Left Join):除了匹配两张表相关联的记录外,还会匹配左表中剩余的记录,右表中位匹配到的字段用null表示

右连接(Right Join):除了匹配两张表相关联的记录外,还会匹配右表中剩余的记录


事务隔离级别


InnoDB采用的是可重复读,MVCC 不能解决幻读的问题,使用的是 Next-Key Lock 锁算法,可以规避幻读。


大数据量表该如何优化


限定数据查询范围:比如查询订单的时候,默认查询当天的

读写分离:主负责写、从负责读,根据场景,可以1住多从

垂直分区:根据数据表进行相关拆分,把一张表拆成多张表

水平拆分:保持数据结构不变,通过分片的方式存储到分布式数据库中。

数据库分片两种方式:客户端代理:封装在Jar包中、Sharding-JDBC

中间件代理:在应用和数据库中间加一个代理层,Mycat。


说说Mysql一条查询语句是如何执行的


获取连接:使用mysql连接器

查询缓存:mysql8.0已删除,不建议使用

分析器:分析词法和语法,一般语法错误就在这个地方

优化器:表里有多个索引的时候,决定采用什么索引,或者关联顺序

执行器:执行器判断执行条件,然后进行执行


什么时候不要使用索引


经常增删改的不要简历索引

有大量重复的列不要建立索引

表记录太少不要简历索引


什么是MVCC


多版本并发控制:是一种用来解决读写冲突无锁控制,为每一个修改保存一个版本,在读操作时不用阻塞写操作,在写操作时不用阻塞读操作,避免了脏读和不可重复读。


Mysql中的锁


共享锁:不阻塞,多个用户可以同一时刻读取相同的资源,相互之间没有影响。

排他锁:一个写操作阻塞其他读锁和写锁,这样只允许一个用户进行写入,防止其他用户读取正在写的内容。

表锁:MyISAM就是默认表锁

行锁:容易出现死锁,并发高,InnoDB支持行锁,但必须有索引,不然就是表锁。


什么时候锁会升级


Mysql行锁只能存在于索引上,因为InnoDB把主键和相关的行数据放在B+树的叶节点上面,如果索引不存在,自动升级为表锁

当非唯一索引操作一定数量时,也就是数据的一半时,这个时候索引的消耗会比表锁消耗更多,这个时候行锁自动升级为表锁


怎么避免数据库死锁:


设置锁等待操作时间,及时失败获取,也能退出程序,不至于一直等待导致死锁

保持事务简短,不要过长,减少开销

事务隔离级别顺序执行


使用Mysql索引的时候应该注意什么


查询的时候尽量少用 !=,比较、函数 等,导致索引失效全表扫描

复合索引遵循偏左原则

如果mysql索引扫描比较慢,会升级为全表扫描

列类型是字符串时,必须加引号,不然搜索也会失效

表字段可以为null的,索引是不生效的

like查询 %在前面的是不走索引的,走全表扫描

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
60 2
|
23天前
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
1天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
40 26
|
11天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
35 14
|
28天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
5天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
29天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
52 4
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
86 4
|
1月前
|
SQL 算法 关系型数据库
面试:什么是死锁,如何避免或解决死锁;MySQL中的死锁现象,MySQL死锁如何解决
面试:什么是死锁,死锁产生的四个必要条件,如何避免或解决死锁;数据库锁,锁分类,控制事务;MySQL中的死锁现象,MySQL死锁如何解决
|
6天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。