- 博客(26)
- 收藏
- 关注
原创 【Redis】数据类型——set
一、操作1.sadd:给set中添加值格式: sadd key value1 value2sadd myset v1sadd myset v2sadd myset v3sadd myset v1//设置重复值时失败!2.smembers:获取set中的所有值格式:smembers keysmembers myset3.sismember:判断某个值是否在set中格式: sismember key valuesismember myset v14.scard:获取set中
2021-05-20 11:22:39 485
原创 【Redis】数据类型——list
一、操作1.启动redis服务器 ./redis-server redis.conf2.启动Redis的客户端./redis-cli -p 63793.lpush rpush lrange操作:从左边,右边设置值和获取值lpush k1 v1lpush k1 v0rpush k1 v2lrange k1 0 -1格式: lpush key value rpush key valuelrange key start stop4.lpop rpop:从列表的左边或者右边移除值格
2021-05-20 09:34:58 357 4
原创 页面置换算法——LRU的简易实现(C++)
LRU最近最久未使⽤的置换算法(LRU):最近最久未使用(LRU)的置换算法的基本思路是,发生缺页时,选择最长时间没有被访问的页面进行置换,也就是说,该算法假设已经很久没有使用的页面很有可能在未来较长的⼀段时间内仍然不会被使用。图解:最后一步因为1号页面是「过去时间段里最久没有被访问的」, 所以把1号页面换出到磁盘,然后把3号页面换入到内存。代码简易实现#include<iostream>#include<list>#include<map>using
2021-05-18 11:50:23 1706 1
原创 【Redis】数据类型——字符串string
一、操作1.启动redis服务器 ./redis-server redis.conf2.启动Redis的客户端 ./redis-cli -p 63793.get、set操作:设置值和获取值格式: set key value get keyset key1 v1get key1 4.exists:判断key是否存在格式: exists key EXISTS key15.append:追加字符串,如果key不存在,相当于set命令格式: append ke
2021-05-18 11:19:38 272
原创 【Linux】查看网络性能的常用指令及其所显示的信息
网络性能指标有哪些?通常是以 4 个指标来衡量网络的性能,分别是带宽、延时、吞吐率、PPS(Packet Per Second),它们表示的意义如下:1.带宽:表示链路的最大传输速率,单位通常为 b/s (比特/秒)2.时延:表示网络请求数据包发出后,收到对端响应,所需要的时间延迟。在不同场景中,这一指标可能会有不同含义。比如,它可以表示,建立连接需要的时间(比如 TCP 握手延时),或一个数据包往返所需的时间(比如 RTT)。3.吞吐率:表示单位时间内成功传输的数据量,单位是 b/s(比特 / 秒
2021-05-06 22:28:10 771 2
原创 【C++设计模式】工厂模式及实现
一、简单工厂模式1.概念:简单工厂模式是属于创建型模式,又叫做静态工厂方法(static Factory Method)模式,简单工厂模式是由一个工厂对象决定创建出来哪一种产品类的实例。实质是由一个工厂类根据传入的参数,动态决定应该创建哪一类产品类(这些产品类继承自一个父类或接口)的实例。2.使用场景:(1)在程序中,需要创建的对象很多,导致对象的new操作多且杂时,需要使用简单工厂模式;(2)由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作
2021-04-28 13:31:14 350
原创 【C++设计模式】单例模式简单实现以及改进方法
什么是单例模式许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。它的类图如下:适用场景:1.需要生成唯一序列的环境2.需要频繁实例化然后销毁的对象。3.创建对象时耗时过多或者耗资源过多,但又经常用到的对象。4.方便资源相互通信的环境饿汉式单例类被加载时,就会实例化一个对象并交给自己的引用,供系统使用;而且,由于这个类在整个生命周期中只会被加载一次,因此只会创建一个实例,即能够充分保证单例。#include<iostream>using namesp
2021-04-27 21:41:11 458
原创 【排序算法】归并排序
归并排序#include<iostream>using namespace std;void merge(int* a, int* temp, int begin, int middle, int end){ int i = begin; int j = middle + 1; int k = 0; while (i <= middle && j <= end)//比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
2021-04-17 14:20:50 279 1
原创 【排序算法】交换排序(冒泡排序,快速排序)
1.冒泡排序#include<iostream>using namespace std;void bubbleSort(int arr[], int length){ for (int i = 0; i < length-1; i++) { for (int j = 0; j < length-1-i; j++) { if (arr[j] > arr[j + 1]) { int tmp = arr[j]; arr[j] = arr
2021-04-17 14:08:05 196 1
原创 【排序算法】选择排序(简单选择排序,堆排序)
1.简单选择排序#include<iostream>using namespace std;void Swap(int arr[], int i, int j){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;}void selectSort(int arr[], int length){ if (arr==nullptr || length == 0) return; for (int i = 0; i < l
2021-04-17 14:02:03 130 2
原创 【排序算法】插入排序(直接插入排序,希尔排序)
1.插入排序(Insertion Sort)#include<iostream>using namespace std;void insertSort(int arr[], int length){ for (int i = 1; i < length; i++) { int end = i - 1; int tmp = arr[i]; while (end >= 0) { if (arr[end] > tmp) { arr[en
2021-04-17 13:56:10 79
原创 【Linux】守护进程
守护进程什么是守护进程守护进程也称精灵进程( Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。在了解守护进程之前我们先需要知道一下几个概念会话操作系统调度的基本单位是进程,单个或多个进程组成进程组,单个或多个进程组则组成会话getsid(0)//获得会话的ID,返回当前进程调用的会话ID进程组一个进程组中有一个组长进程和0个或多个组员进程,组长进程的进程ID等于其进程组ID。getpgrp()//获得进程组的ID,就是进程组中
2021-04-15 23:19:41 390
原创 【C++11】浅谈右值引用
右值引用什么是左值和右值:左值实指表达式结束后依然存在的持久对象,右值是指表达式结束后就不存在的临时对象。区分左值和右值的便捷方法:看能不能对表达式取地址,如果能,为左值,如果不能,则为右值。所有的具名变量或对象都是左值,而右值不具名。在C++11中右值由两个概念构成:1.一个是纯右值,比如,非引用返回的临时变量,运算表达式产生的临时变量,原始字面量和la’mbda表达式等都是纯右值。2.另一个则是将亡值,而将亡值是C++11新增的与右值引用相关的表达式,比如将要被移动的对象、T&&
2021-03-29 22:01:56 492
原创 RAII
一、什么是RAIIRAII(Resource Acquisition Is Initialization)是由c++之父Bjarne Stroustrup提出的,中文翻译为 资源获取即初始化,使用局部对象来管理资源的技术称为资源获取即初始化。这里的资源主要是指操作系统中有限的东西,如内存,网络套接字,互斥量,文件句柄等,局部对象实指存储在栈的对象,它的生命周期是由操作系统来管理的,无需人工介入。1、RAII的原理资源的使用一般分为一下三个步骤:1.获取资源(创建对象)2.使用资源3.销毁资源(析
2021-03-29 15:13:05 108
原创 【C++】C++中new/delete与malloc/free的区别
new/delete与malloc/free的区别在C++中有malloc和free,为什么还需要new和delete呢?malloc和free是C/C++语言的标准库函数,new和delete是C++的运算符。他们都用于申请动态内存和释放内存。但是对于非内部数据类型的对象而言,只用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务
2021-03-29 13:59:10 96
原创 三种I/O复用方式——select、poll和epoll
为什么要引入I/O复用:TCP服务器在与客户端完成建立连接,并在完成整个交互过程之后再断开连接。在服务端的代码中,在收发数据时加上一个while循环,用于解决同一个客户端的多次收发数据请求。但当多个客户端同时向服务器发出请求时,当前的服务器无法满足要求,所以引入了I/O复用,可以使程序同时监听多个文件描述符,这样能使程序的性能提高。I/O复用的场景:1.TCP服务器需要同时处理监听socket、连接socket2.服务器要同时接听多个端口3.客户端程序要同时处理用户输入和网络连接4.程序要同时处
2021-03-05 14:58:45 673 1
原创 C语言中sizeof和strlen的区别
sizeof和strlen的区别最近复习了c语言,在字符串,数组中经常用到的sizeof和strlen有什么区别呢?可能在实际运用中会混在一起,所以这篇文章把它们的用法总结的清清楚楚。举下面几个例子第一个例子:char *s="0123456789";sizeof(s)的结果位4,s是指向字符串常量的字符指针sizeof(*s)的结果位1,*s是第一个字符第二个例子:int s[100]="0123456789";sizeof(s)的结果为400,s表示在内存中的大小,100*4=40
2021-03-04 21:26:44 325 1
原创 【Linux】gcc编译过程——预编译,编译,汇编,链接
【Linux】gcc编译过程——预编译,编译,汇编,链接前言平时我们在windows系统下的例如VS这样的集成开发环境中编写代码,我们只需要点击编译器的编译便可以生成一个可执行文件(在windows系统下是PE格式,在Linux系统下是ELF格式),而这个编译器又是如何将代码编译成这个文件的呢?因此我们在Linux系统下gcc编译器中展示这个过程。1.预编译预编译的命令为gcc -E hello.c -o hello.i预编译过程主要处理了 “#”那些源代码中的以"#“开始的预编译指令。比如”
2020-12-01 16:42:28 676
原创 判断一棵二叉树是否为满二叉树(两个队列)
判断一棵二叉树是否为满二叉树1。递归bool Is_Full(BtNode *ptr){ return ((ptr==NULL) && Is_Full(ptr->leftchild) && Is_Full(ptr->rightchild) && (Get_Depth(ptr->leftchild) == Get_Depth(ptr->rightchild)))}使用递归的方法特别地麻烦,递归的量特别的大,所以我们换一种思路
2020-11-24 22:13:18 1339
原创 数据结构——队列
队列文章目录队列1.队列的定义2.循环队列3.队列的链式存储结构及实现4.总结回顾1.队列的定义1.队列的定义:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。2.特点:队列是一种先进先出的线性表,简称FIFO(First In First Out)。允许插入的一端称为队尾,允许删除的一端称为队头。2.循环队列1.队列的顺序存储结构的不足:假如一个队列的总个数不超过5个,前两个元素已被删除,但是目前如果接着入队的,因数组末尾元素已经被占用,再向后加,就会产生数组越界的错误,可实际
2020-11-18 16:21:59 924
原创 栈的应用——四则运算表达式求值
栈的应用——四则运算表达式求值文章目录栈的应用——四则运算表达式求值1.后缀(逆波兰)表示法定义2.后缀表达式计算结果3.中缀表达式转后缀表达式1.后缀(逆波兰)表示法定义栈的现实应用有很多,数学表达式的求值就是其中一个,数学表达式中存在先乘除再加减,从左到右,从括号内到括号外的运算规则。而后缀表达法是一种不需要括号的表示方法,也称之为逆波兰表示。举例:9+(3-1)×3+10/2用后缀表达式为9 3 1-3×+10 2/+2.后缀表达式计算结果后缀表达式:9 3 1-3 ×+10 2/+规则
2020-11-16 22:28:56 282
原创 数据结构——静态链表
数据结构——静态链表文章目录数据结构——静态链表1.静态链表存储结构2.静态链表的插入操作3.静态链表的删除操作4.静态链表的优缺点1.静态链表存储结构(1)静态链表的定义:在单链表的一个节点中存在一个数据域和一个指针域;而静态链表使用数组来代替指针,我们让数组的元素由两个数据域组成,data和cur(游标)。用数组表述的链表就叫做静态链表。(2)静态链表的存储结构:由于静态链表是数组构成的,我们为了方便数据的插入会把数组建立的大一些,不至于溢出。#define OK 1
2020-11-13 21:18:25 1004
原创 数据结构——单链表整表操作(C语言)
数据结构——四种链表的实现以及操作(C语言) 四种常用的链表的实现和操作:单链表,静态链表,循环链表,双向链表。单链表1.单链表的创建顺序存储结构的创建其实就是一个数组初始化的过程,即声明一个类型和大小的数组并赋值的过程,但是单链表不一样,它是一种动态结构。它的空间大小和位置不需要预先分配,可以根据要求随时生成。我们可以给出以下的代码去实现:#define OK 1 #define ERROR 0#define TRUE 1#define FALSE 0typ
2020-11-12 21:41:59 200
原创 数据结构——线性表
数据结构——线性表一、定义线性表,从名字上就能感受到是具有像线一样的性质的表。就像排队的一队人,一个跟着一个排,有人在头,有人在尾,每个人知道前面是谁后面是谁,像一根线把他们串起来一样。它是一个由零个或者多个数据元素组成的有限序列。二、线性表的顺序存储结构1.定义:线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。2.顺序表的存储方式:在C语言中,我们可以用一维数组来实现顺序存储结构。下面是顺序表的存储结构:#define MAXSIZE 20
2020-11-12 17:30:52 218
原创 1~n中1出现的次数
1~n中1出现的次数输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6思路首先,输入一个正整数n,需要我们输出1~n中1有多少个。我们很容易想到从1开始循环累加到n,利用n对10求余数判断是否出现了1,如果整数大于10,就让整数除以10再判断是否为1.然而这个题目可以通过找规律的技巧找到解题的新的思路。1、0-
2020-11-04 14:37:39 421
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人