自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

敲代码嘞~的博客

每天敲一敲,延年又益寿

  • 博客(92)
  • 收藏
  • 关注

原创 在线五子棋项目测试用例

2025-04-01 18:44:02 102

原创 C语言连接数据库

接下来我简单的介绍一下怎么用C语言连接数据库。

2024-12-06 10:37:55 609

原创 C++正则库

简单的正则表达式

2024-11-11 18:57:32 542

原创 Linux 传输层UDP

表示UDP数据报文的长度,包括头部和数据部分,占用2个字节。由于UDP报头长度固定为8字节,因此实际UDP报文的数据长度最大为65527字节。Udp协议首部中有一个16位的最大长度,也就是说一个Udp能传输的数据报最大长度是64K(包含Udp首部)。因为UDP协议格式的前8个字节都是固定的,所以只需要将前8个字节进行分离,这样就能得到报文的有效载荷。从前8个字节中,找到目的端口,即可将找到需要启动的PCB进程,然后只需要将有效载荷交给该进程即可。UDP数据字段占用0个或多个字节,是实际传输的数据部分。

2024-10-05 20:09:45 1115

原创 Linux 应用层协议HTTP

%、#等,当URL的内容中含有这些特殊字符的话,如果不进行处理的话,会影响URL的格式,导致解析错误。将需要转码的字符转为 16 进制, 然后从右到左, 取 4 位(不足 4 位直接处理), 每 2 位做一位, 前面加上%, 编码成%XY 格式。所有的资源都是在服务器端,我们用http协议找到该资源,然后用URL进行标识,然后再通过http协议网络进行返回。既然是协议,主要的作用就是为了统一,统一网络中数据的格式,来让所有设备都能够正确的解析,得到正确的数据。Linux系统中,一切皆文件,资源也是文件。

2024-10-03 22:57:57 1293

原创 每日一题:二分查找

给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]输入:nums = [], target = 0输出:[-1,-1]

2024-10-03 01:42:27 795

原创 每日一题:⻓度最⼩的⼦数组

纯暴力的话,就是用两个循环变量,代表一个区间的左端点和右端点,然后再用一个指针去循环这个区间得到这个区间的区间和。其实是不需要的,因为当区间和大于等于target的时候,我们将左边界向右移动,这时该区间和一定小于之前,我们只需要继续往右移动。我们在双重循环之前先求出该数组的前缀和,这样的话获得区间和的操作就是O(1)根据上面的步骤,我们真的需要每次都需要j从i的位置开始遍历吗?我们通过优化掉两个循环中的获取区间和的循环,降低了一层循环。时间复杂度:O(n³)时间复杂度:O(n²)时间复杂度:O(n)

2024-09-26 21:40:31 485

原创 Linux 应用层自定义协议与序列化

在用户在网络中发送的信息类型不都是字符串,有可能是整型,浮点数,自定义类型等等,将不同的类型通过网络发送给另外一个客户端,然后进行识别明显是比较困难的,从发送方的发送缓冲区把数据通过协议栈和网络拷贝给接收方的接收缓冲区。用于将JSON格式的字符串解析为Json::Value对象。也就是说客户端可能发送的不是一个完整报文。也就是说客户端可能发送的不是一个完整报文。有两个缓冲区,读写不受到冲突。本质就是在维护同步关系!发送缓冲区和接收缓冲区。手动分割完整的报文。

2024-09-25 23:54:33 1330

原创 每日一题:三数之和、四数之和

我们需要先将这个数组从小到大排序,然后定义三个嵌套循环i、j、k,让每个循环变量的初始值等于上一个循环变量+1的值。然后将满足条件的i,j,k下标对应的数添加到set里面进行去重。首先,我们对这个数组进行排序,那这个数组就会有单调性。假如我们先固定一个数a,假设这个数是答案的一部分,然后再去寻找另外两个数的和是0 - a。这个也和三数之和的双指针算法类似,唯一不同的就是需要用到两个for循环进行固定数,然后用一个双指针算法查找剩余数。同样的有四个嵌套for循环来进行遍历,找到答案,然后用set进行去重。

2024-09-20 13:31:57 469

原创 每日一题:移动零

我们先不考虑用什么算法进行解答,如果只用朴素法的话,我们肯定是先从左往右找到第一个零元素和第一个非零元素,然后将这两个数据进行交换,然后接着往后找到第二个零元素和非零元素进行交换,直到指向零元素的指针指向了数组的尾部结束。有题目可以知道,这个主要是让我们将这个数组中的零和非零元素进行分离,并且保证非零元素的相对顺序。= 0的时候,交换dest+1和cur位置的元素。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。当num[cur] == 0的时候,不做处理。

2024-09-12 00:09:06 402

原创 Linux 网络基础概念

TCP(传输层)IP(网络层)计算机内部都是存在协议的。TCP/IP是一种解决方案。TCP/IP协议能分层是因为问题的本身就是分层的。

2024-09-10 11:59:42 1492

原创 Linux 多线程

将物理内存的页框(struct page)和文件(struct file)关联起来,这个页框就是文件缓冲区。连续的代码地址构成的代码块。IMPORTANT]主线程应该最后退出。理由是要和子进程一样,退出信息要被父进程接收。保证主线程最后退出:用pthread_join函数来进行保证,如果主线程先完成部分代码,会等待新线程。IMPORTANT]信号量:是一个计数器,是资源的预订机制。预定:在外部可以不判断资源是否满足,就可以直到内部资源的情况!

2024-08-24 00:44:02 1342

原创 C++进阶(14)类型转换、IO流

适用于类型相似的内置类型(整型、浮点数、字符型)之间进行类型转化。比如:整型和字符型之间,整型和浮点数之间。输入输出是有缓冲区的概念的,根据Linux中学的一切皆文件,大概的也能明白(因为文件里面有缓冲区)。C++不仅仅兼容C的类型转换,还有一些自定义类型之间的转换。当两个类型不是严格的相同的时候,就会有类型转换的问题。进行文件操作的时候只需要包含fstream即可。适用于整型和指针之间,指针和指针之间。自定义类型 -> 自定义类型。内置类型 -> 自定义类型。自定义类型 -> 内置类型。

2024-08-20 22:21:04 644

原创 C++进阶(13)特殊类设计

如果一个类不能被继承的化,可以用final关键字进行修饰这个类;也可以将该类的构造函数进行私有化,在派生类构造中,钓不到基类的构造,间接的禁止该类被继承。如果想要用户只能在堆上创建类的话,那就不能让用户直接访问到构造函数和赋值拷贝,因为这种默认的方式都是在栈上创建类对象的。类的拷贝只会在两个场景中出现:一个是构造的时候—拷贝构造,另一个则是赋值的时候。因为只能在栈上创建,所以只需要将new和delete。不管将来用不用,程序启动时就创建一个唯一的实例对象。延迟加载,当需要用到时,才创建对象。

2024-08-20 01:11:13 462

原创 Linux 信号

进程不退出,进程要切换,所以要把cpu寄存器里面的上下文数据要被保存,过了一段时间后,该进程的上下文要恢复到cpu中,然后又报错,陷入死循环。// 下述的例子中,描述了问题*a = 10;std::cout

2024-08-17 00:01:26 944

原创 Linux SystemV(共享内存(*)、消息队列、信号量)

IPC信号量和共享内存,消息队列一样,也必须先让不同的进程看到同一个“计数器”!--- 保护临界资源安全的前提是信号量是安全的。--- 资源被访问,就是通过代码访问(朴素)代码 = 访问共享资源的代码(临界资源) + 不访问共享资源的代码(非临界资源)。--- 如果某场电影没有票了,就意味着,信号量为0,不能被申请。共享内存是所有进程IPC速度最快的,因为共享内存大大减少了数据的拷贝次数!多元信号量:网吧中的电脑,对于电脑,有很多台,其信号量大于2。一个进程,向另一个进程发送有类型的数据块的方式。

2024-08-14 01:02:15 960

原创 Linux 进程间通信之管道

管道文件:管道文件是一种特殊的文件,它存在于内存中,而不是磁盘上。它允许一个进程的输出直接作为另一个进程的输入,从而实现进程间的数据交换和协同工作。

2024-08-12 21:43:28 1171

原创 Linux 文件系统、动静态库

本质就是把.o文件打包。

2024-08-08 23:55:12 1405

原创 Linux 文件、重定向、缓冲区

欢迎大家指教!!!

2024-08-08 00:57:08 780

原创 Linux 进程优先级、程序地址空间、进程控制

进程获取某种资源(cpu)的先后顺序。task_struct 进程控制块 -> int prio;Linux中优先级数字越小,优先级越高。优先级是能执行,表示执行的顺序;而权限是能不能执行的问题。

2024-08-04 22:00:03 1281 1

原创 C++进阶(12)智能指针

智能指针在构造的时候开辟空间,当智能指针生命周期结束则会自动调用析构函数释放空间。解决问题:对于new开辟的时候出现异常,导致之前开辟的空间没有手动释放,内存泄露。头文件:智能指针有三种:auto_ptrunique_ptrshared_ptr。

2024-07-31 19:26:35 1178

原创 C++进阶(11)异常

异常:是指程序在运行的过程中发生的一些异常事件,如,除零溢出、数组下标越界、所要读取的文件不存在、空指针、内存不足、访问非法内存等。在实际开发中,异常是一个类。

2024-07-31 01:24:49 764

原创 C++进阶(10)线程库

线程库第二种 --- join:第三种 --- detach:三、互斥量(锁)引入前:引入后:四、lock_guard&&unique_lock1、lock_guard2、unique_lock五、原子操作谢谢大家!!!

2024-07-30 18:17:16 778

原创 C++进阶(9)C++11

如果你没有实现移动赋值重载,且没有实现析构函数、拷贝构造,拷贝复制重载中的任意一个,那么编译器会默认生成一个默认的移动赋值重载。如果你没有实现移动构造函数,且没有实现析构函数、拷贝构造,拷贝复制重载中的任意一个,那么编译器会默认生成一个默认的移动构造。只有右值引用本身处理成左值,才能实现移动构造和移动复制,转移资源。模板的可变参数应该是在编译的时候进行解析的,而不是在运行时进行解析。容器中emplace系列的参数都是传的参数包。右值包括:匿名对象,字面常量,临时对象。深拷贝的类才有转移资源的移动系列函数。

2024-07-27 22:34:09 1010

原创 Linux 冯诺依曼体系、操作系统、进程概念、进程状态、进程切换

我们自己写的代码形成可执行程序 == 系统命令 == 可执行文件、在Linux运行的大部分执行操作,本质上都是运行进程!:学生可以通过一张表来进行记录,这张表上写了学生的各种信息 ---链表(对应存储的数据结构)对软硬件资源进行管理(手段),为用户提供一个良好(稳定、安全、高效)的运行环境(目的)广义的概念:操作系统的内核+操作系统的外壳周边程序(给用户提供使用系统的方式)。2)外设(输入输出)的数据,不直接给cpu,而是先放入内存中。,包括进程的所有属性和一个内存指针(指向对应的代码和属性)。

2024-07-26 22:58:24 794

原创 C/C++进阶 (8)哈希表(STL)

个人主页:专题分栏:本文着重于模拟实现哈希表,并非是哈希表的使用。实现的哈希表的底层用的是线性探测法,并非是哈希桶。

2024-07-24 10:18:54 1580 2

原创 C/C++ 进阶(7)模拟实现map/set

map和set都是关联性容器,底层都是用红黑树写的。存的Key值都是唯一的,不重复。map存的是键值对(Key—Value)。set存的是键值(Key)。

2024-07-12 11:41:46 450

原创 Linux 环境基础开发工具使用

可以理解成windows上的安装程序。(在Linux上安装软件,通常上是下载到程序的源代码,然后进行编译得到可执行程序。为了方便,会将一些软件提前进行编译好,然后做成一个软件包放在服务器上,通过软件包管理器直接获得这个软件包,直接安装)yum是一个软件下载管理的客户端。(类似于小米应用商城、华为应用商城...)

2024-07-07 23:10:08 888

原创 C/C++ 进阶(6)红黑树

红黑树虽然不要求是平衡的,但是该树的最长路径不超过最短路径的二倍。4、对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点。插入一个新节点之后,会遇到几种情况,需要我们自己对红黑树进行调整,来保证其性质的正确。如果为黑色的话,性质4可能会不满足,相较于性质3来说,调整起来会比较麻烦。5、每个叶子节点(这里的叶子节点指的是null节点)的颜色都是黑色的。3、如果一个节点的颜色是红色,则该节点的左右孩子节点都是黑色。1、每个节点的颜色不是红色就是黑色。2、根节点的颜色是黑色。

2024-06-11 23:01:43 1077

原创 C/C++ 进阶(5)二叉平衡搜索树(AVL树)

以当前节点为根节点的子树的高度发生了变化,则以当前节点为其中的一个节点的子树的高度也同样发生了变化,所以需要进行调整。右单旋的变换:sublr 变成 parent 的左子树,将parent 变成 subl 的右子树。二叉平衡搜索树,在对节点的结构进行定义的时候多添加了一个平衡因子的变量(bf),注意新的节点插入在 b 子树的左子树和右子树的时候,平衡因子的变化。注意新的节点插入在 c 子树的左子树和右子树的时候,平衡因子的变化。:在进行旋转的时候,对于每个节点的指针变化,要特别的细心。

2024-06-04 22:08:19 686

原创 C/C++ 进阶(4)二叉搜索树

首先我们先找到要删除节点的右子树中的最小值,然后和要删除的节点进行值替换,最后我们要删除掉替换后的节点。判断要删除的节点是其父节点的左孩子还是右孩子。如果要删除 14 这个节点,我们需要让 14 的父节点的对应指针指向 14 的左子树。如果要删除 7 这个叶子节点,我们需要让 7 的父节点的右孩子指向nullptr。总结:先替换,然后删除替换后的节点(判断替换后的节点的类型,然后用对应的删除方法)如果要删除 10 这个节点,我们需要让 10 的父节点指向 10 的右子树。总结:让要删除节点的父节点的。

2024-05-30 11:26:09 1067

原创 C++ 进阶(3)虚函数表解析

在这个虚函数表中,主要有一个类的虚函数的地址。当我们用基类指针操作派生类的时候,其指明了实际应该调用的函数。

2024-05-22 16:53:46 510

原创 C/C++ 进阶(2)多态

1、必须通过基类的指针或者引用调用虚函数。2、被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。public:// 用virtual修饰的函数cout

2024-05-21 22:14:47 796 2

原创 C/C++ 进阶(1)继承

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。对于不同的类,可能会有相同的属性,如果在每一个类中都存一份相同的属性,可能会属性冗余。这样我们就可以把相同的属性拿出来,单独设置成一个类,然后成为父类(基类)这个表格挺重要的!!!

2024-05-18 22:28:36 789

原创 C/C++ 入门(12)模板进阶

一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生。2. 增强了代码的灵活性。

2024-05-14 00:30:32 889

原创 C/C++ 入门(11)stack、queue(STL)

适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。stack、queue、priority_queue底层都是容器适配器。deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。deque通过多个数组实现的。

2024-05-13 14:59:42 882

原创 Linux 权限

就是通过一定的条件拦住一部分人,给另一部分人权力,来访问某种资源。sudo:super user do(干超级用户干的事)说白了就是一个提权功能,让一个非root用户拥有root用户的操作权限。

2024-05-11 22:01:34 813 1

原创 C/C++ 入门(10)list类(STL)

欢迎来指教!

2024-05-08 20:07:15 1015

原创 C/C++ 入门(9)编译链接

缺省参数只写在函数声明的时候。

2024-04-29 17:48:35 339

原创 C/C++ 入门(8)vector类(STL)

问题是关键呦

2024-04-25 15:40:53 456 2

KTV点歌程序-大一C语言课设

大一c语言课设源代码,用链表写的,可以借鉴。 通过这次C语言课设,学生们可以巩固以前所学的知识,同时学到很多在书本上所没有学到过的知识。课设使学生懂得了理论与实际相结合是很重要的,只有把所学的理论知识与实际相结合起来,才能真正为社会服务,从而提高自己的实际动手能力和独立思考能力。在设计的过程中,学生们会遇到各种各样的问题,同时也会发现自己的不足之处,对以前所学的知识理解得不够深刻,掌握得不够牢固。通过课设,学生们的自信心得到提高,他们也会写程序的乐趣和思维。还有和同学分工合作的经验,深刻体会到代码风格和可读性对于读懂别人的代码的重要性。 而且写课设一般都需要答辩,答辩时一定要控制好自己的语速和仪态,进行毕业论文答辩的同学一般都是首次。无数事实证明,他们论文答辩时,说话速度往往越来越快,以致毕业答辩委员会成员听不清楚,影响了毕业答辩成绩。故毕业答辩学生一定要注意在论文答辩过程中的语流速度,要有急有缓,有轻有重,不能像连珠炮似地轰向听众。在答辩时,学生要注意仪态与风度。 最后,祝愿大家都有一个好的编程能力和编程的思维。与诸共勉!

2023-09-12

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

TA关注的人

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