自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 赞赏(犒劳)作者

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

2024-04-15 14:36:55 233

原创 图解MySQL目录

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

2024-03-25 14:15:37 308

原创 网络专栏目录

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

2024-02-13 02:00:00 688

原创 算法村目录

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

2024-02-12 20:52:57 966

原创 常见 JVM 面试题补充

JVM 采用的是可达性分析算法。JVM 是通过 GC Roots 来判定对象存活的,从 GC Roots 向下追溯、搜索,会产生一个叫做 Reference Chain 的链条。当一个对象不能和任何一个 GC Root 产生关系时,就判定为垃圾,如下图所示。Java 线程中,当前所有正在被调用的方法的引用类型参数、局部变量、临时值等。也就是与我们栈帧相关的各种引用。所有当前被加载的 Java 类。Java 类的引用类型静态变量。

2024-05-22 19:59:52 615

原创 线程池的种类,区别和使用场景

java.util.concurrent.Executors 类中有很多线程池。

2024-05-19 20:15:10 629

原创 介绍一下 ThreadLocal

如果不为null,则尝试获取threadLocals中TL1所在的键值对,如果该键值对为null,则向threadLocals中通过set方法插入<TL1,null>,最后返回nul,如果键值对不为null,则返回键值对中的值。ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量,ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。Thread类下 有两个。

2024-05-18 20:30:30 230

原创 内存泄漏——为何每次用完 ThreadLocal 都要调用 remove()?

内存泄漏指的是,当某一个对象不再有用的时候,占用的内存却不能被回收,这就叫作内存泄漏。因为通常情况下,如果一个对象不再有用,那么我们的垃圾回收器 GC,就应该把这部分内存给清理掉。这样的话,就可以让这部分内存后续重新分配到其他的地方去使用;否则,如果对象没有用,但一直不能被回收,这样的垃圾对象如果积累的越来越多,则会导致我们可用的内存越来越少,最后发生内存不够用的 OOM 错误。下面我们来分析一下,在 ThreadLocal 中这样的内存泄漏是如何发生的。

2024-05-18 20:10:42 1147

原创 Java中的ThreadLocal

ThreadLocal是JDK1.2开始就提供的一个用来存储线程本地变量的类。ThreadLocal中的变量是在每个线程中独立存在的,当多个线程访问ThreadLocal中的变量的时候,其实都是访问的自己当前线程的内存中的变量,从而保证的变量的线程安全。我们一般在使用ThreadLocal的时候都是为了解决线程中存在的变量竞争问题。其实解决这类问题,通常大家也会想到使用synchronized来加锁解决。例如在解决SimpleDateFormat的线程安全的时候。

2024-05-18 19:28:12 873

原创 Java原子类

类在引用类型原子类中,彻底地解决了 ABA 问题,其它的 CAS 能力与另外两个类相近,所以最具代表性。上一节中提到了针对基本数据类型的原子类,那么如果想针对引用类型做原子操作怎么办?如果你仅仅需要累加操作,使用原子化的累加器性能会更好,代价就是会消耗更多的内存空间。,这四个类仅仅用来执行累加操作,相比原子化的基本数据类型,速度更快,但是不支持。已经有了针对基本类型和引用类型的原子类,为什么还要提供针对数组的原子类呢?最终返回的是一个准确的数值, 所以在一些对实时性要求比较高的场景下,

2024-05-15 16:20:26 513

原创 Fail-safe机制与Fail-fast机制分别有什么作用

Fail-safe:表示失败安全,也就是在这种机制下,出现集合元素的修改,不会抛出ConcurrentModificationException。定义了一个CopyOnWriteArrayList,在对这个集合遍历过程中,对集合元素做修改后,不会抛出异常,但同时也不会打印出增加的元素。定义一个Map集合,使用Iterator迭代器进行数据遍历,在遍历过程中,对集合数据做变更时,就会发生Fail-fast。原因是采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,

2024-05-11 19:53:03 299

原创 Taro 快速开始

大家好我是苏麟 , 今天聊聊Trao.

2024-05-09 16:45:28 314

原创 RabbitMQ (windows) 安装

接下来还需要用到一个东西,第三方的这种中间件,一个管理页面。大家好我是苏麟 , 今天安装一下 RabbitMQ .这期就到这里 , 下期见。

2024-05-08 15:32:55 338

原创 前端素材库

大家好我是苏麟 , 今天推荐一个前端素材库 .这期就到这里 , 下期见!

2024-05-01 21:50:02 261

原创 前端-React项目初始化

大家好我是苏麟 , 今天聊聊前端依赖 Ant Desgin Pro 快速初始化项目 .这期就到这里 , 下期见!

2024-04-29 10:04:21 276

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

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

2024-04-22 17:13:50 648

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

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

2024-04-21 19:35:52 568

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

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

2024-04-05 19:35:04 709

原创 索引常见面试题

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

2024-03-29 16:28:41 939

原创 MySQL中char与varchar的区别

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

2024-03-26 00:30:00 254

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

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

2024-03-25 15:35:00 747

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

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

2024-03-24 17:56:04 664

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

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

2024-03-22 19:05:36 1076

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

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

2024-03-22 10:02:35 1030

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

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

2024-03-21 10:09:56 913

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

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

2024-03-21 09:41:58 1312

原创 Redis面试题 - Redis实战

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

2024-03-18 18:48:27 838

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

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

2024-03-18 18:35:32 1153

原创 Redis数据存储的细节

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

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

原创 Redis 三种集群方案

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

2024-03-17 11:32:33 1209

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

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

2024-03-17 00:45:00 952

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

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

2024-03-17 00:15:00 811

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

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

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

2024-03-16 10:16:33 1084

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

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

2024-03-04 17:07:36 847

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

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

2024-03-03 17:42:14 374

原创 数据同步MySQL -> Elasticsearch

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

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

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

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

2024-02-22 22:28:37 923

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

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

2024-02-22 14:57:52 1245

原创 ElasticSearch语法

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

2024-02-21 17:39:58 1419

空空如也

空空如也

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

TA关注的人

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