- 博客(297)
- 收藏
- 关注
原创 前端快速生成接口方法
在根目录(项目目录下)创建文件 openapi.config.js。大家好,我是苏麟,今天聊一下OpenApi。在 package.json 下。
2025-02-11 22:30:46
595
原创 MyBatisPlus3.5.9版本的 “坑“
使用分页插件直接配置 : JDK11 + SpringBoot 2.x.x 引入依赖。使用分页插件直接配置 : JDK8 + SpringBoot 2.x.x 引入依赖。大家好,我是苏麟,今天说一下新版本MyBatisPlus配置的问题。
2024-12-13 09:49:31
791
原创 解决全局安装@vue/cli 后vue -V不是内部或外部命令
复制到 node_modules 下。全局安装 vue cli 命令。安装完 查看 版本 出错。复制到 node 下。
2024-11-12 14:49:35
457
原创 NVM 切换Node.js版本工具
大家好我是苏麟,今天聊聊NVM切换版本工具。查看可安装的Node.js版本。如果报这个错说明需要更换镜像源。这期就到这里,下期见!
2024-10-12 11:07:38
555
原创 JRebel
2.设置中搜索JRebel 点击Change license。复制激活地址到 Team URL 中,添加自己邮箱。大家好我是苏麟,今天带来JRebel。1.下载 JRebel 插件。
2024-09-07 17:53:21
247
原创 Docker 使用
理解为对一系列应用程序、服务和环境的封装,从而把程序运行在一个隔离的、密闭的、隐私的空间内,对外整体提供服务。可以把一个容器理解为一个新的电脑(定制化的操作系统)。
2024-07-20 22:14:18
686
3
原创 OpenAPI
/spec.json 改成 http:localhost:端口号/api/v2/api-docs。大家好我是苏麟 , 今天带来一个前端生成接口的工具 .这期就到这里了 , 下期见!xhr 改成 axios。
2024-06-23 17:03:09
641
原创 常见 JVM 面试题补充
JVM 采用的是可达性分析算法。JVM 是通过 GC Roots 来判定对象存活的,从 GC Roots 向下追溯、搜索,会产生一个叫做 Reference Chain 的链条。当一个对象不能和任何一个 GC Root 产生关系时,就判定为垃圾,如下图所示。Java 线程中,当前所有正在被调用的方法的引用类型参数、局部变量、临时值等。也就是与我们栈帧相关的各种引用。所有当前被加载的 Java 类。Java 类的引用类型静态变量。
2024-05-22 19:59:52
979
原创 介绍一下 ThreadLocal
如果不为null,则尝试获取threadLocals中TL1所在的键值对,如果该键值对为null,则向threadLocals中通过set方法插入<TL1,null>,最后返回nul,如果键值对不为null,则返回键值对中的值。ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量,ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。Thread类下 有两个。
2024-05-18 20:30:30
298
原创 内存泄漏——为何每次用完 ThreadLocal 都要调用 remove()?
内存泄漏指的是,当某一个对象不再有用的时候,占用的内存却不能被回收,这就叫作内存泄漏。因为通常情况下,如果一个对象不再有用,那么我们的垃圾回收器 GC,就应该把这部分内存给清理掉。这样的话,就可以让这部分内存后续重新分配到其他的地方去使用;否则,如果对象没有用,但一直不能被回收,这样的垃圾对象如果积累的越来越多,则会导致我们可用的内存越来越少,最后发生内存不够用的 OOM 错误。下面我们来分析一下,在 ThreadLocal 中这样的内存泄漏是如何发生的。
2024-05-18 20:10:42
1477
原创 Java中的ThreadLocal
ThreadLocal是JDK1.2开始就提供的一个用来存储线程本地变量的类。ThreadLocal中的变量是在每个线程中独立存在的,当多个线程访问ThreadLocal中的变量的时候,其实都是访问的自己当前线程的内存中的变量,从而保证的变量的线程安全。我们一般在使用ThreadLocal的时候都是为了解决线程中存在的变量竞争问题。其实解决这类问题,通常大家也会想到使用synchronized来加锁解决。例如在解决SimpleDateFormat的线程安全的时候。
2024-05-18 19:28:12
933
原创 Java原子类
类在引用类型原子类中,彻底地解决了 ABA 问题,其它的 CAS 能力与另外两个类相近,所以最具代表性。上一节中提到了针对基本数据类型的原子类,那么如果想针对引用类型做原子操作怎么办?如果你仅仅需要累加操作,使用原子化的累加器性能会更好,代价就是会消耗更多的内存空间。,这四个类仅仅用来执行累加操作,相比原子化的基本数据类型,速度更快,但是不支持。已经有了针对基本类型和引用类型的原子类,为什么还要提供针对数组的原子类呢?最终返回的是一个准确的数值, 所以在一些对实时性要求比较高的场景下,
2024-05-15 16:20:26
640
原创 Fail-safe机制与Fail-fast机制分别有什么作用
Fail-safe:表示失败安全,也就是在这种机制下,出现集合元素的修改,不会抛出ConcurrentModificationException。定义了一个CopyOnWriteArrayList,在对这个集合遍历过程中,对集合元素做修改后,不会抛出异常,但同时也不会打印出增加的元素。定义一个Map集合,使用Iterator迭代器进行数据遍历,在遍历过程中,对集合数据做变更时,就会发生Fail-fast。原因是采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,
2024-05-11 19:53:03
362
原创 RabbitMQ (windows) 安装
接下来还需要用到一个东西,第三方的这种中间件,一个管理页面。大家好我是苏麟 , 今天安装一下 RabbitMQ .这期就到这里 , 下期见。
2024-05-08 15:32:55
388
原创 JVM 如何完成垃圾回收?
但无论使用哪种垃圾回收器,我们的编码方式还是会影响垃圾回收的效果,减少对象的创建,及时切断与不再使用对象的联系,是我们平常编码中一定要注意的。这就是程序计数器的功能。JVM 的垃圾回收器更新很快,也有非常多的 JVM 版本,比如 Zing VM、Dalvik,目前被广泛应用的是 Hotspot,提供了海量的配置参数来支持我们的性能微调。如 JVM 内存区域划分图所示,JVM 中占用内存最大的区域,就是堆(Heap),我们平常编码创建的对象,大多数是在这上面分配的,也是垃圾回收器回收的主要目标区域。
2024-04-22 17:13:50
744
原创 谈谈JVM内存区域的划分
Java 的常量池可以存放各种常量信息,不管是编译期生成的各种字面量,还是需要在运行时决定的符号引用,所以它比一般语言的符号表存储的信息更加宽泛。同理,在一个时间点,对应的只会有一个活动的栈帧,通常叫作当前帧,方法所在的类叫作当前类。这也是所有线程共享的一块内存区域,用于存储所谓的元(Meta)数据,例如类结构信息,以及对应的运行时常量池、字段、方法代码等。理所当然,堆也是垃圾收集器重点照顾的区域,所以堆内空间还会被不同的垃圾收集器进行进一步的细分,最有名的就是新生代、老年代的划分。
2024-04-21 19:35:52
628
原创 为什么 MySQL 采用 B+ 树作为索引?
索引数据最好能按顺序排列,这样可以使用「二分查找法」高效定位数据。假设我们现在用数组来存储索引,比如下面有一个排序的数组,如果要从中找出数字 3,最简单办法就是从头依次遍历查询,这种方法的时间复杂度是 O(n),查询效率并不高。因为该数组是有序的,所以我们可以采用二分查找法,比如下面这张采用二分法的查询过程图:可以看到,二分查找法每次都把查询的范围减半,这样时间复杂度就降到了 O(logn),但是每次查找都需要不断计算中间位置用数组来实现线性排序的数据虽然简单好用,但是插入新元素的时候性能太低。
2024-04-05 19:35:04
775
原创 MySQL中char与varchar的区别
因为char多存储一些空格,意味着需要从磁盘读写更多的数据、耗费更多内存、查找数据时删除空格可能也会耗费一些CPU性能。注意:这是MySQL层的描述,具体怎么存储由存储引擎决定。根据MySQL的官方文档。
2024-03-26 00:30:00
336
原创 从数据页的角度看 B+ 树
InnoDB 的数据是按「数据页」为单位来读写的,默认数据页大小为 16 KB。每个数据页之间通过双向链表的形式组织起来,物理上不连续,但是逻辑上连续。数据页内包含用户记录,每个记录之间用单向链表的方式组织起来,为了加快在数据页内高效查询记录,设计了一个页目录,页目录存储各个槽(分组),且主键值是有序的,于是可以通过二分查找法的方式进行检索从而提高效率。为了高效查询记录所在的数据页,InnoDB 采用 b+ 树作为索引,每个节点都是一个数据页。
2024-03-25 15:35:00
782
原创 MySQL 日志:undo log、redo log、binlog 有什么用?
从这篇「」中,我们知道了一条查询语句经历的过程,这属于「读」一条记录的过程,如下图:那么,所以这次就带着这个问题,看看这三种日志是怎么工作的。
2024-03-22 19:05:36
1235
原创 Redis 大 Key 对持久化有什么影响?
当 AOF 写回策略配置了 Always 策略,如果写入是一个大 Key,主线程在执行 fsync() 函数的时候,阻塞的时间会比较久,因为当写入的数据量很大的时候,数据同步到硬盘这个过程是很耗时的。AOF 重写机制和 RDB 快照(bgsave 命令)的过程,都会分别通过fork()函数创建一个子进程来处理任务。创建子进程的途中,由于要复制父进程的页表等数据结构,阻塞的时间跟页表的大小有关,页表越大,阻塞的时间也越长;
2024-03-22 10:02:35
1089
原创 RDB 快照是怎么实现的?
大家好,我是小林哥。虽说 Redis 是内存数据库,但是它为数据的持久化提供了两个技术。分别是「 AOF 日志和 RDB 快照」。这两种技术都会用各用一个日志文件来记录信息,但是记录的内容是不同的。关于 AOF 持久化的原理我在上一篇已经介绍了,今天主要讲下。所谓的快照,就是记录某一个瞬间东西,比如当我们给风景拍照时,那一个瞬间的画面和信息就记录到了一张照片。所以,RDB 快照就是记录某一个瞬间的内存数据,记录的是实际数据,而 AOF 文件记录的是命令操作的日志,而不是实际的数据。
2024-03-21 10:09:56
1029
原创 AOF 持久化是怎么实现的?
这次小林给大家介绍了 Redis 持久化技术中的 AOF 方法,这个方法是每执行一条写操作命令,就将该命令以追加的方式写入到 AOF 文件,然后在恢复时,以逐一执行命令的方式来进行数据恢复。Redis 提供了三种将 AOF 日志写回硬盘的策略,分别是 Always、Everysec 和 No,这三种策略在可靠性上是从高到低,而在性能上则是从低到高。
2024-03-21 09:41:58
1354
原创 Redis面试题 - Redis实战
lazyfree-lazy-server-del:有些指令在处理已存在的键时,会带有一个隐式的 del 键的操作,比如 rename 命令,当目标键已存在,Redis 会先删除目标键,如果这些目标键是一个 big key,就会造成阻塞删除的问题,此配置表示在这种场景中是否开启 lazy free 机制删除;可以看到,解锁是有两个操作,这时就需要 Lua 脚本来保证解锁的原子性,因为 Redis 在执行 Lua 脚本时,可以以原子性的方式执行,保证了锁释放操作的原子性。
2024-03-18 18:48:27
953
原创 Redis 过期删除策略和内存淘汰策略有什么区别?
Redis 使用的过期删除策略是「惰性删除+定期删除」,删除的对象是已过期的 key。内存淘汰策略是解决内存过大的问题,当 Redis 的运行内存超过最大运行内存时,就会触发内存淘汰策略,Redis 4.0 之后共实现了 8 种内存淘汰策略,我也对这 8 种的策略进行分类,如下:这期就到这里,下期见!
2024-03-18 18:35:32
1257
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人