自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 实时备份系统(项目)

实时备份系统:项目简介项目描述项目设计Windows下的客户端:1.数据管理模块:2.目录监控模块:Linux下的服务端:1.文件工具类:2.文件压缩模块:3.数据管理模块:4.非热点压缩模块:5.网络通信模块:项目源码项目简介包括一个Windows下的客户端和Linux下的服务端,Windows下的客户端负责将需要上传的文件进行上传,然后Linux下的服务端接收上传的文件并且进行热点判断,将非热点的文件进行压缩存储,并且在浏览器端还包括了文件的查看和下载功能项目描述项目的简单描述:1.在Wind

2020-09-02 15:21:41 423

原创 LRU的Cache

LRU算法:LRU算法又叫做最久未使用算法,本质是将最久未被使用的数据删除LeetCodeLRU算法缓存机制:class LRUCache //LRUCache的类{ int _capacity; unordered_map<int, list<pair<int, int>>::iterator> _ht; list<pair<int, int>> _lru_lt;public: LRUCache(int capacity) :_

2020-08-05 21:09:35 286

原创 B树、B+树、B*树

B树二叉搜索树->AVL树->红黑树->B树,由于B树之前的搜索树都是内存中存数据,如果数据量过大,内存中存不下,就没有办法了。这个时候内存中存不下的时候,就想到向磁盘中存储,B树主要就是应对在磁盘上存储数据的问题B树的主要特点:1.搜索树的左边的子树小于当前结点key,右边的子树大于当前的结点key2.一个结点会有多个关键字,多个孩子,但是孩子的数量总会比关键字的数量多一个3.根节点关键字的数量[1,M-1],孩子的数量[2,M]4.非根结点的关键字的数量[M/2-1,M-

2020-08-04 20:41:18 188

原创 网络基础---IP地址,PORT端口,TCP/IP五层模型,网络字节序

交换机:实现主机之间的数据交换;路由器:实现数据交换和路由选择,相当于就是一个网关的作用;网络的划分:局域网:网络覆盖范围在一千米以内城域网:网络覆盖范围在10-20千米广域网:网络覆盖范围在20千米以外IP地址用来标识唯一的主机,分为IPV4和IPV6两个版本,IPV4位uint32_t类型的,IPV6是uint8_t arr[16],但是IPV6并不向前兼容IPV4,因此还是IPV4目前被较为广泛的使用。在网络中每条信息都会包含源IP和目的IPPORT端口被用来在主机中标识唯一的进程,

2020-07-13 16:02:32 877

原创 MySQL事务-特性、隔离级别

MySQL事务简单来说事务就是要么全都成功,要么全部失败的一组语句事务的四种隔离级别:读未提交(read committed)、读已提交(read uncommitted)、可重复读(repeatable read)、可串行化(serializable)1.读未提交:两个事务同时操作一个表,其中一个事务修改了表中的数据并提交,另外一个事务数据提交的前后都可以查看数据的更改,这个问题被称为脏读,解决脏读的方法就是将隔离级别变成读已提交2.读已提交:同样是两个事务操作一个表,其中一个事务修改了数据并提交

2020-05-11 15:13:21 105

原创 最长上升子序列

例如:序列:1,7,3,5,9,4,8—对应的最长上升子序列就是1,3,5,9或者1,3,4,8,要求输出的是,最长的序列的长度#include <iostream>#define SIZE 1001using namespace std;int main(){ int i, j, n, top, temp; int stack[SIZE]; top = 0; s...

2020-04-10 15:02:26 99

原创 TCP的三次握手/四次挥手

2020-04-09 22:01:32 89

原创 TCP/IP典型协议之UDP协议、TCP协议

UDP协议:UDP协议是传输层的典型协议,传输层主要负责应用程序之间的数据传输UDP的特性:无连接、不可靠、面向数据报无连接:只需要知道对端地址,不需要建立连接就可以直接发送数据不可靠:不保证数据能够达到对端面向数据报:无连接的、不可靠的、有最大传输限制的数据传输方式UDP协议格式:通过协议实现理解协议特性16位源端口和16位目的端口:负责数据传输,标识数据从哪里来,到哪里去16...

2020-04-09 22:00:14 524 1

原创 TCP/IP典型协议之HTTP协议

HTTP协议:HTTP协议是应用层的知名协议,应用层主要负责的是应用程序之间的沟通;HTTP协议又名超文本传输协议HTTP协议格式:首行:请求首行:请求方法 URL 协议版本响应首行:协议版本 响应状态码 状态码描述头部:由一个个的key: val形式的键值对组成,每个键值对以\r\n作为间隔,主要描述的是本次请求或者响应的重要信息空行:\r\n正文:数据1.请求方法:GE...

2020-04-09 21:26:37 195 1

原创 管道---进程间通信的手段

操作系统为用户所提供的几种进程间通信方式原因:进程间因为每一个进程都有一个虚拟地址空间,在保证了进程独立性的同时,却使得进程间无法直接通信因此需要操作系统来提供进程间通信的方式,并且因为通信场景不同,提供的方式也有多种进程间通信的方式:1.管道–用于进程间的数据传输本质:内核当中的一块缓冲区—通过半双工通信实现数据传输(半双工通信–可以选择方向的通信),通过让多个进程都能访问同一块缓冲...

2020-03-17 17:18:55 158

原创 Linux系统调用接口/文件系统/重定向/软硬链接文件/动态库静态库

1.标准库的IO接口:fopen/fwrite/fread/fseek/fclose这里着重介绍一个fopen接口:FILE * fopen(const char* filename,const char* mode)mode:"r/r+/w/w+/a/a+"1.w/w+:每次都会清空文件原有内容进行写入数据、如果原来没有这个文件的话,就会自行创建、加上+号就会变成可读可写的方式2.f...

2020-03-16 17:20:30 352 1

原创 Linux系统编程阶段思维导图

2020-03-11 11:07:55 379 1

原创 栈的压入、弹出序列

已知两个数组,pushV存的是栈的压入序列,本题需要判断popV序列是不是pushV的弹出序列做法:找一个辅助的栈,只要这个栈的空或者栈顶不等于当前的popV[i]的元素,就不断的向辅助栈中压入这个元素,直到栈不空,并且栈顶与popV[i]相等,就直接pop这个辅助栈,但是有个问题就是,在压入的时候j有可能会>n,如果一旦大于,则不可能是弹出序列,最终的判断是这个栈是不是空的栈,如果是空的...

2020-02-25 20:53:40 189

原创 C++11新特性

1.列表初始化:在C++11中支持列表初始化,对于C++的内置类型与自定义类型都可以进行列表初始化。{}也不仅仅可以初始化数组,而且可以初始化所有的内置类型与自定义类型,“=”也可以省略,比较特别的是自定义类型进行多个对象的列表初始化需要在模板类中加上参数为Initializer_list类型的构造函数。2.变量类型推导:我们在定义变量的时候,必须知道类型,但是有时候可能我们无法知道类型,或...

2020-02-16 16:56:09 96

原创 位图、布隆过滤器及其相关面试题

位图:为了处理大量数据的问题,位图的出现极大的节省了我们进行大数据计算是的时间复杂度以及节省了大量的空间,位图主要利用的是位,使用8位二进制表示8个数字,相当于一个字节就可以表示8个数字,极大的节省了空间,而且在查找的时候的复杂度可以达到O(1)布隆过滤器:我们在给客户推送视频的时候,我们只会推荐客户没有看过的视频,那么我们如何来确定那个视频用户看过了,那个用户没有看过,在这里我们如果使用哈...

2020-02-14 15:52:01 299

原创 unordered_map\unordered_set的模拟实现及注意事项

unordered_maptemplate<class K, class V, class KeyofValue, class HF> class unordered_map { typedef pair<K, V> ValueType; typedef HashBucket<K, ValueType, KeyofValue, HF> HT; ...

2020-02-11 22:15:51 130

原创 红黑树的插入

红黑树的插入总共不算镜像的话总共五种情况:插入就要做根,即插入之前树中没有结点,插入的这个结点就是m_head的parent第二种就是插入的父亲是黑的,所以不需要改变第三种就是插入的父亲是红的,叔叔也是红的,此时需要的操作是改色,将父亲结点与叔叔结点的颜色变成黑的,将爷爷结点的颜色变成红色,然后继续向上遍历,将所有的出现的这种情况都处理了,如果遇到根就先变红再变黑,即遇到m_head就退出...

2019-12-16 11:11:01 127

原创 AVL树的插入、删除

AVL树的插入、删除:bool insert(const T &val) { if (m_root == nullptr) { m_root = new TreeNode<T>(val); return true; } TreeNode<T> * cur = m_root; TreeNode<T> *...

2019-12-16 10:43:51 188

原创 程序替换:exec函数族

exec函数族:程序替换:就是替换一个正在运行中的程序,替换一个pcb在内存中的代码和数据程序替换使用的是exec函数族:int execl(const char * path,const char * arg,…)…为不定参数,以NULL结束int execlp(const char * file,const char * arg,…),函数放在指定的路径下*int execle(c...

2019-12-06 11:33:29 188

原创 星际密码

星际密码题目描述:将一个1110的矩阵,求出这个矩阵的n次方,然后取得到的矩阵的左上角的数字,如果小于4位的话,就前面补0,补到4位,超过四位的话就输出最后的四位解题方法:本题如果去分析这个矩阵的规律的话,就会发现这个数是斐波那契数列的变形,我们平常的斐波那契数列都是用递归的方法写的,但是由于本题的用例的数字过大,产生的数据冗余比较大,因此这里要使用的是数组的方法,将每个斐波那契数列放到数组中...

2019-12-04 23:34:05 463

原创 数根

数根题目:输入一个数,然后将这个数的每一位加起来,如果得到的数不是10以内的数,就继续进行,知道是10以内的数之后直接输出方法:由于题目中的这个数的位数为1-10001,所以明显不能使用数字,本题中我使用的是C++STL中的string#include <iostream>#include <string>using namespace std;int mai...

2019-12-04 23:27:04 208

原创 将add\sub\mul\div等函数打包成静态,动态库,并使用

将add\sub\mul\div等函数打包成静态,动态库,并使用打包成静态库:使用这个静态库:打包成动态库:动态库的使用:

2019-12-02 10:51:57 162

原创 计算字符串的距离

计算字符串的距离题目描述: 插入、删除、替换每次计算加1.解题思路:动态规划问题:当有任意一个字符串为空的时候,需要编辑的距离就等于另外非空的字符串的长度,当然如果两个都是空的话,编辑距离自然也是空;当两个字符串都不是空字符串的时候,设n[i][j]为将第一个字符串的前i个变为第二个字符串的前j个,一下分四种情况。A. 首先n[i-1][j-1],然后将最后一个字符进行替换B. 同...

2019-12-01 14:12:28 272

原创 对之前编写的自主shell进行修改,使其支持输入/输出/追加重定向

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <ctype.h>#include <fcntl.h>#include <sys/wait.h>int main(){ w...

2019-11-26 20:22:49 81

原创 Linux中基础IO部分--open/read/write/close等文件相关系统调用接口,纵向对比fd与FILE结构体

int open(const char * pathname,int flages,mode_t mode)pathname:带路径的文件名mode:若有可能创建新文件则需要指定文件权限flags:选项参数必选项:O_RDONLY/O_WRONLY/O_RDWR 只读/只写/可读可写 --三种只能选择其一可选项:O_CREAT 文件不存在则创建新文件,存在则打开(使用这个必须用mod...

2019-11-26 20:16:16 150

原创 统计每个月兔子的个数 C++

统计每个月兔子的个数:题目描述:开始有一个兔子,然后这个兔子从三个月后开始生小兔子,小兔子也是三个月之后就可以生,兔子不会死,要求输入月份,输出这个月的兔子数量。解题思路:由题得,兔子分为三种,一个月大小的兔子n1、两个月大小的兔子n2、三个月及三个月以上大小的兔子n3,n3 += n2,n2 = n1,n1 = n3.解释一下就是因为三个月及三个月以上大小的兔子的数量为,前一个月的数量加上这...

2019-11-25 18:16:01 338

原创 简谈Linux下的popen/system函数

popen:作用式启动另外一个进程去执行shell命令调用popen的函数为父进程,被启动的叫做子进程popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。 随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中返回值...

2019-11-23 00:10:03 168

原创 封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg), func回调函数就是子进程执行的入口函数, arg是传递

#include <stdio.h> 2 #include <unistd.h> 3 #include <sys/wait.h> 4 void process_create(pid_t* pid,void* func,void * argv) 5 { 6 *pid = fork(); 7 if(*...

2019-11-22 23:58:43 93

原创 shell程序

编写自己的shell程序主要就是程序替换,使用了进程等待、进程终止、进程创建等进程控制的方法#include <stdio.h> ...

2019-11-22 23:45:54 318

原创 进程创建、进程等待、进程终止

1.进程创建:创建一个pcb,复制父进程中的信息pid_t fork(),相当于clone,但是子进程与父进程共用同一个虚拟地址空间,使用相同的页表pid_t vfork(),是一个阻塞函数,父进程创建后,这个vfork函数在父进程中并不会立即返回,会阻塞直到子进程exit或程序替换之后才会返回pid_t pid = fork();2.进程等待:等待一个子进程的退出,获取退出子进程的...

2019-11-22 23:41:30 155

原创 二叉搜索树的插入、删除

二叉搜索树:就是每一个结点的data值,都大于它的所有左孩子的data,小于所有右孩子的data二叉搜索树的插入删除的模拟:#pragma oncenamespace ljc{ template <class T> class TreeNode { T m_data; TreeNode<T> * m_left; TreeNode<T>...

2019-11-19 21:36:07 81

原创 另类加法

另类加法不使用任何算术运算符,进行A与B的加法运算方法:使用按位异或的方法,首先A与B按位异或,然后由于二进制中如果两个数字的相同位置的数都是1的话,加会向前进1位,所以接下来使用A与B按位与的方法,就可以找到两个数都是1 的那一位,然后将此时的这一位向左移动1位,就完成了进位,然后再把得到的两个数进行按位异或,如果此时按位与的时候为0,那么另外一个数中存放的就是这个加法的结果,具体使用的还是...

2019-11-15 19:21:19 224

原创 Linux task_struct 中各个字段的含义

Linux task_struct :总的一句话,这个结构体包含了进程的所有的信息。下面介绍几种状态的含义:1.TASK_RUNNING:表示进程要么正在进行,要么准备进行2.TASK_INTERRUPTIBLE:表示进程被阻塞,知道某个条件达成之后,进程就会变成TASK_RUNNING3.TASK_UNINTERRUPTIBLE:意义与TASK_INTERRUPTIBLE类似,除了不能...

2019-11-12 22:38:38 271

原创 使用代码模拟僵尸进程、孤儿进程

僵尸进程:起因:子进程先于父进程退出,退出后为了保存自己的退出原因,因此资源没有被完全的释放,操作系统此时通知并且允许了父进程来接收这个返回值,但是如果父进程不管的话,这块资源就没有被完全的退出,处于僵死状态,称为僵尸进程后果:资源泄露 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib...

2019-11-11 19:30:11 217

原创 常见的Linux进程调度算法

进程调度:在操作系统中,调度是指一种资源分配调度算法:就是根据操作系统的资源分配策略所规定的资源分配的算法1.先来先去服务:如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列的后面,那么先来先服务(FCFS: first come first service)总是把当前处于就绪队列之首的那个进程调度到运行状态。也就说,它只考虑进程进入就绪队列的先后,而不考虑它的下一个CPU周期的长...

2019-11-11 15:44:47 392

原创 一个顺序数组被左移或者右移n位,求数组中任意数字的下标

题目描述:有一个排好序的数组,例如:[1,2,3,4,5,6,7,8,9],现在将这个数组左移五位变成—[6,7,8,9,1,2,3,4,5],现在用这个得到的数组求其中任意数字的下标,例如求6的下标,返回0,要求算法的复杂度为logn。解题方法:1.使用二分法找到断点的位置;2.从这个断点的位置开始,寻找这个数字,然后哦找到之后%size,就得到了现在这个数字的下标。#include &lt...

2019-11-11 13:53:41 394

原创 拷贝构造函数调用的四个地方

拷贝构造函数什么时候调用:1.使用类的一个对象初始化类的另外一个对象的时候;这个就是最正常的调用拷贝构造函数的地方2.如果函数的形参是类的对象,调用函数时,进行形参与实参的结合时;形参是对象,与实参结合的时候就需要把实参赋给形参,就成了拷贝构造3.函数的返回值是类的对象时,函数执行返回后是调用者时;返回值是类的对象的话,接收返回值的肯定也是对象,所以也相当于拷贝构造函数4.需要产生一...

2019-11-09 21:54:24 176

原创 带参数的构造函数被隐式调用

class A{public: A() { printf("0"); } A(int a) { printf("1"); } A& operator=(const A& a) { printf("2"); return*this; }};int test1(){ A al; al = 10; return 0;}上面的代码大家...

2019-11-09 21:45:40 343

原创 进制转换(十进制转任意进制)

十进制转任意进制方法:除m取整#include <iostream>#include <stack>#include <string>using namespace std;string Trans(int n, int m){ char str[32] = {' '}; stack<int> s; while (n) { ...

2019-11-09 21:39:18 236

原创 排序子序列

问题描述:将一段数组分为若干个排序子序列,排序子序列就是非递增或非递减的排序序列,然后输出至少可以分为几个排序子序列。解决方法:输入数组之后,开始遍历数组,如果数组满足非递增或者非递减,就进入对应的条件判断,然后此时如果i+1的元素依然满足对应的非递增或非递减,就直接i++,然后跳出之后进行count++,这就是一个排序子序列,如果相等的话就直接i++,这样执行下去,直到遍历结束,输出此时的co...

2019-11-09 21:36:03 536

空空如也

空空如也

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

TA关注的人

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