说下MySQL内部的XA分布式事务?每天一道面试题42悟空拧螺丝20210823XA是X/OpenDTP组织(X/OpenDTPgroup)定义的两阶段提交协议。MySQL本身的插件式架构导致在其内部需要使用XA事务,此时MySQL即是协调者,也是参与者。内部XA事务发生在存储引擎与插件之间或者存储引擎与存储引擎之间。例如,不同的存储引擎之间是完全独立的,因此当一个事务涉及两个不同的存储引擎时,就
说说生成唯一ID的雪花算法是怎么样的?每天一道面试题16悟空拧螺丝20210728snowflake(雪花算法):Twitter开源的分布式id生成算法,64位的long型的id,分为4部分:!snowflake算法(https://s4.51cto.com/images/blog/202204/22081912_6261f4806dcbb86078.png?xossprocess=image/w
说下主从复制原理?每天一道面试题52主从复制主要有以下流程:1.master服务器将数据的改变记录到binlog中;2.slave服务器会在一定时间间隔内对master的binlog进行检查,如果发生改变,则开始一个I/OThread请求读取master中binlog;3.同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程
说下执行计划?每天一道面试题51在生产过程中,经常会遇到因为SQL语句导致的性能瓶颈问题,这时候就需要我们去优化SQL的执行效率;EXPLAIN语句的各个输出项指标可以帮助我们有针对性的提升查询语句的性能。const:根据主键、普通唯一索引列等值匹配查询(isnull除外),这种查询是很快的,查询速率认为是常数级别的,定义为const。ref:根据普通索引等值匹配,或isnull。(前面说的普通唯
引入undo日志、roll_pointer、trx_id三个概念:undo日志:事务回滚时恢复数据到未变更状态,每次执行增、删、改操作时都会记录变更前的原始数据到undo日志;roll_pointer属性:表记录的隐藏字段;trx_id属性:表记录隐藏字段表示事务ID;设想一个场景数据库,两个不同用户分别读取和修改同一条数据,为了保证数据的正确性;数据库需要引入读锁、写锁,在读数据加读锁禁止写操作
说下MySQL的BufferPool的工作原理?每天一道面试题39悟空拧螺丝20210820MySQL先把磁盘里面的数据加载到BufferPool中,增删改都是基于BufferPool里面的内存数据进行操作的,内存的效率比IO高很多倍。改了内存数据后,再定期刷新到磁盘。BufferPool有三大双端链表:free、flush、lru链表。free主要指向空闲缓存页。flush指向已修改的缓存页。l
说下索引条件下推(ICP)?\365天学习打卡66阳光下的喵20210830首先声明一点索引下推不是只存在关联索引中,普通索引也可以执行索引下推;一般提到索引下推条件反射的都会先想到关联索引查询;Usingindexcondition可以理解为ICP的必要不充分条件;即执行计划Extra中出现Usingindexcondition,但是SQL语句却不一定发生索引下推,usingindexcondi
说下你在使用索引上遇到的一些问题?\365天学习打卡65阳光下的喵20210829索引的出现是为了提高查询效率,但是使用索引也存在一些常见的思维误区:用索引和用索引快速查询是有区别的,查询SQL经常提到全表扫描效率低,这个全表扫描默认指主键索引全表扫描,实际操作中非聚簇索引也存在全表扫描;覆盖索引简单点理解就是查询的条件和要查询的值都在同一颗索引树上这种现象称为覆盖索引可以通过执行计划查看,和索引
说下MySQL最左匹配原则知道吗?每天一道面试题46悟空拧螺丝20210828最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(、<、between、like)就会停止匹配。比如有联合索引a、b、c,where过滤条件中哪些排列组合可以用到索引?(比如这种:wherea=xxxb=xxxandc=xxx)以下排列组合都会走索引:a、ab、ac、ba、ca、abc、acb、bac
说下MySQL回表?每天一道面试题49悟空拧螺丝20210902回表查询:先到普通索引上定位主键值,再到聚集索引上定位行记录,它的性能较扫一遍索引树低(一般情况下)。详细说明:一般我们自己建的索引不管是单列索引还是联合索引,都称为普通索引,相对应的另外一种就是聚簇索引。每个普通索引就对应着一颗独立的索引B+树,索引B+树的节点仅仅包含了索引里的几个字段的值以及主键值。根据索引树按照条件找到了需要的
一、说下MySQL的redolog和binlog?每天一道面试题35悟空拧螺丝20210816(1)MySQL分两层:Server层和引擎层。区别如下:Server层:主要做的是MySQL功能层面的事情。Server层也有自己的日志,称为binlog(归档日志)引擎层:负责存储相关的具体事宜。redolog是InnoDB引擎特有的日志。(2)redolog是物理日志,记录的是“在某个数据页上做了什
PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cn如何监控线程池用一个printStats方法实现了最简陋的监控,每秒输出一次线程池的基本内部信息:JAVAprivatevoidprintStats(ThreadPoolExecutorthreadPool){Executors.newSingleThreadSched
PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cn如何优雅地终止线程线程池提供了两个方法来终止线程:shutdown()和shutdownNow()。shutdown()方法是一种很保守的关闭线程池的方法。线程池执行shutdown()后,就会拒绝接收新的任务,但是会等待线程池中正在执行的任务和已经进入阻塞队列的任务都
Java线程池有哪几种?通常开发者都是利用Executors提供的通用线程池创建方法,去创建不同配置的线程池,主要区别在于不同的ExecutorService类型或者不同的初始参数。Executors目前提供了5种不同的线程池创建配置:(1)newCachedThreadPool(),它是一种用来处理大量短时间工作任务的线程池,具有几个鲜明特点:它会试图缓存线程并重用,当无缓存线程可用时,就会创建
线程池中的阻塞队列有哪几种?阻塞队列用于保存等待执行的任务。当任务的数量超过corePoolSize数量,后续的任务将会进入阻塞队列,阻塞排队。有以下几种阻塞队列:ArrayBlockingQueue是一个基于数组结构的有界阻塞队列,此队列按FIFO(先进先出)原则对元素进行排序。!(https://s4.51cto.com/images/blog/202204/22075826_6261efa2
Java线程池的原理知道吗?线程池的好处降低资源消耗。重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果频繁创建,会消耗系统资源,降低系统稳定性,使用线程池统一分配、调优和监控。线程池有核心参数:1.maximumPoolSize:最大线程数。线程池允许创建的最大线程数。2.corePool
什么是Java内存模型?!原理图1Java内存模型(https://s4.51cto.com/images/blog/202204/20224655_62601cdf36da892559.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,
ABA问题:因为CAS需要在操作值的时候,检查值有没有发生变化,如果没有发生变化则更新,但是如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。解决方案:ABA问题的解决思路就是使用版本号。在变量前面追加上版本号,每次变量更新的时候把版本号加1,那么A→B→A就会变成1A→2B→3A。从Java1.5开始,JDK的Atomic包里提供了一
并发编程中的CAS原理知道吗?PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cn原子整型类AtomicInteger的getAndIncrement方法就用到CAS。比如这一段代码:SHatomicInteger.compareAndSet(10,20);调用atomicInteger的CAS方法,先比较当前变量ato
有哪些与Redis交互的操作?面试者小空听到这题后,窃喜,这题简单,不假思索地回答:键值对的读和写。面试官面无表情的说道:还有吗?小空支支吾吾的没有答上来。面试官继续说:和Redis实例交互的对象分别有四种:客户端、磁盘、主从节点、切片集群实例。这些对象和Redis交互时,有不同的操作:客户端对象会有网络IO交互、键值对增删改查操作、数据库操作。磁盘对象会有生成RDB快照、记录AOF日志、AOF日
Redis性能问题排查Redis性能变慢时,按照这些步骤逐一检查,高效地解决问题。获取Redis实例在当前环境下的基线性能。命令:./rediscliintrinsiclatency120。用来监测和统计测试期间内的最大延迟是否用了慢查询命令?如果是的话,就使用其他命令替代慢查询命令,或者把聚合计算命令放在客户端做。是否对过期key设置了相同的过期时间?对于批量删除的key,可以在每个key的过期
Redis过期策略是怎么样的?PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cn定期删除+惰性删除。惰性删除概念:在获取某个key的时候,Redis会检查下这个key是否过期了,如果过期了则删除,且不会返回任何东西。优点:不会删除其他键,所以不会花费任何CPU时间在其他无关的过期键上。缺点:大量过期键未被访问,无法自动
Redis有慢查询怎么办?PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cn慢查询日志获取慢查询日志shshowloggetN日志包含四个部分:日志的标识id、发生时间戳、命令耗时、执行命令和参数。获取慢查询日志列表的当前的长度shshowloglen清空慢查询日志shshowlogreset慢查询命令的复杂度命令的慢
为了保证缓存和数据库一致性,说说只读缓存的方案?有数据新增时,会直接写入数据库;有数据删改时,就需要把只读缓存中的数据标记为无效。这样一来,应用后续再访问这些增删改的数据时,因为缓存中没有相应的数据,就会发生缓存缺失。此时,应用再从数据库中把数据读入缓存,这样后续再访问数据时,就能够直接从缓存中读取了。建议:优先使用先更新数据库再删除缓存的方法。原因:先删除缓存值再更新数据库,有可能导致请求因缓存
Redis内存容量增加后,会带来什么问题?PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cnRedis内存容量增加后,会带来什么问题?Redis使用内存保存数据,内存容量增加后,就会带来两方面的潜在问题,分别是:内存快照RDB生成和恢复效率低。主从节点全量同步时长增加、缓冲区易溢出。内存快照RDB受到的影响内存大小和内
单机系统下,Redis如何实现并发控制?PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cn单机系统下,Redis如何实现并发控制?为了实现并发控制要求的临界区代码互斥执行,Redis的原子操作采用了两种方法:单命令操作:把多个操作在Redis中实现成一个操作;Lua脚本:把多个操作写到一个Lua脚本中,以原子性方式执行
说说Redis的缓存击穿?PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cn说说缓存击穿?缓存击穿的概念某个key设置了过期时间,但在正好失效的时候,有大量请求进来了,导致请求都到数据库查询了。就像把一面墙击穿了一个洞。!(https://s4.51cto.com/images/blog/202204/19203520
说说Redis的缓存穿透?PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cn说说缓存穿透?缓存穿透的概念缓存穿透指一个一定不存在的数据,由于缓存未命中这条数据,就会去查询数据库,数据库也没有这条数据,所以返回结果是null。如果每次查询都走数据库,则缓存就失去了意义,就像穿透了缓存一样。!(https://s4.51c
说说Redis的缓存雪崩?PassJava(佳必过)项目全套学习教程连载中,关注公众号悟空聊架构第一时间获取。文档在线地址: www.passjava.cnRedis的淘汰策略有哪几种?说说Redis的缓存雪崩?!(https://s4.51cto.com/images/blog/202204/19202900_625eab0c4dde234527.png?xossprocess=image/wa
Redis的watch机制的作用?Redis的watch机制的作用?一个事务的EXEC命令还没有执行时,事务的命令操作是暂存在命令队列中的。此时,如果有其它的并发操作,我们就需要看事务是否使用了WATCH机制。WATCH机制的作用是,在事务执行前,监控一个或多个键的值变化情况,当事务调用EXEC命令执行时,WATCH机制会先检查监控的键是否被其它客户端修改了。如果修改了,就放弃事务执行,避免事务的
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号