自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MyBatis从浅入深

Mybatis用于简化Java当中对于JDBC的操作,它将连接数据库,执行SQL命令自动化实现。

2024-05-21 00:38:45 735

原创 算法模块方法总结(数组)

二分查找(Binary Search)是一种在有序数组(必须是不能重复的,因为如果有重复的,会从几个符合的选项中输出一个,可能不合题意)中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。二分查找的思想是便于理解的,但是边界条件是很容易写错的。比如下面的。

2024-05-17 21:07:59 205

原创 回溯算法1

上面说过了,每一个回溯法都可以抽象为一个二叉树,这个一维数组就是path,用于记录路径。回溯算法可以解决 组合问题,切割问题,子集问题,排列问题,棋盘问题(n皇后)。在java语言中可以使用list来写。在解决这些问题的时候可以使用n循环,但是十分困难,使用回溯就比较容易。回溯法通常可以抽象为一个n叉树往下是递归,宽度是一个for循环。我们首先声明两个数组,一个是一维数组,一个是二维数组。组合问题:集合1234,找出大小为2的组合。回溯函数又称为递归函数,是纯暴力搜索。我使用一个例子来说明该问题。

2024-05-09 01:06:40 263 1

原创 Tire 字典树、前缀树

字典树(又称单词查找树或Trie树)是一种树形结构,它是哈希树的变种,通常用于统计、排序和保存大量的字符串(但不仅限于字符串)。字典树在搜索引擎系统中常用于文本词频统计。它的主要优点在于能够利用字符串的公共前缀来减少查询时间,从而最大限度地减少无谓的字符串比较,因此查询效率通常比哈希树高。字典树的基本操作包括查找、插入和删除,但删除操作相对较少见。在查找操作中,通常从根节点开始,依次搜索关键词的每个字母,直到找到对应的节点或确定关键词不存在于树中。

2024-05-02 23:17:19 386

原创 前K个高频元素

这块我们得考虑清楚,因为堆中只去维护k个大小的,所以当堆的大小达到k的时候,我们push进去一个新的元素,就要去pop栈顶元素,这块要是我们使用的大顶堆,每次都会pop出大的元素,到了最后剩下的就是小的元素,要是我们使用的小顶堆,剩下的就是频率较大的元素。我们首先想到的是map,map当中存储key和value,value代表着频率,最后在根据value进行排序,输出前k的元素,时间复杂度是nlogn。但是我们仅仅需要的是前k个高频元素,所以无需对全部元素进行排序,只需要去维护一个大小为k的有序集合即可。

2024-04-26 19:26:57 202

原创 桶排序(Bucket Sort)

当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。桶排序的核心在于合理设计桶的数量和每个桶的范围,使得数据能均匀分布到各个桶中,进而降低后续排序的复杂度。桶排序的步骤主要包括初始化桶确定桶的数量及每个桶对应的数据范围,遍历待排序序列将每个元素放入对应的桶中,以及对每个非空桶内部使用其他排序算法进行排序。总的来说,桶排序是一个利用函数映射关系将数据分布到有限数量的桶中,再对每个桶内的数据进行排序,最后按顺序合并得到全局有序序列的排序算法。的键是数组元素的“桶”ID,值是数组元素的值。

2024-04-26 16:45:24 274

原创 递归解决树的相关问题

这道题,我首先想到删除该节点的标志在于左右节点为null,并且该节点的值为0,使用栈对树进行层序遍历后存储,接着删除即可,但是这里存在着一个问题,使用栈弹出的节点,进行删除,并不能影响到原树中的元素,删除节点时,你需要确保父节点正确地更新其子节点的引用。递归算法的基本思想是将一个大规模的问题拆分成若干个规模较小的子问题来解决,子问题的解决方式与原问题相同,只是规模更小。那么就得保存一个路径可以告知父节点,这个时候就可以使用递归的方法。对于删除节点,查找特殊节点的时候,我们就可以使用这种方法来解决。

2024-04-25 15:15:42 137

原创 使用队列对二叉树进行广度遍历

我们首先创建一个队列,开始遍历二叉树,这里记录一个值len,表示当前层有多少个元素,当然第一层也就是根(root),只有一个元素,那么就是len=1,在遍历的过程当中,我们将使用while循环,而len是否大于0作为判断条件,这样就可以知道这一层是否遍历完,进入遍历时,弹出root,len--,接着对root的左右节点进行判断是否为null,不为null的话就offer进队列当中。我们要对二叉树进行广度遍历,经典的数据结构就是队列,这也是许多算法题中要用到的基础,下面是一些基本思想。

2024-04-24 15:20:32 170

原创 LCR 039

对于每个元素,如果栈不为空且栈顶元素对应的柱子高度大于等于当前柱子高度,那么就将栈顶元素弹出,因为当前柱子会遮挡住它,使得它无法成为其他柱子的左侧第一个比它矮的柱子。这样,栈中的元素对应的柱子高度是单调递减的。right[i] 存储的是 heights[i] 右侧第一个比它矮的柱子的下标,如果不存在,则设为 n 是 heights 的长度。left[i] 存储的是 heights[i] 左侧第一个比它矮的柱子的下标,如果不存在,则设为 -1。,数组中的数字用来表示柱状图中各个柱子的高度。

2024-04-21 18:06:56 341

原创 单调栈习题

经过遍历之后,我们很容易就会得到答案,但是两个for循环所带来的时间复杂度是O(n^2),是很大的,我们可以使用单调栈来优化这个问题,将时间复杂度降低到O(n)。单调栈的基本思想是在遍历数组时维护一个单调递减的栈,栈中的每个元素对应一个温度,且栈顶元素对应的温度是栈中所有元素对应温度中的最大值。遍历温度列表当中的温度,若栈为空则进栈,若是不为空就可以将栈顶元素取出与当前元素进行对比,若是当前元素大于栈顶所代表的温度那么就将栈顶元素移除,这个时候将等待天数进行更新。如果气温在这之后都不会升高,请在该位置用。

2024-04-18 18:23:54 174

原创 逆波兰表达式求值

注意先取出来的是num2,接下来才是num1,因为栈是先进后出的。每个运算对象可以是整数,也可以是另一个逆波兰表达式。那么我们就可以根据这些特性来写出代码完成操作。,求该后缀表达式的计算结果。

2024-04-18 17:24:46 170

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

nn。

2024-04-13 01:38:43 279

原创 字符串异位词查找

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

2024-04-01 01:14:18 262

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

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

2024-03-19 15:54:42 368

原创 MySQL深入——25

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

2024-03-04 19:33:42 894 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 1047

原创 MySQL深入——23

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

2024-03-01 15:40:44 1127

原创 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 475

原创 MySQL深入——21

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

2024-02-28 02:17:35 913

原创 MySQL深入——20

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

2024-02-20 21:53:12 404

原创 数据结构-树

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

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

原创 Java集合补充

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

2024-02-13 00:49:37 337

原创 MySQL深入——19

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

2024-02-05 02:11:19 989

原创 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 927

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

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

2024-02-04 22:33:21 877

原创 MySQL深入——16

MySQL如何保持高可用??

2024-01-24 14:28:29 438

原创 MySQL深入——15

MySQL如何保持主备一致呢?

2024-01-24 13:47:15 421

原创 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 855

原创 MySQL深入——13

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

2024-01-16 16:59:18 449

原创 MySQL深入——12

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

2024-01-13 12:06:14 418

原创 MySQL深入——11

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

2024-01-12 00:34:15 388

原创 深入MySQL——10

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

2024-01-10 01:40:02 473

原创 MySQL深入——9

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

2024-01-08 01:38:48 980

原创 B+树是如何形成的

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

2023-12-11 15:27:03 363

原创 MySQL深入——8

首先我们来创建一个表。

2023-12-10 02:44:51 868

原创 Mysql深入——7

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

2023-11-30 15:40:56 510

原创 Online ddl和replace ddl

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

2023-11-29 17:44:01 461

原创 Mysql深入——6

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

2023-11-27 00:41:27 489

原创 Mysql深入——5

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

2023-11-24 00:31:22 798

原创 MySQL深入——4

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

2023-11-16 12:52:43 45

空空如也

空空如也

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

TA关注的人

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