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

原创 【JavaEE】多线程代码案例(2)

创建一个类,表示一个任务(Runnable 任务本体 time任务的执行时间)引入数据结构来管理多个任务(用的是优先级队列,省去遍历的开销)引入扫描线程,不停的循环获取队列队首任务,判定是否到时间,到时间就执行,并且出队列没到时间就阻塞。引入锁,针对队列出和入的操作解决忙等问题,引入wait和notify,队列为空wait(死等)队首任务没到时间wait(带有超时时间)这里不要用sleep(sleep通过interrupt唤醒是非常规手段,sleep不会释放锁,会影响后续插入任务)

2024-07-04 21:02:49 854 12

原创 【JavaEE】多线程代码案例(1)

原因:懒汉模式中的实例化对象是什么时候需要用就什么时候调用getIstance,多个线程同时去调用getIstance的时候,getIstance方法中的赋值是一个修改操作,此时就会发生多个线程对同一个变量进行修改操作就会引起线程不安全。靠我们程序猿本身来保证,这样肯定是不现实的,所以需要编译器来帮我们来做一个强制的检查,通过一些编码上的技巧,使编译器可以自动发现我们的代码是否有多个对象,并且在尝试创建多个实例的时候,直接编译出错。总结:在使用wait的时候最好搭配while不要搭配if。

2024-06-30 19:48:01 901 14

原创 【软件测试】概念篇

能将用户需求一步一步的分析并且可执行的就叫软件需求,并且软件需求也是开发人员和测试人员工作的依据。引入的目的:为了减少各个简短会遗留的风险问题,避免把问题留给测试阶段。开始——需求分析——计划——设计——编码——测试——运行维护——结束。特点:先将项目的基本大致结构上线,然后再慢慢的将这些功能完善。规范的流程是在时代的演变下逐渐成型这种就是开发模型。需求分析——计划——设计——编码——测试——运行维护。特点:螺旋模型中各个阶段都引入的风险分析+原型。特点:每一个流程只执行一次,线性的开发流程。

2024-06-26 09:37:24 862 13

原创 【软件测试】认识测试

软件测试就是验证软件产品特性是否满足用户的需求功能性能界面易用性。

2024-06-23 20:16:29 369 15

原创 JavaEE多线程(2)

现有t1线程t2线程和locker1锁locker2锁, locker2锁要对t1线程中内容加锁,但同时locker2锁对t2线程还未解锁,所以t1线程需要阻塞等待,而现在locker1锁也要对t2线程中的内容加锁,但是locker1对t1线程还未解锁,所以t2线程需要阻塞等待,这样就导致你等我,我等你的死锁现象`通过条件,判断当前逻辑是否能够执行,如果不满足条件不能执行,那么就主动进行阻塞(wait)让其他线程来调度cpu的资源,等到条件满足的时候,再让其它线程(阻塞的线程)来唤醒。

2024-06-20 16:37:40 1118 18

原创 【JavaEE】多线程(1)

线程(Thread)是一个轻量级进程,与"进程"相比在创建和销毁上的开销更小,主要原因是:一个进程被创建 系统会给进程分配资源,而一个进程可以有多个线程,这些线程不需要独自一个一个被系统分配资源,它们可以共享系统为进程分配的资源,在销毁的时候也只需要销毁进程的资源即可,这样下来减少了创建与销毁的开销,线程不仅共享进程的资源,而且每一个线程都有自己的属性.后台线程:后台线程结束了,不会影响整个线程的进度,但前台线程结束了,整个线程就结束了,那么自然后台线程也就结束了。

2024-05-31 13:01:24 1335 25

原创 【JavaEE】计算机是怎么工作的

人们的生活无时无刻不被计算机影响,现如今大部分计算机都应用冯诺依曼体系结构,这个"神"为我们计算机行业做出了巨大的贡献。

2024-05-17 11:01:20 529 30

原创 【数据结构练习题】Map与Set——1.只出过一次的数字2.复制带随机指针的链表3.宝石与石头4.坏键盘打字

新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。第一步:遍历原链表,并且同时创建以恶搞相同规格的链表,将原链表的结点和新链表的结点利用key-value模型的形式存储在Map中。第二步:接着遍历期望输出的字符串数组与Set集合比较,不相同则放入一个新的Set集合中setBorken,相同则不需要放入。给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。

2024-05-12 00:00:00 1153 45

原创 【数据结构】Map与Set(2)

设有n个d位数,每一位可能有r种不同的符号,这r种不同的符号在各位上出现的频率不一定相同,可能在某些位上分布比较均匀,每种符号出现的机会均等,在某些位上分布不均匀只有某几种符号经常出现。首先,我们需要明确一点,由于我们哈希表底层数组的容量往往是小于实际要存储的关键字的数量的,这就导致一个问题,冲突的发生是必然的,但我们能做的应该是尽量的降低冲突率。我们还是回到这个图,我们观察这个图发现Map与Set这两个接口的底层都是由两种数据结构实现的,分别是Tree与Hash,这里的Tree就是上篇文章讲的搜索树。

2024-05-09 23:17:59 857 61

原创 【数据结构】Map和Set(1)

Map与Set的底层有两种结构实现,一种是搜索树(TreeMap与TreeSet),还有一个就是哈希表(HashMaP与HashSet),接下来我们先了解搜索树这个底层结构。

2024-04-27 17:11:19 2620 87

原创 【数据结构练习题】堆——top-k问题

如果是找出最小的数的话,直接将大堆的堆顶元素弹出就是最小的数了,反之求最大的k个数以及最大的数只要将前面建大堆的步骤改为建小堆即可。找出数组中最小的k个数,比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。求最小k个数,需要建立大堆,反之求最大k个数则建立小堆,这里我们以求最小k个数为例。4.直到最后将大堆中的元素打印即可。

2024-04-21 10:31:49 1948 91

原创 【数据结构练习题】二叉树(1)——1.相同的树2.另一颗树的子树3.翻转二叉树4.平衡二叉树5.对称二叉树

给你两棵二叉树 root 和 subRoot ,检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树,如果存在返回 true 否则返回 false。同样去用子问题的思想去剖析这个问题,先判断这个 subRoot 是不是root的子树,然后再去通过递归的方式判断是不是root左右子树的子树。只要确定根结点结构上和值都是相同的,后面直接去递归根结点的左右子树即可。

2024-04-18 18:57:31 1595 64

原创 【数据结构】常见的排序算法

🧧🧧🧧🧧🧧个人主页🎈🎈🎈🎈🎈🧧🧧🧧🧧🧧数据结构专栏🎈🎈🎈🎈🎈🧧🧧🧧🧧🧧【数据结构】优先级队列——堆🎈🎈🎈🎈🎈排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称

2024-04-13 20:57:10 2295 77

原创 【数据结构练习题】队——1.用队实现栈2.用栈实现队

首先,要实现用栈去模拟一个有入队,出队,peek,判断栈是否为空这些功能的队,我们用一个栈也是不能模拟出队列的,我们用两个栈来模拟这个队列,但是这里和队列实现栈的两个队列不一样,这里的两个栈,我们分别设置一个入队的栈,一个专门出队的栈。首先,要实现用队去模拟一个有压栈,入栈,peek,判断栈是否为空这些功能的栈,用一个简单的队列是不能实现这个栈的,用一个双向队列是可以实现这个栈的,但我们今天不用双向队列来实现,我们用两个简单队列来实现这个栈。请你仅使用两个栈实现先入先出队列。

2024-04-10 21:37:58 1888 55

原创 【数据结构】优先级队列——堆

Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,本文主要介绍PriorityQueue。使用时必须导入PriorityQueue所在的包,即:PriorityQueue中放置的元素必须要能够比较大小,不能插入无法比较大小的对象,否则会抛出ClassCastException异常。

2024-04-01 22:11:12 1849 82

原创 【数据结构】非线性结构——二叉树

前面我们都是学的线性结构的数据结构,接下来我们就需要来学习非线性的数据结构,我们先来学第一个非线性的数据结构——树。每一门学科都来自生活,从生活中学习,我们要学的树就是来自生活,这种数据结构就像我们大自然中的树倒立着一样,所以我们取名为树。

2024-03-25 23:54:37 1649 82

原创 【数据结构】受限制的线性表——队列

上一章我们讲了一种特殊的线性表只能在表尾进行插入和删除操作,接下来我们讲一个和栈很相似的数据结构,它也是一种特殊且所限制的线性表,它是只能在表头删除操作在表尾进行插入操作。

2024-03-20 15:23:23 2299 83

原创 【数据结构练习题】栈——1.括号匹配 2.逆波兰表达式求值 3.出栈入栈次序匹配 4.最小栈

在学习数据结构的过程中遇到了各种各样类型的题目,我在解答这些题目的时候收获了不少,所以我想开设一个专栏来分享我平时做题的收获,在我分享的题中我采用三步法来阐述,希望大家可以在我的文章有收获,并且能够在评论区中积极讨论更多的解题方法。

2024-03-16 15:55:36 1548 87

原创 【数据结构】特殊的线性表——栈

什么叫栈?要搞清楚这个概念,首先要明白“栈”原来的意思,如此才能把握本质。栈,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。栈这个数据结构是一个特殊的线性表,他只能在栈顶进行增删操作。

2024-03-12 13:23:52 1711 83

原创 【数据结构】从链表到LinkedList类

上一篇文章我们了解ArrayList表的使用,并且模拟了ArrayList表,通过数组的方式来存储数据单元。其底层是一块连续储存的空间,这时候我们发现当我们去插入数据或者删除数据的时候,需要将前后的数据整体向前移动或者向后移动。因此ArrayList是不能满足我们的需求。接下来我们可以来看看即将要学的LinkedList表。

2024-02-28 20:03:38 1966 72

原创 【数据结构】从顺序表到ArrayList类

【说明】ArrayList是以泛型方式实现的,使用时必须要先实例化ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList。

2024-01-23 16:22:00 2133 85

原创 【Java SE】带你识别什么叫做异常!!!

Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构.if(!throw new userNameException("用户名错误");if(!throw new passWorldException("密码错误");try {System.out.println("用户名输入异常!");System.out.println("密码输入异常!");finally {

2023-12-12 09:40:03 6041 110

原创 【Java SE】带你在String类世界中遨游!!!

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的,这里介绍 StringBuilder常用的一些方法:从上述方法可以看出:String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改。频繁修改字符串的情况考虑使用StringBuilder。这些方法我就不一一解释了,和上述String类方法差不多。

2023-11-29 21:55:00 2862 97

原创 【Java SE】 带你走近Java的抽象类与接口

上一篇文章我们讲了Java中的两大特性:继承和多态,在多态中父类的方法被子类重写,在程序执行的时候,因为动态绑定的原因不会去访问父类的被重写的方法,那么父类的方法里面的内容是不是可以直接不写 ,这样使得代码简洁。不写要不要加什么关键字呢?接下来让我们来学习抽象类吧!

2023-11-25 21:44:59 1319 73

原创 【Java SE】如何解读Java的继承和多态的特性?

什么是继承和多态,为什么被称为Java三大特性,这两大特性为我们程序员带来了什么影响呢?是让复杂的代码简化了,还是为程序员写代码提供了多样性呢?那让我们一起来揭开这层神秘的面纱吧!

2023-11-20 10:13:12 1269 96

原创 【Java SE】 详解java访问限定符

我定义一个Student类,在Main类中实例化Student类的对象,然后去访问Student类中的成员变量name,显示编译错误,通过这个现象推出一个想法说明由private修饰的成员变量,在另一个类中无法被直接访问。结论:由private修饰的成员变量只能在自己类中被直接访问,在其他类中是不可以被直接访问的,如果要访问成员变量只能通过间接的方法去访问。1.private:只能在自己类种被访问,出了自己类就无法被直接访问,但可以间接被访问。带你走进Java中的继承。

2023-11-20 10:12:08 520 46

原创 Java SE 封装、包、static关键字和代码块

在文件的最上方加上一个 package 语句指定该代码在哪个包中.包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bao.www )包名要和代码路径相匹配. 例如创建 com.bao.www 的包, 那么会存在一个对应的路径 com.bao.www 来存储代码.如果一个类没有 package 语句, 则该类被放到一个默认包中.

2023-11-13 23:56:21 678 73

原创 JavaSE 类与对象

我们之前学的都是面向过程,面向过程研究的是对单个对象的一种方法实现过程,比如求一个数的阶乘,强调的是怎么实现这个方法的过程,但对我们以后来说,如果想要应用到更广的层面,不能只是学习一个方法的过程,而是通过用对象的方法与其他对象建立联系来实现一个项目,那么怎么让对象与对象建立联系呢?我们就需要学习面向对象的相关知识。2.1 简单认识类``就我而言,类是指描述一个物品的大致摸样,是一个比较抽象的东西,类是不实的,也可以说是一个抽象的概念。

2023-11-11 15:04:42 1014 61

原创 数组的定义与使用

数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。数组在内存存放数据像上面的图一样,存储数据在内存中时连续的。

2023-11-07 19:57:26 350 51

原创 C语言之程序环境和预处理

程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。当宏参数在宏的定义中出现超过一次的时候,如果参数带有副作用,那么你在使用这个宏的时候就可能。例如:当我们根据同一个源文件要编译出不同的一个程序的不同版本的时候,这个特性有点用处。定某个程序中声明了一个某个长度的数组,如果机器内存有限,我们需要一个很小的数组,但是另外一。比如:宏的参数可以出现类型,但是函数做不到。

2023-10-20 17:13:55 213 34

原创 c语言之文件的操作

磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。1.1程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。1.2数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

2023-10-15 10:16:57 221 36

原创 动态内存管理

3.1开辟动态空间的函数malloc函数和calloc函数,free函数用来释放动态开辟的内存。C语言提供了一个动态内存开辟的函数:malloc函数size_t size是需要开辟多大字节的空间如果开辟成功则返回的是一个指向开辟好空间的指针开辟失败返回空指针NULL返回类型是void*泛指针注:malloc函数开辟完的空间里内容是未初始化的。int main()//初始化这个ptr整型指针//判断是否空间开辟成功//开辟成功,遍历这个数组else。

2023-10-10 21:35:17 228 31

原创 自定义类型:结构体,枚举,联合

1.1结构的基础知识结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。比较一下:数组:数组是一组相同类型元素的集合。相同点:都是集合不同点:结构是值的集合并且这些值称为成员变量,而这成员变量又都是不同类型的变量数组是一组相同类型元素的集合1.22 结构的声明下面我们来描述一个学生1.3特殊的声明(匿名式声明)在声明结构的时候,可以不完全的声明,将结构体的名字给省略了上面的两个结构在声明的时候省略掉了结构体标签(tag)。

2023-09-24 15:45:44 163 21

原创 字符函数和字符串函数

2.1strlen字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。参数指向的字符串必须要以 ‘\0’ 结束。注意函数的返回值为size_t,是无符号的( 易错 )学会strlen函数的模拟实现strlen函数的模拟实现1.通过计数器来模拟实现strlen函数//计数器//计\0之前的数while (*p!count++;

2023-09-22 21:33:06 189 23

原创 函数(1)

如果库函数能干所有的事情,那还要程序员干什么?所有更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。

2023-08-23 21:58:17 141 14

原创 ”猜数字“

设计这个猜数字游戏,我们先要电脑去生成一个随机数,然后再用我们输入的数与随机数相比较如果我们输入的数小于随机数,则输出猜小了,如果我们输入的数大于随机数,则输出猜大了,如果我们输入的数等于随机数,那么输出恭喜你,猜对了。第一步:生成一个随机数第二步:判断输入的数与随机数的大小。

2023-08-22 20:03:05 138 16

原创 C语言 分支与循环语句

表达式语句函数调用语句控制语句复合语句空语句(空语句就是我需要这个语句,但不要这个语句做任何事)后面介绍的是控制语句。控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。可分成以下三类:条件判断语句也叫分支语句:if语句、switch语句;循环执行语句:do while语句、while语句、for语句;转向语句:break语句、goto语句、continue语句、return语句。

2023-08-11 19:02:51 173 16

原创 扫雷初阶版

/为什么int rows和int cols用小写;//对数组初始化//打印数组//布雷//排雷。

2023-07-26 18:04:21 141 13

空空如也

空空如也

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

TA关注的人

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