自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 链表题(哑结点的使用)

nn。

2024-04-13 01:38:43 115

原创 字符串异位词查找

的子串,返回这些子串的起始索引。不考虑答案输出的顺序。指字母相同,但排列不同的字符串。

2024-04-01 01:14:18 236

原创 使用滑动窗口解决数组子数组问题

给定一个含有n个正整数的数组和一个正整数target找出该数组中满足其和≥ target的长度最小的,并返回其长度如果不存在符合条件的子数组,返回0。解:因为一个数组要知道的是他的子数组,所以数据不能改动,是一个死数组,那么此时就可以使用滑动窗口的方法解决这个问题。

2024-03-19 15:54:42 348

原创 MySQL深入——25

Join语句的两种算法,分别为Index Nested-Loop Join和Block Nested-Loop JoinNLJ在大表Join当中还不错,但BNL在大表join时性能就差很多,很耗CPU资源。

2024-03-04 19:33:42 869 1

原创 MySQL深入——24

join语句用于两个或多个表当中检索数据。INNER JOIN或者JOIN 当两个表当中有匹配的值时,返回行LEFT JOIN或者LEFT OUTER JOIN 返回所有左边的行,即使右表当中没有相匹配的行RIGHT JOIN或者RIGHT OUTER JOIN 返回所有右边的行,即使左表当中没有相匹配的行FULL JOIN或FULL OUTER JOIN 左表或右表有匹配的行时,返回行。

2024-03-02 01:38:44 1033

原创 MySQL深入——23

主机内存只有100G,现在对一个200G的大表进行扫描,会不会把数据库的内存用完。

2024-03-01 15:40:44 1108

原创 MySQL深入——22

在MySQL当中有两个kill命令一个是kill query +线程id表示中止这个线程当中正在执行的语句,另外一个是 kill Connection+线程id表示断开这个连接。在使用MySQL时,使用kill命令之后看show processlist显示的command列为killed,这是为什么呢??收到kill命令之后线程会做以下的操作前提:表正在执行Update操作,使表持有DML读锁。对表进行kill之后,表会直接中止掉线程后什么都不管退出吗?

2024-02-29 00:40:08 464

原创 MySQL深入——21

误删数据分为以下几种:1.使用delete语句误删2.使用drop table或者truncate table语句误删3.使用drop database误删4.使用rm命令误删整个MySQL实例(rm命令是Unix和Linux操作的命令,表示强制删除文件)

2024-02-28 02:17:35 902

原创 MySQL深入——20

若select 1成功则表明主库进程没问题。但是仔细想想,这ok吗?我们来看看下面这个例子,t是加锁的会被堵住。在InnoDB当中,有innodb_thread_concurrency参数,其目的是控制InnoDB的并发线程上限,当达到上限的时候,会进入sleep状态,直到有线程退出,它的默认值为0,表示不限制并发线程的数量,通常情况下设置为64-128之间。并发连接和并发查询并不是一个概念,在show processlist中看到几千个连接,指并发连接,正在执行的语句为并发查询。

2024-02-20 21:53:12 387

原创 数据结构-树

它是树型结构(非线性结构)结点之间具有分支,具有层次结构定义:Tree为n(n>=0)个结点的有限集n=0时为空树,n>0时满足以下两种情况:1.有且仅有一个特定的结点称之为root(根)。2.其余结点可以分为m个互不香蕉道有限集,称其为子树。度:结点的分支数,树的度为结点度的最大值。树的深度为结点的最大层次。

2024-02-14 03:02:32 709 1

原创 Java集合补充

注意,这里的3是指创建array的大小,当数组小的话,会自动扩容为刚好的大小,若是大了,剩下的空间会变为null。可以使用list.size()来刚好创建数组。

2024-02-13 00:49:37 324

原创 MySQL深入——19

一主多从结构就是基本的读写分离结构,主要目的在于分摊主库的压力。其中一种架构是将数据库的连接信息放在客户端,由客户端选择后端数据库进行查询。还有一个架构是MySQL与客户端之间有一个中间代理层proxy,客户端只连proxy由proxy决定分发路径。第一种架构来说,结构金丹,便于维护,只出现主备切换,库迁移时,只需要在客户端调整数据库连接信息proxy的架构,对客户端较为友好,因为连接是由proxy决定的,proxy的维护成本高,proxy需要高架构。

2024-02-05 02:11:19 981

原创 MySQL深入——18

我们来看看一主多从的情况比如A是主库,A’ B C D都是副库,但A与A'互为备库,当A库出现问题,我现在要将主库转到A’该怎么办。以下是基于位点的主备切换其中的MASTER_LOG_FILE和MASTER_LOG_POS表示要从主库的MASTER_LOG_FILE文件的MASTER_LOG_POS这个位置的日志继续同步,这个位置就是指同步位点,即为主库对应的文件名和日志偏移量。这里就有一个问题,既然A'是新的主库,就要把节点B设置为A’的从库,就要执行change master命令。

2024-02-05 01:30:30 913

原创 MySQL深入——17(主备延迟)

之前说的延迟为分钟级的,备库稳定之后都能追上来,但若备库的执行日志速度持续低于主库的生成日志速度,延迟就有可能变为小时级的。这就设计到了备库的并行复制能力。InnoDB支持行锁,除了并发事务都更新同一行的情况下,对于业务的友好度还是很好的。日志在备库上执行,备库上sql_thread更新数据的逻辑,若是用单线程的话就会导致备库应用日志不够快,造成主备延迟。在5.6版本以前的MySQL,只支持单线程复制,由此在主库并发度高,TPS高的时候,就会出现严重的主备延迟问题。

2024-02-04 22:33:21 841

原创 MySQL深入——16

MySQL如何保持高可用??

2024-01-24 14:28:29 430

原创 MySQL深入——15

MySQL如何保持主备一致呢?

2024-01-24 13:47:15 412

原创 MySQL深入——14

Mysql是如何保证数据不全的,Mysql的数据写入是两阶段提交完成的,即为redo log的prepare阶段和bin log阶段还有redo log的commit阶段,那么数据就和redo log 和bin log 有关。我们来看看bin log 和redo log的写入机制。

2024-01-19 00:45:04 836

原创 MySQL深入——13

今天我们来谈谈饮鸩止渴提高性能的方法下面说两种情况分别是短连接造成的和慢查询性能问题。

2024-01-16 16:59:18 444

原创 MySQL深入——12

这意味着,当一个事务对某行数据加上共享锁之后,其他事务也可以对该数据加共享锁,但不能加排他锁,并且只能进行读操作,不能进行写操作。当一个事务对数据加上排他锁之后,其他事务不能对该数据加任何的锁,包括共享锁和排他锁。我们接下来举一些例子来说明,在举例子之前,我要特别说明隔离级别为可重复读,因为在可重复读下间隙锁才是有效的。优化:1.在索引上的等值查询,给唯一索引加锁的时候,next-key lock 会退化为行锁。next-key lock(临键锁)是记录锁与间隙锁的结合,锁定一个范围。

2024-01-13 12:06:14 410

原创 MySQL深入——11

但是这种间隙锁的引入,也带来了一些问题,就比如说触发死锁,(问题大概是:查询数据,数据不存在时进行更新插入)当A事务对一个不存在的数据进行查询的时候会加入间隙锁,然后B查询一个不存在的数据,也会触发间隙锁,但是如果A和B这个时候要进行数据的插入,A会被B的间隙锁挡住进入等待,B也会被A的间隙锁挡住,进入等待,最终成为死锁。首先C事务将数据加入,然后对这个刚加入的数据进行修改工作,因为这行是没有加锁的,然后事务A提交,释放锁,开始执行,将所以的d=5的行改为100,然后进行B事务的操作。

2024-01-12 00:34:15 379

原创 深入MySQL——10

分为两种情况一种是查询后长时间不返回的,还有一种是查询很慢的我们先来说第一种情况。

2024-01-10 01:40:02 465

原创 MySQL深入——9

我们来模拟在英语单词app当中随机出现三个英语单词的情况,我们首先创建一张表words,然后给这个表当中插入10000条信息进行量化。order by rand()就是随机取三个的意思,接着我们使用Explain语句来看看这个命令,发现他要进行排列而且要创建临时表,对于优化器来说,是处理的行数越少越好,就使用了rowid排序进行,rowid排序(

2024-01-08 01:38:48 967

原创 B+树是如何形成的

页目录中除了存储信息,还有放了若干条额外信息,也包括两个指针,一个指向上一页,一个指向下一页。为了解决快速搜索的问题,设计InnoDB的人引入了一个页目录的东西,具体做法就是,将存储在单向链表中记录分为若干个组,然后取出每个组的最大地址放在页目录当中,每个地址占用2个字节,这些地址就构成了一个数据结构。假设一个页目录中只能存储4条记录,有16条数据记录在4个页当中,查第6条记录,就得一个页,一个页去找,InnoDB将每个页的最小主键取出,组成了一个目录项记录,可以通过目录项记录来快速查找。

2023-12-11 15:27:03 344

原创 MySQL深入——8

首先我们来创建一个表。

2023-12-10 02:44:51 860

原创 Mysql深入——7

在不同的MySQL引擎中,count(*)有不同的实现方式,MyISAM引擎将一个表的总行存在了磁盘上,需要的时候会直接返回,但InnoDB需要遍历全表累加计算。这里说的是没有加where条件的,若加了where限制条件,MyISAM也会变慢。那么为什么InnoDB不喝MyISAM一样,把总数存起来呢?

2023-11-30 15:40:56 498

原创 Online ddl和replace ddl

1. .ibd文件表数据文件,存储了表的数据和索引信息,从Mysql8开始表定义信息,从.frm文件改为.dcl文件存储,而表数据和索引信息仍然储存在.ibd文件,.idb文件通常在书籍库目录下。2. .frm文件是Mysql数据库中存储库中存储表结构的文件,它记录了表的结构信息,包括表的字段索引,触发器等信息。Mysql的存储引擎通过读取frm文件来了解表结构。

2023-11-29 17:44:01 442

原创 Mysql深入——6

数据库的回收,一个InnoDB表中包含了两个部分,分别是表结构定义和数据。在Mysql8.0以前,表结构是存在以.frm为后缀的文件里,在mysql8.0,则允许将表结构定义放在系统数据表中,因为表结构定义占用空间很少,所以表的大小还是和表数据有关的。

2023-11-27 00:41:27 481

原创 Mysql深入——5

这种情况是随机的,有时候突然你执行一条语句就会变慢,这是为什么呢?从以前的内容可以得知,InnoDB在执行更新语句的时候,有一个redo log,更新内存写完redo log之后就返回给客户端,代表着更新成功。将内存中的数据写入磁盘的过程就叫做flush,当内存数据页跟磁盘数据页不一样的时候,称这个内存页为脏页,当吧内存数据写入磁盘后,内存和磁盘上的数据页就一致了,成为“干净页”在执行Mysql语句的过程中,有可能因为flush过程使得执行过程变慢,那么哪些情况会导致flush呢?

2023-11-24 00:31:22 789

原创 MySQL深入——4

我们先来谈谈change buffer当需要更新一个数据页的时候,若数据页在内存中有就直接更新,若这个数据还没有在内存中,在不影响数据一致性的前提下,InnoDB会将这些数据缓存在change buffer中,这样就不需要从磁盘中读入这个数据页了。在下次查询需要访问这个数据页的时候,将数据读入内存中,然后执行change buffer中与这个页有关的操作。change buffer实际上为可持久化的数据,在内存中有拷贝,也被存入磁盘中。操作到原数据页的操作叫merge。

2023-11-16 12:52:43 35

原创 HTML从0开始的基础(持续更新)

Ctrl+N新建页面Ctrl+S另存为指定的文件名,使用html后缀,sublime Test3会开启相应的代码自动补全输入<h会弹出相应的代码补候选目录,选择html回车,会自动创建html的框架最后输入完成程序后,按下Ctrl+S会对文件进行保存不必关闭sublime,使用浏览器打开保存的文件,就可以看你程序的运行结果了浏览器当前标签名即为你刚刚输入的title,地址栏内容为html的文件本地路径。

2023-11-12 02:00:23 27

原创 MySQL深入——3

锁分为全局锁,表级锁,行锁下来我将对这三种锁分别说明。

2023-11-11 17:15:24 25

原创 Mysql深入——2

通过添加索引来解决,实现索引的模型有三种常见的结构,为哈希表和有序数组还有搜索树我们下来仔细谈谈这三种数据结构。

2023-11-08 18:10:49 31

原创 二叉树的基本知识

一般使用顺序存储即为数组存储会浪费空间,因为在使用数组存储的时候,得先将它补齐为完全二叉树,然后存入数组。补齐过程中,不存在的结点会置空进行补充,按照从左到右的顺序进行存储。完全二叉树,由满二叉树引出来,对于深度为K,有n个结点的二叉树,从1到n的节点与其一一对应的称之为完全二叉树。三叉链表是由左节点 data域还有parent指向父节点,最后由右节点组成。结点的有限集合,该集合或者为空,有左右之分,次序不能跌倒。链式存储有两种,一个是二叉链表,一个是三叉链表。满二叉树是一种特殊的完全二叉树。

2023-11-07 00:21:15 29

原创 深入并发编程——1

在研究这个问题之前,我们先来搞清楚线程之间是如何通信的及线程之间如何同步的?线程之间的通信机制有两种:共享内存和消息传递在共享内存的并发模型中,线程之间共享程序的公共状态,线程之间通过读写内存来达到隐式通信,在内存不共享的并发内存中,线程之间只能通过发送信息来进行通信。同步是指程序中用于控制不同线程操作发送相对顺序的机制,在共享内存的机制中,同步是显式的,程序员必须某个方法或某段代码需要在线程之间互斥执行。在消息传递的并发模型中,由于消息的发送必须在消息的接收之前,因此同步是隐式进行的。

2023-11-05 23:48:40 31

原创 Mysql深入——1

Mysql内部分为两部分,分别为Server层和存储引擎两部分Server层包括连接器,查询缓存,分析器,优化器,执行器接下来我来详细谈谈Server层在执行中的作用。

2023-11-02 17:39:29 42

原创 正则表达式

一个正则表达式,就是用某种模式去匹配字符串的一个公式,很多人因为它们看起来比较古怪和复杂所以不敢去使用,不过经过练习后,就觉得这些复杂的表达式写起来还是相当简单的,而且,你一旦弄懂他就能很好的处理文本文件如果想要灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符。

2023-10-29 01:24:07 42

原创 JDBC.java

基本概念JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作基本原理有很多不同的数据库,每个数据库的底层逻辑和代码都不同,但是我们需要使用java程序去统一调度他们。这时候,每个数据库的厂商都实现了一个接口来驱动自己的数据库,然后java公司也实现了一个接口来连接这些数据库的接口,java公司实现的这个接口就是jbdc。JDBC API是一系列接口,它统一和规范了应用程序与数据

2023-10-25 00:50:33 77

原创 Java程序中的Mark Word

Mark Word翻译过来就是对象标记,当我们new出来一个对象实例,这个对象实例是由三部分来组成的,分别是对象头,实例数据和对齐填充,Mark Word就存在于对象头当中。接下来我将会对这三个部分进行一一说明。

2023-10-18 00:38:56 124

原创 浅谈乐观锁(CAS)与悲观锁(synchronized)

乐观锁是指持有乐观态度的锁,就是它认为他这个线程在对数据进行操作的时候,其他的线程并不会对这个数据进行同步操作,态度比较乐观。只有在数据提交的时候才通过机制验证数据是否存在冲突,一般使用CAS算法实现,乐观锁的应用场景是多读少写的应用类型,这样可以提高吞吐量,提升系统的性能。

2023-10-17 23:12:33 67

原创 Mysql基础

包含mysql几乎所有的基础知识

2023-10-15 04:53:29 95 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除