- 博客(28)
- 收藏
- 关注
原创 【java多线程】线程安全是如何保证的?什么是死锁?含大量图解~~
在java中,我们使用synchronized对要执行的任务进行加锁,synchronized在汉语中是同步的意思,但是在里面是互斥的含义。讲了这么多,锁也并不是越多越好的!它的实现原理是让锁对象内部保存当前线程持有那把锁,当后续线程针对这个锁加锁的时候进行对比,如果是同一个就计数器+1,否则正常运行。CPU的线程调度是随机的,程序员无法控制它,所以在执行的时候会有无限的情况,因此cnt的值永远也不会为100000。锁:和生活中的锁一样的概念,互斥、排他,一旦把锁加上了,其他人想要加锁,就得阻塞等待。
2025-04-05 19:46:44
634
原创 从“单线程社畜“到“多线程时间管理大师“的进化之路
多线程有什么作用?想象一下,你是一个餐厅里唯一的服务员,既要接单、上菜,又要收拾桌子、结账……忙得脚不沾地,顾客却还在抱怨“太慢了!”(程序卡成PPT)。这时候,多线程就像老板突然给你雇了几个帮手:线程A专门接单,线程B负责上菜,线程C埋头算账……大家各司其职,效率直接起飞!顾客满意了(用户体验流畅),老板赚钱了(程序性能提升),你甚至能偷闲刷个手机(CPU不再摸鱼)。首先我们要了解一下什么是进程线程在创建和销毁时,开销更小,相当于一个轻量级的进程。
2025-03-30 16:23:36
767
原创 知识大扫盲!一台计算机是如何运行的?
在早期没有操作系统的时候计算机的使用门槛非常高,任何操作都是通过指令来进行的,就拿开机来说,你需要写一大段代码来执行,所谓的计算机启动起来无非就是让CPU加电后开始执行一段初始化代码,为你真正的程序运行铺路,这一大段代码就是所谓的内核,kernel。这里的输入和输出是相对于cpu来说的,要进入cpu的数据都是输入的,要离开cpu的数据都是输出的,比如键盘就是输入设备,显示屏就是输出设备。:常说的几核几核电脑,就是指的cpu的核心数量,当单核的性能难以提升的时候,开发出了多核技术来提升cpu的整体性能。
2025-03-26 17:36:23
637
原创 pta L2-002 链表去重 c++
给定一个带整数键值的链表L,你需要把其中绝对值重复的键值结点删掉。即对每个键值K,只有第一个绝对值等于K的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定L为 21→-15→-15→-7→15,你需要输出去重后的链表 21→-15→-7,还有被删除的链表 -15→15。
2025-01-08 22:46:55
197
原创 【蓝桥真题练习】蓝桥杯 2021 国赛 A 组 E 题
小蓝发现, 这个数列前 11 项是整数 11 , 接下来 22 项是整数 11 至 22 , 接下来 33 项是整数 11 至 33 , 接下来 44 项是整数 11 至 44 , 依次类推。我们可以使用类似于前缀和的方法来解题,既前r个数字和减去前l个数字和。同样的道理,我们知道了它的行数以及它一维的位置,可以得出它的列坐标。前n行的和为:n * (n + 1) * (n + 2) / 6。首先我们观察这个数列,我们可以把他分解成一个三角形的二维数组。小蓝想知道, 这个数列中, 连续一段的和是多少。
2025-01-07 12:49:08
398
原创 c++初阶 string的底层实现
首先可以明确的是string的底层结构是字符串数组,但是由于字符串数组中是使用。来终止的,因此他实际的存储空间是要比显示的多一个的。声明:非纯手搓,运用到了部分c语言的函数。
2024-08-06 00:57:35
513
原创 【计数排序】一个效率极高还简单的排序算法
它的优势在于在对一定范围内的整数排序时,复杂度为O(n+k)(其中k是整数的范围),快于任何比较排序算法。计数排序的思想类似于哈希表中的直接定址法,在给定的一组序列中,先找出该序列中的最大值和最小值,从而确定需要开辟多大的辅助空间,每一个数在对应的辅助空间中都有唯一的下标。二、从头到尾遍历辅助空间的下标,如果它的数值不为0就将它次数个下标复制给原数组(因为下标代表原数组的值),又因为它是从头到尾遍历的,所以使用此种方法可以排序。一样大的空间,并记录原数组每个值的个数,类似于哈希的映射。
2024-04-25 20:12:08
437
1
原创 【算法精讲】一篇让你掌握前缀和算法(附图解和不少题目练习~~)
前缀和算法是一种用空间换时间的算法,他常常用于解决某些题目或者作为某些高级算法的组成部分。例如:让你求某个矩阵(一维)的子矩阵的最大值,如果使用暴力解法它的时间复杂度将会是O(n^2) ,但如果使用该算法就可以使其时间复杂度降低一个维度也就是O(N).
2024-03-17 20:21:22
9026
4
原创 【C++入门】一篇带你了解类与对象~
C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数在c++语言中,我们更喜欢用类(class)来代替struct的存在,它相比struct来说完善了很多的内容,功能也更加丰富,比如说构造函数析构函数等,后面我会再写文章来讲解这一方面。class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分。
2024-01-30 22:14:49
1084
1
原创 【算法精讲】选择排序、堆排序(C语言)
直接插入排序是一种简单的排序算法,它将数组分为有序和无序两部分,和插入排序的思路有些类似。堆排序是直接选择排序的进阶版,他在其原本的思想上进行了优化。每次遍历找最大值和最小值,把最大值放后面,最小值放前面。下面的内容涉及一部分数据结构堆的知识,不适合新手学习。时间复杂度:O( N * logN)时间复杂度:O( N^2)
2024-01-27 11:43:54
407
原创 【手撕排序算法】直接插入排序、希尔排序,有详细图解
直接插入排序是一种简单的排序方法,它的思路就像是插扑克牌一样,每次排序一个,最终排序完成。
2024-01-25 19:16:53
500
1
原创 【去重算法】有序去重和无序去重,C语言版
2.如果两个指向的数大小是不同的,则维护空间++,并且把新的数加进去。2.不同的是判断是否重复,每一次判断都需要在已经去重的范围里循环一遍。1.双指针方法,一个用来遍历整体数组,另一个用来维护去重后的空间。纸上得来终觉浅,绝知此事要躬行。时间复杂度:O(N^2)时间复杂度:O(N)
2024-01-25 15:37:33
649
1
原创 【c++入门】内联函数inline:弥补宏定义的不足
2.另外,内联函数对于编译器来说只是一种请求,内不内联取决于编译器,比如说:如果你的函数超过了75行,那么编译器就会驳回你的请求,对于递归的函数编译器也是不会处理的。相比于没加inline的函数,加了inline的函数直接在main函数里面展开,而没有加的需要根据地址去转到函数位置,建立新的栈帧更加消耗性能。的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。这一概念,不仅吸收了宏的优点,还尽可能的优化了缺点。
2024-01-24 18:56:11
433
1
原创 【c++入门】指针的好盆友:引用
作为函数的参数:当函数需要修改其参数的值时,可以将引用作为参数传递给函数。这样,函数对引用的操作实际上是对原始变量的操作,而不是对原始变量的副本进行操作。这种方式可以避免数据的拷贝,提高效率。简化指针操作:通过引用,可以更简洁地操作指针。例如,可以将一个数组的引用传递给函数,使得函数可以直接访问数组元素,而不需要使用指针来解引用。作为函数的返回值:可以将引用作为函数的返回值。当函数返回一个临时对象时,可以通过引用返回该临时对象,避免了返回临时对象所占用的存储空间被重复使用的情况。
2024-01-23 20:24:52
1320
1
原创 【c++入门】缺省参数 && 重载函数
所谓缺省参数,其实和普通参数区别不大,但是需要在函数定义的时候初始化一下,上述代码中的,a便是缺省参数,而参数完全都是缺省参数的函数就叫做缺省函数。在c语言中,函数的传参要和函数的形参一一对应,相应的它的使用就很死板,所以在c++中祖师爷引入了缺省参数这一概念,灵活了函数的使用。在结果中,我们可以发现如果我们在这个参数上传了值,那么那个参数就是传的值,若没有传参则是函数参数定义的初始值。这三个函数的名字是相同的,但由于类型不同,所以其实这可以算是三个不同的函数。但是和缺省函数不同的是,非缺省参数的位置。
2024-01-21 22:38:42
364
1
原创 【c++入门】域的认识
所谓域就是值一块独特的领域,这块领域包括它的所属成员(一个常量或者一个函数均可)。我们先不管这串代码是什么意思,我们后文会讲解到。在这串代码中我们创建了两个域,这两个域虽然都有成员x,但这两个x是相互独立的存在。当我们使用领域的所属成员时,我们需要再前面声明它是谁家的x,这就相当于告诉计算机:你给我去这个地方找人去,找不到就别回来啦。
2024-01-17 16:40:13
737
1
原创 Python学习笔记(5)字典(dict)常用方法及基础操作、字典视图
字典是包含若干“键:值”的无序可改变序列,表示一种映射关系,也称作关联数组,有些类似于c/c++中的结构体数组,具体特点如下:(1)字典的键通常采用字符串,但也可以用数字、元组等不变的类型。(2)值可以是任意类型。(3)它通过键来索引映射的值,而不是通过位置来索引。
2023-11-28 23:42:43
679
1
原创 Python学习笔记(4)元组的基础操作及方法
元组可以看做不可变的列表,它具有列表的大多数特点,具体如下:(1)可以包含任意类型数据。(2)元组大小不可变,既不能删除,也不能添加。(3)元组中的对象也不能改变。
2023-11-25 13:32:02
184
1
原创 Python学习笔记(3)列表(巨详细版)
列表是Python中重要的内置对象之一,是包含若干元素的有序连续内存空间。他有以下特点:(1)可以包含任意类型的对象。(2)列表可变。(3)储存的是对对象的引用。
2023-11-24 15:40:36
109
1
原创 Python学习笔记(1)输入和输出
在Python中输出完一行是默认换行的,但是如果我们改为end = ‘’(这是两个单引号,中间啥也没有)则会取消换行。此代码运行后,会在input语句处停止,等待用户输入,用户输入的值会赋值给a,也就是说用户输入什么a就是什么。在输出多个对象时,Python默认分隔符是。
2023-11-21 19:35:19
319
原创 python如何安装第三方库(镜像库),快速简单易上手
pip属于是外国的网站所以我们下载它网速很慢,所谓镜像库就是在我们国内建立的一个网站,我们使用镜像库就可以下载的更快。在python中,标准库中的函数往往不能满足我们的使用,因此我们需要从pip中下载安装第三方库,来使用其他人创造的函数,下面让我们来看看如何下载吧!。
2023-10-19 13:08:05
1039
2
原创 c语言模拟计算器的运行及其简单优化
在简单计算器的基础上,我进行了改良,更新了两种模式,单次计算和连续计算。按照此种方式,可以进行在计算种类上进行扩展;
2023-09-20 17:09:59
341
1
原创 scanf和printf的用法及其常见错误
在上图中%d为“占位符”,所谓 “占位符”,就是这个位置可以⽤其他值代⼊,这个值必需在引号后标明出来。另外这个值的类型必须要和前面的占位符一一对应,详情如下:• %a :⼗六进制浮点数,字⺟输出为⼩写。• %A :⼗六进制浮点数,字⺟输出为⼤写。• %c :字符。• %d :⼗进制整数。• %e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。• %E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。• %i :整数,基本等同于 %d。
2023-08-07 17:33:03
987
1
原创 数据类型详解(上)
另外要注意的是在输入小数是其默认状态为double,此时代码将无法运行,所以我们要在数字后面加上f(long double后加L),这就相当于在和计算机声明这个数的属性。由此可知,如果需要处理些比较大的数,那么用无符号整型比较合适。字符和整型一样也存在有无符号的区别,但与整型不同的是对于未声明的char类型,它的默认状态由编译器来决定,我们可以输入以下代码来检测。int)长整型(long int),更长的整型(long long int),也可略写为short,long,long long。
2023-07-22 18:57:55
195
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人