自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 文件操作(文件流)

文件流, 读写文件内容。

2024-05-19 18:36:06 792

原创 文件操作和IO

IO 就是输入输出 (input 和 output).输入输出是相对 cpu 来说的, 数据从硬盘到 cpu 就是输入, 而从 cpu 到硬盘就是输出了.属性​路径之间的分隔符 , 是根据系统自动调整的. 实际开发还是建议使用 /构造方法​构造 File 对象, 需要指定路径. 此处可以是 绝对路径 也可以是 相对路径 .这个路径可以不存在.方法示例​退出时删除, 这样的文件也称为临时文件. 有些程序就带有 临时文件 的功能.renameTo()文件重命名.

2024-05-19 16:46:13 497

原创 多线程案例之定时器

定时器, 就类似于一个闹钟, 当设定的时间一到, 就执行某个指定的代码.

2024-05-09 18:21:16 538

原创 阻塞队列

实际开发中, 经常会涉及到 "分布式系统", 服务器整个功能不是由一个服务器全部完成的, 而是每个服务器负责一部分功能, 再通过服务器之间的网络通信, 最终实现整个功能.A 的代码中就需要设计到和 B\C 相关的操作, B\C 的代码中也需要设计和 A 相关的操作.如果加入阻塞队列, 就能很好避免这种情况. 即使外界的请求出现峰值, 也是由队列来承担峰值请求.这里的生产者和消费者不仅仅是一个线程, 也可能是一个独立的服务器程序, 甚至是一组服务器程序.一旦程序进入阻塞, 再被唤醒, 这中间就有很多变数了,

2024-04-20 18:45:30 537

原创 多线程代码案例

这样设定, 仍然能保证该类的实例是唯一一个, 与此同时, 创建实例的时机就不是程序驱动时了, 而是第一次调用 getInstance() 的时候, 这个操作的执行时机就不知道了, 甚至整个程序压根用不到这个方法, 也就把创建的操作省下了.这个引用指向唯一实例, 先不着急创建, 把它初始化为 null , 如果是第一次调用 getInstance(), 才会创建实例, 后面再调用, instance 已经不为空了, 也就不会再创建实例了.首先, 对于 饿汉模式 来说, 多个线程读同一个变量, 这是安全的.

2024-04-15 22:03:25 910

原创 进程和线程

此时 t 对象有了, 但内核PCB还没有, 此时 isAlive 就是false.t.start() 才在内核中真正创建出PCB, 此时isAlive 就是true.当线程 run 执行完了, 此时内核中的线程也就结束了, 内核中的PCB也就释放了,但此时 t 变量可能还存在, 但 isAlive 也是false.好啦, 我们下个文章见~~

2024-04-13 23:34:21 570

原创 多线程中的 wait 和 notify 方法

首先先讲一个现象:线程饿死.什么是线程饿死?假如线程1 调度到 cpu 获取到锁, 但它发现要执行的逻辑, 前提条件无法满足, 那么它就无法执行, 进而释放锁, 释放之后 它又和其他线程一起参与锁竞争,但是线程1 当前处于 Runnable 状态, 而其他线程处于BLOCKED状态, 其他线程需要先被系统唤醒,所以很大概率, 又是线程1 获取到锁. 那么如此反复, 就形成了线程饿死.为了避免这种情况, 就要使用 wait 和 notify 方法.

2024-04-13 19:29:29 609

原创 【线程安全】死锁问题

死锁是进行多线程编程时, 比较常见和严重的问题.一旦程序进入死锁, 就会导致线程无法执行后续内容, 程序就出现严重的bug.

2024-04-13 18:15:23 288

原创 数据结构--栈和队列

设计循环队列主要就是注意 front 和 rear 的位置,它们不能超过数组长度。,在另一端进行删除数据操作的特殊线性表,队列具有先进。先出FIFO(FirstIn First Out)压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在。出栈:栈的删除操作叫做出栈。不能直接写 rear++!

2023-10-15 16:46:15 67 1

原创 JavaSE 之认识异常

if(!throw new UserNameException("用户名错误!");if(!throw new PassWordException("密码错误!");System.out.println("登录成功!");try{自定义异常通常会继承自 Exception 或者 RuntimeException继承自 Exception 的异常默认是受查异常继承自 RuntimeException 的异常默认是非受查异常。

2023-09-09 17:04:31 74 3

原创 继承和多态(续)

这里接上一篇(继承)

2023-08-31 21:48:45 58 1

原创 继承和多态

到特殊的语法(诸如 extends 这样的关键字), 仅仅是将一个类的实例作为另外一个类的字段。持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。由于设计不好,或者因场景需要,子类和父类中可能会存在相同名称的成员,如果要在子类方法中。问题:如果子类中存在与父类中相同的成员时,那如何在子类中访问父类相同名称的成员呢?例如刚刚提到的狗类和猫类,狗和猫都是动物,那么我们就可以采用继承的思想达到共用。的子类/派生类,继承之后,子类可以复用父类中成员,如果我们需要定义两个类,一个狗类,一个猫类,

2023-08-29 17:45:46 47 1

原创 Java中的static关键字和代码块

也叫:实例代码块。

2023-08-12 20:25:16 33 1

原创 java类和对象

在Java中定义类时需要用到class关键字。// 创建类field;// 字段(属性) 或者 成员变量method;// 行为 或者 成员方法class是定义类的关键字,ClassName是类的名字,{}中是类的主体。类中包含类的成员属性(类成员变量)和方法。属性主要用来描述类,方法主要说明类具有哪些功能,称为类的成员方法。类名采用大驼峰成员前写法统一为public,后续详细解释//名字//颜色// 狗的属性System.out.println(name + ": 旺旺旺~~~");

2023-08-11 19:11:23 43 1

原创 java数组的应用和练习

总结:所谓“引用”本质上只是存了一个地址,Java将数组设定成引用类型,这样后续进行数组参数传参,其实只是将数组的地址传入到函数参数中,这样可以避免对整个数组的拷贝。Java中提供了 java.util.Arrays 包,其中包含了一些操作数组的常用方法。发现在func方法内部修改数组的内容, 方法外部的数组内容也发生改变.二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.给定一个数组, 再给定一个元素, 找出该元素在数组中的位置。copyOf方法在进行数组拷贝时,创建了一个新的数组。

2023-07-29 19:22:19 40

原创 java数组的定义与使用

数组:可以看作相同类型元素的集合,在内存中是一段连续的空间。数组中存放的元素类型相同数组的空间是连续的数组下标从0开始。

2023-07-29 17:21:57 65

原创 C语言文件操作

磁盘上的文件是文件,在程序设计中,我们一般谈论的文件有两种:程序文件、数据文件(从文件功能的角度分类)这里的输入输出都是相对程序来说的,不是文件。

2023-07-24 11:42:41 55 1

原创 qsort快速排序

确定之后就是比较相邻元素的大小了,我们就设计compar这个函数比较,小的在前大的在后,不符合就交换,所以还需要设计一个函数帮我们交换。int (*compar)(const void*, const void*):这是一个函数指针,这个函数指针指向的函数,能够比较base指向的数组中相邻两个元素的大小。它的基本思想是通过不断比较相邻的元素,将较大的元素向后移动,较小的元素向前移动,从而实现排序的目的。首先设计它的返回类型,函数参数,因为是模拟实现嘛,就跟它原本的差不多啦。,是一个void*的指针;

2023-07-17 21:13:06 103 4

原创 动态内存管理

这个函数向内存申请一块连续可用的空间,并返回这块空间的起始地址。不会初始化这块内容。例:开辟40个字节如果开辟成功,返回一个指向开辟好的空间的指针。如果开辟失败,则返回一个空指针,因此malloc的返回值一定要做检查。返回值类型是void*,malloc函数并不知道开辟空间的类型,由使用者决定。如果参数为0,malloc的行为是标准未定义的,取决于编译器。return 0;i < 10;i++)

2023-07-16 22:33:37 88 5

原创 自定义类型

结构体结构体内存对齐修改默认对齐数结构体传参位段枚举联合(共用体)

2023-07-15 19:08:48 63 4

原创 内存函数(续)

1.memmove2.memcpy3.memsetmemmove上次提到了memmove这个内存函数:如果你和memcpy这个函数对比,就发现它们的参数都是一样的,返回类型也是一样的。它的功能也是把source的前num个字节拷贝到目的地destination内存中去,函数结束返回目的地的起始位置。懂了它的使用方法,那我们来模拟实现一下:主要是注意重叠内存的拷贝应该怎么实现。所以总结就是:dest在前从前往后拷,dest在后从后往前拷。可以看到结果也是我们预期的。

2023-07-13 23:49:11 36 1

原创 内存函数memcpy

memcpy功能是内存拷贝从source的位置拷贝前num个字节到destination内存中去,类型是void* (能接受任意类型的指针)。

2023-07-12 17:28:47 330 5

原创 C语言三子棋的简单实现

首先我们需要创建三个文件,一个test.c的源文件,一个game.c,还有game.h的头文件。让玩家以输入坐标的形式来决定落子,所以玩家的坐标需输入合法,不能越界,因为我们用的是数组下标,所以玩家输入(1,1)时,我们要在(0,0)的位置落子。我们可以把需要引用的头文件放在game.h这个头文件里,因为我们需要在另外两个文件里引用game.h,这样就很方便了。三子棋得有棋盘吧,它是三行三列,.行用ROW,列用COL来代替,这样方便修改,我们把它定义在game.h里。

2023-05-12 16:49:19 36

原创 初始C语言(1)

分号隔开的就是一条语句,比如1+2;

2023-04-21 18:46:05 33 2

原创 初始C语言

大家好啊,我是一名大一下学期的萌新,就读于人工智能专业,这是我第一篇博客,以后请大家多多指教了。

2023-04-01 15:24:30 83

空空如也

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

TA关注的人

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