- 博客(48)
- 收藏
- 关注
原创 Linux下的软链接和硬链接
Linux下的软链接和硬链接1、硬链接(hard link)1.1、创建指令1.2、概念及原理2、软链接(soft link)2.1、创建指令2.2、概念及原理3、区别1、硬链接(hard link)1.1、创建指令ln [原文件名] [要创建的硬链接的文件名]1.2、概念及原理A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其
2020-06-25 18:49:41
216
原创 HTTP的断点续传原理
HTTP的断点续传原理1、引言2、原理2.1、header里的关键字1、引言在以前的时候,下载视频或者软件,如果下载到一半,突然网断了,这时候再去下载的时候则需要从头下载,然后又下载到一半,又断了。。。 。。。于是乎诞生了HTTP的断点续传,断点续传是在HTTP/1.1开始支持的功能,它可以让下载到一半的视频或者软件继续下载,不仅可以提高效率,而且不会发生上例的死循环。。。2、原理2.1、header里的关键字Accept-Ranges:由server发送给client时需要的关键字。表明是否支
2020-06-25 18:05:51
606
原创 MYSQL的索引
MYSQL的索引1、概念2、底层结构2.1、B树结构2.1.1、概念2.1.2、实例2.1.2.1、结构2.1.2.2、查找流程2.1.3、总结2.2、B+树结构2.2.1、概念2.2.2、实例1、概念索引:它提高数据库的性能。不用加内存,不用改程序,只要执行正确的create index ,查询速度就可能提高成百上千倍。但是所有的东西都是平衡的,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值在于,提高一个海量数据的检索速度。形成:当我们建立一个表的时候,
2020-06-09 14:31:10
419
原创 MYSQL的事务
MYSQL的事务1、概念2、由来3、事务的流程4、事务的隔离级别4.1、没有隔离级别会发生的问题4.1.1、脏读4.1.2、不可重复读4.1.3、幻读4.2、事务的隔离级别5、事务的ACID特性1、概念事务就是一组DML(增删改)语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。2、由来当一个不支持事务的火车票售票系统有大量用户去访问购买的时候,有这种情况:当客户
2020-06-03 16:13:47
169
原创 五种IO模型
五种IO模型1、阻塞IO1.1、概念1.2、流程图2、非阻塞IO2.1、概念2.2、流程图1、阻塞IO1.1、概念阻塞IO: 在内核将数据准备好之前,系统调用会一直等待所有的套接字,默认都是阻塞方式。1.2、流程图2、非阻塞IO2.1、概念非阻塞IO: 如果内核还未将数据准备好,,系统调用仍然会直接返回,并且返回EWOULDBLOCK错误码。2.2、流程图...
2020-05-30 22:22:10
115
原创 Linux的进程信号
进程信号1、信号的概念2、信号的产生3、操作系统是如何管理信号的3.1 信号相关的定义3.2 PCB中有关信号的结构3.3 信号的处理流程4、信号的种类5、信号的捕捉1、信号的概念信号是进程之间事件异步通知的一种方式,属于软中断。如:其实我们平常写出了解引用空指针、数组越界会发生段错误,这些其实在内核都是看做信号来处理的。为什么是异步的:shell可以同时运行一个前台进程和任意多个后台进程,只有前台进程才能接到像 ctrl-c 这种控制键产生的信号。前台进程在运行过程中用户随时可能按下 ctrl-c
2020-05-17 16:53:10
217
原创 C++11新特性
C++11新特性1、列表初始化1.1 内置类型列表初始化1.2 自定义类型的列表初始化2、变量类型推导2.1 decltype运行时识别类型3、基于for的循环4、final与override4.1. final4.2 override5、智能指针5.1 auto_ptr5.2 unique_ptr5.3 shared_ptr6、新容器(unordered系列)7、委派构造函数8、自定义类的函数控...
2020-05-12 15:45:21
376
原创 聊聊(群聊)
聊聊(群聊软件)1、概述2、结构图服务端结构图客户端结构图3、实现原理服务端客户端1、概述项目名称:聊聊(群聊软件)开发环境:Linux使用技术:生产者消费者模型、C++STL、多线程、网络编程、自定义协议(登陆和注册)、jsoncpp、ncurses项目简介:用户可以申请注册账号和登陆账号,然后进行群聊功能项目原理:服务端:主线程负责TCP监听,每有一个注册或者登陆的请求则创建线程...
2020-05-07 23:36:56
763
2
原创 Linux的文件系统
前言我们刚开始学习Linux的时候就听过一句话:Linux下一切皆文件。无论我们操作的普通文件、甚至是输入和输出也都是文件(显示器文件)。所以不得不了解一下在Linux下的文件是如何组织和操作的。文件存储结构Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。一个block的大小是由格式化的时候确定的,并且...
2020-05-01 14:32:27
138
原创 红黑树
红黑树的相关概念概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。结构图红黑树结构和普通的二叉树差不多,但是多了一个header,header是根节点的父节点,根节点又是header的父节点,而header的左右孩子分别...
2020-04-30 14:55:36
190
原创 布隆过滤器Bloom-Filter
相关概念知识概念:布隆过滤器是一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”,它是用多个哈希函数,将一个数据映射到位图结构中。此种方式不仅可以提升查询效率,也可以节省大量的内存空间。实质:将哈希与位图结合,即布隆过滤器。布隆过滤器优点增加和查询元素的时间复杂度为:O(K), (K为哈希函数的个数),与数据量大小无关哈希...
2020-04-22 17:14:16
116
原创 模拟实现哈希桶,并封装哈希桶模拟实现map
哈希桶结构:一个数组,每个元素都是一个单链表结点(开散列)(闭散列只用数组)map:用仿函数和哈希函数来封装哈希桶。仿函数是为了计算出元素的值(为什么要仿函数计算:后序可以封装set,所以无论是map还是set,存的值都是K-V结构,set存了K-K,也就是两个一样的值),哈希函数用了模板特化,为了能够更方便的计算出string类型的值的哈希位置。源码:哈希结点//哈希结点:实质是一个单链...
2020-04-17 15:25:54
133
原创 云备份
一、概述项目名称:云备份开发环境:VS2017、Linux、MYSQL使用技术:多线程、数据库、http协议项目功能:将客户端下的文件自动上传至服务端,并可通过浏览器下载备份过的文件项目简介:服务端:通过cpp-httplib库搭建http服务器,并设置响应请求方法的回调函数,将收到的请求进行处理;通过启动另一个线程来监听所有接受到的文件,如果他们长时间没被访问,则压缩以节省磁盘空间。...
2020-04-13 23:50:00
1793
原创 冗余文件清除工具
概述名称:磁盘文件管理工具功能:删除指定路径下的所有拷贝文件,删除指定文件的拷贝文件,删除模糊字符串匹配的所有文件的拷贝文件原理:通过读取文件的内容从而计算出该文件的MD5值(MD5值可以通过文件内容来唯一标识文件(相同内容的文件的MD5值相同,内容任何有一点不同的文件的MD5值会截然不同)),将其文件名与MD5的对应关系存放在多个不同的关联式容器内,从而找出相同内容的文件(拷贝文件),进行...
2020-02-17 17:46:13
511
原创 模拟实现List
List有三个模块:结点类、迭代器类、链表类;其中链表类是主体#include<iostream>using namespace std;template <class T>struct ListNode//结点类{ ListNode(const T& value = T())//数据的初始值为该类型的默认值 :_data(value) , _pr...
2019-11-19 20:40:48
131
原创 模拟实现了String类
#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;#include<assert.h>class String{public: typedef char* iterator; typedef const char* const_iterator; friend ost...
2019-11-16 21:13:30
67
原创 模板初阶
函数模板函数模板概念函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。函数模板格式template<typename T1, typename T2,…,typename Tn>返回值类型 函数名(参数列表){}如:template<typename T>//template<class T>...
2019-11-01 16:44:11
145
原创 C/C++内存管理
C/C++内存分布int globalVar = 1;static int staticGlobalVar = 1;void Test(){static int staticVar = 1;int localVar = 1;int num1[10] = {1, 2, 3, 4};char char2[] = "abcd";char* pChar3 = "abcd";int* p...
2019-10-31 14:57:47
84
原创 C++类的总结
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。在C++中,结构体内不仅可以定义变量,也可以定义函数。类的两种定义方式声明和定义全部放在类体中.声明放在.h文件中,类的定义放在.cpp文件中访问限定符说明public修饰的成员在类外可以直接被访问prote...
2019-10-26 22:20:10
125
原创 初识C++整理
命名空间定义定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。 如namespace N1{ … …}1.命名空间中的内容,既可以定义变量,也可以定义函数2.命名空间可以嵌套3.同一个工程中允许存在多个相同名称的命名空间编译器最后会合成同一个命名空间中。命名空间的使用有三种方式:1.加命名空间名称及作用域限定符in...
2019-10-21 16:17:53
97
原创 堆的实现
Heap.h#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int HPDataType;typedef struct Heap{ HPDataType* _a; int _size; int _capicity;}Heap;// parent = (child...
2019-10-19 17:15:53
68
原创 实现八个排序算法(直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序) 实现快排的非递归
***Stack.h***#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<stdbool.h>typedef int DATATYPE;typedef struct Stack{ DATATYPE* _arr; int top;...
2019-10-19 17:08:15
833
原创 从前序与中序遍历序列构造二叉树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */struct TreeNode* _build(int* preorder, int* pinde...
2019-10-15 15:31:04
108
原创 二叉树搜索树转换成排序双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。void _Convert(TreeNode* root,TreeNode** prev){ if (root == NULL) { return; } _Convert(root->left, prev); root->left = *prev;...
2019-10-12 19:56:38
107
原创 二叉树非递归的前序、中序、后续遍历
void BinaryTreePrevOrderNonR(BTNode* root)//非递归前序遍历{ Stack s; StackInit(&s); BTNode* cur = root; while (cur || StackEmpty(&s)) //当前节点不为空或者栈不为空则进入 { while (cur) { printf("%c ", cur...
2019-10-12 16:47:04
150
1
原创 判断两个二叉树是否相同、判断t二叉树是不是s的子树、二叉树的最大深度、判断是否为平衡二叉树
#include<stdbool.h>#include<stdio.h>#include<stdlib.h> struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;};bool isSameTree(struct TreeNode*...
2019-10-08 13:41:47
115
原创 二叉树的基本操作(创建、销毁、求结点、求叶子、求k层、寻找、前中后序遍历)
相关解析代码中有备注BinaryTree.h#include<stdio.h>#include<assert.h>#include<stdlib.h>typedef char BTDataType;typedef struct BinaryTreeNode{ struct BinaryTreeNode* _left; BTDataType _...
2019-09-29 16:57:59
435
原创 循环队列的实现
Oqueue.h#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int DATATYPE;typedef struct Oqueue{ DATATYPE* _arr; int _front; int _rear; int _capicity;}Oqueue;v...
2019-09-24 15:09:03
112
原创 队列的实现
Queue.h#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int DATATYPE;typedef struct QueueNode{ DATATYPE _x; struct Queue* _next;}QueueNode;typedef struct Queu...
2019-09-24 13:58:28
79
原创 栈的实现
Stack.h#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<stdbool.h>typedef int DATATYPE;typedef struct Stack{ DATATYPE* _arr; int top; int capicity;}Stac...
2019-09-24 13:56:02
84
原创 双向链表
双向链表和单向链表的区别就是结构体里有一个指向前面结点的指针List.h#include<assert.h>#include<stdio.h>#include<stdlib.h>typedef int DATATYPE;typedef struct ListNode{ DATATYPE _data; struct ListNode* _pr...
2019-09-23 16:48:49
71
原创 单链表
Slist.h#include<assert.h>#include<stdio.h>#include<stdlib.h>typedef int DATATYPE;typedef struct SList{ DATATYPE _data; struct SListNode *_next;}SList;typedef struct SList...
2019-09-23 16:46:15
87
原创 顺序表的动态存储
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。// 顺序表的静态存储#define N 100 typedef int SLDataType; typedef struct SeqList...
2019-09-07 13:44:59
860
原创 LINUX的初学小结
Linux里一切皆文件文件放在硬盘 :普通文件d :目录l 开头是链接文件p 管道文件b 块设备 (硬盘,支持随机读写s ...
2019-08-26 16:45:05
85
原创 结构体知识点内存对齐位段、枚举、联合
***结构体类型创建*** ***结构体初始化*** struct Stu { char name[20]; int age; char sex[5]; cha...
2019-06-24 00:32:07
125
原创 通讯录模拟
该通讯录实现了一下功能添加联系人信息删除指定联系人信息查找指定联系人信息显示所有联系人信息清空所有联系人以名字排序所有联系人test.c#define _CRT_SECURE_NO_WARNINGS 1#include"constact.h"int main(){ Contact con; //先创建一个结构体变量 InitContact(&con); ...
2019-06-23 18:59:53
474
原创 模拟实现qsort
qsort是一个快速排序的函数,这次模拟的是可以给不同类型的数据进行从小到大的排序。函数第一个参数void* base是传的数组(可以是int,也可以是char),第二个参数int num是数组的元素个数,第三个参数int width是数组的一个元素的大小,第四个函数int cmp(void*,void*)是回调函数。#define _CRT_SECURE_NO_WARNINGS 1#inc...
2019-06-20 15:36:32
91
原创 杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
//杨氏矩阵有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。时间复杂度小于O(N);在这个函数里,我并没有将循环嵌套,这样时间复杂度就小了,第一个循环是找出可能有这个数的行,第二个循环(在外面)是在这个行中找出这个数#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#...
2019-06-08 19:07:15
163
原创 扫雷(high版)
在编辑这个游戏之前要创建两个数组,一个是放置雷的数组,还有一个是呈现在屏幕的数组。这个游戏用到 的核心函数有:void init_board(char mine[ROWS][COLS], int rows, int cols, char set);重置扫雷的棋盘。其中,传一个 set 字符,多加一个set字符是为了,省的还要再创建一个函数来初始化两个数组。其中用循环就可以重置,当然memse...
2019-05-24 18:59:14
2702
原创 三子棋(可换为多子棋)
game.c#include"game.h"void menu(){printf("---------------------\n");printf("-----1、开始游戏-----\n");printf("-----0、退出游戏-----\n");printf("--------请选择-------\n");printf("---------------------\n");...
2019-05-22 19:57:09
209
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人