自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 测试(一)

软件测试相关知识

2025-04-09 18:09:57 266

原创 网络编程(一)网络协议模型以及序列化过程

当两台主机要进行通信,源主机要从目的主机那获取MAC地址,此时源主机就要向目的主机发送一个ARP请求包(包中有目的主机的IP地址),目的主机接受到请求包后进行校验,确认请求包中的IP地址与自己一致之后,向源主机发送一个ARP响应包(记录了目的主机的MAC地址),之后源主机接收ARP响应包获得MAC地址,完成两台主机的通信。硬件层面上的约定,例如网线,网口...以太网数据帧是二进制数据,硬件设备接受的是光电信号,所以就需要物理层辅助转换数据包的内容(物理层负责把数据链路层的数据包转换成光电信号,再进行传输)

2025-03-27 21:32:22 598

原创 Linux常用命令

通俗一点讲,商家给你发货的地址(根目录)是商单的起点,用户填的地址是目的地 (对应的目录地址),这称之为绝对路径。而发快递后,物流公司送货路上,从某个站送到用户填的地址,这个路径称之为绝对路径。Linux的目录是一个树状结构,这个树状结构的根节点称之为根目录,符号为 ///此时我们用这条指令创建了一个多级目录,其中test1作为test的子目录。将目录像文件一样显示,不是显示该目录下的文件。//返回最近访问目录。2.第二个参数类型是目录时,将文件转移到新目录里。列出目录下所有文件,包括以.开头的隐文件。

2025-03-27 21:25:23 402

原创 多线程案例

我们不在方法上加锁,而是在内部创建实例的这个地方加锁,当实例已经存在,线程到不了获取锁的这部分代码,也就减小了极大的锁竞争。实现阻塞队列的关键在于——当队列满的时候再尝试put就产生阻塞,当队列为空的时候尝试take产生阻塞,而在有与元素出队之后唤醒put,在有元素入队之后唤醒take产生的阻塞~阻塞队列在这个模式当中相当于一个缓冲区,当没有线程要消费元素时,生产的元素就会放在缓冲区,当缓冲区满了之后不再生产,当有线程消费元素时从缓冲区取出元素,缓冲区为空时无法消费~饿汉模式是单例模式的一种。

2024-12-22 22:55:19 406

原创 死锁的产生

当我们在对自己的代码块进行加锁时,对于锁的模拟实现,我们可以自行控制锁的特性(自行实现,例如规定锁可以给多个线程持有,锁不具备互斥性等..)综上所述,只要破坏四个必备的条件之一,就能避免产生死锁,而在平时使用锁的时候尽量避免写嵌套锁,这样才能避免产生死锁~JVM在对对象加锁之前,会先验证当前对象是否已经被加锁,如果别加锁就不会进行二次加锁,这样就有效避免产生死锁~这个例子,哲学家相当于线程,然后筷子相当于锁,由于哲学家互相抢对方的筷子,所以没人能够吃面。

2024-12-07 22:46:17 238

原创 线程(二)——线程安全

所谓“原子性”,就是不可拆分的最小单位,也就是说,当对一个变量的修改是执行一个最小量级的命令——CPU指令,则称这个操作是具有原子性的。拿上述count++举例,count++这个语句在CPU内核中是分为三步实现:在内存中将count拿出来,在CPU寄存器上进行count+1,将计算结果放回内存。这一句简单的语句需要三个指令来实现,那么对count这个变量的修改就不具备原子性~可见性:多个线程在修改同一个变量的时候,能够让其他的线程同时看见这个变量。

2024-12-07 21:29:52 1176

原创 线程(一)——初识线程

interrupt()的默认值是true,这个true的意义就是中断线程。

2024-11-19 15:40:13 1077

原创 数据结构——优先级队列(堆)

1.优先队列的构造在PriorityQueue接口中就能观察到实例化一个优先级队列最常用到的三个构造方法先看看接口中都有哪些变量然后就是相关的构造方法关于比较器,我们可以回顾一下java中对象的三种比较方式:①覆写基类的equals。因为用户实现自定义类型都继承自Object类,而Object类中提供了equals方法,我们想要按照对象中的内容来调整,那就得重写基类的equals方法。基本类型的比较大小可以直接用 == ,>,

2024-10-08 06:17:33 1147

原创 数据结构——二叉树

/子树//同一根结点的兄弟结点//树的值。

2024-09-21 16:50:16 783

原创 数据结构—线性表和顺序表

List只是一个接口,而Arraylist是一个实现List接口的类,在用之前要先导包(导包其实idea会在我们用到List接口的时候自动帮我们导包,我们可以直接用)由于List只是一个接口,所以只能通过实例化去调用,在包里有很多的已经封装好的API可以给我们使用,通过实例化后就可以进行访问。2.初步预估扩容大小为原有的1.5倍,在进行扩容前先预计需要扩容的空间大小,按需求进行扩容避免空间过大而扩容失败。扩容机制中默认将原有的空间大小扩大为原来的1.5倍,如果需要的扩容空间超过1.5倍则按需求扩容。

2024-09-13 22:22:04 609

原创 数据结构—栈和队列

选择一个空队列负责实现元素压栈,当要出栈的时候就把队列的除了队尾元素的其他元素都放到另一个队列中,将队尾元素出队列就是实现出栈。后面如果有压栈操作,依旧是将元素压入不为空的队列,即——两个队列总有一个是空的,用来放除了栈顶元素的其他元素。一个栈同样不能实现队列,模拟实现队列需要两个队列,一个栈负责入队列,一个队列负责出队列和获取队头元素。出队列:将栈s1中所有的元素弹出栈,并压栈到栈s2,栈s2的栈顶元素就是模拟队列的队头元素。一个队列不能实现栈,因为队列的特性是头出尾进,要两个队列才能够实现栈。

2024-09-12 13:22:06 817 1

原创 数据结构—链表的应用(详细过程)

如果大于2,那就得考虑三个引用的初始位置:跑的最慢的引用slow从起点开始,然后记录index位置的引用cur从头结点的下一个节点开始,跑的最快的引用fast在cur前面一步。在明白了插入节点的思路之后,修改指定下标节点元素就是在用三个引用遍历到index位置所在的结点,然后将slow引用的后继结点改为要更改的结点node,再将node的后继结点改为fast即可。(当然,要记得进行下标合法性判断)在插入一个元素作为头结点的同时,链表的尾节点和头结点在同一起跑线上,后续有元素插入都是插入到尾节点后面,所以。

2024-05-28 00:28:59 1195

原创 数据结构—时间复杂度和空间复杂度

如上述例2,用到了常数个额外空间,空间复杂度为O(1),例5动态开辟了N个额外空间,为O(N),例6开辟了N个栈帧空间,N个栈帧空间里用了常数个额外空间,空间复杂度为O(N)add 方法中基本操作次数是n次而且n是常数,所以用大O渐进表示法add的时间复杂度为:O(1)大O渐进表达式为O(1),仔细看程序的基本操作次数为100,常数的大O表达式为O(1)冒泡排序的时间复杂度计算为:F(N) = n²/2-n/2。递归的次数为2ⁿ ,大O渐进表达式为O(2ⁿ)斐波那契递归次数为N,大O表达式为O(N)

2024-05-13 16:12:42 495

原创 JavaSE—String类

在此前我们谈到数据类型和变量的时候了解到了String类,但是没有并没有详细地讲到String类的应用以及jvm提供许多相关API的应用,这篇博客就来了解一下String类以及相关API的应用。String类的各种修改操作都是通过调用新的对象来进行修改(new一个新的对象接受修改对象的属性,在新的对象上对这些属性进行修改,最后将新的对象作为返回类型替换旧的对象)==在比较引用类型变量的时候比较的是地址(如果地址相同说明是同一个对象,返回值会是true),比较基本类型变量的时候比较的是内置储存的值是否一样。

2024-05-09 16:39:19 1644

原创 JavaSE—抽象类和接口

认识抽象类和接口

2024-05-05 17:19:35 624 2

原创 JavaSE—多态的定义及其应用

本篇博客到此就结束啦!看完请不要吝啬您的三连哦!!

2024-04-29 18:26:25 1735 2

原创 JavaSE—了解继承

实际顺序也就是:静态代码块>实例化代码块(要创建对象)>类的构造方法下列通过实际代码直观感受一下:创建父类,重写父类的构造方法,,写一段静态代码和一段非静态化代码。

2024-04-28 23:18:36 1570 1

原创 JavaSE—封装的概念以及应用

封装,包的导入以及自定义包的创建和使用

2024-04-25 15:37:52 809 1

原创 JavaSE—类的定义和使用

JavaSE类的定义以及应用

2024-04-23 20:54:36 677

原创 JavaSE—数组的定义以及应用

JavaSE数组

2024-04-15 16:42:01 829 1

原创 JavaSE—方法的使用

方法其实就是一段代码片段,与C语言中的函数十分相似,两者的相似处集中体现在:1. 是能够模块化的组织代码当代码规模比较复杂的时候).2. 做到代码被重复使用一份代码可以在多个位置使用3. 让代码更好理解更简单4. 直接调用现有方法开发不必重复造轮子二、方法的定义方法的语法格式为:修饰符 + 返回参数类型 + 方法名(参数类型 形参名){[return参数];注意事项1.修饰符:现阶段直接使用固定搭配2.返回值类型。

2024-04-02 00:08:46 612 1

原创 编程小白初学JavaSE——数据类型与变量

又到了一个新阶段,又可以和看客佬爷们一起学习新的知识啦! 既然我们的编程对常量有所需求,那么常量的应用也意味着常量要带有特定的数据类型才能实现编程需求,下面就一起来学习一下——字面常量的分类。 在这之前,肯定会有小伙伴说:“唉,不就是常量分类嘛,学习C语言的时候就已经了解过啦”。哎,说对了,但也没完全说对。 因为在C语言中,字符常量是包含了字符串常量在内,也就是概念上来说字符类型是个大集合,而字符串常量是个小集合且含于字符常量。 在Java中多了一个空常量还有布尔常量,下面我们就来展开一一了

2023-10-31 16:11:28 135 1

原创 C语言扫雷入手教程——小白版本

上一期博客与大家分享了C语言三子棋的教程,今天,我又来辣!这一期博客给大家带来了C语言扫雷的教程,是不是很期待呢,接着往下看吧!

2023-08-22 16:10:04 114 2

原创 C语言三子棋

在完成这个小游戏之后,让我们来看看为了完成这个小游戏我们都用到了什么知识吧!例如,贯彻整个游戏程序要用到的字符二维数组,定义棋盘规格的行列要用到的整形变量,在完成下棋指令传入以及判断游戏结果返回的字符变量。要做到以上几点,我们运用的是C语言中一大实用的工具——函数调用。在需要完成打印操作还有数入数据时,要用printf和scanf语句之前要先引用库函数<stdio.h>

2023-07-28 22:30:58 261 9

空空如也

空空如也

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

TA关注的人

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