自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python基础-环境安装

文章内容为Python和PyCharm的安装与删除的步骤

2023-02-21 11:00:49 670 1

原创 Games101-Windows下VScode环境配置

在Windows环境下使用VSCode作业环境的配置,包括MinGW,CMake,Eigen,OpenCV

2022-10-08 18:57:04 2469 1

原创 负载均衡的OJ系统

使用C++实现的一个在线OJ系统,可以实现展示题目列表并通过题目做题的功能,用户可以提交自己的代码,后端的服务器会自动负载均衡式的选择编译服务编译代码,最终给用户返回结果,并且引入了文件版和数据库版两个版本的题库。......

2022-08-18 13:03:21 1546 6

原创 MySQL的复合查询

包含多表查询,子查询,合并查询,内外连接的查询方法

2022-08-13 08:35:13 876

原创 MySQL的内置函数

罗列了MySQL的内置函数含义以及用法,包含日期函数,字符串函数,数学函数和一些其他函数。

2022-08-12 20:39:41 462

原创 数据库基础

主要为数据库得一些概念性的基础知识,包括什么是数据库,数据库的基本结构,SQL语句的分类,数据库的数据类型,什么是约束。

2022-08-11 14:01:15 476

原创 多路转接/多路复用

本篇从什么是IO开始,讲解了IO的步骤,五种常见的IO模型,如何进行高效的IO,介绍了多路转接的原理,为什么多路转接可以提高IO效率,还包含了三种多路转接服务器的编写方法

2022-08-10 16:23:50 397

原创 网络层与数据链路层

包含IP协议与mac帧报文格式以及各个字段的意义,报文如何在网络层与数据链路层传输 ,以及各种相关知识

2022-08-09 20:57:50 1809

原创 TCP/UDP协议

本篇主要内容是传输层的TCP与UDP协议的讲解,包含UDP协议的报头格式,讲解了UDP的特点,着重介绍了TCP协议,包括TCP协议报头的格式,每个字段的作用,以及TCP协议的各种机制,如何在保证可靠性的基础上提高效率,并包含建立连接与断开连接时三次握手与四次挥手过程与状态变化等。...

2022-08-07 13:45:32 1458

原创 HTTP/HTTPS协议

本篇主要内容是应用层的http/https协议的讲解,详细介绍了http协议的报文格式,属性,状态码,请求方法,cookie和sessoin的工作原理,还要https与http的区别,https的通信原理,证书机制等内容

2022-08-01 08:52:39 858

原创 基于boost库的搜索引擎

本篇主要内容是编写一个基于boost文档的搜索引擎,详细介绍了建立搜索引擎的各个步骤,主要分为4大模块,本别是Parser数据清理模块,Index建立索引模块,Searcher搜索模块和http_server网络服务模块,每一个模块都有详细的实现思路,讲解了如何从零开始实现一个站内搜索引擎,包含了一部分前端的内容,以及该项目可以的拓展方向。...

2022-07-21 16:13:09 979

原创 网络套接字编程

本篇的内容包括套接字编程的一些前置预备知识比如IP地址,端口号,TCP与UDP协议,网络字节序等知识的讲解,套接字编程接口,并且包含了如何写一个简单的基于UDP与TCP的网络服务,针对TCP协议,还实现了多进程,多线程,以及线程池版本。以次希望能够建立起对TCP/IP协议栈的应用层的基本认识...

2022-07-12 15:32:18 914

原创 【C++】类型转换

本篇主要对比了C与C++的类型转换方式,分析了C++中规范类型转换的原因并讲解了C++的四种规范的类型转换关键字的使用方法。

2022-07-08 21:11:41 339 2

原创 【C++】特殊类的设计

本篇的内容包括设计了几个简单的特殊类,着重介绍了单例模式的懒汉模式实现和饿汉模式实现,并对其优缺点进行对比。

2022-07-08 15:07:11 270

原创 【C++】智能指针

本篇主要从智能指针存在的必要性入手,讲解了智能指针的原理和特性,以及智能指针的发展历史,并对常用的unique_ptr和shared_ptr进行了模拟实现,以及删除器相关的内容

2022-07-07 21:22:44 479

原创 计算机网络基础知识

本篇的内容主要是对计算机网络的一些基本概念进行讲解,比如广域网,局域网,协议分层,协议栈,报文,报头,IP地址,Mac地址。以及网络通信的基本流程,可以让读者对网络的传输过程已经原理有一个基本的了解。............

2022-07-04 14:36:13 823

原创 【C++】异常

本篇介绍了C++中异常的概念,已经异常的使用方法,了解了自定义异常的继承体系,异常使用的规范已经异常的优缺点。

2022-07-01 00:04:29 186

原创 Linux进程控制

本篇的内容为详细讲解了子进程的创建,进程退出,进程等待,进程程序替换四个方面的相关知识。以及在Linux平台下对进程的控制,最后会根据程序替换实现一个简易的shell程序。

2022-06-28 17:48:49 339

原创 什么是进程地址空间

在学习C语言时,我们对内存的划分是这样的:

2022-05-31 15:42:25 766 1

原创 进程优先级与环境变量

文章目录进程优先级基本概念查看方法PRI vs NI调整优先级环境变量概念环境变量相关的命令:环境变量的组织方式全局变量的全局属性进程优先级为什么会有优先级的概念?资源太少,其本质是分配资源的一种方式基本概念CPU资源分配的先后顺序,就是指进程的优先权(priority)。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能查看方法ps -l:查看所有

2022-05-27 21:29:01 422

原创 操作系统与进程

文章目录计算机的工作过程操作系统的概念什么是进程查看进程的命令计算机的工作过程我们的计算机是由一个个硬件组成的,这些硬件大体上可以分为四类:1.输入设备(如键盘,磁盘,网卡,显卡,话筒,摄像头等)2.输出设备(如显示器,磁盘,网卡,显卡,音响等)输入设备和输出设备统称为外设3.存储器(就是指内存)4.运算器&&控制器(并称为中央处理器,也就是CPU)我们所使用的计算机,基本上都遵循冯诺依曼体系,其工作过程如下图可以发现,当我们让CPU处理数据时,并不是直接把数据传给C

2022-05-26 21:39:50 279

原创 Linux中进程的状态

进程的状态信息存储在进程的task_struct(PCB)中。进程状态的意义是方便操作系统快速的判断进程,完成特定的功能,比如调度,其本质是一种分类。下面是Linux内核源码对状态的定义 static const char * const task_state_array[] = {“R(running)”, // 0“S (sleeping)”, // 1“D (disk sleep)”, // 2“T (stopped)”, // 4“t (tracing stop)”, // 8“X

2022-05-26 21:38:29 1215

原创 Linux系统的权限管理

文章目录什么是权限什么是权限什么是权限?通俗的理解就是一件事是否允许被特点的人做。我打一个比方,比如我是一个学生,那么我进学校这件事就允许被我做,即学生就有进入学校的权限,再比如我不是学生是外卖员,那我一般情况下就不可以进入学校,我只能把外卖送到学校门口,因为我没有进入学校的权限。也就是说进入学校这件事它本身是有天然的权限属性的,可以进入还是不可以进入,而这些权限约束的是不同的人,即权限=人+事物的属性。在Linux系统中,事物的属性对应的就是文件的权限属性,其约束的人就是访问这个文件的不同类型的用

2022-05-13 18:35:59 288

原创 【C++】引用

文章目录什么是引用引用的特性引用的应用场景什么是引用引用(reference)是C++对C语言的重要扩充。引用就是给一个已经存在的变量取了一个别名,并不是创建一个新的变量,所以编译器不会给引用变量开辟内存空间,它和被它引用的变量公用一块内存空间。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~如何理解上面的概念呢?首先我们在创建一个变量时,是需要给他一个变量名的int a;上面我们就创建了一个int类型的变量,它的变量名就是a。在我们创建这个变量的

2022-05-08 14:33:00 281

原创 排序算法-计数排序

文章目录基本思想计数排序的实现特性基本思想计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。 操作分为两步:1.统计相同元素出现次数2.根据统计的结果将序列回收到原来的序列中其排序的流程图如下当我们要进行排序时,因为下标是从小到大的,所以我们只需要遍历count数组,根据count数组中记录的元素出现次数把对应次数的下边重新填到待排数组中这样就完成了排序的过程。在刚刚的例子中我们按照count下标与待排数组值一一对应的方式建立映射关系,这种建立映射的方法称为绝对映射而我们排序的数据

2022-05-06 09:13:46 389

原创 排序算法-归并排序

文章目录基本思想递归方法的实现基本思想归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已经有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。下面是一次归并排序的流程图递归方法的实现通过对排序流程的了解,我们发现其实排序的过程大致可以分为两个部分。首先需要对被排数据进行分割,直到把每组分割的只剩一个数据。

2022-05-06 00:07:05 1383

原创 排序算法-快速排序详解

文章目录交换排序的基本思想快速排序的基本思想hoare版本基本思想hoare版本的实现挖坑法基本思想挖坑法的实现快速排序对C语言的初学者来说应该是不陌生的,在我们初学C语言时,大概率都用过一个库函数叫qsort,这个就是快排的库函数,而快排到底是如何实现的呢?本篇我会详细介绍一下快排的原理与实现。交换排序的基本思想首先,快速排序算法属于交换排序,交换排序基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较

2022-04-04 07:00:00 1495 2

原创 排序算法-选择排序

文章目录直接选择排序基本思想特性优化与实现堆排序直接选择排序基本思想在一个待排数组中找到最小或者最大的元素,然后把他放在最左边或者最右边,再以剩下的数组作为待排数组,依次排序,直到排完每个数组。下图就是一个排列升序的过程。特性插入排序的过程是非常好理解的,但是这种方法效率低,排序时在遍历数组的时候还要再遍历后面的部分寻找最大或最小值,时间复杂度为O(N2)。是在原数组上进行比较和交换,不创建其他的空间,所以空间复杂度为O(1)。稳定性的话在排序过程中肯定是不能保证稳定的,前面的相同元素完全

2022-04-03 07:00:00 325

原创 【C++】函数重载

文章目录函数重载的概念重载的原理在自然语言中一个词可以有多种含义,人们可以通过上下文来判断这个词的真是含义,即该词被重载了比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!”函数重载的概念C++允许在同一个作用域声明几个功能类似的同名函数。这些函数要满足三个不同:参数的个数,参数的类型和参数的顺序,即构成函数重载。我们来看一下构成重载的几个函数int f(int a,int b);double f(doubl

2022-03-26 21:33:52 2467

原创 【C++】缺省参数

什么是缺省参数缺省参数是**声明或定义函数时**为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。就像是函数的一个备胎一样,当有实参传给函数时,就没他什么事了,当没有参数传给函数时,它才能上位,命运也是比较悲惨。

2022-03-26 16:53:43 2158

原创 【C++】命名空间

什么是命名空间我们在使用C语言写程序时,有可能会遇到重命名的情况,即定义的两个变量名字相同,这种情况在C语言中是不被允许的,只能通过修改其中一个变量的名称来避免这个问题,即使我们自己可以不使用重名的变量,但有可能我们定义的变量名与我们使用的库里的函数名会有冲突,如果我们不知道那也会造成命名冲突,或者比如有很多人同时在写一个项目时,每个人都会定义自己的变量,那就极有可能出现两个人定义的变量名相同的问题,C语言就无法解决这样的问题了,所以为了解决这些问题,C

2022-03-26 16:06:39 314

原创 排序算法-插入排序

直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。就类似于我们在玩扑克牌时把扑克牌从小到大排序的过程,从我们拿到牌以后,每摸一张牌,就把摸到的牌插入到我们之前排好的牌中,当我们摸完牌之后牌就是有序的。

2022-03-22 01:17:36 5989

原创 数据结构-二叉树的链式存储

文章目录二叉树的链式结构链式结构的遍历二叉树链式存储的实现二叉树节点的创建前序遍历中序遍历后序遍历二叉树元素个数叶节点的个数第k层节点的个数查找元素二叉树销毁二叉树的层序遍历判断是否为完全二叉树二叉树的链式结构二叉树的存储结构有顺序结构和链式结构两种,顺序结构我已经在上篇进行了详细的讲解,地址:数据结构-二叉树的顺序存储与堆(堆排序),本篇我们就主要讲解二叉树的链式存储。二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右

2022-03-20 19:50:03 16392

原创 数据结构-二叉树的顺序存储与堆(堆排序)

文章目录树什么是树树的表示方法二叉树什么是二叉树特殊的二叉树树什么是树树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。在树中有几个名词,我现在画一个树然后我们来对照着理解一下这些名词分别指什么根节点:树中有一个特殊的节点,没有父节点,称为根节点。节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I

2022-03-19 00:34:25 1846

原创 数据结构-栈和队列详解

本篇主要介绍了栈和队列这两种数据结构,了解他们的原理和区别,并且会讲解如何用C语言实现他们的主要接口文章目录栈什么是栈栈的实现初始化接口销毁接口入栈出栈获取栈顶元素检测栈是否为空获取栈的元素个数栈的全部代码队列队列的概念队列的实现栈什么是栈栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。我来画个图大伙感受一下上图就是数据进栈和出栈的过程,根据栈

2022-03-17 19:43:17 1015

原创 数据结构-链表(含全部实现代码)

本篇的内容是对链表的一个介绍,并且会使用C语言实现链表的几个主要接口。目录链表的概念与结构链表的概念与结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。一个链表由n个节点组成,每一个节点都是一个结构体,这个结构体里的一个成员是该节点存储的数据,另一个成员是指向下一个节点的指针。其结构如下上图只是一种结构的链表,并不是所有的链表都是这样的结构,在实际中链表的结构非常多样,有以下几种情况:是否带头,单向还是双向,是否循环。共23=8种

2022-03-12 21:47:29 7096 2

原创 数据结构-动态顺序表的实现(含全部代码)

本篇的内容是使用C语言实现一个动态顺序表文章目录顺序表的概念及结构动态顺序表的接口实现初始化接口销毁接口打印接口检查是否增容接口尾插接口头插接口尾删接口头删接口查找接口在指定位置插入元素接口删除指定位置数据接口修改指定位置元素接口动态顺序表代码顺序表的概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。我们可以把顺序表理解为一个数组顺序表一般可以分为:静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。

2022-03-07 20:57:36 1614

原创 什么是时间复杂度与空间复杂度

目录算法效率时间复杂度概念大O的线性表示法时间复杂度举例空间复杂度空间复杂度的定义空间复杂度举例时间复杂度与空间复杂度是用来分析一个算法的效率的。算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已

2022-03-02 18:41:47 31253 9

原创 C语言-动态内存管理

目录什么是动态内存分配动态内存函数malloccalloc一级目录一级目录二级目录三级目录什么是动态内存分配在我们创建一个变量或数组时,就会在内存中开辟一块空间,但是这样开辟空间的方式有两个特点:空间开辟大小是固定的。数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。这时候就只能试试动态存开辟了。动态内存函数在我们开辟动态内存的方法是用动态

2022-02-21 20:19:09 648

原创 C语言-结构体Ⅱ

目录结构体内存对齐结构体传参结构体实现位段什么是位段位段在内存中的存储位段的问题结构体内存对齐当我们创建一个结构体变量时,内存就会开辟一块空间,那么在创建结构体变量时内存到底是怎么开辟空间的呢?会开辟多大的空间呢?我们来看一下下面的代码struct S{ int i; char c; char b;};struct G{ char c; int i; char b;};int main(){ struct S u; struct G g; printf("%d\n"

2022-02-20 22:00:36 855

空空如也

空空如也

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

TA关注的人

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