
面试题
文章平均质量分 86
刘翔UP
生活中的20%是由发生在你身上的事情组成,
而另外的80%则是由你对所发生的事情如何反应所决定。
懂得接受,懂得控制情绪,调整心态的人,才能拥有更多的幸福。
只有消化了坏情绪,才能痛痛快快地拥抱好运气。
只有把握好情绪,我们才能更好地把握人生。
加油
展开
-
2021-08-30
Kafka中存在大量的延迟操作,比如延迟生产、延迟拉取以及延迟删除等。Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能,而是基于时间轮自定义了一个用于实现延迟功能的定时器(SystemTimer)。JDK的Timer和DelayQueue插入和删除操作的平均时间复杂度为O(nlog(n)),并不能满足Kafka的高性能要求,而基于时间轮可以将插入和删除操作的时间复杂度都降为O(1)。时间轮的应用并非Kafka独有,其应用场景还有很多,在Netty、Akka、Quartz、Z转载 2021-08-30 22:18:21 · 123 阅读 · 0 评论 -
用户提交订单,30分钟还没付款,取消订单功能
订单超时自动取消方案1、数据库轮询小型项目常用方式,通过一个线程去扫描数据库或者数据库定时任务,通过订单时间,判断超时的订单,进行更新状态或者其他操作。2、JDK延迟队列DelayQueue 是一个无界阻塞队列,只有在延迟期满时才从中获取元素,放入DelayQueue中的对象需要实现Delayed接口。ProducerDelay生产者生成一个任务 DelayQueue通过poll()或者take()方法获取超时时间任务。然后到达消费者consumerDelay3、延时消息3、Redi...转载 2021-04-28 17:34:41 · 389 阅读 · 0 评论 -
final修饰byte类型进行运算的问题
byte类型进行运算的问题。代码片段:原因:java中凡是byte、short、char数据类型的数据在运算的时候都会转换成int类型的数据再运算,此处两个int类型的数值相加,结果赋给byte类型,肯定会报错。解决的办法有两种,我先说第一种,强转再介绍第二种方法之前,我先说个知识点:1.如果进行运算的是两个变量,此时先会根据情况对类型进行提升,然后再进行运算赋值(如上述所说)。2.如果进行运算的是两个常量,此时先计算数值的大小运算,然后再判断是否满足...转载 2021-04-09 13:50:39 · 1093 阅读 · 0 评论 -
elasticsearch 面试题
前言涵盖各大公司会问到的面试点,同时随着版本的升级,可能也会有一些面试题更新,也会同步保持更新,因为篇幅原因(其实是我懒,哈哈)所以列了一部分答案,所有的答案见下文,总共485页合计20个技术点,文末自取pdf.1、elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。面试官:想了解应聘者之前公司接触的 ES 使用场景、规模,有没有做过比较大规模的索引设计、规划、调优。解答:如实结合自己的实践场景回答即可。比如:ES转载 2021-04-01 15:35:00 · 256 阅读 · 0 评论 -
Redis订阅与发布并源码简单分析
订阅与发布Redis 通过 PUBLISH 、 SUBSCRIBE 等命令实现了订阅与发布模式, 这个功能提供两种信息机制, 分别是订阅/发布到频道和订阅/发布到模式, 下文先讨论订阅/发布到频道的实现, 再讨论订阅/发布到模式的实现。频道的订阅与信息发送Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。作为例子, 下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— c转载 2021-03-12 15:39:42 · 224 阅读 · 0 评论 -
Redisson 分布式锁实现分析(二)
上篇Redisson 分布式锁实现分析中提到了RedissonLock中的redis命令都是通过CommandExecutor来发送到redis服务执行的,本篇就来了解一下它的实现方式。先来看其源码public interface CommandExecutor extends CommandSyncExecutor, CommandAsyncExecutor {}可以看到它同时继承了同步和异步(sync/async)两种调用方式。Note: 在分布式锁的实现中是用了同步的 ..转载 2021-03-12 15:09:14 · 610 阅读 · 0 评论 -
Redisson 分布式锁实现分析(一)
Why 分布式锁java.util.concurrent.locks中包含了 JDK 提供的在多线程情况下对共享资源的访问控制的一系列工具,它们可以帮助我们解决进程内多线程并发时的数据一致性问题。但是在分布式系统中,JDK 原生的并发锁工具在一些场景就无法满足我们的要求了,这就是为什么要使用分布式锁。我总结了一句话,分布式锁是用于解决分布式系统中操作共享资源时的数据一致性问题。设计分布式锁要注意的问题互斥分布式系统中运行着多个节点,必须确保在同一时刻只能有一个节点的一个线程获得锁,这是.转载 2021-03-12 15:06:34 · 749 阅读 · 0 评论 -
Redis分布式锁-Redisson源码解析
当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设计分布式锁1、互斥在分布式高并发的条件下,我们最需要保证,同一时刻只能有一个线程获得锁,这是最基本的一点。2、防止死锁在分布式高并发的条件下,比如有个线程获得锁的同时,还没有来得及去释放锁,就因为系统故障或者其它原因使它无法执行释放锁的命令,导致其它线程都无法获得锁,造成死锁。所以分布式非常有必要设置锁的有效时间,确保系统出现故障后,在一定时间内能够主动去释放锁,避免造成死锁的情况。3、性...转载 2021-03-11 19:59:10 · 362 阅读 · 0 评论 -
Java 程序员的 24 个MySQL面试题
一、为什么用自增列作为主键?1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引。如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。2、数据记录本身被存于主索引(一颗B+Tree)的叶子节点上,这就要求同一个叶子节点内(大小为转载 2021-03-10 18:09:13 · 174 阅读 · 0 评论 -
分库分表后如何部署上线
分库分表后如何部署上线引言我们先来讲一个段子面试官:“有并发的经验没?”应聘者:“有一点。” 面试官:“那你们为了处理并发,做了哪些优化?” 应聘者:“前后端分离啊,限流啊,分库分表啊。。” 面试官:"谈谈分库分表吧?" 应聘者:“bala。bala。bala。。” 面试官心理活动:这个仁兄讲的怎么这么像网上的博客抄的,容我再问问。面试官:“你们分库分表后,如何部署上线的?” 应聘者:“这!!!!!!”不要惊讶,我写这篇文章前,我特意...转载 2021-03-10 17:36:14 · 134 阅读 · 0 评论 -
你在线上怎么修改列的数据类型的
目前业内在线修改表结构的方案,据我了解,一般有如下三种方式一:使用mysql5.6+提供的在线修改功能所谓的mysql自己提供的功能也就是mysql自己原生的语句,例如我们要修改原字段名称及类型。mysql>ALTERTABLEtable_nameCHANGEold_field_namenew_field_namefield_type;那么,在mysql5.5这个版本之前,这是通过临时表拷贝的方式实现的。执行ALTER语句后,会新建一个带有新结构的临时表,将原表数据...转载 2021-03-10 18:00:52 · 457 阅读 · 0 评论 -
分布式缓存与DB秒级一致设计实践(携程)
分布式缓存与DB秒级一致设计实践原创携程技术2021-02-26 17:52:02一、前言爆款项目是2020年携程的一个新项目,目标是将全品类、高性价比的旅行商品统一集合在一个频道供用户选购。出于这样的业务定位,项目有三个特点:1)高流量2)部分商品会成为热卖商品3)承担下单职能那么在系统设计之初,就必须考虑下面两个点:1)如何应对高QPS(包括整体高QPS和个别商品的高QPS),高流量,保障C端用户体验?2)在满足第一点的情况下,如何保障信息的时效性,让用户尽可能看到最转载 2021-03-01 10:22:20 · 260 阅读 · 0 评论 -
面试系列-分布式事务
对于分布式事务,相信所有人都应该很了解,为什么会有分布式事务?无论是数据量导致的分库,还是现在微服务盛行的场景都是他出现的原因。这一篇内容还是避免不了俗套,主要的范围无非是XA、2PC、3PC、TCC,再最后到Seata。但是,我认为这东西,只是适用于面试和理论的了解,你真要说这些方案实际生产中有人用吗?有,但是会实现的更简单,不会套用理论来实现,大厂有大厂的解决方案,中小公司用框架或者压根就不存在分布式事务的问题。那,为什么还要写这个?为了你面试八股文啊,小可爱。事务要说分布式转载 2021-02-18 13:30:16 · 493 阅读 · 0 评论 -
面试系列-网络IO
谈一谈你对TCP/IP四层模型,OSI七层模型的理解?为了增强通用性和兼容性,计算机网络都被设计成层次机构,每一层都遵守一定的规则。因此有了OSI这样一个抽象的网络通信参考模型,按照这个标准使计算机网络系统可以互相连接。物理层:通过网线、光缆等这种物理方式将电脑连接起来。传递的数据是比特流,0101010100。数据链路层:首先,把比特流封装成数据帧的格式,对0、1进行分组。电脑连接起来之后,数据都经过网卡来传输,而网卡上定义了全世界唯一的MAC地址。然后再通过广播的形式向局域网内所有电脑发转载 2021-02-18 13:28:43 · 187 阅读 · 0 评论 -
面试系列-Linux
1.CPU负载和CPU利用率的区别是什么?首先,我们可以通过uptime,w或者top命令看到CPU的平均负载。Load Average:负载的3个数字,比如上图的4.86,5.28,5.00,分别代表系统在过去的1分钟,5分钟,15分钟内的系统平均负载。他代表的是当前系统正在运行的和处于等待运行的进程数之和。也指的是处于可运行状态和不可中断状态的平均进程数。如果单核CPU的话,负载达到1就代表CPU已经达到满负荷的状态了,超过1,后面的进行就需要排队等待处理了。如果是是多核多CP.转载 2021-02-18 13:27:26 · 107 阅读 · 0 评论 -
面试系列-Spring
1.说说Spring 里用到了哪些设计模式?单例模式:Spring 中的 Bean 默认情况下都是单例的。无需多说。工厂模式:工厂模式主要是通过 BeanFactory 和 ApplicationContext 来生产 Bean 对象。代理模式:最常见的 AOP 的实现方式就是通过代理来实现,Spring主要是使用 JDK 动态代理和 CGLIB 代理。模板方法模式:主要是一些对数据库操作的类用到,比如 JdbcTemplate、JpaTemplate,因为查询数据库的建立连接、执行查询、关转载 2021-02-18 13:26:26 · 107 阅读 · 0 评论 -
面试系列-Java基础
说好了面试系列已经完结了,结果发现还是真香,嗯,以为我发现我的Java基础都没写,所以这个就算作续集了,续集第一篇请各位收好。等到你们收到这篇文章的时候,公众号读者数量就破4000了,可不是4万,就庆祝下,存稿都发出来了,下周又得肝了!说说进程和线程的区别?进程是程序的一次执行,是系统进行资源分配和调度的独立单位,他的作用是是程序能够并发执行提高资源利用率和吞吐率。由于进程是资源分配和调度的基本单位,因为进程的创建、销毁、切换产生大量的时间和空间的开销,进程的数量不能太多,而线程是比进程更小转载 2021-02-18 13:25:35 · 121 阅读 · 0 评论 -
面试专题系列-JVM篇
这是面试专题系列第五篇JVM篇。这一篇可能稍微比较长,没有耐心的同学建议直接拖到最后。说说JVM的内存布局?Java虚拟机主要包含几个区域:堆:堆Java虚拟机中最大的一块内存,是线程共享的内存区域,基本上所有的对象实例数组都是在堆上分配空间。堆区细分为Yound区年轻代和Old区老年代,其中年轻代又分为Eden、S0、S1 3个部分,他们默认的比例是8:1:1的大小。栈:栈是线程私有的内存区域,每个方法执行的时候都会在栈创建一个栈帧,方法的调用过程就对应着栈的入栈和出栈的过程。每个栈帧转载 2021-02-18 13:24:20 · 105 阅读 · 0 评论 -
2021-02-18
你们为什么使用mq?具体的使用场景是什么?mq的作用很简单,削峰填谷。以电商交易下单的场景来说,正向交易的过程可能涉及到创建订单、扣减库存、扣减活动预算、扣减积分等等。每个接口的耗时如果是100ms,那么理论上整个下单的链路就需要耗费400ms,这个时间显然是太长了。如果这些操作全部同步处理的话,首先调用链路太长影响接口性能,其次分布式事务的问题很难处理,这时候像扣减预算和积分这种对实时一致性要求没有那么高的请求,完全就可以通过mq异步的方式去处理了。同时,考虑到异步带来的不一致的问题,我们可以转载 2021-02-18 13:23:04 · 121 阅读 · 0 评论 -
面试专题系列-Dubbo
这是面试专题系列第四篇,Dubbo系列。Dubbo本身并不复杂,而且官方文档写的非常清楚详细,面试中dubbo的问题一般不会很多,从分层到工作原理、负载均衡策略、容错机制、SPI机制基本就差不多了,最大的一道大题一般就是怎么设计一个RPC框架了,但是如果你工作原理分层都搞明白了这个问题其实也就相当于回答了不是吗。说说Dubbo的分层?从大的范围来说,dubbo分为三层,business业务逻辑层由我们自己来提供接口和实现还有一些配置信息,RPC层就是真正的RPC调用的核心层,封装整个RPC的调用过程转载 2021-02-18 13:20:48 · 128 阅读 · 0 评论 -
Redis夺命连环11问
说说Redis基本数据类型有哪些吧 字符串:redis没有直接使用C语言传统的字符串表示,而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自身的长度信息,而SDS则保存了长度信息,这样将获取字符串长度的时间由O(N)降低到了O(1),同时可以避免缓冲区溢出和减少修改字符串长度时所需的内存重分配次数。 链表linkedlist:redis链表是一个双向无环链表结构,很多发布订阅、慢查询、监视器功能都是使用到了链表来实现,每个链表的节点由一个listNode结构来表示,每个转载 2021-02-18 13:17:34 · 127 阅读 · 0 评论 -
mysql夺命连环13问
1. 能说下myisam 和 innodb的区别吗?myisam引擎是5.1版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用,而且myisam不支持外键,并且索引和数据是分开存储的。innodb是基于聚簇索引建立的,和myisam相反它支持事务、外键,并且通过MVCC来支持高并发,索引和数据存储在一起。2. 说下mysql的索引有哪些吧,聚簇和非聚簇索引又是什么?索引按照数据结构来说主要包含B+树和Hash索引。假设我转载 2021-02-18 13:14:21 · 502 阅读 · 0 评论 -
2021-02-05
日志 Logback 配置文件这么写,TPS 提高 10 倍先从最基本的配置讲起再介绍高级特性异步输出日志。如果只想看异步输出日志提升性能的部分请将文章往下拉一点。通过阅读本篇文章将了解到 日志输出到文件并根据LEVEL级别将日志分类保存到不同文件 通过异步输出日志减少磁盘IO提高性能 异步输出日志的原理 配置文件logback-spring.xmlSpringBoot工程自带logback和slf4j的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲转载 2021-02-05 11:27:34 · 95 阅读 · 0 评论 -
[MySQL] like “%XX“ 和 like “XX%“ 的索引情况
[MySQL] like "%XX" 和 like "XX%" 的特殊情况lcn29 2020-03-23 18:22:53 166 已收藏 原力计划分类专栏: MySQL版权在 MySQL 的 InnoDB 的情况下,对某一建过索引的列进行 like 模糊查询时 like “%XX” 是不会走索引的 like “XX%” 还是会走索引的但是还是存在一些特殊的情况,MySQL 的底层会帮我们优化,使上面的 2 条结论变成 不一定。表结构 SQLCREA...转载 2020-07-08 16:04:05 · 939 阅读 · 0 评论 -
一致性Hash原理与实现
一致性Hash原理与实现前言互联网公司中,绝大部分都没有马爸爸系列的公司那样财大气粗,他们即没有强劲的服务器、也没有钱去购买昂贵的海量数据库。那他们是怎么应对大数据量高并发的业务场景的呢?这个和当前的开源技术、海量数据架构都有着不可分割的关系。比如通过mysql、nginx等开源软件,通过架构和低成本的服务器搭建千万级别的用户访问系统。怎么样搭建一个好的系统架构,这个话题我们能聊上个七天七夜。这里我主要结合Redis集群来讲一下一致性Hash的相关问题。Redis集群的使用我们在使用Re转载 2020-09-16 16:30:57 · 382 阅读 · 0 评论 -
Throw和Throws的区别
hrow:作用在方法内,表示抛出具体异常,由方法体内的语句处理。 具体向外抛出的动作,所以它抛出的是一个异常实体类。若执行了Throw一定是抛出了某种异常。Throws:作用在方法的声明上,表示如果抛出异常,则由该方法的调用者来进行异常处理。 主要的声明这个方法会抛出会抛出某种类型的异常,让它的使用者知道捕获异常的类型。 出现异常是一种可能性,但不一定会发生异常。实例:void testException(int a) throws IOException,{ t...转载 2020-09-09 10:55:04 · 963 阅读 · 0 评论 -
美团对 Java 新一代垃圾回收器 ZGC 的探索与实践
作者简介王东,美团信息安全资深工程师。王伟,美团信息安全技术专家。ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括: 停顿时间不超过10ms; 停顿时间不会随着堆的大小,或者活跃对象的大小而增加; 支持8MB~4TB级别的堆(未来支持16TB)。 从设计目标来看,我们知道ZGC适用于大内存低延迟服务的内存管理和回收。本文主要介绍ZGC在低延时场景中的应用和卓越表现,文章内容主要分为四部分: G转载 2020-08-11 13:27:01 · 383 阅读 · 0 评论 -
Java GC垃圾收集底层原理
Java GC垃圾回收几乎是面试必问的JVM问题之一,本篇文章带领大家了解Java GC的底层原理,图文并茂,突破学习及面试瓶颈。JVM内存结构补充图中展示了堆中三个区域:Eden、From Survivor、To Survivor。从图中可以也可以看到它们的大小比例,准确来说是:8:1:1。为什么要这样设计呢,本篇文章后续会给出解答,还是根据垃圾回收的具体情况来设计的。还记得在设置JVM时,常用的类似-Xms和-Xmx等参数吗?对的它们就是用来说设置堆中各区域的大小的。(图...转载 2020-07-15 17:20:08 · 547 阅读 · 0 评论 -
G1垃圾收集器
一、以前收集器的特点年轻代和老年代是各自独立且连续的内存块 年轻代收集器使用 eden + S0 + S1 进行复制算法 老年代收集必须扫描整个老年代区域 都是以尽可能的少而快速地执行 GC 为设计原则二、G1 是什么G1 是一种面向服务端的垃圾收集器,应用在多核处理器和大容量内存环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集器的暂停时间要求。 像 CMS 收集器一样,能与应用程序线程并发执行, 整理空闲空间更快, 需要更多的时间来预测 GC 停顿...转载 2020-07-15 17:14:38 · 104 阅读 · 0 评论 -
Java8 JVM内存结构变了,永久代到元空间
描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试者,如果知晓这些变化,又将成为面试中的亮点。如果在网络上搜索JVM内存结构,90%的可能会搜到Java7及以前的内存图,本篇文章将会对JVM内存结构再次细化,深入理解Java8之后的内部变化。现在意识到关注公众号“程序新视界”的好处了吧。在这里可以不断的刷新你的知识和认知。JVM内存结构的细化再来看一下《JVM之内存结构详解》中的内存结构转载 2020-07-15 16:34:52 · 144 阅读 · 0 评论 -
为什么要重写 hashcode 和 equals 方法?
我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过。我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有没有放过自定义对象?而这个时候,候选人说放过,于是两个问题的回答就自相矛盾了。最近问下来,这个问题普遍回答不大好,于是在本文里,就干脆从hash表讲起,讲述HashMap的存数据规则,由此大家就自然清楚上述问题的答案了。1. 通过Hash算法来了解HashMap对象的高效性我们先复...转载 2020-07-15 15:40:16 · 270 阅读 · 1 评论 -
Spring循环依赖
、前言Spring循环依赖是面试考点之一。面试官可以深挖面试者对Spring关于Bean的生命周期掌握情况。Spring循环依赖也是Spring难点之一,逻辑比较绕,需要对Spring Bean的生命周期了如指掌。二、什么是循环依赖?在这里插入图片描述简单,就是A对象依赖了B对象,B对象依赖了A对象。@Componentpublic class A { @Autowired B b;}@Componentpublic class B { @Autowir转载 2020-07-15 11:27:43 · 111 阅读 · 0 评论 -
Spring循环依赖的三种方式以及解决办法
Spring循环依赖的三种方式以及解决办法 一. 什么是循环依赖?循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。Spring中循环依赖场景有:(1)构造器的循环依赖(2)field属性的循环依赖其中,构造器的循环依赖问题无法解决,只能拋出BeanCurrentlyInCreationExc..转载 2020-07-15 14:33:50 · 203 阅读 · 0 评论 -
session和cookies的区别是什么?
1.保存位置:session服务端。cookie客户端。2.安全性:session相对安全,cookie相对不安全。3.存储类型:session能够存储任意的对象,cookie只能存储String类型的对象。4.大小限制:session没有大小限制。cookie有大小限制(4k)。5.个数限制:session没有个数限制。cookie个数限制(二十到几百个)。6.键值对:session是键值对嵌套键值对,cookie是键值对。7.用户禁用:session不能被用户禁用。cookie能被用户禁用。转载 2020-07-15 09:42:32 · 496 阅读 · 0 评论 -
MySql中varchar(10)和varchar(100)的区别
MySql中varchar(10)和varchar(100)的区别==>>以及char的利弊一般初学会认为,二者占用的空间是一样的。比如说我存储5个char,二者都是实际占用了5个char了【勘误:varchar在实际存储的时候会多一个byte用来存放长度】。但是深入一下,设计数据库的时候,二者一样吗?答案是否定的【至少varchar类型需要在数据之前利用一个或者两个字节来存储数据的长度】【二者在内存中的操作方式也是不同的,下面的例子中有体现】如现在用户需要存储一个地址信息。根据评转载 2020-07-10 11:38:59 · 487 阅读 · 0 评论 -
redo log的三层架构,MySQL崩溃,重启后发现有些已经提交的事务对数据的修改丢失
有个星球水友提问:沈老师,我们有一次MySQL崩溃,重启后发现有些已经提交的事务对数据的修改丢失了,不是说事务能保证ACID特性么,想问下什么情况下可能导致“事务已经提交,数据却丢失”呢?这个问题有点复杂,且容我系统性梳理下思路,先从redo log说起吧。画外音:水友问的是MySQL,支持事务的是InnoDB,本文以InnoDB为例展开叙述,其他数据库不是很了解,但估计原理是相同的。为什么要有redo log?事务提交后,必须将事务对数据页的修改刷(fsync)到磁盘上,才..转载 2020-07-08 14:24:06 · 785 阅读 · 0 评论 -
MySQL-nnoDB写缓冲(change buffer)
简单回顾一下:(1)MySQL数据存储包含内存与磁盘两个部分;(2)内存缓冲池(buffer pool)以页为单位,缓存最热的数据页(data page)与索引页(index page);(3)InnoDB以变种LRU算法管理缓冲池,并能够解决“预读失效”与“缓冲池污染”的问题;画外音:细节详见《缓冲池(buffer pool),彻底懂了!》。毫无疑问,对于读请求,缓冲池能够减少磁盘IO,提升性能。问题来了,那写请求呢?情况一假如要修改页号为4的索引页,而这个页正..转载 2020-07-08 11:33:51 · 198 阅读 · 0 评论 -
MySQL采用buffer机制 double write buffer
MySQL采用buffer机制,避免每次读写进行磁盘IO,提升效率: 《缓冲池(buffer pool)》 《写缓冲(change buffer)》 《日志缓冲(log buffer)》MySQL的buffer一页的大小是16K,文件系统一页的大小是4K,也就是说,MySQL将buffer中一页数据刷入磁盘,要写4个文件系统里的页。如上图所示,MySQL里page=1的页,物理上对应磁盘上的1+2+3+4四个格。那么,问题来了,这个操作并非原子,如果...转载 2020-07-08 11:26:50 · 1009 阅读 · 1 评论 -
InnoDB的缓冲池(buffer pool)
应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库。操作系统,会有缓冲池(buffer pool)机制,避免每次访问磁盘,以加速数据的访问。MySQL作为一个存储系统,同样具有缓冲池(buffer pool)机制,以避免每次查询数据都进行磁盘IO。今天,和大家聊一聊InnoDB的缓冲池。InnoDB的缓冲池缓存什么?有什么用?缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速...转载 2020-07-08 10:20:01 · 341 阅读 · 0 评论 -
事务的实现-redo log和undo log来完成
事务InnoDB中的事务完全符合ACID特性:原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability)通过在事务中使用SAVE WORK函数可以建立保存点。保存点可以通过ROLLBACK WORK: n来回滚。事务的实现事务的隔离性由上一章讲的锁来实现。原子性、一致性、持久性通过数据库的redo log和undo log来完成。redo log称为重做日志,用来保证事务的原子性和持久性;undo log用来保证事务的转载 2020-07-01 14:56:53 · 526 阅读 · 0 评论