- 博客(74)
- 收藏
- 关注
原创 理解文件系统
线性存储介质理解文件系统,首先我们将磁盘所有的存储空间想象成一个线性的存储介质,想想磁带,当磁带被卷起来时,其就像磁盘一样是圆形的,但当我们把磁带拉直后,其就是线性的。磁盘分区将磁盘想象为线性存储后,磁盘就可以被看作一个巨大的块设备,数据以扇区(Sector)为单位进行存储和访问。计算机为了更好的管理磁盘,于是对磁盘进行了分区。
2025-03-01 11:53:35
1043
11
原创 Linux的基础IO内容补充-FILE
而当我们将运行结果重定向到log.txt文件时,数据的刷新策略就变为了全缓冲,此时我们使用printf和fwrite函数打印的数据都打印到了C语言自带的缓冲区当中,之后当我们使用fork函数创建子进程时,由于进程间具有独立性,而之后当父进程或是子进程对要刷新缓冲区内容时,本质就是对父子进程共享的数据进行了修改,此时就需要对数据进行写时拷贝,至此缓冲区当中的数据就变成了两份,一份父进程的,一份子进程的,所以重定向到log.txt文件当中printf和fwrite函数打印的数据就有两份。此时我们就可以知道,
2025-01-14 14:17:53
1262
16
原创 Linux的基础IO
那么,这里我们温习一下操作系统的概念我们在Linux平台下运行C代码时,C库函数就是对Linux系统调用接口进行的封装,在Windows平台下运行C代码时,C库函数就是对Windows系统调用接口进行的封装,这样做使得语言有了跨平台性,也方便进行二次开发。这就是因为在根本上操作系统确实像银行一样,并不完全信任用户程序,因为直接开放底层资源(如内存、磁盘、硬件访问权限)给用户程序会带来巨大的风险。所以就向银行一样他的服务是由工作人员隔着一层玻璃,然后对顾客进行服务的。
2025-01-13 11:54:45
6784
9
原创 c语言的文件操作与文件缓冲区
如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。磁盘(硬盘)上的文件是文件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序文件、数据文件(从文件功能的角度来分类 的)。就比如说我们电脑中以.txt为后缀的就是文件的一种,他就是数据文件。.exe为后缀的就为程序文件。函数名功能适用范围fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets。
2025-01-05 22:44:12
1202
12
原创 解决Git中没有小绿勾与红叉叉的问题
找到下面这个地址:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers。后产生的,要在圈住的这几个在前面,添加空格(右击重命名加空格就能使它提到前面)关于要添加几个空格的问题,一般来说添加四个或者八个就可以。然后,重启电脑就能产生小绿勾和红叉叉的图标了。运行完重启电脑就好使。注意这一步一定要操作对,操作错误就会很多麻烦。寻找与自己电脑相配的软件版本就可以了。
2024-12-30 10:29:42
1326
12
原创 函数和进程之间的相似性
在一个C程序可以fork/exec另一个程序,其过程是先fork一个子进程,然后让子进程使用exec系列函数将子进程的代码和数据替换为另一个程序的代码和数据,之后子进程就用该程序的数据执行该程序的代码,从而达到程序之间相互调用的效果。在学了C语言、C++或是JAVA等高级语言,你会知道,在这些语言中的函数是可以相互进行见调用的,但是在学习了Linux的前面的知识后,你就会有意无意的认识到其实进程也是与函数有相同之处的,进程之间也是可以相互调用的。程序之间相互调用带来的好处之一。那么下面就将这部分内容扩展。
2024-12-30 10:15:46
611
8
原创 Windows下使用git配置gitee远程仓库
就在前几天因为一些原因,我的电脑重装了系统,然后再重新配置git的环境的时候就遇到了一些小问题。所以我决定自己写一篇文章,以便以后再配置git时,避免一些错误操作,而导致全网搜方法,找对的文章去找对应的解决方法。下面为了演示方便就拿gitee来演示,不拿GitHub了写文章了。
2024-12-22 23:26:08
1927
6
原创 [蓝桥杯 2019 国 B] 排列数
对于本篇文章是站在别人的基础之上来写的,对于这道题作为2019年国赛B组的最难的一题,他的难度肯定是不小的,这道题我再一开始接触的时候连思路都没有,也是看了两三遍别人发的题解,才慢慢明白了怎么去写。那么对于题解我就直接引用别人的优秀题解,但后再加上我对题解写的不详细的地方进行尽可能详细的描述补充。
2024-12-17 10:54:06
1365
6
原创 Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
2024-12-15 15:24:03
1259
8
原创 解决 Linux git push 成功后(但没有出现绿点)的问题
最近学习使用Git,发现有时候在Linux下提交自己的小绿点并没有增加,单在仓库中却可以看到提交的代码。看着连续的绿点中出现几个零零散散的灰点,着实让一个强迫症患者十分难受。接下来分享以下我所知道的问题。
2024-12-11 16:59:42
264
5
原创 Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
2024-12-11 14:47:58
676
8
原创 位运算的总结--奇思妙解
目录前言先回顾常用的位运算1:给一个数 n ,确定它的二进制表示中的第x位是0 还是 12:将一个数 n 的二进制表示的第x 位修改成 1 3:将一个数 n 的二进制表示的第 x位修改成 0 4:与位图联系5:提取一个数(n)二进制表示中最右侧的 1(重要)6:干掉一个数(n)二进制表示中最右侧的 1(重要)7:要考虑位运算的优先级吗?(了解)8:异或(^)运算的运算律(重要)9:对于~的妙用实现++/--(知道有就行)在这篇文章中,我将总结我所知道的所有位运算的独特之处。这些妙用非常重要,运用得当可以显著
2024-12-09 18:14:35
847
5
原创 定长滑动窗口--灵神题单(一刷进阶)
这篇文章主要围绕灵神题单中的定长滑动窗口进阶题进行探讨,首先解决了一些基本题目,然后附带了一些相对困难题目的解题思路。值得注意的是,大部分解答都是在前人的基础上进行了一些小的修改和调整。希望文章对大家的学习和解题能力有所帮助。如果您需要更具体的内容或者对某一部分有兴趣深入讨论,请告诉我!
2024-12-01 22:25:19
1068
5
原创 Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
2024-12-01 17:02:39
1114
5
原创 解决 git 报错 “fatal: unable to access ‘https://github.com/.../.git‘: Recv failure Connection was rese
在使用 Git/Git小乌龟 进行代码管理的过程中,经常会遇到各种各样的问题,其中之一就是在执行 git clone 或 git pull 等操作时出现 “fatal: unable to access ‘https://github.com/…/.git’: Recv failure Connection was reset” 的报错。这个问题通常是由网络连接问题或代理设置不正确导致的。在我的个人使用经验中,我亲自尝试了四种方法,它们都能够有效地解决这个报错。个人比较推荐方法二。
2024-11-27 19:45:34
8914
2
原创 定长滑动窗口--灵神题单(一刷基础)
首先我们先介绍一下滑动窗口的第一类型--定长;这里的介绍我就直接截图截取灵神写的题解了。对于出窗口的判断条件就是唯一的就是有边界-左边界+1>=限定长度。本文章大致思路为:先给出题目,如果题目比较难理解,在给出解释。然后给出少些思路,然后你自己去思考剩余部分,自己写代码。最后在给出代码,如果代码的效率低也会给出相应的优化。总的来说灵神的定长滑动窗口的基础题一共18道题。其中5道是会员题。
2024-11-25 11:20:18
825
3
原创 初步认识操作系统(Operator System)
管理者管理被管理者,实际上是先将被管理者的各种信息进行描述,然后再将多个被管理者的描述信息根据某种数据结构组织起来,最后管理者管理被管理者实际上就是对数据结构的管理。
2024-11-23 20:11:25
1113
2
原创 冯 • 诺依曼体系结构
后经过内存与CPU的处理返回到显示器,就完成了一次信息的聊天。然后在网络当中经过一系列处理(这里忽略网络处理细节),之后你朋友的网卡从网络当中获取到你所发的消息后,将该消息加载到内存当中,你朋友的CPU再从内存当中获取消息并对消息进行解包操作,然后将解包好的消息写回内存,最后你朋友的显示器从内存当中获取消息并显示在他的电脑上。对,你的思考是正确的,但是理解是有点问题的,其实一个程序运行时必须将其相应的各种数据全都加载出来,加载的地方就为内存,加载出来后,如果要进行操作与修改,这时候CPU就开始工作了。
2024-11-23 10:20:37
967
原创 在Linux下配置gitee与Github的远程仓库
注意,git push后,是输入你的账号与密码。这个步骤可以通过特殊设置省去,但是一开始还是不要太省。
2024-11-20 18:40:43
1071
3
原创 Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
本文介绍了yum 包管理工具、Vim 编辑器、gcc/g++ 编译器、gdb 调试器、编译原理及 Makefile 的使用,同时还配备了如何使用,以及图解。旨在帮助读者更好地理解和应用这些工具与技术。
2024-11-18 13:41:33
1289
10
原创 海量数据面试题
在大数据时代,海量数据处理已成为技术领域中的一项重要课题。无论是企业级应用、互联网平台,还是人工智能和机器学习的实现,都离不开对大规模数据的高效处理。而对于C++开发者来说,如何在面对海量数据时保证系统的高效性和可扩展性,已经成为面试中常见的考察内容。C++作为一种高性能的编程语言,凭借其接近硬件的操作和精细的内存管理,常常被用于构建对性能要求极高的系统。在海量数据的处理过程中,C++开发者需要不仅具备扎实的基础知识,还需掌握一些特殊的算法和数据结构,以应对各种挑战性的问题。
2024-11-15 23:14:02
1153
8
原创 利用滑动窗口解题
本篇文章还是以先介绍题目意思,然后再解释以下算法原理,最后再是给出代码的实现。但是与上篇文章不同的是,这篇文章回给出为什么要用滑动窗口解题,怎么想到的,以及滑动窗口的原理到底是什么。所以前两题会以最详细的方法进行说明,会先从暴力解法出发,进行一步一步的优化,从而到达其代码与滑动窗口类似,从而达到解释为什么用滑动窗口解题。滑动窗口(Sliding Window)是一种在数组或字符串等线性数据结构上进行子数组(或子字符串)操作的技术,常用于处理具有连续性或局部性质的问题。
2024-11-13 12:40:55
995
5
原创 Xshell,Shell的相关介绍与Linux中的权限问题
首先,先介绍一下我们学习Linux的工具:XshellXShell 是一个流行的 Windows 平台上的 SSH、Telnet 和 Rlogin 客户端,主要用于远程连接 Linux/Unix 系统。它的运行原理大致如下:1:协议支持: XShell 支持多种远程协议(如 SSH、Telnet、Rlogin 等)。最常用的是 SSH 协议,它提供了安全的加密通信。SSH(Secure Shell)通过加密对客户端和服务器之间的通信进行保护,以防止数据在网络中被窃听和篡改。2:建立连接。
2024-11-09 22:46:56
963
3
原创 利用双指针法解题
双指针是一种常用的算法技术,主要用于处理数组、链表等线性结构中的问题。它通过使用两个指针在数据结构中同时移动,从而达到有效解决问题的目的。这种方法通常能够减少空间复杂度或时间复杂度,或者使代码更加简洁。但是在这里的指针并非真正的指针它可以是数组的下标,亦或是链表的第k个值。
2024-10-30 23:02:06
793
4
原创 用哈希封装出unordered_set与unordered_map
上一篇文章已经介绍了如何去实现哈希表与哈希桶,那么这一篇文章就会讲解如何在上一篇文章的基础上进行修改与添加新内容通过封装来实现unordered_set与unordered_map。那么下面的封装就直接使用哈希桶来封装了,不用哈希表来进行封装了。
2024-10-28 21:03:31
639
1
原创 Linux下进行用户的切换与创建以及细微设置
然而对于新创建的普通用户,一般是对于系统来说是不信任的,那么对于这个新创建的用户,系统是不允许再此普通用户的身份下执行root权限的操作的,那么我们如何将其这个新创建的普通用户设置为系统所信任的用户呢?在Linux下,从使用上来说,我们一般所有的操作都是在普通用户下进行执行的,并且学习都是使用普通用户来学习的,即便是工作以后也是用普通用户,那么对于如果创建普通用户就显得及其重要。请不要轻易用-r选项;他会删除用户的同时删除用户所有的文件和目录,切记如果用户目录下有重要的文件,在删除前请备份。
2024-10-19 19:56:47
1204
1
原创 c++的哈希表、哈希桶的介绍与实现
这一篇文章大致实现详细介绍什么是哈希,然后再介绍什么是哈希表,怎么代码实现哈希表,然后再介绍哈希桶,怎么代码实现哈希桶,最后再介绍他俩有什么细节上的差别,与代码的一些细节优化。
2024-10-18 19:01:05
1170
1
原创 unordered_set、unordered_multiset、unordered_map、unordered_multimap的介绍及使用
unordered_set是不按特定顺序存储键值的关联式容器,其允许通过键值快速的索引到对应的元素。在unordered_set中,元素的值同时也是唯一地标识它的key。在内部,unordered_set中的元素没有按照任何特定的顺序排序,为了能在常数范围内找到指定的key,unordered_set将相同哈希值的键值放在相同的桶中。unordered_set容器通过key访问单个元素要比set快,但它通常在遍历元素子集的范围迭代方面效率较低。它的迭代器至少是前向迭代器。前向迭代器的特性。
2024-10-13 11:36:28
1001
3
原创 用一棵红黑树同时封装出map和set
再完成上面的代码后,我们的底层代码已经完成了,这时候已经是一个底层STL的红黑树了,已经已符合库里面的要求了,这时候我们是需要给他穿上对应的“衣服”,比如穿上set的“衣服”,那么这个穿上set的“衣服”,那么他就符合库里面set的要求了,同样map一样,这时候我们就需要实现set与map了。因此,上层容器map需要向底层红黑树提供一个仿函数,用于获取T当中的键值Key,这样一来,当底层红黑树当中需要比较两个结点的键值时,就可以通过这个仿函数来获取T当中的键值了。我们就可以使用仿函数了。
2024-10-11 18:50:28
913
原创 红黑树源代码(进阶与细节解释)
看完前两篇的文章,相信对于红黑树有了一定的了解,知道红黑树是怎么样子进行插入的,是怎么样进行查找的,知道了底层是怎么样子的,知道了其与AVL树,二叉搜索树有什么区别了。但是对于set,map的底层又全是红黑树,set与map的区别就是其键值对一个是k,k型,一个是k,v型的,所以就有了封装,(对于封装后面会讲解什么是封装)二者底层全是同一份的红黑树,但是前面两篇文章的红黑树要不只能使用与k,k型,要不就是k,v型,所以就要对红黑树的源代码进行修改,进行细节上的修饰与进阶。
2024-10-08 18:12:13
795
原创 c++ 红黑树(带头结点)(k,k型)
想必在看到这篇文章的时候,你一定是带着问题去搜索的,一定是对红黑树已经有了初步大致的认识,已经知道了红黑树的性质与普通红黑树的功能与如何代码实现,但是莫一天突然看到了带头结点的红黑树,肯定是对此有一些疑惑的,或者来说在代码的实现上自己存在着某些疑惑。那么话不多说,就先给出红黑树(带头结点)的完整实现代码。然后再给出相应的详细解释。
2024-09-15 15:15:04
836
1
原创 c++ 红黑树(自平衡二叉搜索树)(k,v型)
因为红黑树是一种特殊的AVL树(但少了平衡因子的存在),所以其结点的定义是在AVL树上加上新的成员变量,用于表示结点的颜色。RED,BLACK,//三叉链, _kv(kv){}首先我们在默认构造上,默认构造结点的颜色默认情况下为红色所以为什么构造结点时,默认将结点的颜色设置为红色?这是因为:当我们向红黑树插入结点时,若我们插入的是黑色结点,那么插入路径上黑色结点的数目就比其他路径上黑色结点的数目多了一个,即破坏了红黑树的性质4,此时我们就需要对红黑树进行调整。
2024-08-31 22:43:15
1283
1
原创 AVL树(平衡二叉搜索树)
int _bf;, _bf(0), _kv(kv){}某节点的左子树与右子树的高度(深度)差即为该节点的平衡因子(BF,Balance Factor),平衡二叉树中不存在平衡因子大于 1或小于-1的节点。在一棵平衡二叉树中,节点的平衡因子只能取 0 、1 或者 -1 ,分别对应着左右子树等高,左子树比较高,右子树比较高。
2024-08-16 15:10:35
1999
2
原创 set、map、multiset、multimap的介绍及使用以及区别,注意事项
set是按照一定次序存储元素的容器,使用set的迭代器遍历set中的元素,可以得到有序序列。set当中存储元素的value都是唯一的,不可以重复,因此可以使用set进行去重。set默认是升序的,但是其内部默认不是按照大于比较,而是按照小于比较。set中的元素不能被修改,因为set在底层是用二叉搜索树来实现的,若是对二叉搜索树当中某个结点的值进行了修改,那么这棵树将不再是二叉搜索树。
2024-08-14 13:48:40
932
1
原创 二叉搜索树
对于其中得中序遍历,可以看到上面得函数是没有带参数的,这是因为方便随时检查,简单的来说,在main的作用域内,如果中序遍历带上参数根节点,那么如果在代码中途进行检测的时候还需要保存根节点然后进行传参进行遍历,这显然是略有麻烦的,所以最好实现一个二叉搜索树的中序遍历接口,当我们对二叉搜索树进行一次操作后,可以调用中序遍历接口对二叉搜索树进行遍历,若二叉搜索树进行操作后的遍历结果仍为升序,则可以初步判断所实现的接口是正确。故而左节点,根节点,右节点的大小关系为:左节点
2024-08-12 22:51:05
1057
原创 c++--多态
上一篇文章已经介绍了c++的继承,那么这篇文章将会介绍多态。看完多态的概念,你一定会感觉脑子雾蒙蒙的,那么我们先以举一个例子,来给这朦胧大致勾勒出一个画面,在此之前,先介绍一个名词虚函数,(要注意与虚拟继承区分)重定义: 重定义(隐藏)只要求函数名相同(但要符合重载的要求,其实两者实际上就是重载);重定义下:在这种情况下,如果通过父类指针或引用调用函数,会调用父类的函数而不是子类。重定义(或称为隐藏)发生的原因是因为函数名相同但参数列表不同,导致编译器无法确定调用哪一个版本的函数。
2024-07-27 15:52:14
1110
1
原创 c++--继承
c++作为面向对象的语言三大特点其中之一就是继承,那么继承到底有何奥妙呢?继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用,继承就是类方法的复用。
2024-07-25 22:45:02
967
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人