自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 虚拟化摘要三

虚拟化概述概念:在虚拟环境里,虚拟机监控器(VMM)抢占了操作系统的位置,编程的物理机的管理者,同时向上层的软件呈现出虚拟的硬件平台,欺骗着上层的操作系统虚拟机可以看做是物理机的一种高效隔离的复制。敏感指令: 操作特权资源的指令,特权指令往往是敏感指令,但特权指令并不仅仅包含特权指令虚拟化漏洞: 如果一个体系存在敏感指令不是特权指令,那么就称其存在虚拟化漏洞虚拟化漏洞是可以采用一些手段来弥补或避免的如:虚拟机所有指令都采用模拟方式实现修改guest 的操作系统,避免非特权的敏感指令二进制扫

2021-01-04 21:09:38 148

转载 进程之间的共享资源的互斥访问

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> #include <pthread.h> pthread_mutex_t* g_mutex; //创建共享的mutex void init_mutex(void) {

2020-12-22 20:03:04 1431

原创 Nginx服务器安装部署

获取新版本的Nginx服务器Nginx的官方下载网站为http://nginx.org/en/download.html 。进入网站可以看到三种版本,开发版本(Development version),稳定版本(Stable version),过期版本(Legacy versions)。其中开发版本是Nginx所有版本中最新的版本。上图是Nginx下载页面。依次介绍页面上下载部分各链接具体含义,“CHANGES-x.x”链接,记录的是对应版本的功能变更日志,包括新增功能,功能优化和功能缺陷的修复等。“

2020-12-17 21:56:25 176

原创 shell编程实战训练二

实战十五:猜一个随机数#!/bin/bashsum=$[RANDOM%100]count=0while :do read -p "请你猜一个0到100之间的数:" guess [[ $guess =~ [[:alpha:]] || $guess =~ [[:punct:]] ]] && echo " invalid enter" && exit let count++ if [ $guess -eq $

2020-12-15 21:30:32 200

原创 2020-12-14

设计LRU缓存器要求:设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值[要求]set和get方法的时间复杂度为O(1)某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的。class Lru{ vector<int> key;//存放

2020-12-14 17:06:29 49

原创 shell编程实战训练一

实战一:清空一个文件内容#!bin/bashecho "by.c :"cat by.ccat /dev/null > by.c #把/dev/null内容重定向到by.c中echo "by.c is empty!"exit # 这是从一个脚本中退出正确合适的方法实战二:从文件中读取一个个数据#!bin/bash#默认分隔符为空格或换行或制表File="test"cat $Filefor state in $(cat $File)do echo "$state

2020-12-14 13:16:39 270

原创 数组篇一

编程实战一:转置矩阵思路:因为矩阵转置后不能确保行数与列数与原先相同,故而定义一个二维矩阵B,把A矩阵元素A[i][j]赋值给B[j][i]即可,若相同可以实现原地转置。 vector<vector<int>> transpose(vector<vector<int>>& A) { int row=A.size(),col=A[0].size(); vector<vector<int>>B(c

2020-12-13 18:20:46 194

转载 SHELL:echo -e “\033[字背景颜色;字体颜色m字符串\033[0m“

格式: echo -e “\033[字背景颜色;字体颜色m字符串\033[0m”例如:echo -e “\033[41;36m something here \033[0m”其中41的位置代表底色, 36的位置是代表字的颜色那些ascii code 是对颜色调用的始末.\033[ ; m …… \033[0m字背景颜色范围:40----4940:黑41:深红42:绿43:黄色44:蓝色45:紫色46:深绿47:白色字颜色:30-----------3930:黑31:红32

2020-12-12 22:11:03 2011

原创 二分查找+上界+下界

// 普通二分查找int bsearch(int *A, int l, int r, int val){ // [l, r) while(l < r){ int mid = l + (r - l) / 2; if(A[mid] == val) return mid; else if(A[mid] > val) r = mid; else l = mid + 1; } return -1;} // 查找下界// 当 x 存在时返回它出现的第一个位置,否则返回这样一个

2020-12-12 17:37:48 292

原创 C++学习零

C++和C的关系从概念上来说,C语言是一种面向过程的编程语言,而C++是一种面向对象编程的语言。一句话总结起来C++和C的关系-----C++=C+类+泛型编程+stl容器算法,这是贯穿C++整个学习的一条主线路。C++代码怎么跑起来呢上面就是一个C++代码基本的流程,通常会经历源代码->预处理->编译->汇编->链接->可执行文件在此给出linux平台下C++代码源文件命令行:g++ source.cpp -o exefile ,然后回车键,然后./exefil

2020-12-12 17:37:32 150

原创 C++学习一

C++数据类型及处理

2020-12-12 17:37:15 145

原创 C++学习二

复合类型C++除了之前提到的基本数据类型还包括复合类型,如数组,结构体,指针数组声明一个数组需要具备三点:元素类型,元素个数,数组名int a[6]={1,2,3,4,5,6};//下表注意从0开始,从左到右是a[0],a[1],a[2],a[3],a[4],a[5]int n;cin>>n;int*a=new int[n];//用new 关键字动态创建数组,优势之一是大小可变化,6用变量n代替,此时值为随机值,如果后面带(),则初始化为0注1:使用数组过程中千万注意不要越界

2020-12-12 17:36:59 156 1

原创 C++学习三

循环和关系表达式C++中最主要的循环语句for循环,for循环流程图while循环while循环和for循环比起来只有测试条件和循环体,也就说说while循环适用于那种你根本不知道要循环多少层的情况,如果你事先就已经知道要循环多少层,就可以直接使用for循环,否则whil循环。while(true){ statement 1;}注意://第一种情况int i=5;while(i>0);//分号表示结束,此时while的循环体为空,也就意味着这个循环是死循环{ cout

2020-12-12 17:36:43 80

原创 C++学习四

分支语句和逻辑运算符C++主要的分支语句有if语句,switch语句。这两种语句如下表所示。逻辑运算无非是与,或,非,异或。假设A为1,B为0break和continuebreak语句可以跳出for循环,while循环,而且只能跳出最内层的那一个循环,如果多层循环嵌套又想要一次性全部调出怎么办呢?可以考虑goto语句,想知道的话可以百度一下,而continue语句只是结束本次循环,开启下一次循环,注意其中的区别。文件io文件io流和我们之前碰到的标准输入流很相似,首先定义两个对象ifstre

2020-12-12 17:36:27 97

原创 C++学习五

函数-C++编程模块给出一个基本的函数声明框架函数参数与按值传递对于一个函数而言,当它被调用时,参数都是按值传递的,也就是说传进去的只是一个副本,无论你对这个副本做任何修改都是对实际参数没有任何影响的。而在函数中声明的变量包括形参全部都是函数所私有的,被调用时,计算机为它们分配内存,当调用完毕时,计算机会释放这些内存。举个例子#include <fstream>#include <iostream>using namespace std;void cube(int x

2020-12-12 17:36:07 105

原创 C++学习六

C++函数进阶版C++随着C++11的出现,函数方面有很多新的特性,比如内联函数内联函数的出现主要是用来提高程序运行速度,它和常规函数的区别在于C++编译器如何把它们组合到程序中去。从图中可以看到,常规函数的话,程序流程需要切换,有多少个函数调用,就要切换多少次。而对于内联函数来说,不需要切换,但是有多少内联函数就会存在多少个副本。为了使用内联函数这种特性,在声明或者定义函数之前都要用inline关键词修饰。**注:**内联与宏的区别,宏不传递参数,而是单纯的替代文本,因此一旦涉及到数学运算容易

2020-12-12 17:35:52 67

原创 C++学习(对前面的一点补充)

线程存储持续性之前说过C++有三种存储数据的方式,分别是自动存储,静态存储,动态存储,到了C++11之后又出了一个新的存储方式就是线程存储持续性。如果变量使用关键字thread_local声明的,那么生命周期与所属线程一样长。变量可见范围之同名变量寄存器变量用register关键字修饰的变量,最初是由C语言引进来的,它建议编译器用CPU寄存器来存储自动变量,但是到了C++11之后,完全就是起到一个兼容的作用,兼容旧代码而已,显示指出变量是自动变量。五种变量...

2020-12-12 17:35:35 69

原创 C++学习七

类和对象基本特点:抽象,继承,封装,多态,代码重用。概括一下,类就是由许多具有相似特点的对象抽象出来的一种集合,比如男人,女人都可以成为类,所有男人都有其共同特征,每一个具体的男人都可以称之为该类的一个对象。类权限累的权限分为公有和私有,公有表示,你想让别人看到,私有意味着你想隐藏起来,不让外界接触。class world{ float mass;//private by default char name[20];//private by default public: void

2020-12-12 17:35:14 88

原创 C++学习八

类的使用运算符重载运算符重载属于C++的一种多态形式,这种多态表现在编译期。而另外一种多态是虚函数,表现在运行期,原因是编译器只能在运行时候才能确定程序到底调用的是父类还是子类的虚函数。运算符函数格式operatorop(argument-list)运算符重载实例//mytime0.h#ifndef MYTIMEO_H_#define MYTIMEO_H_class Time{private: int hours; int minutes;public: Time(); T

2020-12-12 17:34:55 60

原创 C++学习补充

类的实用技术重载<<运算符转换函数构造函数使用new的类类的继承类有三种权限分别为public,private,protect,因此就对应三种继承方式,公有继承,保护继承,私有继承。但是对于派生类来说有些东西是相同的,对于继承方式来说并没有区别。1.构造派生类对象之前,先调用基类构造函数,然后初始化基类数据,以及派生类数据。2.派生类可以使用基类的方法,前提条件是方法不是私有的公有继承:建立一种is-a关系,派生类对象也是一种基类对象,可以对基类采取的行为同样适用于派生类

2020-12-12 17:34:37 94

原创 C++学习九

C++代码重用valarray类使用起来和vector,array类非常相似包含关系has-a关系:1.类包含对象数组。2.私有继承using和typedef

2020-12-12 17:34:16 61

原创 C++学习十

友元,异常和其他友元类class A{ public: friend class B;//B为A的友元类,B的所有成员都可以访问A的私有成员,共有成员,前提传入一个A类对象引用为参数 ..............};指定特定成员函数为友元class A{ friend void B::set(A&a,int c); ...........};这样就指定B类中的set()方法为A类的友元方法,然而这样就会出现一个循环依赖的问题,A类定义中提到了B类,那么应该先定义B

2020-12-12 17:33:55 61

原创 C++学习十一

string类和标准模板库string移动构造函数string(string &&str);//新创建的string为str副本,但是与复制构造函数不同的是,他不保证将str视为conststring输入//c风格字符串输入char info[100];cin>>info;cin.getline(info,100);cin.get(info,100);//string对象风格string stuff;cin>>stuff;getline(ci

2020-12-12 17:33:35 127

原创 shell编程

输出数据之echoecho “\t” #打印 \techo -e "hello\tworld"#加了-e 转义字符就会起作用echo -e "hello\rwor"#\r使光标返回行首,所以就是worlo,覆盖了hel输出数据之printf完全符合C语言的用法printf “%d” 12#输出12printf “%-10d” 56#56 左对齐,宽度为10printf “”输入数据之readread key#从键盘读取数据,赋值给变量keyecho $key #打印变量ke

2020-12-11 12:30:49 129

原创 shell中的$用法

shell中$的用法$在shell中有许多用法,在这里总结一下免得记混淆。通常情况下,在工作中用的最多的有如下几项:$0:Shell 的命令本身$1到9:表示 Shell 的第几个参数$? :显示最后命令的执行情况$#:传递到脚本的参数个数$$:脚本运行的当前进程 ID 号$*:以一个单字符串显示所有向脚本传递的参数$!:后台运行的最后一个进程的 ID 号$-:显示 Shell 使用的当前选项...

2020-12-09 14:05:46 1509

转载 linux的虚拟内存

虚拟内存毋庸置疑,虚拟内存绝对是操作系统中最重要的概念之一。我想主要是由于内存的重要”战略地位”。CPU太快,但容量小且功能单一,其他 I/O 硬件支持各种花式功能,可是相对于 CPU,它们又太慢。于是它们之间就需要一种润滑剂来作为缓冲,这就是内存大显身手的地方。而在现代操作系统中,多任务已是标配。多任务并行,大大提升了 CPU 利用率,但却引出了多个进程对内存操作的冲突问题,虚拟内存概念的提出就是为了解决这个问题。上图是虚拟内存最简单也是最直观的解释。操作系统有一块物理内存(中间的部分),有两个

2020-11-17 10:58:43 154

原创 重建二叉树-前序遍历和中序遍历

要求:根据前序遍历和中序遍历重建一棵二叉树主要编程思想:由于前序遍历第一个数永远是根,中序遍历根左边是左子树,右边卫右子树。因此,每次找到一个根节点,前序遍历就可以分成左子树序列和右子树序列,中序遍历也可以分成左子树序列和右子树序列,分别创建左子树和右子树,所以是非常典型的递归问题 TreeNode* rebuildTree(vector<int>& pre,int a1,int b1,vector<int>& vin,int a2,int b2) {

2020-11-11 10:01:20 93

原创 优先级队列

priority_queue的重载运算符一.重载“<”操作符定义优先级#include<queue>#<string>#<iostream>using namespace std;struct info{ string name; int score; bool operator <(const info&a)const { return a.score<score;//从小到大,改成>就是从大到小 }};i

2020-11-04 20:41:09 674

原创 sort

一.sort排序算法第一种情况,默认从大到小for(int i=0;i<10;i++) v[i]=10-i;sort(v.begin(),v.end());for(int i=0;i<10;i++) cout<<v[i]<<" ";//从大到小//sort(v.begin(),v.end(),cmp);/*bool cmp(const int&a,const int&b){ return a>b;}*/运行结果:1 2

2020-11-04 13:21:06 61

原创 ACM之C++STL泛型编程

一.accumulate函数介绍:用来计算特定范围内(包括连续的部分和初始值)所有元素的和,除此之外,还可以用指定的二进制操作来计算特定范围内的元素结果。其头文件在numeric中。应用实例(最好的解释就是举例子)#include <iostream>#include <vector>#include <numeric>using namespace std;int main( ) { vector <int> v1, v2(

2020-11-04 13:10:01 83

转载 linux IPC

sigwait 和pthread_kill1、函数介绍1.1 sigwaitsigwait的含义就如同它的字面意思:等待某个信号的到来。如果调用该函数的线程没有等到它想等待的信号那么该线程就休眠。要达到等到一个信号,我们得做下面的事!首先,定义一个信号集#include <signal.h>sigset_t set; 其次,向信号集中加入我们想等待的信号#include <signal.h>int sigemptyset(sigset_t *set);//

2020-09-16 17:02:22 50

原创 排序算法学习总结

一.冒泡排序简单来说就是两两比较,把大的数换到后面,小的数换到前面,一轮比较后,最大的数就排到了最后面,总共要比较n-1轮,冒泡排序是一种稳定排序算法,即使两个数相等,也不会破坏它们原有位置。二.快速排序简单来说就是选定一个基准值,一般选取最后一个数为基准值,然后定义两个参数start,end,start从第一位开始扫描,end从最后一位开始扫描(包括基准值),如果start找到比基准值大的数,end找到比基准值小的数,就把两个位置交换一下,直到start与end相等,把start位置上的数与基准

2020-06-27 06:49:02 126

原创 C++ 之map和unordered_map详解

C++中map和unordered_map提供的是一种键值对容器,在实际开发中会经常用到,它跟Python的字典很类似,所有的数据都是成对出现的,每一对中的第一个值称之为关键字(key),每个关键字只能在map中出现一次;第二个称之为该关键字的对应值(value)。

2020-06-15 22:47:56 1093

原创 C++学习

之前虽然系统的学了一下C++,但是依旧有些琐碎的知识点没有普及,所以这篇就是把平时接触到的一些C++知识点记录下来,以供自己巩固,完善知识模块

2020-06-15 18:42:19 169

空空如也

空空如也

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

TA关注的人

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