自定义博客皮肤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)
  • 收藏
  • 关注

原创 JVM中的各类引用

当其除去软,虚之外的来自GC root引用都被销毁,就会被回收:最显而易见的就是引用所在的栈帧被销毁:栈帧里面的局部变量表存储着所有基本类型对象和引用类型在堆中的引用,当栈帧被销毁后,这个“引用”也会被直接销毁,这个强引用也就被断开了。这时候,还是堆中的这个对象只有这个强引用的话,他就会因为没有来自GC root的引用而被GC回收掉,但如果它拥有其他的来自GC root的强引用的话就不会被回收,但如果只拥有软引用的话那就得看空间紧不紧张了。

2025-06-05 14:46:14 1010

原创 JDK1.8中的基本类型静态变量的存储位置

之前写JVM内存结构时,在一个问题上卡了很久众所周知,JDK1.7时,方法区只存储基本类型的静态变量,引用类型的已经转移到堆中了那么,JDK1.8时,方法区还存储着基本类型的静态变量吗?毕竟方法区都已经成了永久代了对于这个问题,可谓是众说纷纭,什么都有但是在《深入理解Java虚拟机:JVM高级特性与最佳实践》中,明确提到了,JDK1.7就已经将静态变量移入堆中但实际来说,这个说法并不准确…我们看:https://openjdk.org/jeps/122。

2025-05-09 14:22:30 399

原创 JVM运行时数据区域(Run-Time Data Areas)的解析

首先,JMM(Java 内存模型)和JVM运行时数据区域是两个东西(JVM内存模型),前者是一种规范,类似于接口,譬如 可见性(visibility) 、有序性(ordering )和 原子性(atomicity)后者则是实打实的对JVM内存的严格划分区域尽管作为一个八股中经久不衰的考查点,但很少有文章对其进行深度的剖析虽然我的理解可能也不是很深,但我会尽己所能写出我觉得不该遗漏的地方纸上得来终觉浅,绝知此事要躬行一定要自己看一些底层的书自己扣扣字眼。

2025-05-08 22:25:08 1353

原创 Semaphore的详细源码剖析

SemaphoreJUC中同步器最应该是最简单的一个了,它提供了“资源”的概念,用来控制共享锁的无限共享,抑制写锁的饥饿情况其中大量的方法在ReentrantReadWriteLock中重复,本身也采用了AQS提供的同步队列,大量减少了代码的重复度没有StampLock一般的复杂至极的队列代码的都是好同步器强烈建议先阅读完《ReentrantLock的详细源码剖析》,《ReentrantReadWriteLock的源码详细剖析》再行阅读!因为这里面的代码大多数是AQS的方法的使用!

2025-05-04 20:58:06 814

原创 StampLock的源码详细剖析

StampLock是ReentrantReadWriteLock的一个变种,也可以说是一种升级对于ReentrantReadWriteLock来说,虽然说读锁是共享锁,但还得竞争CAS读计数,而StampLock对于读完全不加锁,仅采用邮戳(stamp)读完之后看自己读的版本对不对,这种“乐观读”的方式极大的提升了读 >> 写的效率那么,代价是什么呢?

2025-05-04 16:24:09 1070

原创 ReentrantReadWriteLock的源码详细剖析

ReentrantReadWriteLock,即读写锁,是JUC中一个极其重要的类,实现了读写的分离,极大的提高了并发量,源码延续了以往一贯的鬼斧神工,让人受益匪浅建议先读《ReentrantLock的详细源码剖析》 以及 《AQS条件队列源码详细剖析》后再行阅读!注:本文适合想要深究读写锁的实现和原理,ReentrantLock的机制的人参考,文章较长读写锁到这里就结束了,总的来说,单单根据一个读写锁并不能展现共享锁的全部。共享锁最重要的资源与限制在读写锁中都没有出现。

2025-04-30 19:37:32 990

原创 AQS条件队列源码详细剖析

总的来说,条件队列相对简单,围绕着:包装成condition->转移到同步队列就能很容易理解当然,这一切都建立在你熟悉同步队列的实现和原理的前提之下后面会介绍分享模式,读写锁之类的,欢迎捧场!

2025-04-26 22:11:50 957

原创 ReentrantLock的超详细源码解析

ReentrantLock是基于AQS框架的一个子类,实现了可重入锁,其中有公平与非公平两种类型,是一个非常重要的工具,也是学习鬼斧神工一般的AQS的很好的出发点注:本文适合想要深究AQS的队列的实现和原理,ReentrantLock的机制的人参考,文章较长其实还是比较好理解的,只要理解了基本框架,接下来的超时锁,可打断锁,条件队列这些就不足为惧了本质上就是把普通的可重入锁加了个超时结束,遇到打断直接抛出异常。

2025-04-24 12:28:43 1107

原创 大一上结束随笔

开学前一段时间,虽然我第一时间翘掉了能翘的课,投入了图书馆,但还是有许些迷茫,不知该怎么发展。而且每个人的要求,认知,见识,乃至家庭背景都不一样,并不是每个人都能有我这种想法和决心。换了寝室,远离了原寝室里面的喧嚣和嘈杂,来了一个友好且安静的寝室,精神状态都好了不少。原因有很多,一是性价比太低,二是不想再当做题蛆了,寒窗苦读读够了,想干一些实事了。

2025-04-20 22:25:42 735 2

原创 关于JVM和OS中的指令重排以及JIT优化

​ OS中的指令重排极大的提升了CPU性能,但也带来了并发风险​ JVM中的JIT会在字节码转机器码时对代码进行优化修改以及重排,极大的提升了Java的速度,使其与编译执行语言速度相媲美​ JIT太猛了…写的一个一百多行的测试屎山给优化到只有十几行…

2025-04-04 21:14:31 1006

原创 为什么64位的JVM的对象头中的HashCode长度是31

最近在学juc,看到对象头的解析,突然发现64位下无锁态的HashCode长度为31bits,32位是25bit,当时就在想,为什么是31?String的默认hashCode也是31,两者之间有什么联系吗?可惜的是没能在中文平台发现答案,外文平台经过一番查找终于找到了答案…

2025-04-01 14:40:17 756

原创 关于JVM和OS中的栈帧的区别和内存浅析

刚看了黑马JVM中的栈帧的讲解,感觉和自己理解的栈帧有一定出入,查询资料研究了一下发现的确有天壤之别,可惜黑马并没有讲。故写下这篇文章巩固一下,

2025-03-30 11:52:40 896

原创 关于脏读,不可重复读和幻读

​ 脏读,不可重复读和幻读都是对于来说的,可以看成。按照对事务的定义,必须满足。

2025-03-24 21:51:15 851

原创 黑马商城完成随笔

很多技术栈的使用仅仅只是展示一下能这样用,而且前端代码也没有适配,想自己改也有困难(@​ 翻译为“哨兵”,用来监控流量,实行熔断,限流,隔离,防止出现雪崩,全局崩溃。但总的来说,仍然是微服务入门的不二之选,强烈建议自己仿照着去写一个项目。​ 严格来说不算技术栈,单纯的一个方便工具而已,但是它确实好用。黑马商城体量应该是全部黑马项目中体量最多,技术栈最复杂的了。但无论如何,都是一个优秀的课程,结合着做一个项目会很好!​ 作为注册中心使用,可以实现热更新,共享配置等等。​ 用来实现分布式事务。

2025-03-17 21:42:23 249

原创 TWind 的黑马点评随笔

完结撒花 🎉 🎉 🎉接下来就是写几篇博客巩固一下…

2025-03-06 21:19:27 425

原创 [黑马点评]关于原子性,锁的笔记

不得不说,黑马点评是一个非常不错的课程,对于线程安全方面的讲解十分详细且明朗,故写下这篇笔记方便复习及帮助后人() 我们的目标是对于大量对于优惠劵的访问时,要防止超卖问题以及一人多单问题。 非集群的话解决方式很简单: 问题出在我们每次操作完查询优惠劵数量时,准备将优惠劵数量减一时,这个间隔出现了大量的其他线程进行同样操作,把优惠劵减到了0以下:解决方式也很简单: 在减操作时同时检测当时的数量是否大于0即可:如果大于0,说明当前的确有剩下,反正说明

2025-03-05 11:47:06 930 1

原创 个人苍穹外卖随笔

总而言之,虽然都说黑马项目狗都不如,但是对于入门者来说苍穹外卖还是非常不错的,能对于项目结构,开发周期,进程有一个初步的认识。​ 后面会做一下黑马点评什么的。​ 代码附上,百度地图ak还能用,虽然不知道什么bug导致定位不准就是了。

2025-02-28 09:50:01 303

原创 关于Java 反射的简单易懂的介绍

首先得介绍一下Class类Class类是反射的核心部分Class类和真实的类对象不是一个东西!Class类只是包含了对应类关于其涉及反射的一系列操作的类。每个类都会有属于自己的Class对象:列如 String.class Integer.class等会得到这是类的全限定类名,可以看成是类的标识。归功于反射机制,程序得以对本身进行修改而不依赖于人工修改,也提供了更多的灵活性,更是为实现动态代理提供了可能。(我也写了一篇介绍代理的文章,欢迎捧场!

2025-02-22 21:15:52 764

原创 Java中的静态代理,动态代理(代理接口,代理类)

代理相当于是帮皇帝处理事务的大臣,在奏折给皇帝前先要给大臣过一遍,涂涂改改再呈上去。但显然把程序比作“皇帝”不太合适,因为程序的效率可不是人能比的,那为什么程序也需要“大臣”呢?1.当你往你的屎山的核心部分肆意的加东西,你不知道这会不会导致这坨东西塌了。2.调用方法前可以通过代理进行安全检测/功能增强等,直接写在实现类显得臃肿且繁琐。3.代理只有在实际调用时才会创建实现类,可以在一定程度上节省内存代理分为静态代理与动态代理。

2025-02-22 15:51:04 328

原创 Java关于接口的意义与运用

接口(),是一个只包含方法声明的类,实现接口的类就得实现这个接口声明的类。接口意为一个东西的,java中的接口也起到了这种作用,它通常用来作为一个或多个对象的“”,只有通过这个“”才能使用这个对象。

2025-02-20 21:59:17 262

原创 关于POJO类中的DTO,VO,Entity的区别

首先,DTO,VO,Entity都属于POJO(在以前的Java中,对象通常比较复杂,依赖于大量的框架配置和约束,导致它们变得不容易理解、难以扩展和维护。因此,POJO 被提出作为一个相对简单、没有框架约束的对象模型。为什么叫旧版(old)?参照普通老式电话服务 (POTS) ,意为它是一个简单的一种对象,它不需要继承特定的类,也不需要实现特定的接口。它没有复杂的生命周期管理,DTO全称,即。

2025-02-20 21:10:51 245

原创 教你从0开始搭建人生的一个Tomcat服务器并部署项目

RE:重启码农的部署人生:从0开始搭建人生的一个Tomcat服务器并部署项目

2025-01-20 12:49:12 708

原创 哈工大操作系统lab:实验2 操作系统的引导

花了好久终于弄完了第一个操作系统的实验(不知道延时了几次)激动的我赶紧来写点东西来进食后人()

2024-11-19 21:32:39 395

原创 洛谷P3956 [NOIP2017 普及组] 棋盘

但这个魔法不能连续使用, 而且这个魔法的持续时间很短,也就是说,如果你使用了这个魔法,走到了这个暂时有颜色的格子上,你就不能继续使用魔法;只有当你离开这个位置,走到一个本来就有颜色的格子上的时候,你才能继续使用这个魔法,而当你离开了这个位置(施展魔法使得变为有颜色的格子)时,这个格子恢复为无色。任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上、下、左、右四个方向前进。第一行包含两个正整数 m,n,以一个空格分开,分别代表棋盘的大小,棋盘上有颜色的格子的数量。

2024-11-08 22:05:25 434

原创 洛谷P1443 马的遍历

有一个 n×mn×m 的棋盘,在某个点 (x,y)(x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。一个 n×mn×m 的矩阵,代表马到达某个点最少要走几步(不能到达则输出 −1−1)。输入只有一行四个整数,分别为 n,m,x,yn,m,x,y。

2024-11-08 18:23:21 167

原创 洛谷P1162 填涂颜色

由数字 0 组成的方阵中,有一任意形状的由数字 1 构成的闭合圈。如果从某个 0 出发,只向上下左右 4 个方向移动且仅经过其他 0 的情况下,无法到达方阵的边界,就认为这个 0。每组测试数据第一行一个整数 n(1≤n≤30)n(1≤n≤30)。接下来 n 行,由 0 和 1 组成的 n×n 的方阵。闭合圈不一定是环形的,可以是任意形状,但保证。的 0 是连通的(两两之间可以相互到达)。方阵内只有一个闭合圈,圈内至少有一个 0。把边界的点全部bfs一遍,给0上色。遍历一遍,没被上色的0就是封闭的。

2024-11-08 17:01:31 321

原创 洛谷P1378 油滴扩展

在一个长方形框子里,最多有 NN 个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界。必须等一个油滴扩展完毕才能放置下一个油滴。那么应该按照怎样的顺序在这 NN 个点上放置油滴,才能使放置完毕后所有油滴占据的总面积最大呢?(不同的油滴不会相互融合)注:圆的面积公式 S=πr2S=πr2,其中 rr 为圆的半径。

2024-11-08 16:58:36 172

原创 洛谷P5194 [USACO05DEC] Scales S

并且,这一行中从第 33 个砝码开始,每个砝码的质量至少等于前面两个砝码(也就是质量比它小的砝码中质量最大的两个)的质量的和。每次称牛时,他都把某头奶牛安置在天平的某一边,然后往天平另一边加砝码,直到天平平衡,于是此时砝码的总质量就是牛的质量(约翰不能把砝码放到奶牛的那边,因为奶牛不喜欢称体重,每当约翰把砝码放到她的蹄子底下,她就会尝试把砝码踢到约翰脸上)。现在约翰告诉你每个砝码的质量,以及天平能承受的最大质量,你的任务是选出一些砝码,使它们的质量和在不压坏天平的前提下是所有组合中最大的。

2024-11-08 16:56:23 234

原创 洛谷P1019 [NOIP2000 提高组] 单词接龙

单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如。输入的第一行为一个单独的整数 nn 表示单词数,以下 nn 行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。注意:本题为上古 NOIP 原题,不保证存在靠谱的做法能通过该数据范围下的所有数据。只需输出以此字母开头的最长的“龙”的长度。NOIP2000 提高组 T3。

2024-11-08 16:50:47 180

原创 洛谷P1219 [USACO1.5] 八皇后 Checker Challenge

一个如下的 6×66×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。上面的布局可以用序列 2 4 6 1 3 52 4 6 1 3 5 来描述,第 ii 个数字表示在第 ii 行的相应位置有一个棋子,如下:行号 1 2 3 4 5 61 2 3 4 5 6列号 2 4 6 1 3 52 4 6 1 3 5这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。并把它们以上面的序列方法输出,解按字典顺序排列。

2024-11-08 16:48:37 274

原创 Java实现贪吃蛇

用了两天写完,主要难点是各种组件的搭配,重组,格外需要注意各种逻辑问题,总结下来还挺复杂,但是是一个很好的练手的东西。蛇头食物蛇身体都是20*20的小圆,拿画图画一个就行。py是python的图标()我写的嘛,,,,只能说。

2024-11-06 16:14:58 583

原创 Codeforces Round 981 (Div. 3) F. Kosuke‘s Sloth

就是求第n个能被k整除的斐波那契数的下标。就是斐波那契数列对n取模是存在周期的。那只需要先求出周期再缝缝补补即可。只要知道有一个东西:皮萨诺周期。

2024-11-03 15:17:04 256

原创 Codeforces Round 981 (Div. 3) E. Sakurako, Kosuke, and the Permutation

便可让其成为两两一对的双向图(满足第二条),如果n为奇数,会独立出一个节点,这个节点在其他节点交换完成后一定满足第一条:因为一个图里的值如果是[a,b]那么它里面的元素也是在排列的[a,b]个中,将每一个节点和他的pi相连,会得到诺干的单向图,然后每一块图只需修改。待其他交换完,剩下的那个只能留着pi = i的这个坑里面。

2024-11-02 21:33:23 169

原创 Codeforces Round 981 (Div. 3) D. Kousuke‘s Assignment

有点像消消乐,找到一个就可以把前面的全部清空了,因为根本用不到。就是让你找出一个数,这个数加上它左边的任意个。数 = 0,求这个数的数量。

2024-11-01 21:55:55 236

原创 Codeforces Round 981 (Div. 3) C. Sakurako‘s Field Trip

u1s1,tag里还有dp,双指针什么的,个人感觉完全不用。从左遍历到二分之一处,每次判断换和不换谁更优就可以。两个数,让最后数组里连续的数最小。给你一个数组,你可以交换。

2024-11-01 16:05:22 283

原创 Codeforces Round 981 (Div. 3) B. Sakurako and Water

意思是有一个矩阵,你每次可以选取一个任意大小的矩阵,对他从左上到右下的对角线+1,求让图中不存在负数的最小次数。想挑战自己的话可以尝试一下也可以用另一条对角线的最小次数。取每条红线的最小负值相加即可。事实上,可以把图分成。

2024-11-01 12:53:38 171

原创 二叉树的各种遍历方法(递归,迭代)

可以看出,递归法非常的简单粗暴且明了,前中后序只需要更改几行代码便可实现,这是因为我们可以让左子树,中节点,右子树来按照我们想要的顺序来处理,且互不干扰。

2024-08-30 19:46:01 2011

原创 KMP与前后缀绝对通俗易懂的讲解

KMP与前后缀绝对通俗易懂的讲解

2024-08-28 20:45:23 2549 4

空空如也

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

TA关注的人

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