
总结
文章平均质量分 74
逐渐呆滞
黑奴
展开
-
Redis网络模型
当我们的客户端想要去连接我们服务器,会去先到IO多路复用模型去进行排队,会有一个连接应答处理器,他会去接受读请求,然后又把读请求注册到具体模型中去,此时这些建立起来的连接,如果是客户端请求处理器去进行执行命令时,他会去把数据读取出来,然后把数据放入到client中, clinet去解析当前的命令转化为redis认识的命令,接下来就开始处理这些命令,从redis中的command中找到这些命令,然后就真正的去操作对应的数据了,当数据操作完成后,会去找到命令回复处理器,再由他将数据写出。我们来梳理一下这张图。原创 2023-06-11 08:32:55 · 842 阅读 · 2 评论 -
JAVA模拟堆
/存放堆中的数据 static int [ ] ph;//存放第k个插入点的下标 static int [ ] hp;//存放堆中点的插入次序 static int size;//存放堆中数据个数堆虽然是一种树,但在堆的存储中,通常使用数组存储。这是因为数组在从下标1开始存储值的时候,假设树根root为n,那么它的左子树为2n,右子树为2n+1。原创 2023-05-06 16:05:13 · 524 阅读 · 1 评论 -
对象分配策略
首先进入新生代的Eden区,此后要么是朝生夕死的对象,在某次Minor GC中被回收,要么在新生代中熬过15次Minor GC(默认晋级老年代的分代年龄阈值为15),当对象进入老年代后,就很难轻易被回收了。当然,总有对象死亡的一天,只是时间问题罢了。总体的流程就是这样,但细心的人会发现,文字所描述的过程跟图上有所差别,这里就不得不提一下JVM的动态对象年龄判定,和空间分配担保了。但在我们编码过程中,肯定不是所有的对象都会一直生存到最后,也会有一些特殊情况,而虚拟机也考虑到各种情况,也对其做出了应对。原创 2023-02-26 10:03:59 · 559 阅读 · 2 评论 -
CMS垃圾回收器
上述四个步骤中,初始标记和重新标记两个步骤会“Stop The Word”,也就是会暂停用户线程,如下图。CMS 的并发标记和并发清理阶段, 用户线程是还在继续运行的, 程序在运行自然就还会伴随有新。CMS无法处理浮动垃圾,CMS和用户线程并发运行期间预留的内存不够新对象分配,导致并发失败。的垃圾对象不断产生, 但这一部分垃圾对象是出现在标记过程结束以后,只能下次垃圾回收处理。并行:指多条垃圾收集器线程并行工作,此时用户线程处于等待状态。并发:指用户线程和垃圾回收线程同时工作(也可以交替工作)原创 2023-02-19 09:52:41 · 487 阅读 · 0 评论 -
对象的内存布局
HotSpot VM使用oop描述对象,oop字面意思是“普通对象指针”。它是指向一片内存的指针,只是将这片内存‘视作’(强制类型转换)Java对象/数组。对象的本质就是用对象头和字段数据填充这片内存。原创 2023-02-05 13:30:54 · 194 阅读 · 0 评论 -
String的不可变性
如果一个对象在创建之后就不能再改变它的状态,那么这个对象是不可变的(Immutable)。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型变量的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。原创 2023-01-15 14:37:04 · 363 阅读 · 0 评论 -
MinorGC、MajorGC、FullGC
当我们学习到JVM堆时,我们避免不了与GC打交道,其中大家经常混淆Minor GC、Major GC、Full GC,年轻代GC、老年代GC,本篇主要介绍Minor GC、Major GC、Full GC的区别。JVM堆内存被分为年轻代(Young Generation)和老年代(Old Generation)还有永久代和元空间,jdk1.8之前称为永久代,1.8之后称为元空间。Minor GC1.年轻代年轻代是所有新对象产生的地方,当年轻代内存空间被用完时,就会触发垃圾回收,这个垃圾回收叫做Minor G原创 2022-12-04 15:28:21 · 292 阅读 · 0 评论 -
JVM栈帧
栈帧是栈中的一个栈元素,是一中用于帮助虚拟机执行方法调用与方法执行的数据结构,当前线程中,每执行一个方法就会往栈中插入一个栈帧。栈帧本身是一种数据结构,封装了方法的局部变量表、动态链接信息、方法返回地址(即返回到方法的调用者)以及操作数栈Java虚拟机栈(Java Virtual Machine Stacks)是线程私有的,换句话说,每个线程都会有一个栈,所以对于栈帧来说不存在并发调用的情况。原创 2022-11-27 10:17:26 · 373 阅读 · 0 评论 -
JVM运行时数据区域之PCRegister和虚拟机栈
如果线程正在执行的是一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;是完全由具体的虚拟机实现自行决定的事情。与程序计数器一样,Java 虚拟机栈(Java Virtual Machine Stack)也是线程私有的,长度的 long 和 double 类型的数据会占用两个变量槽,其余的数据类型只占用一个。Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据。拟机规范》的规定,Java 虚拟机所管理的内存将会包括以下几个运行时数据区域,如图。原创 2022-11-20 10:39:10 · 481 阅读 · 0 评论 -
线程安全的使用ArrayList和HashMap
如果你看过源码,那么你肯定知道ArrayList和HashMap是线程不安全的,它们二者都采用了fast-fail机制。但之前小组考核的时候,学长问了我如何线程安全的使用HashMap,那时候确实直接呆滞了,话不多说,那么如何线程安全的实现二者呢?原创 2022-11-05 21:32:25 · 428 阅读 · 0 评论 -
Java中的语法糖
语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,有更高的可读性。可能对于第一次听说语法糖的人来说,百度出来的简介并不能让你有一个比较清晰的认知,只知道是一种语法,并且是方便程序员的使用。那我换一种说法,Switch语句相信大家都有认知,类型泛型擦除也有一定的了解,那么为什么Java语言能做到呢?这就是语法糖的实现了。原创 2022-10-30 09:13:20 · 441 阅读 · 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 评论 -
ArrayList扩容机制
继Springsecurity后,框架的学习暂时告一段落,现在回过头来学习Java的一些源码有些许感悟。从学习编程语言开始,我们都是先学习了数组,之后才是集合。众所周知,数组在定义的时候,一般都需要定义数组的空间大小,而ArrayList集合却并不需要。之前也浑然不在意,直到后来听别人问我,为什么集合在引用的时候可以不去传入空间大小?我无言以对,那时候才知道了ArrayList的自动扩充这个概念。原创 2022-10-09 10:50:17 · 1373 阅读 · 1 评论 -
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 评论 -
Spring secrity 自定义密码验证(结合JWT)
众所周知,在Springsecrity中,密码验证由框架进行,但在实际项目开发中,交给secrity原生处理就显得有点局限了。而我们要做的自定义登录,就要去重写一些内容了。首先,继承UsernamePasswordAuthenticationFilter去重写下方方法,获取自定义登录接口的相关信息,再对用户名和密码处理。之后,spring会通过你设置的密码加密方式以及loadUserByUsername方法中的逻辑进行验证,再之后的验证成功与否会有不同的处理。...原创 2022-07-24 18:10:31 · 1104 阅读 · 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 评论 -
音乐网站项目感悟
关于项目依稀记得被整合框架整的百般无奈的日子,至今也过去将近三周了,项目的时间也过去三分之二了,同时我们的进度也几乎过去三分之二了吧。总体来说还是不错的。值得一提的是,这几天写的关注功能,评论功能,怎么说呢,联表联的我头皮发麻,不知所云。五六张表放一块的情况已经见怪不怪,甚至已经麻木。 <sql id="comment"> a.comment_id, a.comment_uid, a.comment...原创 2022-04-23 22:03:18 · 481 阅读 · 0 评论