自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 资源 (1)
  • 收藏
  • 关注

原创 TypeScript依赖注入框架Typedi的使用、原理、源码解读

基于Container的依赖注入,无非就是两件事,向Container中push实例和从Container中get实例。typedi采用了惰性加载的方式,初始只保存类的metadata(类的配置信息),Container.get()时才会对类进行实例化,而在类实例化的过程中,如果检测都有需要注入的属性,则会继续调用Container.get()来实例化属性,经典的递归形式;后续如果如果要获取某个实例,判断已经实例化了直接返回,就不需要继续实例化了。

2024-01-18 23:17:46 979

原创 在MySQL中如何存储一个IPv4地址?

ipv4直接存储为字符串优点是:易读、灵活缺点:占用更多的空间ipv4转换为整数:优点:节省空间、便于比较缺点:不易读、需要额外的运算。

2023-11-30 17:20:50 778

原创 字符集、编码格式的理解

ASCII字符集用1个字节就能表示ASCII只能表示英文字符以及一些常见的字符,共128个。**- GBK兼容ASCII,对于ASCII字符,用1个字节来表示汉字用2个字节来表示,为了与ASCII字符区分,第一个字节的首位是1Unicode字符集兼容目前大部分的字符Unciode字符集的编解码有不同的方案,目前主流的是UTF-8编码格式UTF-8编码格式下,ASCII字符是1个字节,一个汉字是3个字节。

2023-10-06 18:53:04 290

原创 BigInteger和BigDecimal的使用

后来为了迎合Java面向对象的思想,又有了包装类Integer、Float、Long、Double,但是这些包装类就是对基本数据类型的封装,表示数据的范围和精度并不会变化。在Java中,数值无非就是两种整数和浮点数,常用的基本数据类型就是int,float,但是这两个基本数据类型的范围太小了,于是还有long、double。在创建BigXxx实例时,尽量使用形参是String的方法,因为用String表示数值能表示的更大,而且用字符串表示数值不会存在精度丢失的问题。

2023-10-04 15:24:35 269

原创 Spring中加密工具类DigestUtils和BCryptPasswordEncoder

MD5本质是基于Hash来做的,是不可逆的。

2023-09-12 08:28:21 1610

原创 Redis事务的理解

Redis通过MULTIEXECWATCH等命令来实现事务功能。事务提供了一种将多个命令请求打包,然后一次性、按照顺序地执行多个命令的机制,并且在事务执行期间,服务器不会因为其他客户端请求而中断事务的执行功能,他会将事务中的所有命令都执行完毕,才会去处理客户端的请求通过MULTI和EXEC这两个命令就能完成一个简单的事务MULTI开启事务的标志EXEC事务结束的标志QUEUEDQUEUEDQUEUEDQUEUED1) OK2) OK4) "18"

2023-09-09 14:25:39 123

原创 C++STL字符串string知识汇总,恶补!

基础不牢,地动山摇。今天小米的笔试编程题,输入格式是一整个字符串,需要从字符串中分割出数据,同时还需要将字符串转换为int数值。本来用C++写,写到一般想起来了C++中没有split()函数,想到在java中有这个函数,于是又换到了Java语言,但是Java的输入、输出又不方便,唉~~这波,让我狠狠地补一下string的知识今天来将C++ STL中,与字符串相关的东西总结一下。

2023-09-03 00:47:12 323

原创 SpringBoot整合阿里云OSS,实现图片上传

然后将AcessKey的key和secret、OSS的区域节点以及bucket名称配置到配置文件中,在项目中,将图片等文件资源上传到阿里云的OSS,减少服务器压力。

2023-08-23 14:19:14 575

原创 MyBatis-Plus中公共字段的统一处理

在对每个表记录进行修改时,这四行代码都要重复出现,甚是繁琐,因此MyBatis-Plus中提供了对这些公共字段处理的简化手段。接下来,在业务逻辑中,就不需要对这些公共字段做处理了,只要处理核心的业务字段就可以了。接口有两个抽象方法,分别代表在。

2023-08-22 21:11:06 280

原创 Redis持久化——AOF

Redis是运行在内存中的数据库,当我们关闭了Redis服务器后,内存中的数据会丢失吗?答案是不会的,因为Redis有持久化功能,能够将内存中的数据保存到磁盘中的文件,以此来实现数据的永久保存。RDB持久化功能,简称RDB快照AOF持久化功能,简称AOF日志关于RDB快照,建议先去看看我的这篇文章Redis持久化——RDB快照_秋天code的博客-CSDN博客。

2023-08-17 21:54:25 282

原创 Redis持久化——RDB快照

我们知道Redis是运行在内存中的数据库,那么当我们关闭Redis服务器后,内存中的数据会不会丢失?当然是不会!因为Redis有持久化机制,所谓持久化,就是将内存中的数据保存到磁盘文件上,以此来达到永久保存数据的目的。RDB持久化AOF持久化RDB持久化又叫做RDB快照,简单点说,RDB快照就是记录Redis中此刻这一瞬间的数据到文件中,“对Redis内存数据进行一次抓拍”。RDB快照既可以手动执行,也可以自动定期执行,将此刻时间点上的数据库状态保存到一个RDB文件中。

2023-08-17 16:56:25 282

原创 Redis数据结构——快速列表quicklist、快表

Redis中的数据结构,链表和压缩列表这两种数据结构是列表对象的底层实现方式。当时考虑到链表的附加空间太大,节点的内存都是单独分配的,还会导致内存碎片化问题严重。因此从Redis3.2开始,对列表的底层数据结构进行了改造,即使用quickList代替链表list和压缩列表ziplist快速链表quickList实际上是ziplist和linkedlist的混合体,它将linkedlist按段切分,每一段使用ziplist来紧凑存储,多个ziplist之间使用双向指针串接起来。

2023-08-16 15:30:19 1250

原创 Reis过期删除策略

在Redis中,我们可以为键值对设置有效期,现在面临一个问题,如果一个键值对过期了,那么我们应该怎么删除呢?定时删除:在设置键的过期时间的同时,为此键设置一个定时器timer,定时器在键的过期时间来临时,立即自动执行键的删除。惰性删除:放任键不管,但是每次从获取该键时,都会检查此时的键是否过期,如果过期,则此时删除此键;如果没有过期,则返回。定期删除:每隔一段时间,程序对数据库中所有的键检查一次,删除过期的键。定时删除和定期删除是主动删除,而惰性删除是被动删除。

2023-08-16 15:25:54 102

原创 Redis对象类型和结构、内存回收、对象共享

在Redis中,无论是键key还是值value都是一个对象,每次对Redis数据库创建一个新的键值对时,就至少会创建两个对象。当引用计数变量为0时,表示没有程序继续引用此对象了,那么就需要回收此对象占用的内存。对这些对象的操作,在Redis中有对应的命令,这里就不说了。引用计数变量,除了实现内存回收机制外,还有对象共享的作用。在刚创建一个新对象时,引用计数的值会被初始化为1;当一个对象不再被一个程序使用时,引用计数值减1;当对象被一个新程序使用时,引用计数值加1;,用来表示对此对象的引用次数。

2023-08-15 16:40:12 727

原创 Redis数据结构——压缩列表ziplist

压缩列表ziplist是Redis中列表和哈希键的底层实现方式之一。当一个列表只包含少量列表项,并且每个列表项要么是小整数值,要么是较短的字符串时,那么Redis就会使用压缩列表来作为列表的底层实现。另外,当一个哈希表中只包含少量键值对时,并且每个每个键值对的键key和值value要么是小整数值,要么是短的字符串时,也会使用压缩列表作为实现方式压缩列表是Redis为了节约内存而设计的,由一系列特殊编码的连续内存组成的顺序型的数据结构,一个压缩列表可以包含任意多个节点,

2023-08-14 22:24:27 452

原创 Redis数据结构——整数集合

整数集合是集合的实现方式之一,当一个集合只包含整数值元素时,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合的底层实现。// 编码方式// 集合元素数量// 保存元素的数组} intset;contents数组保存的就是整数元素,这些元素从小到大排列,并且不会有重复项。我们知道对于int类型,存在多种编码格式,我们最常见的int的编码是32位的,除此之外还有16位、64位等格式。结构体中的encoding属性用来表示当前整数的编码格式。

2023-08-14 21:07:14 268

原创 Redis数据结构——字典

字典是一种存储键值对数据的结构在Redis中,字典是由哈希表实现的,字典相关的结构体有三个:dictEntry哈希表中的一个节点,就是一个键值对dictht哈希表,有多个dictEntry组成的数组来表示哈希表dict字典,其中保存了两个哈希表ht[2],在rehash时使用哈希表的rehash操作并不是一次性完成的,而是渐进式地,伴随着每次对哈希表的操作,顺带迁移一个键值对,直至完成。

2023-08-14 16:46:22 140

原创 Redis数据结构——链表list

链表是一种常用的数据结构,提供了顺序访问的方式,而且高效地增删操作。Redis中广泛使用了链表,例如:列表的底层实现之一就是链表。在Redis中,链表分为两部分:链表信息 + 链表节点。通过链表节点中的prev和next组成双向链表。而链表这个结构体中保存了整个链表的信息void*

2023-08-14 15:38:07 742

原创 Redis数据结构——Redis简单动态字符串SDS

众所周知,Redis是由C语言写的。对于字符串类型的数据存储,Redis并没有直接使用C语言中的字符串。而是自己构建了一个结构体,叫做“简单动态字符串”,简称SDS,比C语言中的字符串更加灵活。// 数组中已使用的字节的数量,即真实的内容长度int free;// 数组中未使用的字节的数量,即还可以继续存储的内容的长度// 字节数组,用来保存字符串。

2023-08-14 15:21:23 531

原创 synchronized锁膨胀、锁升级、锁优化的过程

参考文章本文是本人对以上文章的整理,建议先去看以上文章。synchronized代码块是由一对和字节码指令实现,这两个指令中间放的就是synchronized中同步代码块中的字节码指令。无锁偏向锁轻量级锁重量级锁锁的升级是单向的,只能从低到高,不会出现锁的降级。随着线程竞争的激烈程度增加,伴随有锁升级的现象,锁的重量程度越来越大。JVM默认是关闭可偏向锁机制的,如果想要开启可偏向机制,在启动时,通过JVM参数指定。

2023-08-14 12:44:00 307

原创 关于Java中synchronized的实现原理

注意:与sleep()方法不同的是,wait()方法调用完成后,线程会被暂停,线程将会释放当前持有的Monitor,直到其他线程调用notify()或notifyAll()方法后才能重新竞争锁;当线程执行到了add()方法,说明该线程已经拥有了该锁,在add()方法中,再次请求increase()方法,因为该方法的锁已经被当前线程持有了,所以直接允许,操作成功,这就是可重入性。线程获取到了锁之后,再次请求该锁对象的临界资源,是允许的,这就是synchronized的可重入性。

2023-08-14 12:14:39 100

原创 什么是管程?

在并发编程领域,最核心的两个理念就是同步和互斥,并发编程就是围绕这两个核心概念来完成的。互斥:同一时刻只能有一个线程持有共享资源同步:多个线程之间协调、互作在最初,人们利用信号量机制来实现互斥和同步,但是对于编程人员来说,在编码中嵌入大量的信号量操作,代码冗余,而且出错概率增大,后来就有了面向开发人员更友好的管程。

2023-08-13 13:24:25 201

原创 Java对象内存结构、对象在内存是什么样的

HotSpot虚拟机的自动内存管理要求对象的起始地址必须是8字节的整数倍,换句话说,就是任何Java对象的大小都必须是8字节的整数倍,那么对齐填充这一部分就是为了使对象能够达到8字节整数倍的大小,当对象除了对齐填充外的其他部分的大小已经满足8字节的整数倍了,那么就不需要对齐填充了。“Mark Word"占用32位,有两位用来作为标记位,标记对象的锁状态,在不同的锁状态下,”Mark Word"真正存储的数据是不一样的。这部分数据的长度在32位和64位的虚拟机中分别是32bit和64bit。

2023-08-12 18:41:10 238

原创 JDK内置SPI机制、服务提供发现机制

SPI的全称是Service Provider Interface服务提供接口,是JDK内置的一种。,例如我们常用的数据库驱动Driver,就是基于SPI来做的。下存在一个配置文件,这个配置文件以服务接口的全路径名为文件名。SpringBoot中的自动配置也是效仿SPI机制来做的。这样,服务调用方、提供方实现了解耦,更加利于维护和扩展。打开这个文件,文件中的内容就是服务实现类的全路径名。会看到在mysql驱动依赖的。来看一下mysql驱动依赖。

2023-08-12 11:56:13 174

原创 关于MySQL中的binlog

undo log 和 redo log是由Inno DB存储引擎生成的。连接层、服务层(server层)、执行层(存储引擎层)bin log是binary log的缩写,即二进制日志。MySQL在完成一次DML操作后,Server层还会生成一条binlog,等事务提交之后, 还会将该事务执行过程中产生的所有binlog统一写入到binlog日志文件中binlog日志文件中保存了所有数据库的所有表结构的变化和表数据的变化。

2023-08-08 15:03:57 443

原创 关于Spring中的@Configuration中的proxyBeanMethods属性

被修饰的类,本质上也是一个Bean当中的属性默认是true,意味着这个类会被代理,这个类中通过@Bean修饰的方法会被增强,调用这个方法时,会直接返回受Spring容器管理的Bean(Spring容器中的Bean默认都是单例的)而如果中的属性是false,那么此配置类就是一个普通的类,未被代理。因此调用被@Bean修饰的方法,就是一个普通的方法,每次调用都会返回一个新的对象。

2023-07-29 15:37:25 589

原创 利用VitePress部署静态网站

之前看到过很多这样的静态网站,基于Markdown格式,风格基本统一,而且这种网站非常常见,例如:Java HashMap 源码分析 | 未读代码BAT大厂面试题与全栈知识体系结合 | Java 全栈知识体系3.1 HTTP 常见面试题 | 小林coding以及Vue生态中的各个官方文档,都是这样的风格:简介 | Vue.js介绍 | Vue Router简介 | Pinia当时好奇这种网站是怎么生成的,但是没有深究。

2023-07-09 19:44:25 1800

原创 Markdown编辑器Vditor的基本使用以及在Vue3中使用

官网GitHub帮助文档Vditor是一个Markdown编辑器组件(也支持富文本编辑器),可以嵌入到自己的Web应用中。所见即所得WYSIWYG(富文本)即时渲染(类似于Typora)分屏预览支持在原生JS中使用,同样支持目前主流的前端框架Vue、React、Svelte,还支持TS。

2023-07-09 00:44:51 6457 2

原创 关于SpringMVC中的几个配置类WebMvcConfigurer 、WebMvcConfigurationSupport 、WebMvcConfigurerAdapter

在学习SSM时,对SpringMVC做自定义配置时,接触到了WebMvcConfigurer 、WebMvcConfigurationSupport 、WebMvcConfigurerAdapter这几个抽象类或接口,这三个类都能对SpringMVC做出配置,至于这三者之间的关系与区别,当时也没有在乎,现在来整理一下。首先最早的一个用来对SpringMVC做出配置的类是WebMvcConfigurerAdapter类,是一个抽象类,从Spring5.0开始已被弃用。

2023-07-08 21:49:07 2308

原创 Bean属性校验

然后使用JSR303规范中的注解去定义校验规则就好了。关于常用的校验规则有哪些?可以进入到JSR303注解包。一般来说,以javax开头的groupId,都是规范。Servlet是一个规范,Tomcat实现的。JSR303提供规范,其余框架实现规范。当属性注入时,就会进行属性校验,测试一下。JSR303也是一个规范,有人提供实现。JDBC是一个规范,各个厂商实现的。在需要校验的Bean上开启校验功能。我们只需要面向接口编程即可。下查看,这里给出一些常用的。

2023-06-21 14:10:16 338

原创 NVM安装使用

电脑重装了系统,需要重新安装软件应用,顺便记录一下安装过程。NVM是一个Node的版本管理工具,通过NVM可以方便的切换Node的版本。

2023-06-18 15:23:39 1052

原创 mysql压缩包方式安装、data数据恢复

最近电脑重装了系统,C盘彻底格式化了,但是D盘中的文件还是保留了下来。重新安装Mysql将源数据拷贝到新的Mysql的data目录下顺便记录一下MySQL压缩包的安装方式(我个人喜欢用压缩包安装应用软件)先来说怎么安装,等会再说怎么恢复数据。

2023-06-18 14:51:47 1180 1

原创 Windows版Redis安装

最近电脑重装了系统,很多常用的软件、应用都没有了,所以需要重新装,所以想借此机会把一些安装比较复杂的应用的安装过程,重新记录一下,方便后续,

2023-06-18 13:44:10 1654

原创 关于spring-boot-denpendencies

来做的,在这个模块中管理了常用的依赖以及版本,因此我们的SpringBoot中引入依赖时,不需要指定版本号。这个模块在Maven中也是单独作为一个依赖存在的,因此我们可以直接使用这个模块。不建议自己的Spring-boot的项目直接继承。在SpingBoot中所有的依赖管理,都是由。具体管理了哪些依赖,可以通过下面的链接查看。中还定义了额外的配置。

2023-06-16 13:01:21 156

原创 Knife4j的使用、SpringFox和SpringDoc介绍

既然是一个增强工具,那么原先Swagger中怎么写的,依然怎么写,knife4j不会做出改变。Swagger的生成的默认文档确实不好用(不美观、不支持搜索、不能导出)knife4j是一个Swagger的增强工具,能够完善项目的接口文档。只需要在原先Swagger的基础上,引入knif4j的依赖即可。只是最后生成的文档更强大、漂亮了。

2023-06-09 22:58:56 1825 3

原创 SpringBoot中集成Swagger2

Swagger是非常流行的API框架,能够自动生成RESTFul 风格的API文档,还可以在线测试后台接口。使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,以及在线接口调试页面等等。前后端分离的开发模式下,前端通过后端的API文档来进行开发和联调,效率更高。

2023-06-09 22:55:34 1166

原创 关于ElementPlus中的表单验证

在中的规则中,数组中的每一个对象都是一个校验规则,我们只需要给一个对象给出方法的实现即可:// rule此条规则的描述信息 // value表单中此字段的值 // 回调函数,通过此函数控制是否校验通过 }看个例子// 定义校验规则 const rules = reactive({// 普通的校验规则 account : [ {required : true , message : '账户不能为空' , trigger : 'blur' } , {

2023-06-06 21:59:12 5208 2

原创 关于Spring中自带的@Schedule实现自动任务

SpringBoot中自带了一个能够实现定时任务的注解@Schedule说一下这个@Schedule注解怎么用?

2023-06-06 10:46:56 723

原创 踩坑:Vue 模版中用到的响应式数据,不要在异步操作中给出声明

这样做的问题是:可以成功获取到数据,通过Devtools调试发现,category也是一个响应式数据,但是页面渲染不出来。模版要用到的响应式数据,不要在异步操作中定义/声明成响应式,而是应该在异步请求前完成对响应式的定义、声明。心里很不得劲,因为在我的习惯中,只有基本数据类型才用ref(),对象和数组类型要使用reactive()这个目标数据是通过异步请求获取到的,在异步请求的会调函数中,完成对响应式数据的赋值。一开始,我以为是reactive()函数与异步请求的有冲突,哈哈~~

2023-06-04 19:34:48 557

原创 yarn的使用、yarn与npm的区别

Yarn与npm一样,都是包管理工具。但是Yarn比npm更高效,具有包缓存机制,下载过的包,无需再次下载,直接引用。

2023-05-25 18:22:19 1460

免费下载Git-2.36.0-64-bit.exe

Windows64位系统版本Git-2.36.0安装包 , 附上安装教程,截止2022/04/16为Git官网最新版.欢迎小伙伴下载使用. 文件为7z格式的压缩包 , 使用任意的压缩工具解压即可. Git分布式版本控制工具, 目前使用最广 ,结合GitHub , Gitee使用, 职场必会工具.

2022-04-26

空空如也

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

TA关注的人

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