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

原创 InputStream和OutputStream 的用法

修饰符及返回值类型方法签名说明void写入要给字节的数据void将b这个字符数组中的数据全部写入outputStream中int将b这个字符数组中从off开始的数据写入outputStream中,一共写len个voidclose()关闭字节流voidflush()重要:我们知道I/O的速度是很慢的,所以,大多的OutputStream为了减少设备操作的次数,在写数据的时候都会将数据先暂时写入内存的一个指定区域⾥。

2024-05-19 17:01:18 476

原创 文件IO,路径以及File类使用

IO是input(输入)和output(输出)的首字母缩写形式,直观意思是计算机输入输出,它描述的是计算机的数据流动的过程。文件本身也是广义的概念,其实在操作系统中把很多的资源(软件资源/硬件资源) 都抽象成文件。此处谈到的文件,特指"狭义"的文件,也就是平时保存在硬盘上的这些文件。文件夹是否是文件?文件夹也是一种文件,称为"目录(directory)文件",也是保存在硬盘上。在硬盘上存在很多文件和目录,目录又存在一定的"嵌套关系”,整体这一套结构是一个树型结构( N 叉树)。

2024-05-17 18:08:48 571

原创 线程池的简单实现与应用

参数名称说明正式员工的数量.(正式员工,一旦录用,永不辞退,干活的主力)正式员工+临时工的数目.(临时工:活多了,正式员工干不完,就招临时工干活,活不多的时候就裁掉)也就是说核心线程不忙的时候,非核心线程就会被回收临时工允许的空闲时间unitkeepaliveTime的时间单位,是秒,分钟,还是其他值.workQueue传递任务的阻塞队列创建线程的工厂,参与具体的创建线程工作.通过不同线程工厂创建出的线程相当于对⼀些属性进⾏了不同的初始化设置拒绝策略,如果任务量超出公司的负荷了接下来怎么处理.

2024-05-15 20:38:00 737

原创 wait和sleep的区别

都是使线程暂停一段时间的方法。

2024-05-04 21:39:25 134

原创 线程安全问题

如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的。 大家可以先猜测这个代码的结果,可能有的人会觉得是20000,但结果真的是这样吗? 实际上这个代码的结果是不确定的, 这里运行了三次,但每次结果都不一样。其实再多运行多少次这个代码的结果每次也都还是不一样的,这就是典型的线程不安全的情况。 为什么会出现这样线程不安全的情况呢?count++ 这个操作,站在 cpu 指令的角度上看,其实是3个指令:由于线程是随机调度,抢占式执行,

2024-05-04 21:05:31 1118

原创 线程的状态

线程之间每种状态的关系大致如此。

2024-04-27 20:31:39 350

原创 Thread类的基本用法

这里介绍线程创建常用的五种方法上述每种方法执行的结果都是大同小异,就是hello main和hello thread 并发执行,并且是抢占式执行,你也不知道hello thread 的下一句还是hello thread 或者是hello main。

2024-04-27 17:15:49 676 1

原创 二叉树oj题(2)

3.如何出栈:如果两个栈中的结点数不一样,要先把两个栈中的结点数量变得一样,即size1==size2,再开始两个栈一起出(先看当前栈顶元素是否一样,如果不一样,两个栈一起出;如果一样,随便出一个栈当前的栈顶元素(s1.pop() 或 s2.pop() ),这个出的元素就是公共祖先)。2.再判断当前节点 左子树 右子树 是不是有要找的节点。2.得到这两条路径之后分别把它们放进两个栈中,然后开始出栈。1.先判断p或者q 是不是 root当中的一个。->left这一侧找到的就是公共祖先。root的 left。

2024-04-23 21:37:31 338

原创 进程和线程的区别与联系

一个线程就是⼀个"执行流",每个线程之间都可以按照顺序执行自己的代码,多个线程之间"同时"执行着多份代码.

2024-04-13 17:00:27 863 1

原创 二叉树oj题(1)

1.自底向上的判断过程中,如果某一节点不满足平衡条件,那么该节点向上层父节点返回-1,上层结点如果发现自己的左右结点有一个为-1,就表示它知道这棵树不是平衡二叉树,自己也就不再判断而直接再次向自己的上层结点返回-1,所以最后根结点直接判断是不是大于零就行,因为如果不是平衡二叉树最后根节点会返回-1. (自底向上就是及时止损)。(转自力扣官方题解)类似于二叉树的前序遍历,对于当前遍历到的节点,首先计算左右子树的高度,如果左右子树的高度差是否<=1,再分别递归地遍历左右子节点,并判断左子树和右子树是否平衡。

2024-04-06 15:32:40 756 1

原创 初识二叉树和二叉树的基本操作

子树是不相交的;除了根结点外,每个结点有且仅有一个父结点一棵N个结点的树有N-1条边。非树:或者为空或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。

2024-04-06 15:31:49 1221 1

原创 进程调度的基本过程

进程是操作系统对一个正在运⾏的程序的⼀种抽象,换言之,可以把进程看做程序的⼀次运行过程;同时,在操作系统内部,进程又是操作系统进⾏资源分配的基本单位。任务管理器就把当前运行的进程罗列出来。可以看到任务管理器中可以看到系统中包含了很多进程,每个进程都需要执行执行都需要占用 cpu 资源,去 cpu 上执行。而进程的数量,远远多于 cpu 的数量的,多了就要开始考虑管理,那么这就要靠操作系统这个大管家来做了,也就是要让操作系统调度进程,让进程能够有条理的运行。

2024-03-31 13:20:53 355 1

原创 栈和队列的实现与应用

只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,进行插入操作的一端称为队尾,进行删除操作的一端称为队头,队列中的数据遵循先进先出的原则出入队。

2024-03-31 13:19:06 1126 1

原创 继承与多态的详解

成员方法没有同名时,在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有时再到父类中找,如果父类中也没有则报错。

2023-11-22 17:18:56 173 3

原创 类和对象详解

何为封装呢?简单来说就是套壳屏蔽细节封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互为什么要封装?封装是出于对代码的安全性考虑 Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符:这里主要说private这个访问限定符在上述的例子中name和age被private修饰,只能在Student类中被访问,不能在其他类中被

2023-11-12 20:27:07 219 18

原创 牛客C刷题(一维数组)(1)

投机取巧:以插入的数m为分水岭,先遍历数组输出比m小的,然后输出m,再遍历数组,输出比m大的,本质上没有真的把数插入数组里,只是在输出结果上做文章。有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。第二行输入N个升序排列的整数,输入用空格分隔的N个整数。第一行输入一个整数N(0≤N≤50)。输出为一行,N+1个有序排列的整数。第三行输入想要进行插入的一个整数。认认真真把数插入数组里,然后输出。

2023-10-28 21:56:26 69 17

原创 动态内存管理

先来看看malloc函数,这是一个C语言提供的动态内存开辟函数。我们来看看其在这个网站上的介绍,这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。那么这个函数如何使用呢?int mian()//申请一块空间用来存放10个整形return 0;关于malloc函数的返回值需注意:如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。

2023-10-28 18:50:38 29 2

原创 JAVA-数据类型与运算符

字节是计算机中表示空间大小的基本单位.计算机使用二进制表示数据. 我们认为 8 个二进制位(bit) 为一个字节(Byte).

2023-10-27 21:13:02 46 7

原创 初识java

Java 是一门面向对象的编程语言,不仅吸收了 C++语言的各种优点,还摒弃了 C++里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java 具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java 可以编写桌面应用程序、Web 应用程序、分布式系统和嵌入式系统应用程序等。

2023-10-24 12:15:16 41 9

原创 通讯录的实现

本次通讯录的实现需要创建三个文件,分别是test.c contact.c contact.h。在实现了通讯录某个功能后,是否成功实现我们不知道,所以用这个函数来看看是否成功实现这个功能。对程序员来说,比起用数字,枚举常量可以直接知道这是通讯录的哪一项功能,后期修改方便。前面我们实现了增加联系人的功能,现在我们可以增加联系人再显示看看效果。创建的通讯录后我们需要初始化,因为通讯录里面现在是随机值。通讯录不仅要存放数据,还要记录通讯录当前存放信息的人数。初始化通讯录后,我们现在开始逐个实现通讯录的功能。

2023-10-22 14:18:21 122 1

原创 结构体+枚举+联合体

int x;int y;}p1={1,2};//定义变量p1并初始化struct Stu//名字int age;//年龄//定义变量s并初始化int data;//结构体嵌套初始化int main()//定义结构体变量p3并初始化//初始化//结构体嵌套初始化return 0;位段的声明和结构是类似的,有两个不同:1.位段的成员必须是 int、unsigned int 或signed int。2.位段的成员名后边有一个冒号和一个数字。这就是一个位段struct A。

2023-10-22 14:14:02 20 1

原创 内存函数解析

函数参数和返回值类型source 源头,destination 目的地,num 拷贝多少字节函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。这个函数在遇到 '\0' 的时候并不会停下来。如果source和destination有任何的重叠,复制的结果都是未定义的。

2023-10-22 14:12:01 21 2

原创 三子棋游戏详解

在这里if语句中之所以写的是board[x - 1][y - 1] ,而不是board[x][y] ,是因为玩家不一定是程序员,他们不知道知道数组坐标是从0开始的,所以会输入1-3的数字,那么在程序内部判断的时候,我们需要把坐标-1。用宏定义的方式来写,是为了方便以后的修改,比如后期你想弄一个10*10的棋盘,直接把3就行改成10就行,不需要把程序里所有的3改了,工作量就小了。要实现game()函数,需要创建三个文件,分别是game.h、game.c、test.c。(横向,纵向,斜向)

2023-08-16 21:03:55 230 1

原创 扫雷游戏详解

关于扫雷游戏,想必大部分人都玩过,有初级,中级和专家三种,今天我们主要讨论初级扫雷是如何实现的。在这里面我们运用到了分支和循环语句,函数,数组等知识,完成这个游戏,可以帮助我们巩固知识,锻炼编程思维。

2023-08-16 20:57:36 56 1

原创 打印100-200之间的素数

由上述式子我们可以知道,m和n都至少有一个数字小于等于根号i,在这里我们设定小于等于根号i的那个数字是m, 那么只要我们能在2到根号i之前找到一个能整除i的那个m,我们就可以判断这个数可以被除了1和它本身以外的数整除,那么就不需要再找到n了。题目求的是100-200中的素数,那么就不需要考虑2,把i+=1改成了i+=2之后,就只须在100-200之间的奇数找,直接少了一半数,效率提高。在这个式子中m=3,根号i是6,我们只需要在小于6的数里找那个能整除36的m就行了,范围进一步缩小,效率进一步提高。

2023-07-26 15:26:44 27 1

空空如也

空空如也

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

TA关注的人

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