- 博客(25)
- 收藏
- 关注
原创 文件操作和IO
IO 就是输入输出 (input 和 output).输入输出是相对 cpu 来说的, 数据从硬盘到 cpu 就是输入, 而从 cpu 到硬盘就是输出了.属性路径之间的分隔符 , 是根据系统自动调整的. 实际开发还是建议使用 /构造方法构造 File 对象, 需要指定路径. 此处可以是 绝对路径 也可以是 相对路径 .这个路径可以不存在.方法示例退出时删除, 这样的文件也称为临时文件. 有些程序就带有 临时文件 的功能.renameTo()文件重命名.
2024-05-19 16:46:13
497
原创 阻塞队列
实际开发中, 经常会涉及到 "分布式系统", 服务器整个功能不是由一个服务器全部完成的, 而是每个服务器负责一部分功能, 再通过服务器之间的网络通信, 最终实现整个功能.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
原创 继承和多态
到特殊的语法(诸如 extends 这样的关键字), 仅仅是将一个类的实例作为另外一个类的字段。持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。由于设计不好,或者因场景需要,子类和父类中可能会存在相同名称的成员,如果要在子类方法中。问题:如果子类中存在与父类中相同的成员时,那如何在子类中访问父类相同名称的成员呢?例如刚刚提到的狗类和猫类,狗和猫都是动物,那么我们就可以采用继承的思想达到共用。的子类/派生类,继承之后,子类可以复用父类中成员,如果我们需要定义两个类,一个狗类,一个猫类,
2023-08-29 17:45:46
47
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
原创 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
原创 内存函数(续)
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
空空如也
anaconda权限问题
2024-05-28
用malloc申请空间后忘记free怎么办(语言-c语言)
2023-03-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人