自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 重新说说Redis实现分布式公平可重入锁的实现,这次具体说说异步唤醒机制,这次带上QPS检测

# 重新说说Redis实现分布式公平可重入锁的实现,这次具体说说异步唤醒机制,这次带上QPS检测在之前的文章中,我们对Redisson的lock进行了刨析如下:- 看门狗续期- 使用hash+lua实现可重入锁但是还有一点,我们之前使用的自旋+线程休眠来达到线程互斥阻塞的效果。但是这样做会有一点问题,我们每次休眠的时间都是固定的,仍然会有一大部分空窗期,我设置30s的锁过期,那么好,20个线程足足跑了两三分钟,这个效率绝对不行,对吧。那么我们还有没有其他办法?Redssion源

2023-09-13 09:47:34 187

原创 Spring学习笔记,参考尚硅谷和黑马课程而作

全是纯手打的,虽然是一年以前的了,但是制作不易望支持,里面也有一些自己的思考,哈哈哈!

2023-08-14 22:53:36 158

原创 Vue2/Axios/SpringBoot,前后端跨域对接问题的解决

原因是请求经过的先后顺序问题,当请求到来时会先进入拦截器中,而不是进入Mapping映射中,所以返回的头信息中并没有配置的跨域信息。浏览器就会报跨域异常。

2023-08-12 09:11:36 211

原创 焦虑?花点时间来学学Docker吧,亲!

# 1、yum 包更新到最新 yum update# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2# 3、 设置yum源yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#

2023-08-12 09:08:24 96

原创 零基础入门SpringBoot2.X

一年前的笔记了,现在发出来,哈哈哈。

2023-08-12 08:53:43 49

原创 零基础入门SpringMVC

SpringMVC技术与Severlet技术功能等同,均属于Web层开发技术SpringMVC是一种基于Java实现MVC模型的轻量级Web框架优点使用简单,开发便捷(相比于Servlet)灵活性强SpringMVC是一种表现层框架技术SpringMVC用于进行表现层功能开发启动服务器初始化过程服务启动,执行ServletContainersInitConfig类,初始化Web容器。

2023-08-12 08:51:47 54

原创 操作系统-超20000字的“总结”

什么是操作系统管理计算机硬件和软件资源的系统软件管理计算机系统的硬软件分配调度资源的系统软件是计算机中的程序关于某数据集合上的一次运行活动**,**是系统进行资源分配和调度的基本单位(没有引入线程时 )先来先服务算法:按照在就绪队列中的先后顺序执行。短进程优先调度算法:优先选择就绪队列中估计运行时间最短的进程,不利于长作业进程的执行。高优先权优先调度算法:进程附带优先权,优先选择权重高的进程,可以使得紧迫的任务优先处理。

2023-08-12 08:46:45 89

原创 线程的创建、Lambda函数式接口?Runnable和Callable之间的适配?动态修改线程任务?这里带你图解Java线程池

线程池,总算是搞懂了,所谓的核心线程数,只是一个定界指针,而线程存活时间也是靠按照时间来获取任务来实现的。而任务的执行,并不是靠更换线程的仍无,仍然是靠new线程, 当执行完了以后进行processWorkerExit()进行释放同时大家也可以看到,这里面的阻塞队列,有多种实现,具体的各种实现我们下期再谈。线程池-腾讯云开发者社区-腾讯云 (tencent.com)java工程师要会的大数据之Stream流-腾讯云开发者社区-腾讯云 (tencent.com)

2023-08-11 19:06:17 419

原创 深入浅出-Redis过期删除策略手术式源码刨析,小白也能看懂

之前就说了要来西索Redis,现在来辣!本文的部分基础内容参考自《小林Coding》,深入的地方根据源代码进行剖析。Redis源码地址:https://github.com/redis/redis.git。

2023-07-29 04:54:01 117

原创 无聊,来简单聊一聊聊聊JVM垃圾回收机制

对象首先非陪在伊甸园区域新生代空间不足时,出发MinorGC,伊甸园和from存活的对象使用copy复制到to中,存活的对象年龄+1并且交换fromtoMinor GC 会引发 stop the world (暂停 其他用户正在执行的线程 wait,等垃圾回收结束后,用户线程才恢复运行 notifyAll)当对象寿命超过阙值时,会晋升至老年代,最大寿命是15(4bit,但是不同的垃圾回收器不同)

2023-07-25 09:18:58 142

原创 零基础手把手带你阅读Redis源代码系列-ZSet底层原理详解(跳表SkipList)

之前就说了要来西索Redis,现在来辣!本文的部分内容参考自《小林Coding》,部分地方根据源代码进行剖析。Redis源码地址:https://github.com/redis/redis.git。

2023-07-23 11:28:05 192

原创 零基础小白?带你阅读Redis源码,从零开始分析Set整数集合模型

之前就说了要来西索Redis,现在来辣!本文的部分内容参考自《小林Coding》,部分地方根据源代码进行剖析。Redis源码地址:https://github.com/redis/redis.git。

2023-07-22 04:01:40 81

原创 从Redis源码上来聊聊KV模型-Hash数据类型

之前就说了要来西索Redis,现在来辣!本文的部分内容参考自《小林Coding》,部分地方根据源代码进行剖析。Redis源码地址:https://github.com/redis/redis.git。

2023-07-21 05:41:53 182 1

原创 神奇,Redis存储原理竟然是这样!

本文的部分内容参考自《小林Coding》,部分地方根据源代码进行剖析。Redis源码地址:https://github.com/redis/redis.git今天继续。

2023-07-20 10:46:39 102

原创 从源码上聊聊Redis-String、List的结构实现

本文的数据类型只讲底层结构和部分机制,不讲具体的使用,使用的话自行bing,但是会提一些应用场景[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5YbE5uG6-1689798263751)(http://gd.7n.cdn.wzl1.top/typora/img/string结构.png)]kv结构,最大长度512M底层数据结构为int和sds(简单动态字符串)字符串对象的内部encoding有3种如果是整数值,且能用long表示,那么对象会将整数值保存在ptr种,并将voi

2023-07-20 04:25:16 99

原创 深入浅出——深入分析MySQL索引和B+树(基于InnoDB和MyISAM引擎分析),看完直呼:妙哉!

MyISAM虽然也是采用的树形结构来存储,但实际,他是把索引和数据分开存储。将表中记录按照插入顺序单独存储与一个文件之中(称为数据文件)。该文件也没有数据页的划分,有多少记录塞多少记录就行,然后我们可以通过行号找到记录MyISAM记录也需要记录头信息来存储一些额外数据,以前文为例,如图可惜的是,在我们插入数据是并没有可以按照主键大小排序,所以啊,这次不能使用二分法来进行查找辣那么MyISAM是如何实现快速查找的呢,总不可能暴力吧。

2023-06-17 08:42:00 333

原创 Redis分布式锁深入分析

其实这里收获最大的,应该是自旋锁,虽然说在最后使用了发布订阅来完成异步唤醒,但还是有一些缺点,比如这个锁是否公平,如果说,这里要让你实现公平锁,读者你又打算如何解决?想到这里,我又想到了Reactor模型,其实我们可以做一个BossGroup来存放一下阻塞线程ID,其实就是一个阻塞队列再用一个WorkerGroup来对每个ThreadID进行处理,当然这里提供的是一个思路,如果要完成的话,相当于是写一个小型中间件,也挺有意思,后面打算试一试,hhh。

2023-06-16 04:48:10 177

原创 深入浅出——InnoDB页结构详解,慎入!

上一篇文章对InnoDB的行格式进行了解析,但是却把记录头信息抛到这里来讲,那么开始吧,注意本片需要有一点数据结构和算法基础,如果基础薄弱,请先确保自己会二分查找和链表再来食用# 页结构简单提溜一点儿,页它是 InnoDB 管理存储空间的基本单位,一个页的大小一般是 16KB 。 InnoDB 为了不同的目的而设计了许多种不同类型的 页 ,比如存放表空间头部信息的页,存放 Insert Buffer 信息的页,存放 INODE 信息的页,存放 undo 日志信息的页等等等等。但是在这里,我们主

2023-06-14 01:03:48 297

原创 深入浅出——InnoDB记录结构详解,菜鸡看了直呼:能懂!

从这篇文章开始,将对InnoDB的行格式和页结构进行介绍,这里主要介绍一下InnoDB的行格式,但是在故事的开始,都来提一下吧。这样的话,一次性至少读取1页数据到内存中或者将1页数据写入磁盘。通过减少内存与磁盘的交互次数,从而提升性能。这一种典型的缓存设计思想,一般缓存的设计基本都是从时间维度或者空间维度进行考量的:时间维度:如果一条数据正在在被使用,那么在接下来一段时间内大概率还会再被使用。可以认为热点数据缓存都属于这种思路的实现。

2023-06-14 01:00:28 134

原创 细说MySQL锁机制:S锁、X锁、意向锁...

这里知识简单西索一下:从粒度上来区分几种锁,下面是几种引擎使用锁的情况,更多的东西请君看下文:🐶InnoDB 支持多粒度锁,特定场景下,行级锁可以与表级锁共存。意向锁之间互不排斥,但除了 IS 与 S 兼容外,意向锁会与 共享锁 / 排他锁 互斥。IX,IS是表级锁,不会和行级的X,S锁发生冲突。只会和表级的X,S发生冲突。意向锁在保证并发性的前提下,实现了行锁和表锁共存且满足事务隔离性的要求。详解 MySql InnoDB 中意向锁的作用 - 掘金 (juejin.cn)行锁(

2023-06-13 19:59:43 1778

原创 平稳限流?突发限流?还是时间窗口?三种限流算法分析与对比

漏桶限流算法和令牌桶限流算法是两种常见的限流算法,它们的原理和实现方式有所不同。

2023-05-07 12:12:37 131

原创 从ChatGPT聊天服务上深挖Http、WebScoket和SSE推送技术的区别

HTTP/1.0 和 HTTP/1.1 是 HTTP 协议的两个版本,它们之间存在以下几点区别:默认是否开启长连接:HTTP/1.0 默认不支持长连接,需要在请求头中显式地设置 Connection: Keep-Alive 来启用,而 HTTP/1.1 默认支持长连接,无需额外设置。因此,HTTP/2 不是完全的异步操作,而是支持同时处理多个请求和响应的协议。需要注意的是,与WebSocket不同,SSE的通信是基于HTTP协议的,每次请求-响应的过程中都会经过三次握手和四次挥手的过程。

2023-05-05 23:54:07 1218

原创 针对RedisTemplate分布式锁实现WatchDog

在此之前,去看了下Redission的实现原理,不过在开发中,原本的代码使用RedistTemplate实现的,也不太想换,所以我想了下,不如自己实现要给WatchDog。我的想法是,在用户加上锁的时候开启个定时任务线程,并且在定时任务中,判断原线程isAlive状态进行“续命”。

2023-04-18 17:40:23 234

原创 JVM-内存结构篇笔记

PCR是一个较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器(在JVM的概念模型中,字节码解释器工作时就是通过改变PCR的值来选取下一条需要执行的字节码指令,是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基本功能都依赖这个计数器来完成。程序控制流:控制流是指。由于JVM的多线程是通过线程轮流替换、分配处理器执行时间的方式()来实现,因此在任意一个确定时刻,一个处理器或一个内核都只会执行一条线程中的指令。

2023-03-01 09:08:43 212

原创 如何上传自己的项目到Maven中央仓库

这段时间一直在做项目,也有一个项目伴随产品,其实也就是为了满足个人开发需求的一个工具类,然后想着为了便于协作开发,不如就放在Maven上,这篇文章主要介绍如何把自己的项目或者Starter上传到Maven中央仓库中,并且我也会在文章中说明坑点。​。

2023-02-27 13:50:45 1867 2

原创 【图论算法】邻接表、链式前向星、搜索、最短路、最小生成树、并查集、拓扑排序

纯属原创,半年前复习图论写得笔记,代码仅提供引发思路作用,部分地方代码可能又不足之处,也希望有大佬能够补充本文涉及:图的存储(领接矩阵、邻接表、链式前向星),图的搜索(dfs和bfs)、最短路(Floyd、Dj、贝尔曼福特算法、SPFA算法)、并查集、Kruskal算法、拓扑排序。

2022-09-06 18:41:01 508

原创 CF1716 A. 2-3 Moves

然后前面的0 1 2 3的结果我们如果忽略的话(因为可以直接通过数组返回),那相当于从第四位开始就是每三位递增的,如果觉得规律有点难写的话,你就想,1 2 3所对应的结果都是1,代码不久好写了?如果算出来的是负数,莫非就是-3 -2 -1,其实结果和他们的绝对值也是相同的,写一个函数来获取数组就行。但是这里的数据量比较大,所以可以找找规律,刚好发现从第四位开始,每三位的结果都是相同的。然后从第4位开始递推,比较x-2和x-3谁更小,然后再+1,就可以得到结果。...

2022-08-11 04:37:52 281

原创 GPLT2022 L1-085 试试手气

GPLT2022 L1-085 试试手气 我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态,即它们朝上一面的点数,让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙,每次摇出的结果都满足以下两个条件...

2022-05-12 13:20:04 379 1

原创 L2-017 人以群分 (25 分)

思路:sort+一维前缀和

2022-04-07 17:11:19 103

原创 L2-026 小字辈 (25 分)

L2-026 小字辈 (25 分) 思路: 链式前向星+dj+堆优化。

2022-04-07 13:52:48 90

原创 PTA 1006 换个格式输出整数 (15 分) 【C++/面向对象法】

1006 换个格式输出整数 (15 分)让我们用字母B来表示“百”、字母S表示“十”,用12...n来表示不为零的个位数字n(<10),换个格式来输出任一个不超过 3 位的正整数。例如234应该被输出为BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。输入格式:每个测试输入包含 1 个测试用例,给出正整数n(<1000)。输出格式:每个测试用例的输出占一行,用规定的格式输出n。输入样例 1:234结尾无空行输出...

2021-09-08 04:00:49 242

原创 PAT 1002 写出这个数(JAVA / Hash)

输入格式:读入一个正整数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含 1 个测试用例,即给出自然数n的值。这里保证n小于10100。输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789结尾无空行输出样例:yi san wu结尾无空行解题思路:以字符串输入,再转换为数组,累计求和,通过取...

2021-08-23 23:03:01 124

Spring学习笔记,参考尚硅谷和黑马课程而作

Spring学习笔记,参考尚硅谷和黑马课程而作

2023-08-14

空空如也

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

TA关注的人

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