- 博客(325)
- 资源 (9)
- 收藏
- 关注
原创 MySQL索引的类型有哪些?
B*tree索引的话通常在访问小数据量的情况下比较适用,比如你访问不超过表中数据的5%,当然这只是个相对的比率,适用于一般的情况。bitmap的话在数据仓库中使用较多,用于低基数列,比如性别之类重复值很多的字段,基数越小越好。如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。说说数据库索引类型?
2023-09-06 08:48:30 653
原创 MySQL 中 MyISAM 与 InnoDB 引擎的区别
即MyISAM同一个表上的读锁和写锁是互斥的,MyISAM并发读写时如果等待队列中既有读请求又有写请求,默认写请求的优先级高,即使读请求先到,所以MyISAM不适合于有大量查询和修改并存的情况,那样查询进程会长时间阻塞。MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
2023-09-06 08:47:43 860
原创 MySQL聚簇索引与非聚簇索引
InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上,若使用"where id = 14"这样的条件查找主键,则按照B+树的检索算法即可查找到对应的叶节点,之后获得行数据。MyISM使用的是非聚簇索引,非聚簇索引的两棵B+树看上去没什么不同,节点的结构完全一致只是存储的内容不同而已,主键索引B+树的节点存储了主键,辅助键索引B+树存储了辅助键。聚簇索引存储来说,行数据和主键B+树存储在一起,辅助键B+树只存储辅助键和主键,主键和非主键B+树几乎是两种类型的树。
2023-09-06 08:47:16 670
原创 B-Tree 索引和 Hash 索引的对比
有时,即使有索引可以使用,MySQL 也不使用任何索引。但是,如果这样的一个查询使用了 LIMIT 来检索只是少量的记录时,MySql 还是会使用索引,因为它能够更快地找到这点记录并将其返回。Hash 索引只能够用于使用 = 或者 <=> 运算符的相等比较(但是速度更快)。B-tree 索引可以用于使用 =, >, >=, <, <= 或者 BETWEEN 运算符的列比较。如果 LIKE 的参数是一个没有以通配符起始的常量字符串的话也可以使用这种索引。这种类型的索引不能够用于按照顺序查找下一个条目。
2023-09-06 08:46:48 753
原创 说说BTree和B+Tree
而每一个页的存储空间是有限的,如果data数据较大时将会导致每个节点(即一个页)能存储的key的数量很小,当存储的数据量很大时同样会导致B-Tree的深度较大,增大查询时的磁盘I/O次数,进而影响查询效率。InnoDB存储引擎中页的大小为16KB,一般表的主键类型为INT(占用4个字节)或BIGINT(占用8个字节),指针类型也一般为4或8个字节,也就是说一个页(B+Tree中的一个节点)中大概存储16KB/(8B+8B)=1K个键值(因为是估值,为方便计算,这里的K取值为〖10〗^3)。
2023-09-06 08:46:25 164
原创 说说什么是间隙锁
在RR隔离级别下:快照读有可能读到数据的历史版本,也有可能读到数据的当前版本。所以快照读无需用锁也不会发生幻读的情况。间隙锁为了解决RR(可重复读)级别下当前读导致的幻读问题,锁的对象是索引叶子节点的next指针。叶子节点3及之后所有节点会加行锁并且他们的next指针会加锁,间隙锁会退化为行锁只锁叶子节点3 ,为什么因为没必要。会发生锁表,因为c没有索引结构能存储行锁或者间隙锁。如有好的面试知识或技巧期待您的共享!会锁住主键索引叶子节点的3的next指针。一站式解决面试问题,你可以搜索微信小程序。
2023-09-05 07:14:06 571
原创 你们分库分表使用什么中间件,有什么优点和缺点?
确实之前用的还比较多一些,因为 SQL 语法支持也比较多,没有太多限制,而且目前推出到了 2.0 版本,支持分库分表、读写分离、分布式 id 生成、柔性事务(最大努力送达型事务、TCC 事务)。,运维成本低,不需要代理层的二次转发请求,性能很高,但是如果遇到升级啥的需要各个系统都重新升级版本再发布,各个系统都需要耦合 sharding-jdbc 的依赖;,自己运维一套中间件,运维成本高,但是好处在于对于各个项目是透明的,如果遇到升级之类的都是自己中间件那里搞就行了。如有好的面试知识或技巧期待您的共享!
2023-09-05 07:13:30 856
原创 InnoDB为什么使用B+Tree
因此 B+ Tree的关键又是在于中间节点不包含数据,因此B+Tree的大小远小于B Tree,并且可以将更多的数据存储到磁盘中(反之,存储到叶节点的索引键值也就更多)B+ Tree和B Tree不同,B+Tree中,只能将数据存储在叶子节点中,内部节点只包含指向下一节点的指针,而B Tree可以将数据存储在内部的叶节点中;B类树的一个很鲜明的特点就是数的层数比较少,而每层的节点非常多,树的每个叶子节点到根节点的距离都是相同的;如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。
2023-09-05 07:13:08 821
原创 如何创建合理的索引,索引如何优化?
如果已经删除了表的一大部分,或者如果已经对含有可变长度行的表进行了很多的改动,则需要做定期优化。这个命令可以将表中的空间碎片进行合并,但是此命令只对MyISAM、BDB和InnoDB表起作用。如果索引正在工作,Handler_read_key的值将很高,这个值代表了一个行被索引值读的次数。Handler_read_rnd_next的值高则意味着查询运行低效,并且应该建立索引补救。通过explain 关键字分析效率低的SQL执行计划。如有好的面试知识或技巧期待您的共享!
2023-09-05 07:09:46 281
原创 InnoDB全文索引是如何实现的?
记录的是已经被删除索引记录并真正从FTS Index Cache删除的FTS_DOC_ID(即删除FTS Index Cache并做了OPTIMIZE TABLE),后者是前者的内存缓存。Document存储的是键值对,键为FTS_DOC_ID,值为在文档中的位置,对应于ilist。包含全文索引的内部信息,最重要的存储是FTS_SYNCED_DOC_ID,表示已经解析并刷到磁盘的FTS_DOC_ID, 在系统宕机时,可以根据这个值判断哪些该重新分词并加入到FTS Index Cache中。
2023-09-05 07:09:42 413
原创 说说复合索引之最左前缀原理?
若没有按照索引顺序时,mysql查询优化器会自动的调整顺序来使用定义好的索引,如果我们将where中的条件顺序颠倒效果是一样的。对于范围条件查询,MYSQL无法再使用范围后面的其他索引列了。但对多个等值条件查询则没有这样的限制。如果查询条件中含有函数或表达式,则MySQL不会为这列使用索引(虽然某些在数学意义上可以使用)。MySQL中的索引可以以一定顺序引用多个列,这种索引叫做复合(联合)索引。此时可以用到索引,如果通配符%不出现在开头,则可以用到索引。由于不是最左前缀,索引这样的查询显然用不到索引。
2023-09-05 07:09:21 417
原创 为什么要建前缀索引?
相反情况下不适合使用前缀索引,比如,整个字段的长度为 20,索引选择性为 0.9,而我们对前 10 个字符建立前缀索引其选择性也只有 0.5,那么我们需要继续加大前缀字符的长度,但是这个时候前缀索引的优势已经不明显,就没有创建前缀索引的必要了。有一种与索引选择性有关的索引优化策略叫做前缀索引,就是用列的前缀代替整个列作为索引key,当前缀长度合适时,可以做到既使得前缀索引的选择性接近全列索引,同时因为索引key变短而减少了索引文件的大小和维护开销。如有好的面试知识或技巧期待您的共享!
2023-09-05 07:09:03 485
原创 说说MySQL回表查询与覆盖索引
通俗的讲就是,如果索引的列在 select 所需获得的列中(因为在 mysql 中索引是根据索引列的值进行排序的,所以索引节点中存在该列中的部分值)或者根据一次索引查询就能获得记录就不需要回表,如果 select 所需获得列中有大量的非索引列,索引就需要到表中找到相应的列的信息,这就叫回表。先通过普通索引定位到主键值id=5;在通过聚集索引定位到行记录;这就是所谓的回表查询,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。
2023-09-05 07:08:30 650
原创 Mysql中having语句与where语句的用法与区别
我们在写sql语句的时候,经常会使用where语句,很少会用到having,其实在mysql中having子句也是设定条件的语句与where有相似之处但也有区别。having子句在查询过程中慢于聚合语句(sum,min,max,avg,count)。而where子句在查询过程中则快于聚合语句(sum,min,max,avg,count)。having就是来弥补where在分组数据判断时的不足。因为where要快于聚合语句。如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。
2023-09-05 07:07:26 979
原创 为什么要分库分表?
分库:从单个数据库拆分成多个数据库的过程,将数据散落在多个数据库中。分表:从单张表拆分成多张表的过程,将数据散落在多张表内。
2023-09-05 07:07:05 1218
原创 如何分库分表?
因此,可以根据历史QPS、RT等数据评估,假设我们只需要3500数据库连接数,如果单库可以承担最高1000个数据库连接,那么我们就可以拆分成4个库。可以考虑通过垂直切分的方式,把商品信息、买家信息、卖家信息、支付信息都单独拆分成独立的表,并通过订单号跟订单基本信息关联起来。这是一种横向按业务维度切分的方式,比如常见的按会员维度切分,根据一定的规则把不同的会员相关的数据散落在不同的库表中。分库的时候除了要考虑平时的业务峰值读写QPS外,还要考虑到诸如双11大促期间可能达到的峰值,需要提前做好预估。
2023-09-05 07:06:43 515
原创 如何解决分库分表主键问题?
这都是你实际生产环境中必须考虑的问题。可以先看下我们之前的文章。如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。雪花算法和雪花算法的变种是大家常用的。从问题角度出发:我们需要一个。
2023-09-03 07:23:19 475
原创 说说MySQL主从复制?
从库IO线程将主库的binlog日志复制到其本地的中继日志relay log中 从库会启动一个IO线程,IO线程会跟主库建立连接,然后主库会启动一个特殊的二进制转储线程(binlog dump),二进制转储线程会读取主库上binlog中的事件,它不会一直对事件进行轮询,当它追赶上了主库就会进入睡眠状态,直到主库发送信号量通知其有新事件产生才会被唤醒。所谓并行复制,指的就是从库开启多个SQL线程,并行读取relay log中不同库的日志,然后并行重放不同库的日志,这是库级别的并行。
2023-09-03 07:22:59 136
原创 说说 MVCC 的工作原理?
当执行select操作是innodb默认会执行快照读,会记录下这次select后的结果,之后select 的时候就会返回这次快照的数据,即使其他事务提交了不会影响当前select的数据,这就实现了可重复读了。快照的生成当在第一次执行select的时候,也就是说假设当A开启了事务,然后没有执行任何操作,这时候B insert了一条数据然后commit,这时候A执行 select,那么返回的数据中就会有B添加的那条数据。这两个列,一个保存了行的创建时间,一个保存行的删除时间,并不是实际的时间,而是系统版本号。
2023-09-03 07:22:22 1254 2
原创 InnoDB 的默认隔离级别是什么?
所以,由于早期MySQL版本中binlog只有statement模式,而在读提交(RC)隔离级别下记录的binlog使用statement模式会导致主从数据不一致的问题,所以,MySQL选择使用可重复读(RR)作为默认隔离级别以保证主从复制数据一致性。在binlog中,记录日志的规则为:事务commit之后,记录日志。接下来,我们在看下在RR隔离机制下的相同案例:在RR隔离机制下,事务B的操作被阻塞,所以不会使得binlog在statement模式下记录顺序出现颠倒而导致主从数据不一致问题。
2023-09-03 07:19:22 819
原创 MySQL 是如何实现事务的四大特性的?
换句话说,ACID里的AID都是数据库的特征,也就是依赖数据库的具体实现。一致性是指事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态。一致性是事务追求的最终目标,原子性、持久性和隔离性,实际上都是为了保证数据库状态的一致性而存在的。事务一致性的实现即需要数据库层面的保障,也需要应用层面的保障。保证事务与事务之间的执行是相互隔离的,事务的执行不会受到其他事务的影响。语句要么都执行,要么都不执行,是事务最核心的特性,事务本身来说就是以原子性来定义的,实现主要是基于。
2023-09-03 07:18:58 527
原创 说说redo log 与 undo log
InnoDB作为MySQL的存储引擎,数据存储在磁盘中,如果每次读写数据都要操作磁盘IO效率会很低,为此InnoDB提供了缓存(Buffer Pool),Buffer Pool中包含了磁盘中部分数据页的映射,作为访问数据库的缓冲:当从数据库读取数据时,会首先从Buffer Pool中读取,如果Buffer Pool中没有,则从磁盘读取后放入Buffer Pool;于是,redo log被引入来解决这个问题:当数据修改时,除了修改Buffer Pool中的数据,还会在redo log记录这次操作;
2023-09-03 07:18:39 413
原创 “数据类型不一致”会走索引吗?
mysql sql优化器,对于where后面字段类型为字符串的数字,如果用数字去匹配(就是不用引号引上数字),则不能由索引直接命中,需要全部扫描。如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。
2023-09-03 07:18:22 403
原创 说说 TCP的粘包、拆包
一般用来说明TCP/IP四层协议中数据链路层的最大传输单元,不同类型的网络MTU也会不同,我们普遍使用的以太网的MTU是1500,即最大只能传输1500字节的数据帧。指TCP建立连接后双方约定的可传输的最大TCP报文长度,是TCP用来限制应用层可发送的最大字节数。由于底层的TCP无法理解上层的业务数据,所以在底层是无法保证数据包不被拆分和重组的,这个问题只能通过上层的应用协议栈设计来解决,根据业界的主流协议的解决方案,可以归纳如下。如有好的面试知识或技巧期待您的共享!问题产生的原因有三个,分别如下。
2023-09-03 07:17:59 842
原创 OSI与TCP IP各层的结构与功能,都有哪些协议
如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。TCP/IP五层模型的协议。
2023-09-03 07:17:39 1013
原创 TCP 建立连接的过程,为什么要三次握手、四次挥手?
换句话说,为什么tcp连接要进行,三次握手,两次不行吗?建立三次握手主要是因为A发送了再一次的确认,那么A为什么会再确认一次呢,主要是为了防止已失效的连接请求报文段又突然传送给B,从而产生了错误。
2023-09-03 07:17:07 92
原创 TCP的滑动窗口协议有什么用?
在图中,我们可看出灰色1号2号3号包已经发送完毕,并且已经收到Ack。接下来的操作就是一样的了,确认包后,窗口往后移继续将未发送的包读进缓存,把“待发送“状态的包变为”已发送“。发送包2,确认包2。如果一直等不到的话,我们也会把读进缓存的待发送的包也一起发过去。可以看出我们改进的方案比之前的好很多,所花的时间只是一个来回的时间。提出问题:在我们滑动窗口协议之前,我们如何来保证发送方与接收方之间,每个包都能被收到。这时候可以看出5号包已经接受到Ack,后面的6、7、8号包也已经发送过去已Ack。
2023-09-03 07:16:42 552
原创 TCP流量控制和拥塞控制,具体在场景中是怎么起作用的
只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。快重传算法并非取消了重传机制,只是在某些情况下更早的重传丢失的报文段(如果当发送端接收到三个重复的确认ACK时,则断定分组丢失,立即重传丢失的报文段,而不必等待重传计时器超时)。一条TCP连接有时会因等待重传计时器的超时而空闲较长的时间,慢开始和拥塞避免无法很好的解决这类问题,因此提出了快重传和快恢复的拥塞控制方法。
2023-09-03 07:16:12 228
原创 TCP、UDP 协议的区别,各自的应用场景
用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快好好读下,你会明白的。传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
2023-09-03 07:15:47 673
原创 全双工和半双工的区别是什么
2、半双工允许数据在两个方向上传输,但是同一时间数据只能在一个方向上传输,实际上是切换的单工。1、全双工允许数据在两个方向上同时传输;如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。
2023-09-03 07:11:54 237
原创 Socket交互的基本流程?
什么是网络编程,网络编程就是编写程序使两台连联网的计算机相互交换数据。操作系统提供了“套接字”(socket)的组件我们基于这个组件进行网络通信开发。tcp套接字工作流程都以“打电话”来生动表达,tcp套接字可以比喻成电话。电话可以同时用来拨打和接听的,但对套接字而言,拨打和接听是有区别的。我们先讲解套接字创建过程。其实这个过程跟我们生活中的打电话的场景比较相似。如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。TCP socket通信过程图。
2023-09-02 07:32:30 794
原创 说说HTTP 和 HTTPS 有什么区别?
非对称密钥加密,又称公钥加密,它需要使用一对密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。,可以确保数据的传输的安全性和完整性。
2023-09-02 07:31:51 1143
原创 说说CDN和负载均衡具体是怎么实现的
CDN (全称 Content Delivery Network),即内容分发网络。构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN 的关键技术主要有内容存储和分发技术/简单来讲,CDN就是根据用户位置分配最近的资源于是,用户在上网的时候不用直接访问源站,而是访问离他“最近的”一个 CDN 节点,术语叫「边缘节点」,其实就是缓存了源站内容的代理服务器。
2023-09-02 07:31:16 1217
原创 浏览器发生302跳转背后的逻辑?
详细来说,301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
2023-09-02 07:30:42 1831
原创 说说你了解的 Nginx
所谓“代理”,是指在内网边缘 设置一个硬件/软件转发请求;“正向”还是“反向”的说法,取决于转发的是"出站请求"还是"入站请求".下面的例子表明 静态资源在/usr/share/nginx/html, 动态资源路径包含api或swagger。前端可以自行开发、测试,自行使用nginx形成静态资源服务器,后端服务仅作为附加资源。如有好的面试知识或技巧期待您的共享!动静分离与现在火热的前后端分离概念火热相关,一站式解决面试问题,你可以搜索微信小程序。负载均衡一般伴随着反向代理, 起到了。
2023-09-02 07:30:22 1152
原创 Nginx 和 网关的关系是什么
Nginx也可以实现网关,可以实现对api接口的拦截,负载均衡、反向代理、请求过滤等。网关功能可以进行扩展,比如:安全控制,统一异常处理,XXS,SQL注入等;权限控制,黑白名单,性能监控,日志打印等;如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。
2023-09-02 07:30:01 1035
国内机场省、市及三字码
2022-04-28
全国地级市及省市区县经纬度
2022-04-28
最热门的Java 设计与架构面试题汇总
2022-04-26
最热门的Java 网络与操作系统面试题汇总
2022-04-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人