
笔记
文章平均质量分 75
逐渐呆滞
黑奴
展开
-
Redis五大基本数据结构(原理)
对⼀个内部表示成long型的string执行append, setbit, getrange这些命令,针对的仍然是string的值(即⼗进制表示的字符串),而不是针对内部表⽰的long型进⾏操作。因此,在这些命令的实现中,会把long型先转成字符串再进行相应的操作。String的内部存储结构⼀般是sds(Simple Dynamic String,可以动态扩展内存),但是如果⼀个String类型的value的值是数字,那么Redis内部会把它转成long类型来存储,从⽽减少内存的使用。原创 2023-05-28 09:01:00 · 1758 阅读 · 0 评论 -
Redis数据结构——动态字符串、Dict、ZipList
我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:获取字符串长度的需要通过运算非二进制安全不可修改Redis构建了一种新的字符串结构,称为简单动态字符串(Simple Dynamic String),简称SDS。例如,我们执行命令:那么Redis将在底层创建两个SDS,其中一个是包含“name”的SDS,另一个是包含“虎哥”的SDS。Redis是原创 2023-05-12 19:55:09 · 803 阅读 · 1 评论 -
ReentrantLock原理——公平锁与条件变量实现原理
每个条件变量其实就对应着一个等待队列,其实现类是 ConditionObject。原创 2023-04-09 08:20:15 · 171 阅读 · 0 评论 -
偏向锁撤销
1> 测试延迟特性2> 测试偏向锁利用 jol 第三方工具来查看对象头信息处于偏向锁的对象解锁后,线程 id 仍存储于对象头中。3> 测试禁用在上面测试代码运行时在添加 VM 参数 -XX:-UseBiasedLocking 禁用偏向锁。4> 测试 hashCode。原创 2023-03-11 16:20:20 · 689 阅读 · 0 评论 -
synchronized原理(轻量级,锁膨胀,自旋,偏向锁)
如果一个对象虽然有多线程要加锁,但加锁的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化。轻量级锁对使用者是透明的,即语法仍然是。原创 2023-03-04 17:10:39 · 877 阅读 · 0 评论 -
JVM方法区的内部结构
而Java 中的字节码需要数据支持,通常这种数据会很大以至于不能直接存到字节码里,换另一种方式,可以存到常量池,这个字节码包含了指向常量池的引用。如果代码多,应用到的结构会更多!常量池表(Constant Pool Table) 是 Class 文件的一部分,用于存放编译期生成的各种字面量与符号应用,这部分内容将在类加载后存放到方法区的运行时常量池中。当创建类或者接口的运行时常量池时,如果构造运行时常量池所需的内存空间超过了方法区所提供的最大值,则 JVM 会抛 OutOfMemoryError 异常。原创 2022-12-11 09:33:16 · 507 阅读 · 0 评论 -
实现延迟队列的几种途径
延时队列相比于普通队列最大的区别就体现在其延时的属性上,普通队列的元素是先进先出,按入队顺序进行处理,而延时队列中的元素在入队时会指定一个延迟时间,表示其希望能够在经过该指定时间后处理。从某种意义上来讲,延迟队列的结构并不像一个队列,而更像是一种以时间为权重的有序堆结构。原创 2022-11-13 08:51:54 · 2907 阅读 · 0 评论 -
Java中的位运算符号
运算符规则为:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果才为 1,否则为 0。,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;即 1 & 1 = 1 ,1 & 0 = 0,0 & 1 = 0,0 & 0 = 0。即 1 | 1 = 1 ,1 | 0 = 1,0 | 1 = 1,0 | 0 = 0。即 1 ^ 1 = 0 ,1 ^ 0 = 1,0 ^ 1 = 1,0 ^ 0 = 0。原创 2022-10-16 08:47:28 · 848 阅读 · 0 评论 -
Springboot整合Cos云存储
其实最好的方式是将Cos云配置信息放入application.properties或application.yml文件中,但我在之前配置的时候因为一些原因没这么配置,只好就这样写了,有兴趣的话可以自己配置到配置文件中,引用会更加方便。详细信息直接看代码。最后,delete方法就直接将上面文件生成的路径传进去就可以达到删除的效果了,我就不测试了。测试结果,因为我在多文件上传的时候将文件的访问路径以逗号隔开,有需要的话可以自己更改。首先需要获取相关配置参数,进入腾讯云对象存储,创建存储桶并进入所创建的存储桶。原创 2022-09-24 22:01:15 · 1058 阅读 · 3 评论 -
序列化与反序列化
Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。原创 2022-09-17 15:32:27 · 638 阅读 · 0 评论 -
Java8新特性--函数式接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为 lambda 表达式。Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。原创 2022-09-10 16:49:23 · 281 阅读 · 0 评论 -
HttpURLConnection使用方法
HttpURLConnection的connect()函数,实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。无论是post还是get,http请求实际上直到HttpURLConnection的getInputStream()这个函数里面才正式发送出去。在用POST方式发送URL请求时,URL请求参数的设定顺序是重中之重, 对connection对象的一切配置(那一堆set函数) 都必须要在connect()函数执行之前完成。原创 2022-09-04 08:53:56 · 4796 阅读 · 0 评论 -
数据结构--树
在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。因为它结合了另外两种数据结构的优点: 一种是有序数组,另一种是链表。在树中查找数据项的速度和在有序数组中查找一样快, 并且插入数据项和删除数据项的速度也和链表一样。树的底层其实同样是用链表。不同的是,在树中大量运用了递归。...原创 2022-08-14 09:42:31 · 257 阅读 · 0 评论 -
Java栈解决括号匹配
遇到左括号入栈,遇到右括号时先检查栈是否为空,若空则返回false,若不空则弹出栈顶元素看与右括号是否匹配。所有元素处理完后若栈为空则说明匹配成功,否则匹配不成功。另外,栈可以以数组底层,也可以以联表为底层,而这里是采用了链表。链表实现的栈,可以创建任意数据类型的栈。里面只含有 [ , ] , ( , ) 四种括号;现要求判断这个字符串 是否满足括号匹配。如([])()是匹配的([)]是不匹配的。...原创 2022-08-07 13:13:25 · 1081 阅读 · 0 评论 -
数据结构——栈
定义一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。规则后进先出每个栈帧里面都会存储有相应的一下内容1.局部变量表2.操作数栈3.动态链接4.返回地址。原创 2022-08-01 10:58:25 · 158 阅读 · 0 评论 -
Spring secrity 自定义密码验证(结合JWT)
众所周知,在Springsecrity中,密码验证由框架进行,但在实际项目开发中,交给secrity原生处理就显得有点局限了。而我们要做的自定义登录,就要去重写一些内容了。首先,继承UsernamePasswordAuthenticationFilter去重写下方方法,获取自定义登录接口的相关信息,再对用户名和密码处理。之后,spring会通过你设置的密码加密方式以及loadUserByUsername方法中的逻辑进行验证,再之后的验证成功与否会有不同的处理。...原创 2022-07-24 18:10:31 · 1104 阅读 · 0 评论 -
关于JWT
Jsonwebtoken(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。...原创 2022-07-17 10:09:21 · 124 阅读 · 0 评论 -
Spring data JPA 笔记
1. @Entity :标识实体类是JPA实体,告诉JPA在程序运行时生成实体类对应表2. @Table :设置实体类在数据库所对应的表名3. @Id :标识类里所在变量为主键4. @GeneratedValue :设置主键生成策略,此方式依赖于具体的数据库5. @Basic :表示简单属性到数据库表字段的映射(几乎不用)6. @Column :表示属性所对应字段名进行个性化设置7. @Transient :表示属性并非数据库表字段的映射,ORM框架将忽略该属性8. @Temp原创 2022-07-02 23:49:59 · 475 阅读 · 0 评论 -
Redis持久化机制
Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。 Redis 的持久化机制有两种,第一种是RDB快照,第二种是 AOF 日志。快照是一次全量备份,AOF 日志是连续的增量备份。快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本。RDB快照RDB快照是某个时间点的一次全量数据备份,是二进制文件,在存储上非常紧凑。RDB持久化触原创 2022-06-25 23:06:58 · 484 阅读 · 0 评论 -
关于SpringBoot的浅学
前言:这一周,因项目第一阶段考核也落幕,下一阶段要求我们后端学习SpringBoot框架对本次项目进行重构。另外,因为一些突发状况,我们学校的教学楼也全部封了,要求在宿舍进行线上学习。总体来说,线上教学导致的在宿舍进行学习的效果并不好,不自觉的想偷懒,睡觉等等。总结:显而易见,SSM框架常作为数据源较简单的web项目的框架,而SpringBoot是框架中的框架,它相较于SSM其实并没有什么的大的改变,实现的功能效果大差不差。当然,存在就肯定有其...原创 2022-05-14 22:36:40 · 215 阅读 · 0 评论