关键词:
20道常见MySQL数据库面试题+解析
-
事务四大特性(ACID)原子性、一致性、隔离性、持久性?
-
事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?
-
MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别?
-
MySQL的MyISAM与InnoDB两种存储引擎在,事务、锁级别,各自的适用场景?
-
查询语句不同元素(where、jion、limit、group by、having等等)执行先后顺序?
-
什么是临时表,临时表什么时候删除?
-
MySQL B+Tree索引和Hash索引的区别?
-
sql查询语句确定创建哪种类型的索引?如何优化查询?
-
聚集索引和非聚集索引区别?
-
有哪些锁(乐观锁悲观锁),select 时怎么加排它锁?
-
非关系型数据库和关系型数据库区别,优势比较?
-
数据库三范式,根据某个场景设计数据表?
-
数据库的读写分离、主从复制,主从复制分析的 7 个问题?
-
使用explain优化sql和索引?
-
MySQL慢查询怎么解决?
-
什么是 内连接、外连接、交叉连接、笛卡尔积等?
-
mysql都有什么锁,死锁判定原理和具体场景,死锁怎么解决?
-
varchar和char的使用场景?
-
mysql 高并发环境解决方案?
-
数据库崩溃时事务的恢复机制(REDO日志和UNDO日志)?
1、事务四大特性(ACID)原子性、一致性、隔离性、持久性?
原子性(Atomicity)
- 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
一致性(Consistency)
- 事务开始前和结束后,数据库的完整性约束没有被破坏。比如A向B转账,不可能A扣了钱,B却没收到。
隔离性(Isolation)
- 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。 持久性(Durability)
- 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
2、事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?
从理论上来说, 事务应该彼此完全隔离, 以避免并发事务所导致的问题,然而, 那样会对性能产生极大的影响, 因为事务必须按顺序运行, 在实际开发中, 为了提升性能, 事务会以较低的隔离级别运行, 事务的隔离级别可以通过隔离事务属性指定。
2.1事务的并发问题
(1)脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
(2)不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致。
(3)幻读:幻读解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。
例如:事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作 这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。 而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有跟没有修改一样,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。
2.2事务的隔离级别
事务隔离级别
-
读未提交:另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据脏读
-
不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果因此本事务先后两次读到的数据结果会不一致。
-
可重复读:在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。但是,会有幻读现象
-
串行化:最高的隔离级别,在这个隔离级别下,不会产生任何异常。并发的事务,就像事务是在一个个按照顺序执行一样
2.3 MySQL默认的事务隔离级别为repeatable-read
-
MySQL 支持 4 中事务隔离级别.
-
事务的隔离级别要得到底层数据库引擎的支持, 而不是应用程序或者框架的支持.
-
Oracle 支持的 2 种事务隔离级别:READ_COMMITED , SERIALIZABLE
2.3补充
-
SQL规范所规定的标准,不同的数据库具体的实现可能会有些差异
-
MySQL中默认事务隔离级别是“可重复读”时并不会锁住读取到的行
-
事务隔离级别:未提交读时,写数据只会锁住相应的行。
-
事务隔离级别为:可重复读时,写数据会锁住整张表。
-
事务隔离级别为:串行化时,读写数据都会锁住整张表。
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大,鱼和熊掌不可兼得啊。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。
21条MySQL性能调优经验
-
为查询缓存优化你的查询
-
EXPLAIN你的SELECT查询
-
当只要一行数据时使用LIMIT 1
-
为搜索字段建索引
-
在Join表的时候使用相当类型的例,并将其索引
-
千万不要 ORDER BY RAND()
-
避免 SELECT *
-
永远为每张表设置一个 ID
-
使用 ENUM 而不是 VARCHAR
-
从 PROCEDURE ANALYSE() 取得建议
-
尽可能的使用 NOT NULL
-
Prepared Statements
-
无缓冲的查询
-
把 IP 地址存成 UNSIGNED INT
-
固定长度的表会更快
-
垂直分割
-
拆分大的 DELETE 或 INSERT 语句
-
越小的列会越快
-
选择正确的存储引擎
-
使用一个对象关系映射器(Object Relational Mapper)
-
小心“永久链接”
最后,附一张自己面试前准备的脑图:
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典
- Java核心知识整理
- Spring全家桶(实战系列)
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
资料领取方式:Java全套学习手册
g-RHZLJcQP-1626698286772)]
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
资料领取方式:Java全套学习手册
以上学习资料均免费分享,最后祝愿各位身体健康,顺利拿到心仪的offer!
字节跳动面试经验汇总
...之后就重新规划了一下自己的职业方向,最终目标定在了字节跳动,比较年轻化的一家互联网公司,近几年的发展速度也比较快,综合方面来说比较适合自己,所以就投了字节的简历,Java研发方向的,之后接到面试通知,总共... 查看详情
android大厂面试必问的androidframework如何学习,如何深入了解framework层?
...#xff1f;2.进程通信你用过哪些?原理是什么?(字节跳动、小米)3.描述下Binder机制原理?(东方头条)4.Binder线程池的工作过程是什么样?(东方头条)5.Handler怎么进行线程通信,原理是... 查看详情
工作三年终于社招进字节跳动!字节跳动,阿里,腾讯java岗面试经验汇总
...补充基础知识等。也是有些辛苦。终于是在前不久拿到了字节跳动的offer,现在我也来写面经,希望能帮助到大家!面经Java基础0.HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。拉链结构,数组+链表,原理是hash找数组... 查看详情
java面试者的经历,吐血分享字节跳动的java面试经验技巧
...享一份资深Java面试官整理的「 大厂高频核心面试题 」字节跳动面试题Http协议cookiesession介绍一下session表结构怎么设计,储存在哪里?你们的sessioncookie在项目里运用到哪里?算法题:[删除链表中重复的节点]在... 查看详情
字节跳动开发面试题——ios
目录字节一面内容:字节二面内容:字节三面内容:字节一面内容:1、自我介绍2、介绍一下简历中的一个项目3、面向对象的三个要素4、多态?5、Java,python,OC运行效率孰高?6、Property,其中copy如何?7、Property(nonatomatic,copy)NSM... 查看详情
面试必问之jvm原理
...仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字... 查看详情
字节跳动java面试:java编程规范考试答案
面试整体事项简历要准备好,联系方式一定要正确清晰醒目,项目经历按照时间倒序阐述,注意描述自己在项目中承担的职责,简历的模板尽量选择简洁的,毕竟程序员大部分还是喜欢简单明了的。推荐boss直... 查看详情
spring经典面试题,帮你整理好了,字节面试官必问的mysql锁机制(代码片段)
16、什么是springbean?它们是构成用户应用程序主干的对象。Bean由SpringIoC容器管理。它们由SpringIoC容器实例化,配置,装配和管理。Bean是基于用户提供给容器的配置元数据创建。需要更多大厂面试资料的话也可以点击... 查看详情
字节跳动java岗面试题;新电脑配置java环境
SpringSecurity观后感——手绘思维脑(供参考)SpringSecurity手绘思维脑图手绘的思维导图,是我自己根据自身的情况读完这套阿里出品的SpringSecurity王者晋级文档之后所绘的,相当于是一个知识的总结与梳理,我将其分为***... 查看详情
字节跳动面试分享:java反射作用与意义
阿里一面:介绍一下自己。*项目参与的核心设计有哪些*java反射原理,注解原理?*ArrayList和LinkedList的插入和访问的时间复杂度?*说说一致性Hash原理*HashMap及线程安全的ConcurrentHashMap,以及各自优劣势*https和htt... 查看详情
字节跳动面试官:java线程池详解
Netty实战无论是想要学习Spring5、Spark、Cassandra等这样的系统,还是通过学习Netty来构建自己的基于Java的高性能网络框架,或者是更加具体的高性能Web或者游戏服务器等,本书都将是你的超强拍档。本书共分为4个部分... 查看详情
字节跳动java实习面试凉凉经,含答案解析
Java虚拟机内存模型Java虚拟机内存模型中定义的访问操作与物理计算机处理的基本一致!Java中通过多线程机制使得多个任务同时执行处理,所有的线程共享JVM内存区域mainmemory,而每个线程又单独的有自己的工作内存... 查看详情
字节跳动java金三银四解析:java面试选择题及答案
第1章快速入门1.1Kafka简介1.2以Kafka为中心的解决方案1.3Kafka核心概念1.4Kafka源码环境第2章生产者2.1KafkaProducer使用示例2.2KafkaProducer分析ProducerInterceptors&cProducerInterceptorKafka集群元数据Serializer&DeserializerPartitioner2.3Re 查看详情
编程实践系列:字节跳动面试题
字节跳动面试题面试3轮技术面+1轮HR整体分三大块:项目经验计算机基础编程题(每轮一题)项目经验架构+业务做了什么核心设计优化解决了什么难题体现思考业务理解架构设计能力项目需求设计demo:如何... 查看详情
字节跳动java岗面试题;java帮助文档手机版
一面:阿里巴巴面试答案文末可以领取!1.触发新生代GC,如果存活对象总量大于survivor区容量,咋办2.如果任务很多,线程池的阻塞队列会撑爆内存的哪个区域3.栈在堆上吗4.GCroot有哪些5.实例变量可以是GCroot吗... 查看详情
字节跳动java面试挂了以后,流泪总结了这份大厂常问面试题
前言某天下午五点半突然接到了一个北京来电,是字节跳动打来的,当时心里一阵发慌,由于还在上班,就和面试官约定6点下班之后再来。挂完电话,心里忐忑得不行,感觉自己这也没准备好,那也没... 查看详情
三年java开发经验,疯狂复习两个月备战字节跳动,成功通过面试进入抖音事业部。
近两年,字节跳动的发展越来越快,导致想要进入字节跳动的应届生越来越多,竞争越来越大,所以字节跳动的面试也越来越难。对于普通本科出身的我,不得不说是一项挑战,而这项挑战能否成功的关... 查看详情
字节跳动面试分享:java编程思想百度云
缓存雪崩缓存雪崩指的是Redis当中的大量缓存在同一时间全部失效,而假如恰巧这一段时间同时又有大量请求被发起,那么就会造成请求直接访问到数据库,可能会把数据库冲垮。缓存雪崩一般形容的是缓存中没有而... 查看详情