自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis底层数据结构-Dict

Redis的键与值的映射关系是通过Dict来实现的。Dict是由三部分组成,分别是哈希表(DictHashTable),哈希节点(DictEntry),字典(Dict)哈希表结构如下图所示:由于会发生哈希冲突,所以entry个数可能会大于sizesize总是2的n次方哈希节点的结构如下图所示:当我们向Dict添加键值对时,Redis首先根据key计算出hash值(h),然后利用h&sizemask(其实就是h对数组长度取余)计算元素应该存储到数组中哪个索引位置。

2024-04-03 18:50:42 608

原创 Redis底层数据结构-IntSet

其实数组本身只是一个指针,指向起始元素的地址,intset并不依赖于C语言提供的数组相关函数,所有增删改查都是自己来做的。,在本例子中升级编码为INTSET_ENC_INT32,每个整数占4字节,并按照新的编码方式以及元素个数扩容数组.IntSet是Redis中set集合的一种实现方式,基于整数数组来实现,并具备长度可变,有序等特征。由此,对这个数组的操作和大小并不是像表面看到的一样,而是由encoding来决定 的。倒序依次(先调整20,10,5)将数组中的元素拷贝到扩容后的正确位置。

2024-04-03 18:49:42 272

原创 Redis底层数据库之SDS

由于len是uint8_t类型,最大值为254,所以字符串最大长度为254(因为char buf[]仍然是C语言的字符串,会有一个结束符)Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是redis中最常用的一种数据结构。假如在该字符串追加一段”,AMY“,那么会去申请新空间(alloc为申请的存放字符的空间,不包含结束字符)所以Redis构建了一种新的字符串结构,成为简单动态字符串,简称SDS。flags:表示不同的结构体类型。uint8_t:表示无符号整型。

2024-04-02 20:24:30 430

原创 Springboot启动https安全协议(JDK生成SSL证书)

https协议是http+ssl协议,由于http协议是明文传输的超文本协议,在数据传输过程中,容易被”截胡“,进而导致数据泄露,在重要网站输入用户账户密码时是极为危险的情况。于是Https协议便诞生了,ssl是一个证书,其中会包含一对证书。

2024-04-02 11:10:09 688 1

原创 MYSQL百万数据查询优化

在查询第100000条记录之后的10条时,耗费时间:0.227s在查询第200000条记录之后的10条时,耗费时间:0.251s在查询第500000条记录之后的10条时,耗费时间:0.916s在查询第800000条记录之后的10条时,耗费时间:1.639s在查询第1000000条记录之后的10条时,耗费时间:2.038s以上叫做深度分页,即查询偏移量过大的场景,这会导致查询性能较低。

2024-03-26 15:18:18 736

原创 LeetCode 61. 旋转链表

其实像例1中,链表长度length为5,当k为5,10,15时,链表其实是没有变化的,当k为6,11,16时也只是相当于旋转了一次,所以旋转得次数其实是k%length。解题思路:本题中比较简单想法就是使用递归做法,每做一次递归使得k-1,将尾节点接到首节点左边,但是这样做当K特别大时会出现栈溢出的情况。输入:head = [1,2,3,4,5], k = 2。输入:head = [0,1,2], k = 4。链表中节点的数目在范围 [0, 500] 内。输出:[4,5,1,2,3]输出:[2,0,1]

2024-03-25 21:54:55 202

原创 LeetCode215. 数组中的第K个最大元素

为了保证稳定性,随机获取集合中的一个元素pivot进行排序,所以我们可以判断比该pivot元素小的元素个数(low.size()),比该pivot元素大的元素个数(above.size()),以及和该pivot元素相等的元素个数(equal.size())请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。输入: [3,2,3,1,2,4,5,5,6], k = 4。输入: [3,2,1,5,6,4], k = 2。此时我们所知道的是要查找第K大的元素。

2024-03-25 20:37:32 309

原创 LeetCode162. 寻找峰值

这是因为nums[mid-1]>nums[mid],同时左边界为无穷小。此时在nums[0]~nums[mid]中必有峰值元素。就和现实中爬山一样,在nums[mid]端向左爬,是上山,但最终会下到山底,所以必然会有一个山峰。如果nums[mid-1]>nums[mid]那么在左半端必有峰值元素,右半端同理。你可以假设 nums[-1] = nums[n] = -∞。输入:nums = [1,2,1,3,5,6,4]解释:你的函数可以返回索引 1,其峰值元素为 2;输入:nums = [1,2,3,1]

2024-03-23 20:31:02 295

原创 LeetCode148. 排序链表

解决思路:遍历链表中的节点,将其中的值存入list中,然后对list进行排序,重新建立一个链表即可。给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。时间复杂度为O(n),空间复杂度为O(n),其中n为节点个数。链表中节点的数目在范围 [0, 5 * 104] 内。输入:head = [-1,5,3,4,0]输入:head = [4,2,1,3]输出:[-1,0,3,4,5]输出:[1,2,3,4]输入:head = []

2024-03-22 21:14:55 161

原创 LeetCode103. 二叉树的锯齿形层序遍历

(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。使用两个栈来实现功能,一个全局栈global,一个局部栈temp,此外设置一个标志位label来判断在每一层时保存孩子的顺序。当每一层遍历完毕之后,将局部栈克隆给全局栈,此时全局栈具有下一层的节点。使用全局栈来进行遍历输出节点,在输出的同时将左右孩子节点存入局部栈中。输入:root = [3,9,20,null,null,15,7]输出:[[3],[20,9],[15,7]]输入:root = [1]输入:root = []

2024-03-22 20:53:01 277

原创 springboot3以及上版本引入RocketMQTemplate显示could not be found.

在springboot3时,直接通过依赖来注入RocketMQTemplate会报错,会显示没有这个对象。这是因为在Springboot3以前的版本,自动装配是通过读取所有jar包下的META-INF/spring.factories文件。(可以去查阅而spring.factories功能在spring Boot3.0被移除,替换方案为META-INFO/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports。

2024-03-20 18:04:05 359

原创 红黑树简单介绍

红黑树是一种自平衡二叉查找树,由于自平衡的特性,保证了最坏情况下在O(logn)时间复杂度内完成查找、增加、删除等操作,性能表现稳定。在JDK中,TreeMap、TreeSet以及JDK1.8的HashMap底层都采用了红黑树。

2024-03-20 10:10:56 352

原创 二叉树之遍历代码模板

【代码】二叉树之遍历代码模板。

2024-03-19 21:30:59 162

原创 高并发抢票时,防止机器人刷票的令牌大闸,减轻服务器的压力(防刷+限流)

场景1:分布式锁和限流都不能解决机器人刷票的问题,1000个请求抢票,900个限流快速失败,另外100个有可能是同一个在刷库。引入令牌,令牌中记录用户信息,会进行校验用户是否拿过令牌,如果拿过令牌,那么几秒内不允许再获得令牌场景2:没有余票时,需要查库存才能知道没票,会影响性能,不如查询令牌余票来的快令牌的数量是和票数是相关的,令牌可以和票数相等,那么通过查询令牌就可以知道是否还有余票,会减少查询数据库,减少IO压力。

2024-03-19 18:52:50 828

原创 Sentinel基础使用

Warm up效果:coldFactor即为请求QPS从(阈值/3)开始,经过多少预热时长才逐渐升值设定的QPS阈值,比如阈值是100,时长为10秒,则从33开始经过10秒上升到100。最大RT:表示响应时间,如果响应时间大于201ms,当有百分之三十的请求响应时间大于201ms时出发熔断。设置20个线程去请求,理论上来说是第一秒处理10个请求,然后10个请求进行排队等待,在第二秒进行处理。请求,会进行排队等待,如果在500ms内能够接收请求的话就处理,否则就拒绝。一开始的QPS为3,然后慢慢增长到10。

2024-03-18 19:59:37 1925

原创 CornerStone之读取txt文件点数据

/找到上传文件//定义一个读缓冲流//设置读文件的编码格式为UTF-8//类型数组只能存储Number数字型数据,其他数据不允许会赋值为NaN//加载文件//将字符串按照换行符分割为字符串数组i++){//将行数据按照逗号分割为数组j<100;j++){//此时将01数据的矩阵转换为一维矩阵})文件内容如下所示:转换之后的Float32Array数组为。

2024-03-18 11:29:00 172

原创 CornerStone.js之点数据获取&&相关函数

向后端导出点的坐标数据

2024-03-17 10:28:05 350

原创 CornerStone.js之Segementation State理解

理解如下图所示:

2024-03-17 10:25:25 112

原创 Jmeter之线程组之间变量的传递

在会员登录请求中,对请求返回的结果进行提取,需要使用JSON提取器(添加/后置处理器/JSON提取器)Names of created variables填入token,即创建的变量名,其值来源于$.content.token(字符表示返回值的根路径)

2024-03-13 22:16:53 533

原创 Redis之红锁

当线程1获取了锁之后,假设此时redis主节点宕机,随之一个副节点马上变成主节点线程2会从新的主节点获得锁,这就发生了互斥的问题。

2024-03-13 22:15:31 526

原创 springboot项目引入Seata&配置到Nacos

Springboot项目引入Seata流程以及配置到Nacos介绍

2024-03-06 19:15:17 368

原创 前端缓存&本地缓存&分布式缓存

常见的缓存有哪些?

2024-03-06 16:04:45 1033

原创 仿12306项目之生成每日车次数据(重点余票数据)逻辑分析

2024-03-02 20:34:34 72

原创 SpringBoot和OpenFeign版本依赖问题

当使用Springboot版本为3.2.2时,openfeign版本为3.1.5时。当将openfegin版本设置为4.1.0时即可。解决方法:在maven仓库里找到两者对应的版本。这是因为两者的版本对应失误。如果不对应,会发生诸如。当去远程调用时会报错。

2024-03-02 15:31:27 558

原创 Cornerstone之Nifti文件加载显示

使用CornerStone3D加载nii文件的逻辑如下所示:

2024-02-29 14:20:18 471

原创 CornerStone的操作tool引入

代码如下所示:以添加一个工具为例子。

2024-02-29 14:18:10 208

原创 LeetCode5 最长回文子串

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。给你一个字符串 s,找到 s 中最长的回文子串。解释:“aba” 同样是符合题意的答案。输入:s = “babad”输入:s = “cbbd”

2024-02-25 16:01:56 121

原创 SpringBoot自动装配原理

在使用Spring时,需要在XML文件编写配置。即使Spring后面引入了基于注解的配置,在开启某些Spring特性或者引入第三方依赖的时候,仍然需要XML或者Java进行显示配置。需要在XML文件中声明Bean的定义。

2024-02-23 16:01:04 801

原创 Springboot自带的定时任务

使用SpringBoot开启定时任务,只需要加上相应的注解和Corn表达式即可。Cron表达式是一个字符串,以5或者6个空格隔开,分为6或者7个域,每一个域代表一个含义。Cron表达式可以通过表达式生成器进行直接生成

2024-02-17 10:05:39 210

原创 FreeMarker代码生成器和Mybatis-plus代码生成器之二

代码生成需要模板,有官方的模板,添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足要求,可以采用自定义模板引擎。

2024-02-15 11:15:03 157

原创 FreeMarker代码生成器和Mybatis-plus代码生成器之一

本文详解了使用FreeMarker模板引擎来为后端快速生成增删改查文件,以及相应的Vue文件

2024-02-15 10:46:09 727

原创 解决Long类型精度丢失问题

在JavaScript中,最大的安全整数值可以通过常量来获取。其值为 9007199254740991,这是由于 JavaScript 中采用的是双精度浮点数表示方式(64位),其中一部分用于指数、符号和小数部分,所以最大安全整数范围有限。而在Java中,long类型是64位的,所以其长度是64位或8个字节。这允许long类型在Java中表示范围更广的整数值,从-9,223,372,036,854,775,808到9,223,372,036,854,775,807(包括两个端点)。

2024-02-13 10:52:21 614

原创 如何应对高并发场景

从前端、后端、数据库和其他四个方面来思考。

2024-02-13 10:51:22 160

原创 Redisson看门狗机制详解

尝试获取锁,开始进行获取锁的业务逻辑,点击进入tryAcquire函数。当剩余有效期为null的时候,执行scheduleExpirationRenewal函数释放锁,下面为scheduleExpirationRenewal函数。当线程1业务因为阻塞,导致锁超时释放,而线程2拿到了该锁,当线程1业务执行完毕,释放锁,会导致线程2的锁丢失,其他线程可以去获取锁。该函数返回null(获取锁成功)或者锁的剩余过期时间,在tryLock函数中会进行判断,如果为null,则返回true。之后便进行获取锁的重试。

2024-01-18 20:25:40 373

原创 使用CornerStone.js出现的SharedArrayBuffer is NOT supported in your browser

简单来说就是由于JavaScript是单线程的,为了让浏览器更好利用CPU的资源,便引入了Web Workers这个API,提供了多线程的使用方式。解决方法:在vite.config.js中设置headers,注意这里启动地址不能为ip:5173/否则会报错该url不安全,忽略该headers。默认情况下线程之间的数据是隔离,若想要使用其他线程的数据,必须复制过来。使用功能之前需要开启浏览器的SharedArrayBuffer功能,在进行调试cornerstone的功能时,系统出现了bug。

2024-01-15 16:24:19 568

原创 Cornerstone的Render Volume案例使用Vue求救!!!

在执行const renderingEngine = new RenderingEngine(renderingEngineId);随后楼主选用了const renderingEngine = getRenderingEngine(renderingEngineId);一直执行上面的setInterval。求救大佬们指教指教!

2024-01-11 17:26:22 421

原创 java 对象数组根据对象内不同数据进行升序降序排序

以具体例题来说明问题:月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94

2020-07-29 20:22:38 762

原创 PHP学习的第一步

PHP学习变量:1.变量命名规则:(1).在PHP中变量名字必须以“$”符号开头;(2).名字由字母,数字,下划线组成,但是不能由数字开头;(3).在PHP中本身还允许使用中文变量;(不建议)2.预定义变量:预定义变量:提前定义的变量,系统定义的变量,存储许多需要用到的数据(预定义的变量都是数组)$_GET:获取所有表单以get方式提交的数据$_POST:POST提交的数据都会存放在...

2019-08-11 16:08:02 173

空空如也

空空如也

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

TA关注的人

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