自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (1)
  • 收藏
  • 关注

转载 MySQL实战45讲--让我们一起来搞懂MySQL目录大纲(0)

在这里,有一份目录,你也可以先了解下整个专栏的知识结构。如前面说的,这几条主线上的每个知识点几乎都不是最新的,有些甚至十年前就这样,并没有改过。但我希望针对这些点的说明,可以让你在使用 MySQL 时心里更有底,知道怎么做选择,并且明白为什么。了解了原理,才能在实践中不断创新,提升个人的价值和工作输出。从这里开始,跟我一起搞懂 MySQL!...

2021-01-03 20:39:10 187

原创 算法开篇-大纲

万事开头难,突然发现博客的格式都不大会,汗......后面再优化吧(这句话怎么这么耳熟????)学习算法绕不开的一个网站应该就是LeetCode了,在刷力扣之前,是查过网上一些牛人的刷题心得的,大致总结下应该会有这几种:上来直接顺着题号开刷; 查询热点TOP题型开刷; 有牛人总结题号开刷; 按照算法和数据结构去刷对应题型; 柿子采取的是第四种,根据目前算法和数据结构来刷对应的题型,刷过一种之后进行总结归纳,整理出该种算法的优劣模板,最好最好能把解题模板整理一下。打开 LeetCode 网站

2020-12-02 22:50:44 132

原创 Java虚拟线程

自从Go凭着goroutine又带火了协程这个概念,连近亲Kotlin也有了协程,Java终于坐不住了,最新的release 19里带来了Java版协程,即虚拟线程(不过目前还只是Preview阶段,按以往的尿性判断,正式可用估计要等到起码Java 21了(不过,对于万年Java 8的我们有区别吗?写这篇文章的目的,就是梳理一下我的理解,顺便捋一捋Java线程的过去、现在和未来。

2023-10-10 15:19:35 239

原创 Java常见问题排查

可以去这两个目录下解压(-tvf不会真的解压,只是看列表),打印出所有的类,看是不是有同样包名同样类名的从两个不同的jar包出来,并且他们的md5出来是不一样的,如果如此,就是版本冲突了。如果是这样,是因为程序内存应用用的太多了。新手遇到的问题是OOM打印的触发OOM的堆栈,但是很多时候这个堆栈里有关的人并不是导致OOM的人,因为OOM不是一个地方造成的,而是一个累积效应。常见的问题是Jar包版本冲突问题,有的容易解决,编译时mvn做版本检测,如果版本不一样但是id一样,这样的时候编译会报错。

2023-09-07 15:59:32 127

原创 一文解析Arthas

服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而被不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何 Arthas 的命令也不会引起任何原有业务逻辑的改变。非常重要,请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 shutdown 或将增强过的类执行 reset 命令。当然,一个好的习惯是,不管表达式中有没有引号,都使用引号括起来。

2023-09-07 15:58:31 839

原创 提效工具推荐之IDEA插件

工具用的好,下班下的早,本期推荐IDEA的插件工具。

2023-09-07 15:51:07 187

原创 分库分表太坑啦!

分库分表,看完之后的感悟就是,能不用就不用!!一用就会有超多问题,果然每个技术不仅有优点而且背后都是有超级大的成本的,接下来我就来分享一下分库分表。

2022-12-05 17:49:55 1329 1

原创 发现CMS GC有点傻 -- ebs full gc 问题排查

full gc 问题排查

2022-12-05 16:32:24 555

原创 提效工具推荐之IDEA插件

提效工具推荐之IDEA插件

2022-12-05 16:29:03 828

原创 springboot项目中使用自定义注解

springboot项目中使用自定义注解

2022-12-05 16:21:09 133

原创 Java常见问题排查

Java常见问题排查,知其然,知其所以然,方能做到唯手熟尔。

2022-11-21 20:18:24 517

转载 MySQL实战45讲--到底可不可以使用join?(34)

在实际生产中,关于 join 语句使用的问题,一般会集中在以下两类:我们 DBA 不让使用 join,使用 join 有什么问题呢? 如果有两个大小不同的表做 join,应该用哪个表做驱动表呢?今天这篇文章,我就先跟你说说 join 语句到底是怎么执行的,然后再来回答这两个问题。为了便于量化分析,我还是创建两个表 t1 和 t2 来和你说明。CREATE TABLE `t2` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL,...

2021-01-26 17:51:04 105

转载 RedisTemplate之opsForValue API使用说明

转载链接出自:https://blog.csdn.net/qq_25135655/article/details/80357137目录1、set(Kkey,Vvalue)2、get(Objectkey)3、append(Kkey,Stringvalue)4、get(Kkey, longstart, longend)5、getAndSet(Kkey,Vvalue)6、setBit(Kkey, longoffset, booleanvalue)...

2021-01-13 14:39:44 442

转载 MySQL实战45讲--日志和索引相关问题(15)

到目前为止,已经收集了 47 个问题,很难通过今天这一篇文章全部展开。所以,我就先从中找了几个联系非常紧密的问题,串了起来,希望可以帮你解决关于日志和索引的一些疑惑。而其他问题,我们就留着后面慢慢展开吧。日志相关问题在第 2 篇文章《日志系统:一条 SQL 更新语句是如何执行的?》中,和你讲到 binlog(归档日志)和 redo log(重做日志)配合崩溃恢复的时候,用的是反证法,说明了如果没有两阶段提交,会导致 MySQL 出现主备数据不一致等问题。在这篇文章下面,很多同学在问,在两阶段提交

2021-01-11 21:54:43 145

转载 MySQL实战45讲--count(*)这么慢,我该怎么办?(14)

在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条 select count(*) from t 语句不就解决了吗?但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL 怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗。那么今天,我们就来聊聊 count(*) 语句到底是怎样实现的,以及 MySQL 为什么会这么实现。然后,我会再和你说说,如果应用中有这种频繁变更并需要统计表行数的需求,

2021-01-08 16:41:45 113

转载 MySQL实战45讲--为什么表数据删掉一半,表文件大小不变?(13)

经常会有同学来问我,我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变?那么今天,我就和你聊聊数据库表的空间回收,看看如何解决这个问题。这里,我们还是针对 MySQL 中应用最广泛的 InnoDB 引擎展开讨论。一个 InnoDB 表包含两部分,即:表结构定义和数据。在 MySQL 8.0 版本以前,表结构是存在以.frm 为后缀的文件里。而 MySQL 8.0 版本,则已经允许把表结构定义放在系统数据表中了。因为表结构定义占用的空间很小,所以我们今天主要讨论的是表数

2021-01-08 16:39:06 122

转载 MySQL实战45讲--为什么我的MySQL会“抖”一下?(12)

平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。看上去,这就像是数据库“抖”了一下。今天,我们就一起来看一看这是什么原因。你的 SQL 语句为什么变“慢”了在前面第 2 篇文章《日志系统:一条 SQL 更新语句是如何执行的?》中,我为你介绍了 WAL 机制。现在你知道了,InnoDB 在处理更新语句的时候,只做了写日志这一个磁盘操作。这个日志叫作 redo

2021-01-08 16:22:25 100

转载 MySQL实战45讲--怎么给字符串字段加索引?(11)

现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题。预热问题 1.字符串加索引有什么问题? 字符串可能比较长. 2.怎么给字符串加索引? a.前缀? b.截取中间部分? 3.怎么查看字符串索引的空间时间消耗?假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的:mysql> create table SUser(ID bigint unsigned primary key,email varchar(64),...)engi..

2021-01-07 13:15:05 135

转载 MySQL实战45讲--MySQL为什么有时候会选错索引?(10)

前面我们介绍过索引,你已经知道了在 MySQL 中一张表其实是可以支持多个索引的。但是,你写 SQL 语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由 MySQL 来确定的。不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句,却由于 MySQL 选错了索引,而导致执行速度变得很慢?我们先建一个简单的表,表里有 a、b 两个字段,并分别建上索引:CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAU..

2021-01-05 21:44:48 122

转载 MySQL实战45讲--普通索引和唯一索引,应该怎么选择?(09)

在前面的基础篇文章中,我给你介绍过索引的基本概念,相信你已经了解了唯一索引和普通索引的区别。今天我们就继续来谈谈,在不同的业务场景下,应该选择普通索引,还是唯一索引?假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似这样的 SQL 语句:select name from CUser where id_card = 'xxxxxxxyyyyyyzzzzz';所以,你一定会考虑在 id_car

2021-01-05 21:13:40 115

转载 MySQL实战45讲--事务到底是隔离的还是不隔离的?(08)

在第 3 篇文章和你讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view,之后事务 T 执行期间,即使有其他事务修改了数据,事务 T 看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。但是,我在上一篇文章中,和你分享行锁的时候又提到,一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能这么超然了,会被锁住,进入等待状态。问题是,既然进入了等待状态,那么等到这个事务自己获取到行锁要

2021-01-04 21:41:39 160 1

转载 MySQL实战45讲--行锁功过:怎么减少行锁对性能的影响?(07)

在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,本篇我们就来讲讲 MySQL 的行锁。MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。InnoDB 是支持行锁的,这也是 MyISAM 被 InnoDB 替代的重要原因之一。我们今天就主要来聊聊 InnoDB 的行锁,以及如何通过减少锁冲突来提升业务并发

2021-01-04 20:40:24 115

转载 MySQL实战45讲--全局锁和表锁 :给表加个字段怎么有这么多阻碍?(06)

今天聊聊 MySQL 的锁。数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。今天这篇文章,我会和你分享全局锁和表级锁。而关于行锁的内容,我会留着在下一篇文章中再和你详细介绍。这里需要说明的是,锁的设计比较复杂,这两篇文章不会涉及锁的具体实现细节,主要介绍的是碰到锁时的现象和其背后的原理。全局锁顾名思义,全局锁就

2021-01-04 13:14:18 115

转载 MySQL实战45讲--深入浅出索引(下)(05)

在上一篇文章中,介绍了 InnoDB 索引的数据结构模型,今天我们再继续聊聊跟 MySQL 索引有关的概念。在开始这篇文章之前,我们先来看一下这个问题:在下面这个表 T 中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行?下面是这个表的初始化语句。mysql> create table T (ID int primary key,k int NOT NULL DEFAULT 0,s varch.

2021-01-04 12:49:33 147 1

转载 MySQL实战45讲--深入浅出索引(上)(04)

提到数据库索引,我想你并不陌生,在日常工作中会经常接触到。比如某一个 SQL 查询比较慢,分析完原因之后,你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引,索引又是如何工作的呢?今天就让我们一起来聊聊这个话题吧。数据库索引的内容比较多,我分成了上下两篇文章。索引是数据库系统里面最重要的概念之一,所以我希望你能够耐心看完。在后面的实战文章中,我也会经常引用这两篇文章中提到的知识点,加深你对数据库索引的理解。一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。

2021-01-04 11:59:37 129

转载 MySQL实战45讲--事务隔离:为什么你改了我还看不见?(03)

提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱。转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这 100 块钱,完全可以借着这个时间差再查一次,然后再给另外一个朋友转账,如果银行这么整,不就乱了么?这时就要用到“事务”这个概念了。简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 M

2021-01-03 21:43:21 130

转载 MySQL实战45讲--日志系统:一条SQL更新语句是如何执行的?(02)

前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。那么,一条更新语句的执行流程又是怎样的呢?之前你可能经常听 DBA 同事说,MySQL 可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢?我们还是从一个表的一条更新语句说起,下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c:mysql> crea

2021-01-03 21:24:55 108

转载 MySQL实战45讲--基础架构:一条SQL查询语句是如何执行的?(01)

这是专栏的第一篇文章,聊聊 MySQL 的基础架构。我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:mysql> select * from T where ID=10;我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。所以今天我想和你一起

2021-01-03 20:53:23 101

原创 和你一起刷算法-一篇搞定千奇百怪的排序算法前篇(十)

来了来了,终于到排序这一章节了(〃'▽'〃)先说各排序内容和模板,然后对比着总结归纳,再到各自的使用场景,东西比较多,本篇幅尽量简略且高效,一篇拿全(*^▽^*)。PS:我之前在bilibili学习排序时感觉很好的视频也摘选出来共大家更直观的理解。0、算法总览学算法绕不过去的肯定是下面这张图了,不用担心,这张图可以用口诀记忆的。排序算法汇总:术语说明:稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后..

2020-12-28 19:27:30 123

原创 和你一起刷算法-LeetCode刷题之二分查找训练营(九)

第一题快速导航:154. 寻找旋转排序数组中的最小值 II假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7] 可能变为[4,5,6,7,0,1,2])。请找出其中最小的元素。注意数组中可能存在重复的元素。示例 1:输入: [1,3,5]输出: 1示例2:输入: [2,2,2,0,1]输出: 0说明:这道题是寻找旋转排序数组中的最小值的延伸题目。 允许重复会影响算法的时间复杂度吗?会如何影...

2020-12-14 11:49:02 174 1

原创 和你一起刷算法-LeetCode刷题之“居合斩!”二分查找(八)

算法解释:二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取 一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复 杂度为 O(log n)。举例来说,给定一个排好序的数组 {3,4,5,6,7},我们希望查找 4 在不在这个数组内。第一次 折半时考虑中位数 5,因为 5 大于 4, 所以如果 4 存在于这个数组,那么其必定存在于 5 左边这一 半。于是我们的查找区间变成了 {3,4,5}。(注意,根据具体情况和您的刷题习惯,这里的

2020-12-12 11:27:21 264 1

原创 和你一起刷算法-LeetCode刷题之双指针训练营(七)

第一题快速导航:633. 平方数之和给定一个非负整数c,你要判断是否存在两个整数a和b,使得a2+ b2= c。示例 1:输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例 2:输入:c = 3输出:false示例 3:输入:c = 4输出:true示例 4:输入:c = 1输出:true很明显如果使用双指针的话是需要使用左右指针 left=0 right=c也可以使用数学doubl...

2020-12-11 16:43:15 203 1

原创 和你一起刷算法-LeetCode刷题之玩转双指针的“滑动”(六)

一、柿子前言:说完了双指针中的“左右”指针和“快慢”指针,其中在左右指针中有两种一种是碰撞指针用来解决二分查找问题和N数之和问题,另一种则是今天的主角儿-滑动指针。这也许是双指针技巧的最高境界了,如果掌握了此算法,可以解决一大类子字符串匹配的问题,不过「滑动窗口」算法比上述的这些算法稍微复杂些。幸运的是,这类算法是有框架模板的,下面文章就准备讲解「滑动窗口」算法解题思路,同样怎么能少的了解题模板呢(因为比较懒,模板总结最擅长(o´ω`o)ノ )。二、双指针记忆口诀和模板:链表子串数组题

2020-12-11 14:23:01 151

原创 Maven知识点总结(初学者)

什么是Maven?Maven能做什么?使用Maven的优点(对比ant打包)?怎么使用Maven?(ps:适合0基础初学者,大神请飘过)一、什么是Maven1、定义介绍Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,...

2020-12-10 22:12:44 1493 1

原创 JVM知识点(全,一篇搞定)

1、什么是JVMJVM是Java程序运行的平台,它就像一台虚拟出来的计算机一样,负责执行Java编译好的字节码文件。JVM具有非常严格的实现规范,大多数操作系统都可以安装JVM,为Java语言的跨平台性起到了关键的作用。JVM(Java虚拟机)是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象的硬件,堆栈,寄存器等,还具有相应的指令系统。

2020-12-10 22:12:22 2393 1

原创 Mac MySQL安装和MySQL命令行

2018/04/17安装MySQL (切记系统通知发过来的的初始密码)之后初次登录需要密码https://segmentfault.com/a/1190000008472692https://blog.csdn.net/pansanday/article/details/54915916安装MySQL图形化界面工具(可不安装)链接数据库查看 mysql 端口号的方法是showglobalvar...

2020-12-10 22:11:31 6382 1

原创 和你一起刷算法-LeetCode刷题之玩转双指针的“快慢”(五)

上篇主要总结分析了双指针中的左右指针,本篇来唠一唠双指针中的另外一种用法,快慢指针。没错就是字面意思,两个指针一个快一些,一个慢一些,那它能解决我们什么问题呢?说类比龟兔赛跑其实并不是很适合,我感觉它更像一个“小孩”在追一个“大人”,两个链表上的指针从同一节点出发,其中一个指针前进速度是另一个指针的两倍。利用快慢指针可以用来解决某些算法问题,比如:一、计算链表的中点:快慢指针从头节点出发,每轮迭代中,快指针向前移动两个节点,慢指针向前移动一个节点,最终当快指针到达终点的时候,慢指..

2020-12-10 14:29:46 134

原创 和你一起刷算法-LeetCode刷题之玩转双指针的“左右”(四)

一、算法解释:双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。 若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的 区域即为当前的窗口),经常用于区间搜索。 若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。常见双指针算法分两类用法左右指针 快慢指针内容较多本篇只要对左右指针进行汇总解析,快慢指针请看下一篇。双指针的解题核心是找到如何让两个指针偏移的条件。..

2020-12-09 14:03:33 155

原创 和你一起刷算法-LeetCode刷题之贪心算法训练营(三)

学习总结完毕,可以测试一下自己对贪心理解度????眼睛:我看懂了!脑子:我记住了!手:你俩给我滚粗....从基础难度到进阶题目如下:基础难度题目1快速导航:605. 种花问题假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数n。能否在不打破种植规则的情况下种入n朵花?能则返回True,不能则返回False。..

2020-12-07 21:25:06 196 1

原创 和你一起刷算法-LeetCode刷题之“贪心”(二)

上一篇总结了贪心算法分配问题的相关LeetCode题型,本篇针对区间问题相关的题型进行总结。贪心算法-区间问题题目快速导航:435. 无重叠区间解题实现框架:从问题的某一初始解出发; while (能朝给定总目标前进一步) { 利用可行的决策,求出可行解的一个解元素; } 由所有解元素组合成问题的一个可行解;贪心算法的基本思路:建立数学模型来描述问题 把求解的问题分成若干个子问题 对每个子问题求解,得到子问...

2020-12-07 09:18:45 92

BootStrap前端资源开发基础

BootStrap前端资源开发基础

2017-07-24

空空如也

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

TA关注的人

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