自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 rcu锁原理以及rcu example学习

rcu锁

2023-01-13 16:42:40 865

原创 用信号量实现共享内存互斥访问

需求:进程A对一个整数0执行1000000000次加操作进程B对一个整数0执行1000000000次减操作进程A,B并行执行,最后的数据结果应该是0注意要先执行A,初始化信号量。进程A:#include<sys/types.h>#include<sys/ipc.h>#include<sys/stat.h>#include<sys/shm.h>#include<sys/sem.h>#include<fcntl.h>#

2021-08-19 22:48:08 466

转载 一致性哈希

一致性哈希

2021-07-25 15:23:50 130

原创 堆排序以及TOP K 问题

以leetcode两道例题来讲解前K个高频元素前K个高频单词前K个高频单词相较于前K个高频元素来说,多了一个条件,就是要处理相等的条件对于这类TOP K问题,如果问的是TOP K大,建立小顶堆时间复杂度小,如果问的是TOP K小,建立大顶堆时间复杂度小因为如果问的是TOP K大,可以建立小顶堆也可建立大顶堆,如果建立的是小顶堆,每次堆顶都是最小的元素,我们只需要在第K+1个元素入堆的时候进行判断,如果第K+1个元素比堆顶大,只需要将堆顶元素替换,然后调整堆。时间复杂度为O(nlogk),如果建立的

2021-06-22 23:03:37 191

原创 kmp算法模板

#include<iostream>#include<vector>#include<queue>using namespace std;/*next数组的含义初始化:next[0] = -1;next[i]:当当前位置不匹配时,需要回溯的位置如模板串 ababanext[] = {-1, 0, 0, 1, 2, 3} //最后一个位置next[5]=3 代表全部匹配需要回溯的位置,即前面有3个字符是重复的。可以看出next[i]其实也是当前下标

2021-06-22 10:59:25 191

原创 mallo内存管理

malloc是怎样实现一个虚拟内存分配器的?底层是怎样工作的?malloc的核心是底层调用了sbrk(),如下图linux的内存布局,其中包括3GB的用户空间和1GB的内核空间,用户空间从下到上依次是代码段、数据段、未初始化的数据段、堆、栈。从图中可以看到有一个program break的brk指针,它代表的意义是:当前进程能访问的最大堆的虚拟内存空间的顶部指针,通过sbrk()可以调整他的大小,malloc的核心也在于这里,当进程申请堆空间时,如果当前的堆空间不足,malloc会调用sbrk向上移.

2021-06-19 16:05:32 335

原创 select、poll、epoll

select、poll、epoll比较:https://blog.csdn.net/davidsguo008/article/details/73556811select的详解:https://blog.csdn.net/qq_36359022/article/details/81355897为什么边缘触发要设置非阻塞?参考这篇博客:https://blog.csdn.net/zxh2075/article/details/79271071总结:为什么边缘触发要设置非阻塞?假设对已连接套接字

2021-03-21 17:17:01 85

原创 随机洗牌

#include<iostream>#include<vector>#include<cmath>#include<random>#include<cstdlib>using namespace std;/*假设一维矩阵,200个元素,下标为0-199,雷的个数为20个.雷所在位置为1,非雷的位置为0,将20个雷随机分配到矩阵的各个位置。初始化最后20个元素为1(即当前雷所在位置为1,非雷的位置为0)先选第199个数的位置,然

2021-03-14 22:19:48 131

原创 容器的erase 致使迭代器失效的问题

这里列举了vector、string、map(unordered_map)、set、deque 容器的erase方法总结如下:对于vector、string连续内存空间的容器,erase后返回的迭代器为删除后的下一个位置,而map、set、deque等链表类型的容器,erase后返回的迭代器为当前的位置,我们需要手动后移,两种不同类型的迭代器通用删除模板如 vector<int> a{1,2,3,4,5,6,7}; for(vector<int>::iterat

2021-03-05 11:33:17 589

原创 7种排序(冒泡、直接插入、选择、希尔、二路归并、快速、堆排序)以及稳定性

冒泡排序#include<iostream>#include<vector>using namespace std;void bubble_sort(vector<int> &arr){ for (int i = 0; i < arr.size() - 1; i++) //排序n-1趟 n为元素个数 { for (int j = 0; j < arr.size() - i - 1; j++) { if (arr[j] &g

2021-02-26 14:06:56 736 1

原创 TCP三次握手、四次挥手全过程解析,TCP为什么需要三次握手?为什么需要TIME_WAIT状态?

tcp三次握手的发生情况:首先服务端sockect、bind、listen,调用accept阻塞客户端发送connect,此时发送SYN,服务端接收到SYN后发送SYN、ACK,在客户端接收到SYN、ACK之后connect返回并且发送ACK确认服务端的数据,服务端接收到ACK后accept返回因此 服务端的三次握手发生在listen之后,accept之前,listen之后接收到FIN后内核处理相应信息(收到FIN创建连接将连接放入半连接队列,发送SYN、ACK后将连接从半连接队列放入全连接队列),a

2021-02-10 20:11:16 429

原创 二分查找模板

#include<iostream>#include<algorithm>using namespace std;/*所有二分都统一为while(left <= right)对于查找左边界,需要考虑右边界越界的情况对于查找右边界,需要考虑左边界越界的情况如nums=[1,2,2,2,3] target = 5对于查找左边界:由于while(left <= right),最后一次left会指向nums.size() 越界而左边不会越界,如targe

2021-02-03 16:27:15 77

原创 磁盘扩容根目录

https://www.cnblogs.com/kevingrace/p/5845634.htmlhttps://blog.csdn.net/giianhui/article/details/95228519https://blog.csdn.net/kongdeqian1988/article/details/38279921新增磁盘后将磁盘分区教程:磁盘分区教程新增磁盘后将原分区挂载到新增的分区上mkdir /new ###跳板目录mount /dev/sdb1 /new ###首先挂

2021-01-13 16:53:11 1231

转载 c++运算符重载

运算符重载const成员函数重载

2020-12-31 15:20:13 81

原创 常用模板类、容器、方法总结(string、vector、deque、stack、queue、list、set/multiset、map/multimap)等

总结1.vector和deque的功能类似,但deque支持头部插入和删除2.list为双向循环链表,他支持链表反转reverse和排序sort,注意:他的排序需要用对象调用sort方法与vector不同,vector的sort方法为sort(vector_a.begin(), vector_a.end());list还支持remove操作:remove(elem);//删除容器中所有与elem值匹配的元素。其他的容器没有该操作3.set容器和map容器默认按升序排列,如果想按降序排列可按照下列方法:

2020-12-30 16:28:57 192

转载 fork()函数

转载:https://blog.csdn.net/kxjrzyk/article/details/81603049

2020-12-21 11:15:06 127

原创 Centos7源码安装openssl库()

1.查看当前openssl版本openssl version2.进入/usr/local/src目录将压缩包下载到该目录下cd /usr/local/srcwget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1a.tar.gz3.解压tar -zxvf openssl-1.1.1a.tar.gzcd openssl-1.1.1a/4.安装mkdir /usr/local/openssl./con

2020-12-19 14:30:51 1313 3

转载 虚表和虚表指针

参考:https://blog.csdn.net/primeprime/article/details/80776625附注:对存在虚函数的类不能使用memset()初始化对象的值,例如:class parent { public: virtual void output(); }; void parent::output() { printf("parent!"); } class son : public parent

2020-12-18 11:20:55 325

原创 c和c++字符串和数字转换接口总结

c++的数字转string:to_string需要c++11支持函数原型:string to_string (int val);string to_string (long val);string to_string (long long val);string to_string (unsigned val);string to_string (unsigned long val);string to_string (unsigned long long val);string to_s

2020-12-10 17:50:50 432

原创 将n个相同的球,放进m个相同的箱子中,允许空箱,问有多少种不同的放法(球同,盒同,允许空箱)问题

/*将n个相同的球,放进m个相同的箱子中,允许空箱,问有多少种不同的放法((球同,盒同,允许空箱))假设7个球,4个箱子有11种放法:0,0,0,70,0,1,60,0,2,50,0,3,40,1,1,50,1,2,40,1,3,30,2,2,31,1,1,41,1,2,31,2,2,2思路:dp[i][j]:将i个球放进j个箱子中,共有多少种不同的放法dp初始化:dp[0][j] = 1; 将0个球放进j个箱子中,不管怎么放都有一种放法(允许空箱)dp[1][j]

2020-12-10 10:29:56 2679

转载 实际用户ID,有效用户ID,保存的设置用户ID之间的区别

实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一确定的,就是登陆的用户的uid有效用户ID(EUID):定义了操作者的权限,是进程的属性,决定了该进程的访问权限保存的设置用户ID(SUID):有效用户ID副本,既然有效用户ID是副本,作用是为了以后恢复有效用户ID设置用户ID位:用于对外的权限的开发,它的作用是我们如何去修改有效用户ID例如:[root@slave102 bin]# ls -l /usr/bin/passwd-rwsr-xr-x 1 root ro

2020-12-07 22:10:37 337

转载 vscode连接linux配置免密

参考:vscode连接linux配置免密

2020-12-01 11:22:09 646

转载 深拷贝与浅拷贝

参考:深拷贝与浅拷贝1 深拷贝与浅拷贝2

2020-11-24 14:44:51 77

原创 prim(普里姆)算法求图的最小生成树

prim算法求最小生成树:/*题目 1705: 算法7-9:最小生成树输入输入的第一行包含一个正整数n,表示图中共有n个顶点。其中n不超过50。以后的n行中每行有n个用空格隔开的整数,对于第i行的第j个整数,如果不为0,则表示第i个顶点和第j个顶点有直接连接且代价为相应的值,0表示没有直接连接。当i和j相等的时候,保证对应的整数为0。输入保证邻接矩阵为对称矩阵,即输入的图一定是无向图,且保证图中只有一个连通分量。输出只有一个整数,即最小生成树的总代价。请注意行尾输出换行。样例输入40

2020-09-29 17:10:56 1119

转载 centos7升级gcc4.8 g++4.8 到gcc8.3 g++8.3

参考文章:https://www.cnblogs.com/jixiaohua/p/11732225.html

2020-09-29 09:55:19 453

原创 迷宫问题(带权有向图)(BFS求解)

/*有一个n行m列的地图地图上每个格子要么是o,要么是xo表示这个格子是安全的x表示这个格子不能进入你现在在第0行,第0列(左上角)你希望走到第x行,第y列输入保证(0,0)是安全的向上走一格耗时a分钟向下走一格耗时b分钟向左走一格耗时c分钟向右走一格耗时d分钟问走到目的地点(第x行,第y列)最快需要多少分钟如果无法走到,输出-1输入描述:第一行输入T表示有T组数据(1<=T<=30)每组数据第一行输入两个整数 n,m(1 <= n, m <= 20

2020-09-18 17:29:48 1939

原创 多重背包问题

多重背包问题描述:题目描述有n种物品,小王有一个能装m千克的背包,想要装点物品回去。每种物品,有自己的重量w(千克)和价值v(元),以及他们的数量c。现在,物品的数量很大,而种类也不少。请你计算出,背包装的最大价值。输入第一行是整数n(n<=100),m(m<=3000),表示物品的种类和背包容量。接下来n行,每行3个数,w(w<=100),v(v<=100),c(c<=1000),表示重量,价值,和数量.输出一个数,表示最大价值。样例输入3 505

2020-09-17 17:04:41 135

原创 完全背包问题

完全背包问题的阐述:题目描述设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。输入第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30);第2…N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。输出仅一行,一个数,表示最大总价值。样例输入10 42 13 34 57 9样例输出max=12完全背包问题跟01

2020-09-17 15:52:51 328

原创 01背包问题

/*01 背包问题:选与不选的问题一个容量为10的背包,共有4件商品,他们的价值和重量分别为 价值 重量 v w 2 2 4 3 3 5 7 5将他们装入背包中,所得到的价值最大是多少,并且求选择是哪些商品输入第一行 背包容量Capacity和商品数量n接下来一行输入4件商品的价值和重量输出:装入背包中的最大价值*/#include<stdio.h>#include<stdlib

2020-09-16 19:15:10 258

原创 二叉树的先序遍历、中序遍历、后序遍历 1、已知先序遍历、中序遍历求后序遍历 2、已知后序遍历、中序遍历求先序遍历

二叉树的先序遍历、中序遍历、后序遍历#include<stdio.h>#include<stdlib.h>typedef struct Node{ char data; struct Node* lchild; struct Node* rchild;}BNode, *BiTree;void create_bitree(BiTree* Tree){ char ch; scanf("%c", &ch); if (ch == '#') { *T

2020-09-15 20:10:38 211

原创 邻接矩阵的深度优先遍历和广度优先遍历(无向图)

邻接矩阵的深度优先遍历和广度优先遍历(无向图)#include<stdio.h>#include<stdlib.h>#include<string.h>#include<queue>#include<iostream>using namespace std;#define MAXGRAPH 100int visited[MAXGRAPH]; //访问过的顶点数组typedef struct Graph_G{ char ver

2020-09-15 12:39:31 4636 5

原创 差分数组的原理以及一种题型

本文参考博客:https://blog.csdn.net/qq_31601743/article/details/105352885问题背景如果给你一个包含5000万个元素的数组,然后会有频繁区间修改操作,那什么是频繁的区间修改操作呢?比如让第1个数到第1000万个数每个数都加上1,而且这种操作时频繁的。此时你应该怎么做?很容易想到的是,从第1个数开始遍历,一直遍历到第1000万个数,然后每个数都加上1,如果这种操作很频繁的话,那这种暴力的方法在一些实时的系统中可能就拉跨了。因此,今天的主角就出现了

2020-09-12 16:53:38 342 1

原创 当类不想被继承时:将构造函数和析构函数私有化

参考博客:https://www.cnblogs.com/Rosanna/p/3339823.html#includeusing namespace std;class Base{private:Base() {};~Base() {};public:int num;static Base* Construct(){return new Base;}static Base* Construct(int n){Base* p = new Base;p->num = n

2020-09-07 21:40:48 290

转载 static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较

static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较参考博客https://blog.csdn.net/chenlycly/article/details/38713981

2020-08-29 12:52:21 81

原创 memmove解决内存重叠问题

当使用memcpy时,存在内存重叠问题时可能会出错,memmove解决了此问题,解决问题的方法是当出现内存重叠时,从后往前开始拷贝,具体的memcpy和memmove参考博客:https://www.cnblogs.com/luoquan/p/5265273.htmlmemcpy的原理如下所示:void *memcpy(void *dest, const void *src, size_t count){assert(dest != NULL || src != NULL);char *tmp

2020-08-21 09:41:50 1991

原创 VSCode远程连接Linux服务器gdb调试

1.下载Remote Development和C/C++工具2.连接Linux服务器配置config文件Host可以随意配置 HostName为连接的IP地址连接上后 点击最上面菜单栏的:文件->打开文件夹打开一个文件夹后点击运行->添加配置 会自动创建一个launch.json文件如图program是需要调试的程序args是调试携带的参数stopAtEntry是指开始调试的时候是否在main函数断点,默认为false 需要修改为true。保存后按F5可以调试程序

2020-08-18 16:18:07 1772

转载 VSCode Remote SSH远程连接失败过程试图写入的管道不存在

VSCode Remote SSH远程连接失败过程试图写入的管道不存在原因造成该方式的原因是因为服务器重装导致密钥的改变,因此vscode的Remote SSH连接原来的服务器会失败解决方案找到known_hosts文件,删除以前连接过的服务器信息我的文件目录在 C:\Users\90579.ssh打开vscode重新连接转载:https://www.jianshu.com/p/7c59ea90693b...

2020-08-18 14:58:39 5601 3

空空如也

空空如也

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

TA关注的人

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