自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java创建线程的不同方式以及优缺点

在选择创建线程的方式时,需要根据具体的需求来决定。如果只是简单的任务,继承Thread类或实现Runnable接口都是不错的选择。如果需要获取返回值,可以考虑使用Callable和Future接口。如果需要频繁地创建和销毁线程,使用线程池可以提高性能。而Executor框架则提供了更高级的线程管理功能。

2023-07-24 15:48:06 190

原创 为什么新生代采用标记复制算法?老年用标记复制呢?

不同收集器可能采用的算法不一样,我们这里是对serial 以及ParNew 垃圾收集器进行说明。

2023-07-22 10:12:56 202

原创 Java中为什么需要克隆方法

但是如果这个对象类型中还定义了其他对象,如果我们没有对其进行处理的话,新克隆出来对象其中的对象引用和原来对象指的是同一个,这就和我们的初衷不符合了。没有clone,其实我们也是可以自己new 对象来实现,不过如果这个对象中有很多属性,并且很多都已经赋值,我们此时想要一个和这个对象一模一样的对象该怎么搞?请注意,所有数组都被视为实现接口 Cloneable,并且数组类型 T[] 的克隆方法的返回类型为 T[],其中 T 是任何引用或基元类型。我们明明修改的是原对象的CPU,拷贝对象的CPU也变了。

2023-06-28 21:28:22 129 1

原创 ATM 泳道图

2023-06-28 13:25:58 200 1

原创 一文理解Java中的所有锁

轻量级锁什么时候会解锁失败呢?之后占用锁的线程将栈帧中的 Mark Word进行CAS替换回对象头的时候,发现有其它线程竞争该锁(已经由竞争锁的线程更改了锁状态),然后它释放锁并且唤醒在等待的线程,后续的线程操作就全部都是重量级锁了。如果成功,当前线程获得锁,如果失败,表示其他线程竞争锁,当前线程便尝试使用自旋来获取锁。一旦锁升级成重量级锁(就不会再恢复到轻量级锁状态),当锁处于这个状态下,其他线程试图获取锁时,都会被阻塞住,当持有锁的线程释放锁之后会唤醒这些线程,被唤醒的线程就会进行新一轮的夺锁之争。

2023-06-28 12:35:00 136 1

原创 反转链表(Java 迭代 易于理解!)

初始状态,cur 负责处理每个节点的指向,pre是cur 要指向的前面那个节点,tmp 我们赋值为cur.next。根据节点的特性,当我们把 cur.next 指向pre 的时候,我们就找不到 cur 下一个该往哪里走了。其实这种题思路很明显了,无非就是换一下1,2两个链表节点的指向。我们现在想要对上面这个链表进行反转,为什么我们需要tmp 这个变量呢?废话不多说,直接进入正题。

2023-06-28 12:12:55 97 1

原创 二叉树的前序、中序、后序遍历(迭代法)

好了,我们现在学会了使用递归来实现树的遍历,代码非常简单,也比较好理解,今天让我们来点挑战,其实也不难,来学习一下如何不使用递归来完成树的遍历呢。前置知识比如 前序,中序,后序遍历的顺序我在递归法那里写了,就不重新赘述了,有需要的可以自己看下qaq。

2023-06-27 20:12:25 115

原创 树的前序,中序,后序遍历(递归)

比如我们这边有颗二叉树,我们如何对其进行前,中,后序遍历呢?我们要明确,所说的前,中,后的顺序是指 根节点的遍历顺序前序遍历就是先遍历根节点,再遍历左右节点,若左右子树不是叶子节点的话,就继续向下遍历所以本题先遍历根 0 ,然后是左子树1,发现1有子树,遍历4,5,然后回来遍历2,6,7.

2023-06-26 13:46:44 52 1

原创 堆排序(超简单 java PriorityQueue 实现)

【【从堆的定义到优先队列、堆排序】 10分钟看懂必考的数据结构——堆】https://www.bilibili.com/video/BV1AF411G7cA?这个视频讲的非常清楚,我理解了,但是让我画建堆,上滤和下滤的有点难搞。因为java 帮我们实现了最小堆,所以直接用,之前做数据结构实验自己也实现过最小堆,用来动态调度线程的执行,不过代码挺复杂的。一般也不会让自己手写堆啥的吧。这个priorityque 插入和弹出元素的时候就会进行自动调整,保证最小堆的性质。

2023-06-26 12:31:59 141 1

原创 冒泡排序(java版本,一步步分析)

冒泡排序应该是大多数人学习的第一种排序算法,算法思想简单,也比较直观。总体思想就是两个两个的比较,大的就交换到后面,当一次循环跑完,最大的元素就放在数组最后边,然后下一轮循环就前面的元素。接下来我详细分析下每一步的比较首先是比较1,7 发现1小于7,不交换,继续往后。比较7,5,发现7大于5 交换交换后继续向后,7大于4 也要交换继续向后,7大于3 ,还是要交换第一轮循环结束,我们找到了最大的元素7开始第二轮循环。1小于5,不交换。继续向后走发现5大于4 交换。

2023-06-26 09:56:22 39 1

原创 快速排序详解(java 详细讲解流程以及i,j的顺序问题)

先给总体代码,可以先看着理解,然后我会结合流程将代码进行分析。return;} //哨兵,也就是我们需要比较的值 int sentry = arr [ low ];// 这里一定要从j--开始,因为我们选取的哨兵是在最左边 while(i < j && arr [ j ] >= sentry) {j --;i ++;总体思想:就是选择数组中一个值,比如数组我们一般选择的都是数组最左边的值,当然也可以选择其他值,比如最右边,不过这就会影响到我们是先从。

2023-06-25 11:50:41 123

原创 贵州大学-编译原理实验2-句法分析器

不像词法分析器,用了lex 之后几乎都不怎么需要写代码,尽管我们使用了自动生成语法的工具,仍然需要写一定代码。所以现在很多语言其实都是自己写代码来实现语法分析,我也尝试过,写LL(1) ,恶心死我了,还是用工具吧。其中的yylex 函数就是词法分析器产生的,下面有个 pro.l 文件,编译的时候会联合编译。考虑下面的C语言子集的文法,其中括起来的为非终结符,粗体为终结符。这是编译器编译的基本步骤,本次实验的目标是要构建出一个语法分析树,要求:对给定的C语言程序进行句法分析,输出得到的分析树。

2023-05-31 17:43:03 889 2

原创 贵州大学-编译原理实验1-词法分析器

【Lex制作词法分析器——实验】 https://www.bilibili.com/video/BV1K84y1Y7G9/?输出,其中的 ^M 是因为我这个代码是在windows 下上传到 linux 中的,而两个平台的空格表示不一样,可以自己学一下 lex 简单入门,花个10分钟应该差不多了,了解一下基本的结构。对给定的源程序进行词法分析,每个单词一行,以二元组的形式输出结果。词法分析一般使用 lex 实现,手写代码会比较复杂;例如,下面的源程序代码。参考这个视频,挺简单的。

2023-05-31 16:55:15 377 1

原创 Spring MVC json 乱码问题(统一解决)

spring mvc json 乱码

2022-08-05 11:22:42 175

计算机体系结构答辩ppt

主要介绍的是RAID相关的东西。 从RAID 0到 RAID 6 简要介绍他们的原理及其区别

2023-06-27

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

TA关注的人

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