自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java线程的几种状态

1,NEW 表示当前Thread对象虽然有了,但是内核的线程还没用调用(还未调用过start)2,TERMINATED 当前Thread对象虽然还在但是内核的线程已经摧毁了(线程已经结束)5,TIMED_WAITING 有超时的时间等待(比如sleep或者join的带参版本)3,RUNNING 就绪状态,正在CPU上运行或随时可以去CPU上运行。6,WAITING 没有超时时间的阻塞状态(join/wait)下列三种均为阻塞状态,但是不方便展示代码。4,BLOCKED 因为锁竞争引起阻塞。

2024-07-18 21:28:45 115

原创 总结 Thread 类的基本用法

对于线程等待我们使用join()方法来进行实现,等待就是让其他线程等待这个线程或者是让这个线程被等待,主线程可以等待子线承,子线承也可以等待子线程,总的来说就是线程之间可以相互等待,有句话叫存在即合理,下面我们来介绍为什么要有线程等待和线程等待的使用场景,这意味着其他线程可以在休眠期间访问共享的资源,但是无法使用线程在休眠期间分配的内存。要想解决这个问题就需要用到线程等待了,使用规则为在哪一个线程中使用另一个线程调用join()方法那么要想执行这个线程就必须等待下一个线程运行结束才能执行。

2024-07-18 21:11:18 140

原创 Java中进程和线程的区别

它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。为了解决进程开销比较大的问题发明了"线程"(Thread),线程可以理解为更轻量的进程,也能解决并发编程的问题,但是创建和销毁的开销比进程低,因此多线程编程就成为了当下主流的并发编程方式。通过编写特殊的代码把多个CPU核心都利用起来这样的代码就称为“并发编程”,多进程编程就是一种典型的并发编程,虽然进程和以解决许多的问题,但是随着对效率要求越来越高,就希望有更好的方式来实现并发编程。

2024-07-11 16:06:55 224

原创 mysql事务详解

有三个事务ABC,首先事务A进行一个修改操作,A执行完毕的时候,提交数据,接下来B执行,事务B读取刚才A提交的数据,在B读取的过程中又来了一个事物C,C又对刚才A修改的数据再次做出了修改,此时对于B来说后续读到的结果就和第一次读到的结果是不一样的,这个过程就叫做“不可重复性”(体现的是事物B,一个事物里多次读取的结果不一样,如果有多个事务每个事务读到的结果不一样这种情况认为是正常的~~)。那么该如何解决这个问题呢?有一个事务A在读取数据,读的过程中,另一个事务B增添了/删除了一些其他的数据,此时站在。

2024-06-02 19:05:33 565

原创 Java中Stack的使用详解

向一个栈插入新元素的操作称为进栈或入栈,它将新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素的操作称为出栈或退栈,它将栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。由于栈的插入和删除运算仅在栈顶一端进行,后进栈的元素必定先出栈,因此栈也被称为后进先出表(Last In First Out,简称LIFO)。输出结果都是10,因为在访问的时候我们并没有将栈顶元素进行移除,因此·我们可以无限次的访问栈顶元素(前提是栈顶得有元素)。,其特点在于仅允许在表的一端(即表尾)进行插入和删除操作。

2024-05-27 15:02:16 397

原创 MYSQL中的索引

注意:B-树和二叉数想必还是有很大优势的,虽然B-树中每个节点的比娇次数变多了但是硬盘IO变小了,B-树一次硬盘IO是将整个区间内的值都取出来,明显降低了硬盘IO的次数,因此B-树的主要目的不是改变比较次数,而是降低硬盘IO的次数。4,B+树所有的查询都是要落到叶子结点上完成的,任何一次查询,经历的IO次数和比较次数是差不多的,查询的开销稳定。索引的背后数据结构是B+树,在讲解B+树之前我们先来讲解B-树这样可以使我们更好的理解B+树。需要特别注意的是,所有的叶子结点构成了珍格格数据的全集。

2024-05-26 12:27:38 280

原创 HashMap和HashSet的详解

当向该结构中: 插入元素 根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放 搜索元素 对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若 关键码相等,则搜索成功 该方式即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表(Hash Table)(或者称散列表)顺序查找时间复杂度为O(N),平衡树中为树的高度,即O( ),搜索的效率取决于搜索过程中 元素的比较次数。但是哈希表结构也有缺陷:哈希冲突。

2024-05-25 10:39:13 216

原创 TreeMap及TreeSet详解

5. 实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础。有这张图我们可以看出Set是继承Collection而Map没有继承任何的类,了解这一点对于后续的学习 是比较有帮助的。3. TreeSet的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的。6. Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入。上维护了一个双向链表来记录元素的插入次序。

2024-05-19 08:33:57 763

原创 java优先级队列

概念 前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队 列时,可能需要优先级高的元素先出队列,该中场景下,使用队列显然不合适,比如:在手机上玩游戏的时候,如 果有来电,那么系统应该优先处理打进来的电话;2. 如果parent的左孩子存在,即:child < size, 进行以下操作,直到parent的左孩子不存在 parent右孩子是否存在,存在找到左右孩子中最小的孩子,让child进行标 将parent与较小的孩子child比较,

2024-05-16 10:04:39 773

原创 java二叉树

二叉树的递归定义为:二叉树或者是一棵空树,或者是一棵由一个根节点和两棵互不相交的分别称作根的左子树和右子树所组成的非空树,左子树和右子树又同样都是一棵二叉树。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一一对应时称之为完全二叉树。双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点;2. 若规定只有根结点的二叉树的深度为1,则深度为K的二叉树的最大结点数是。

2024-05-16 08:58:20 802

原创 JAVASE8中基本数据类型

JAVA与C不同的是布尔类型在JAVA中不是bool而是boolean这一点需要大家特别记忆,与C语言想必JAVA中多了byte,其实byte与short和其他整形数据类型想必只不过是所占空间的大小不同,对于其他的并无什么差别。那么就是高位补零也就是。在JAVA中如果我们想要灵活的使用部分的运算符那么我们必须来了解整形提升这个概念,它是在运算当中非常容易出错的地方,关于整形提升我们在之前的博客中进行过讲解,大家如果·有时间可以看一下之前的几篇博客。有什么作用,在未来的博客中我们会进行讲解的。

2024-04-25 11:07:55 262 1

原创 C语言文件操作

缓冲⽂件系统中,关键的概念是“⽂件类型指针”,简称“⽂件指针”。每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区,⽤来存放⽂件的相关信息(如⽂件的名 字,⽂件状态及⽂件当前的位置等)。我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出 操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流 想象成流淌着字符的河。在编写程序的时候,在打开⽂件的同时,都会返回⼀个FILE*的指针变量指向该⽂件,也相当于建⽴了 指针和⽂件的关系。

2024-03-28 17:58:30 1874

原创 C/C++整数和浮点数在内存中存储

IEEE 754 规定,在计算机内部保存M时,默认这个数的第⼀位总是1,因此可以被舍去,只保存后⾯的 xxxxxx部分。但是,我 们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存⼊内存时E的真实值必须再加上 ⼀个中间数,对于8位的E,这个中间数是127;整数的2进制表⽰⽅法有三种,即 原码、反码和补码 三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最 ⾼位的⼀位是被当做符号位,剩余的都是数值位。⼀个中间数,对于8位的E,这个中间数是127;

2024-03-17 08:24:12 847

原创 C/C++中strcpy,strcat,strstr以及strncpy,strncat,strncmp的使用

这两种参数形式没有什么差别,它的如要作用为在str1中查找是否有str2字符串,也就是查找str1中是否有str2的一部分,如果有则返回str1中与str2中相同的字符串的第一个字符的地址,这里需要特别注意的是strstr函数真能返回从左往右第一个str1中和str2中的第一个字符的的值,如果str1中有多个str2那么值返回str1中第一个str2的首元素地址。那么这个函数是怎么用的呢?strncmp:它的作用依旧是比价字符串的大小,但与strcmp不同的是它也是可以先限定前几个进行比较。

2024-03-14 17:20:56 1531

原创 C/C++指针详解

指针其实就是元素存放地址,更加形象的比喻:在酒店中如果你想要去注必须去付费不然不能住,在计算机也同样如此(但是不需要付费哦)每当我们使用一个变量或其他需要申请空间的时候计算机就会自动开辟一段空间也就相当于酒店中每一个房间都有一个固定的房间号,在对应的房间号内可以找到固定的人,同样在正确的内存空间内也可以找到对应的数据,如果你想找的数据不在这一空间那么无论如何也是找不到得。当然这两个解引用的意思是有一定的差异的,第一个*截取的是数组的首地址也就是arr1第二个则是截取arr1中的第二个元素。

2024-03-09 20:06:52 1619

原创 C/C++环形链表

环形链表的解决方法利用到了快慢指针,这个问题也就可以表示为solw慢指针走一步fast走两步形成一个循环如果这个链表是环形链表那么当solw和fast进入环内那么快指针fast和慢指针slow就一定会相遇,当快慢指正同时进入环内时这个问题就变成了快指针追赶慢指针的过程,假设在慢指针进入环内后与快指针的距离为N那么每循环一次就相当于相对距离减1,因此只要链表是环形链表那么快慢指针就一定会相遇,只要相遇了那么也就意味着 solw = fast此时就可证明该链表是环形链表。

2024-03-04 18:22:26 330

原创 C/C++单链表两数相加LeetCode

【代码】C/C++单链表两数相加LeetCode。

2024-02-29 20:18:15 373

原创 C/C++单链表

想要实现这个想法我们必须找到尾节点和尾节点的上一个节点但是由于单链表是单项得我们无法使用某一个节点获知上一个节点或者下一个节点的地址因此我们需要在找到尾节点的同时找到上一个节点进而完成删除操作,在这里我们用到了pren 和 tail这两个指针这样当tail->next空时,pren 指向的就是指向尾节点的节点这是改变指向释放尾节点则尾删操作就算是完成了。如图当tall->next的指向为NULL时该节点就位尾节点,此时我们只需要将尾节点的指向改为指向我们创造的新节点NewNode就大功告成了。

2024-02-23 20:35:29 974 1

原创 C++杨氏矩阵详解

在这个函数中我们可以清晰的看到行数的变化,如果找到数,那么就直接返回1,如果没找到待到循环停止后返回0在main函数中,判断是否查找到该值。杨氏矩阵的基本原理是 在杨氏矩阵中由于自上而下,自左而右都是递增的,所以我们只比较最右上角的值就可以进行判断是否符合我们想要找的数,如果小于我们找的数,那么列数不变行数加一,如果小于我们要找的数,那么行数不变列数加一,如果是我们要找的数则跳出循环。cout << " 请输入您想要查找的数" << endl;

2024-02-04 13:32:17 394 1

原创 C++ assert断言的使用详解

这里这里需要特别说明assert只在debug版本中运行在release则不运行,而且在中assert使尽量避免使用较多的if...else因为这样不容易阅读,很容易看错条件。1.最简单的方法 将assert函数注释或删除就行,这个方法也非常简单,但是如果有多个assert函数他们在程序各处并且该程序代码量非常大,那么这种方法就不太好办了,根据图可以判断出在第六行判断条件符合程序停止,并且报出行数,当然如果你写好了程序并且已经确定没有问题可以通过两种方式使assert函数失效。

2024-02-04 12:57:17 405 1

原创 原码,反码,补码

如:8的原码为00000000000000000000000000001000因此它的反码和补码也为这个2进制数。例如:在正数中原码,反码,补码是相同的,而在负数中原码,反码,补码需要进行一定规则的转换。补码111111111111111111111111111111111000。对于负数来说反码等于原码符号位不变其他位按位取反,补码为反码加一,在原码,反码,补码中整数和负数的规格是不相同的。当然这两种方式是基于符号位不变进行的。第一中:补码取反+1。第二中:补码-1取反。

2024-01-26 10:45:32 330 1

原创 C/C++操作符:按位与、按位或、按位异或、左移、右移及拓展应用

关键的来了0 ^ n这个数还是n,大家可以仔细想想 ^ 的作用,是不是突然茅塞顿开。下面的a也是一样方式,a与b的值就这样完成了互换。& 按位与 在二进制中 在相同权重处0 & 0 =0 , 0 &1 = 0,1 & 1=1。| 按位或 在运算过程中 相同权重处 0 | 0 =0,1 |1=1,0 | 1=1。^ 按位异或 在相同权重处 0 ^ 0=1,1 ^ 0= 1 ,0 ^ 1=1。m<<k 标识 m的补码向左移动k位(特别提醒移动的是补码,我们使用的是原码)

2024-01-25 18:10:36 359

原创 c++学生教务管理系统

【代码】c++学生教务管理系统。

2023-12-30 21:14:53 449 1

原创 C语言结构体

在这里book1就是我们定义的结构体变量,但是并不建议在创造结构体的同时创造 结构体变量,在main函数中创造可以使结构体变量更加易于观察,*p也就是大家熟知的指针,也就是结构体指针。在这里我们在创建结构体变量的同时进行了初始化,初始化与结构体相对应的为名字为c语言程序设计,颜色为红色,价格为22.5 ,当然我们也可以不对其进行初始化等待后续输入。其中name,color,price叫做结构体的成员名;需要特别注意的结构体的结尾处的分好不能省略,结构体变量的使用和结构体指针。诸如此类大家可以类比进行使用。

2023-12-26 12:34:53 356

原创 洛谷好朋友

这道题的要点就是s是给予的下界,而a是第一个具有 “非常好友”的同学而同时b是a的“非常好友”这样我们就把整道题梳理通了,但是本道题限制自己不能是自己的“非常好友”所以a!=s,同时有以为b是a的“非常好友”所以b=s,当满足这两条件的时候a就是第一个有“非常好友”的同学此时直接跳出循环。

2023-12-17 15:23:22 340 1

原创 小书童——凯撒密码C语言

由题意可知n为几字母就向后移动几位但是我们需要注意。n是否大于26(26是一个循环)。

2023-12-17 15:16:13 390 1

原创 手机C语言

【代码】手机C语言。

2023-12-14 09:11:35 414 1

原创 printf()的返回值

printf的函数原型为。

2023-12-13 16:55:20 387 1

原创 C语言简易版扫雷

随后就是不断地进行猜雷,当然在while()中如果猜雷失败了则游戏直接结束,如果猜中一个格子中没有雷则win++,直至win

2023-12-11 14:18:46 931 1

原创 一维数组,二维数组

与一维数组相似的是数组名仍为arr 数组类型为int [5][5]。(捎带提一句为初始化的元素都默认为0),相信大家可以通过这种方式以此类推第四行第五行该怎么定义。,这里需要特别说明的如果在声明一个数组的时候n不写那么系统会按照你输入的元素数量自动匹配大小,数组的使用是通过下标进行的但是数组的下标是从零开始的也就是若有五个数则对应的下表为。这个数组就是一维数组由int 可知该数组为整形数组与 int arr=0不同的是。如果arr的第一个元素为1那么arr[0]=1,依次类推。与输入相同的是输出也是。

2023-12-05 17:09:03 339 1

原创 猜数字大小

这是因为我们们其实没有必要使用time()函数,rand()中我们可以随机输入一个数同样也生成随机值,用time()只不过是便于操作,便于改变种子的值,使用time()函数需要用到下面这个库函数。rand()能够生成一个随机的数,但是rand()是通过一种算法生成数,生成的是 0 到 32767之间的数,改算法是通过种子(默认为1)来生成序列所以应使用摸个函数将该种子随机生成某一个特定的值,因此要用到srand()这两个函数需要用到一个头文件。rand() srand() time()这三个函数,

2023-12-02 20:52:56 407 1

原创 C语言分支语句

expression是你错输入进switch()中的数这里需要特别注意expression必须为整形表达式,case后面的数也就是value1必须为整形常量表达式,这两者也可以是字符因为。多分支结构的进行是自上而下逐个判断如果if不成立则进行下一个else if如果else if仍不成立则继续进行如果都不成立那么这个循环则对函数没有任何影响,如果表达式中为非零则输出“****”若为0则不满足条件不进行if语句中的内容,表达式中 填写条件如果条件成立则表达式默认为非零否则则为零,

2023-11-30 21:03:53 314

原创 算术操作符:+、-、*、/、%

根据对%的介绍可知,i = 1,j = 0, k = 0, 1%4除不尽余1, 4%4与4%2都刚好除尽因此没有余项值为0,由于这里4除3除不尽,这里将会将小数省略,将i的值赋为1;如果想要4/3输出小数则需要将两数中的至少一个加 .0比如。我们看到这里我们用到了单精度浮点型float当然也可以用double,当然这里4/3.0是除不尽的所以只能取到大概的值。除数与被除数都为整数是结果也是整数,如果发生除不尽的情况则将会把小数省略。,“*”相当于数学中的乘。

2023-11-27 19:39:06 522

原创 对for do....while while循环语句简要概括

如果想要重新输入则可以将break改为contiue,continue的意思为重新进入这个循环,也就是说重新输入n的值来再一次判断是否进入switch中的某个循环,若 如果输入的值扔不满足循环条件则再一次进入default继续重新输入。加入n为1,则进入第一个条件也就是case 1: 来执行其中的内容,break的作用为当执行了n=1,的条件就不再进行下面的条件,也就是循环终止,而且在其他循环中也可以使用break来终止循环。(如果是循环当中的if也可以使用,但单独的非循环当中的if语句不能使用)

2023-11-26 17:19:03 334

原创 不积小流,无以成江海

2023-11-19 12:12:25 48

空空如也

空空如也

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

TA关注的人

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