自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 赞赏(犒劳)作者

如果作者分享的内容您觉得有用的话可以给作者赞赏一下 激励作者分享更多优质内容!

2024-04-15 14:36:55 220

原创 图解MySQL目录

重点突击 MySQL 索引、事务、锁、日志等面试常问知识。

2024-03-25 14:15:37 299

原创 网络专栏目录

大家好我是苏麟 , 这是网络专栏目录 .

2024-02-13 02:00:00 687

原创 算法村目录

大家好我是苏麟 , 这是算法村使用目录 .

2024-02-12 20:52:57 958

原创 JVM 如何完成垃圾回收?

但无论使用哪种垃圾回收器,我们的编码方式还是会影响垃圾回收的效果,减少对象的创建,及时切断与不再使用对象的联系,是我们平常编码中一定要注意的。这就是程序计数器的功能。JVM 的垃圾回收器更新很快,也有非常多的 JVM 版本,比如 Zing VM、Dalvik,目前被广泛应用的是 Hotspot,提供了海量的配置参数来支持我们的性能微调。如 JVM 内存区域划分图所示,JVM 中占用内存最大的区域,就是堆(Heap),我们平常编码创建的对象,大多数是在这上面分配的,也是垃圾回收器回收的主要目标区域。

2024-04-22 17:13:50 623

原创 谈谈JVM内存区域的划分

Java 的常量池可以存放各种常量信息,不管是编译期生成的各种字面量,还是需要在运行时决定的符号引用,所以它比一般语言的符号表存储的信息更加宽泛。同理,在一个时间点,对应的只会有一个活动的栈帧,通常叫作当前帧,方法所在的类叫作当前类。这也是所有线程共享的一块内存区域,用于存储所谓的元(Meta)数据,例如类结构信息,以及对应的运行时常量池、字段、方法代码等。理所当然,堆也是垃圾收集器重点照顾的区域,所以堆内空间还会被不同的垃圾收集器进行进一步的细分,最有名的就是新生代、老年代的划分。

2024-04-21 19:35:52 550

原创 为什么 MySQL 采用 B+ 树作为索引?

索引数据最好能按顺序排列,这样可以使用「二分查找法」高效定位数据。假设我们现在用数组来存储索引,比如下面有一个排序的数组,如果要从中找出数字 3,最简单办法就是从头依次遍历查询,这种方法的时间复杂度是 O(n),查询效率并不高。因为该数组是有序的,所以我们可以采用二分查找法,比如下面这张采用二分法的查询过程图:可以看到,二分查找法每次都把查询的范围减半,这样时间复杂度就降到了 O(logn),但是每次查找都需要不断计算中间位置用数组来实现线性排序的数据虽然简单好用,但是插入新元素的时候性能太低。

2024-04-05 19:35:04 699

原创 索引常见面试题

这次主要介绍了索引的原理、分类和使用。我把重点总结在了下面这个表格。

2024-03-29 16:28:41 926

原创 MySQL中char与varchar的区别

因为char多存储一些空格,意味着需要从磁盘读写更多的数据、耗费更多内存、查找数据时删除空格可能也会耗费一些CPU性能。注意:这是MySQL层的描述,具体怎么存储由存储引擎决定。根据MySQL的官方文档。

2024-03-26 00:30:00 242

原创 从数据页的角度看 B+ 树

InnoDB 的数据是按「数据页」为单位来读写的,默认数据页大小为 16 KB。每个数据页之间通过双向链表的形式组织起来,物理上不连续,但是逻辑上连续。数据页内包含用户记录,每个记录之间用单向链表的方式组织起来,为了加快在数据页内高效查询记录,设计了一个页目录,页目录存储各个槽(分组),且主键值是有序的,于是可以通过二分查找法的方式进行检索从而提高效率。为了高效查询记录所在的数据页,InnoDB 采用 b+ 树作为索引,每个节点都是一个数据页。

2024-03-25 15:35:00 740

原创 Java 基础知识- 创建线程的几种方式

大家好我是苏麟 , 今天聊聊创建线程的几种方式 .

2024-03-24 17:56:04 656

原创 MySQL 日志:undo log、redo log、binlog 有什么用?

从这篇「」中,我们知道了一条查询语句经历的过程,这属于「读」一条记录的过程,如下图:那么,所以这次就带着这个问题,看看这三种日志是怎么工作的。

2024-03-22 19:05:36 1063

原创 Redis 大 Key 对持久化有什么影响?

当 AOF 写回策略配置了 Always 策略,如果写入是一个大 Key,主线程在执行 fsync() 函数的时候,阻塞的时间会比较久,因为当写入的数据量很大的时候,数据同步到硬盘这个过程是很耗时的。AOF 重写机制和 RDB 快照(bgsave 命令)的过程,都会分别通过fork()函数创建一个子进程来处理任务。创建子进程的途中,由于要复制父进程的页表等数据结构,阻塞的时间跟页表的大小有关,页表越大,阻塞的时间也越长;

2024-03-22 10:02:35 1025

原创 RDB 快照是怎么实现的?

大家好,我是小林哥。虽说 Redis 是内存数据库,但是它为数据的持久化提供了两个技术。分别是「 AOF 日志和 RDB 快照」。这两种技术都会用各用一个日志文件来记录信息,但是记录的内容是不同的。关于 AOF 持久化的原理我在上一篇已经介绍了,今天主要讲下。所谓的快照,就是记录某一个瞬间东西,比如当我们给风景拍照时,那一个瞬间的画面和信息就记录到了一张照片。所以,RDB 快照就是记录某一个瞬间的内存数据,记录的是实际数据,而 AOF 文件记录的是命令操作的日志,而不是实际的数据。

2024-03-21 10:09:56 898

原创 AOF 持久化是怎么实现的?

这次小林给大家介绍了 Redis 持久化技术中的 AOF 方法,这个方法是每执行一条写操作命令,就将该命令以追加的方式写入到 AOF 文件,然后在恢复时,以逐一执行命令的方式来进行数据恢复。Redis 提供了三种将 AOF 日志写回硬盘的策略,分别是 Always、Everysec 和 No,这三种策略在可靠性上是从高到低,而在性能上则是从低到高。

2024-03-21 09:41:58 1307

原创 Redis面试题 - Redis实战

lazyfree-lazy-server-del:有些指令在处理已存在的键时,会带有一个隐式的 del 键的操作,比如 rename 命令,当目标键已存在,Redis 会先删除目标键,如果这些目标键是一个 big key,就会造成阻塞删除的问题,此配置表示在这种场景中是否开启 lazy free 机制删除;可以看到,解锁是有两个操作,这时就需要 Lua 脚本来保证解锁的原子性,因为 Redis 在执行 Lua 脚本时,可以以原子性的方式执行,保证了锁释放操作的原子性。

2024-03-18 18:48:27 825

原创 Redis 过期删除策略和内存淘汰策略有什么区别?

Redis 使用的过期删除策略是「惰性删除+定期删除」,删除的对象是已过期的 key。内存淘汰策略是解决内存过大的问题,当 Redis 的运行内存超过最大运行内存时,就会触发内存淘汰策略,Redis 4.0 之后共实现了 8 种内存淘汰策略,我也对这 8 种的策略进行分类,如下:这期就到这里,下期见!

2024-03-18 18:35:32 1137

原创 Redis数据存储的细节

关于Redis数据存储的细节,涉及到内存分配器(如jemalloc)、简单动态字符串(SDS)、5种对象类型及内部编码、redisObject。在讲述具体内容之前,先说明一下这几个概念之间的关系。下图是执行set hello world时,所涉及到的数据模型。图片来源:https://searchdatabase.techtarget.com.cn/7-20218/

2024-03-17 16:52:32 1142 1

原创 Redis 三种集群方案

当我们的存取的 Key到达的时候,Redis 会根据 CRC16 的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。Redis 的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台 Redis 服务器都存储相同的数据,很浪费内存,所以在 redis3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,

2024-03-17 11:32:33 1198

原创 数据库和缓存如何保证一致性?

一天,老板说「最近公司的用户越来越多了,但是服务器的访问速度越来越差的,阿旺帮我优化下,程序员阿旺听到老板口中的「画饼」后就非常期待,没有任何犹豫就接下了老板给的这个任务。阿旺登陆到了服务器,经过一番排查后,确认服务器的。这好办,给服务器加上 Redis,让其作为数据库的缓存。这样,在客户端请求数据时,如果能在缓存中命中数据,那就查询缓存,不用在去查询数据库,从而减轻数据库的压力,提高服务器的性能。

2024-03-17 00:45:00 944

原创 什么是缓存雪崩、击穿、穿透?

引入了缓存层,就会有缓存异常的三个问题,分别是缓存雪崩、缓存击穿、缓存穿透。

2024-03-17 00:15:00 807

原创 MySQL 一行记录是怎么存储的?

MySQL 的 NULL 值是怎么存放的?MySQL 的 Compact 行格式中会用「NULL值列表」来标记值为 NULL 的列,NULL 值并不会存储在行格式中的真实数据部分。NULL值列表会占用 1 字节空间,当表中所有字段都定义成 NOT NULL,行格式中就不会有 NULL值列表,这样可节省 1 字节的空间。MySQL 怎么知道 varchar(n) 实际占用数据的大小?MySQL 的 Compact 行格式中会用「变长字段长度列表」存储变长字段实际占用的数据大小。

2024-03-16 14:51:25 988

原创 为什么单线程的 Redis 能那么快?

大家好我是苏麟 , 给大家找一些好的文章看看 .

2024-03-16 10:16:33 1082

原创 执行一条 select 语句,期间发生了什么?

大家好我是苏麟 , 今天开始又开一个坑 MySQL原理 .

2024-03-04 17:07:36 845

原创 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

大家好我是苏麟 , 今天开始又一个专栏开始了(又一个坑 哈哈) .

2024-03-03 17:42:14 369

原创 数据同步MySQL -> Elasticsearch

大家好我是苏麟,今天聊聊数据同步 .

2024-02-23 10:56:24 1564 1

原创 HTTP与HTTPS-HTTPS 的应用数据是如何保证完整性的?

记录协议完成后,最终的报文数据将传递到传输控制协议(TCP)层进行传输。主要负责消息(HTTP 数据)的压缩,加密及数据的认证,过程如下图。TLS 在实现上分为握手协议和记录协议两层。这期就到这里 , 下期见!

2024-02-22 22:28:37 894

原创 HTTP 与 HTTPS-HTTP 解决了 HTTP 哪些问题?

老师拿到了数字证书后,首先会去警察局验证这个数字证书是否合法,因为数字证书里有警察局的数字签名,警察局要验证证书合法性的时候,用自己的公钥解密,如果能解密成功,就说明这个数字证书是在警察局注册过的,就认为该数字证书是合法的,然后就会把数字证书里头的公钥(你爸爸的)给到老师。但是老师并不知道自己的公钥被你替换过了,所以他还是按照往常一样用公钥解密,由于这个公钥和你的私钥是配对的,老师当然能用这个被替换的公钥解密出来,并且确认了内容的完整性,干是老师就会以为是你父亲写的请假条,又允许你请假了。

2024-02-22 14:57:52 1241

原创 ElasticSearch语法

ES 支持动态 mapping,表结构可以动态改变,而不像 MySQL 一样必须手动建表,没有的字段就不能插入。专门查询 ECS 文档(标准指标文档)的数据的语法,更加规范,但只适用于特定场景(比如事件流)ES 相比于 MySQL,能够自动帮我们做分词,能够非常高效、灵活地查询内容。正向索引:理解为书籍的目录,可以快速帮你找到对应的内容(怎么根据页码找到文章)2.9300:给 ES 集群内部通信的(外部调用不了的)可以理解为数据库的表结构,有哪些字段、字段类型,文章 A: 你好,我是 rapper。

2024-02-21 17:39:58 1411

原创 ElasticStack安装(windows)

Elastic Stack(一套技术栈)包含了数据的整合 =>提取 =>存储 =>使用,一整套!

2024-02-21 03:15:00 713

原创 HTTP 与 HTTPS-HTTP 与 HTTPS 有哪些区别?

这期就到这 , 下期见!

2024-02-20 13:14:18 587

原创 HTTP基本概念

这期就到这里 , 下期见!

2024-02-20 01:15:00 661

原创 HTTP基本概念-HTTP 常见字段有哪些?

HTTP 协议通过设置回车符、换行符作为 HTTP header 的边界,通过 Content-Length 字段作为 HTTP body 的边界,这两个方式都是为了解决“粘包”的问题。大家应该都知道 HTTP 是基于 TCP 传输协议进行通信的,而使用了 TCP 传输协议,就会存在一个“粘包"的问题,如上面则是告诉浏览器,本次服务器回应的数据长度是 1000 个字节,后面的字节就属于下一个回应了。字段用于服务器回应时,告诉客户端,本次数据是什么格式。上面的类型表明,发送的是网页,而且编码是UTF-8。

2024-02-19 10:47:46 861

原创 HTTP基本概念-HTTP 常见的状态码有哪些?

类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是。类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。类状态码表示客户端发送的报文有误,服务器无法处理,也就是。. 指明后续要跳转的 URL,浏览器会自动重定向新的。,是协议处理中的一种中间状态,实际用到的比较少。301 和 302 都会在响应头里使用字段。了客户端的请求,也是我们最愿意看到的状态。这期就到这里 , 下期见!

2024-02-19 10:32:54 645

原创 GET与 POST

GET请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCI1,所以 GET 请求的参数只允许ASCI 字符 ,而且浏览器会对 URL 的长度有限制(HTTP协议本身对 URL长度并没有做任何规定)。比如,你在我文章底部,敲入了留言后点击「提交」(暗示你们留言),浏览器就会执行一次 POST 请求,把你的留言文字放进了报文 body 里,然后拼接好 POST 请求头,:通过 TCP 协议发送给服务器。所谓的「幂等」,意思是多次执行相同的操作,结果都是「相同」的。根据 REC 规范,

2024-02-18 21:30:11 898

原创 HTTP/1.1 如何优化?

这次主要从 3 个方面介绍了优化 HTTP/1.1 协议的思路,第一个思路是,通过缓存技术来避免发送 HTTP 请求。客户端收到第一个请求的响应后,可以将其缓存在本地磁盘,下次请求的时候,如果缓存没过期,就直接读取本地缓存的响应数据。如果缓存过期,客户端发送请求的时候带上响应数据的摘要,服务器比对后发现资源没有变化,就发出不带包体的 304 响应,告诉客户端缓存的响应仍然有效。第二个思路是,减少 HTTP 请求的次数,有以下的方法。

2024-02-18 21:07:18 767

原创 如何减少 HTTP 响应的数据大小

比如,一个在看书的视频,画面通常只有人物的手和书桌上的书是会有变化的,而其他地方通常都是静态的,于是只需要在一个静态的关键帧,使用增量数据来表达后续的帧,这样便减少了很多数据,提高了网络传输的性能。接下来,就是无损压缩了,需要对原始资源建立统计模型,利用这个统计模型,将常出现的数据用较短的进制比特序列表示,将不常出现的数据用较长的二进制比特序列表示,生成二进制比特序列一般是。关于音视频的压缩,音视频主要是动态的,每个帧都有时序的关系,通常时间连续的帧之间的变化是很小的。于是,我们可以考虑对响应的资源进行。

2024-02-18 20:01:52 1315

原创 Mybatis缓存

一级缓存和级别不一样,缓存同一个SqlSession两次查询期间执行了任何一次增删改操作,

2024-02-18 11:24:23 848

原创 如何减少HTTP请求次数

另外由于 HTTP/1.1 是请求响应模型,如果第一个发送的请求,未收到对应的响应,那么后续的请求就不会发送(PS:HTTP/1.1 管道模式是默认不使用的,所以讨论 HTTP/1.1 的队头阻塞问题,是不考虑管道模式的),于是为了防止单个请求的阻塞,所以。请求网页的时候,没必要把全部资源都获取到,而是只获取当前用户所看到的页面资源,当用户向下滑动页面的时候,再向服务器获取接下来的资源,这样就达到了延迟发送请求的效果。,每一个请求都是不同的 TCP 连接,那么如果合并了请求,也就会。

2024-02-18 10:31:54 1219

原创 如何避免发送HTTP请求

如果客户端从第一次请求得到的响应头部中发现该响应过期了,客户端重新发送请求,假设服务器上的资源并没有变更,还是老样子,那么你觉得还要在服务器的响应带上这个资源吗?头部带上第一次请求的响应头部中的摘要,这个摘要是唯一标识响应的资源,当服务器收到请求后,会将本地资源的摘要与请求中的摘要做个比较。但是,对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响应」的数据都。,这样客户端在查看响应头部的信息时,一旦发现缓存的响应是过期的,则就会重新发送网络请求。

2024-02-18 10:20:03 898

空空如也

空空如也

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

TA关注的人

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