自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

为幸福写歌的博客

GitHub:https://github.com/zhiyongye

  • 博客(150)
  • 收藏
  • 关注

原创 算法常用C++总结

栈(stack)stack实现了一种先进后出的数据结构,使用时需要包含stack头文件C++定义stack语法:stack<int> s; //int为栈的数据类型,也可以为string,double等C++中stack的基本操作有:1、出栈:如 s.pop() 注意并不返回出栈的元素2、进栈:如 s.push(x)3、访问栈顶元素:如s.top();4、判断栈空:如 s.empty() 栈为空时返回true5、返回栈中元素个数,如:s.size()例...

2020-08-14 15:55:36 455

原创 遇到的常用shell脚本

set -e: 如果任何语句的执行结果不是true则应该退出cmd1 ; cmd2 cmd1 和 cmd2都会被执行 cmd1 && cmd2 如果 cmd1 执行成功则执行 cmd2 cmd1 || cmd2 如果 cmd1 执行失败则执行 cmd2 ...

2020-03-16 17:47:39 343

转载 怎样通俗的理解操作系统中内存管理分页和分段

要理解分段和分页,那么得理解为什么会出现分段和分页的技术。首先,这两个技术都是为了利用和管理好计算机的资源--内存。在分段这个技术还没有出现之前,程序运行是需要从内存中分配出足够多的连续的内存,然后把整个程序装载进去。举个例子,某个程序大小是10M,然后,就需要有连续的10M内存空间才能把这个程序装载到内存里面。如果无法找到连续的10M内存,就无法把这个程序装载进内存里面,程序也就无法得到...

2019-06-07 12:11:37 850 1

转载 C语言内联函数

引入内联函数的目的是为了解决程序中函数调用的效率问题。函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实现程序代码和数据的共享。但是,函数调用也会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去...

2019-06-06 17:19:41 1622

原创 基于virtio-serial的虚拟机和主机数据传输机制

virtio是Linux虚拟机平台上统一的虚拟IO接口驱动。通常主机为了让客户机像在真实环境中一样运行,需要为客户机创建各式各样的虚拟设备,如磁盘,网卡,显卡,时钟,USB 等。这些虚拟设备大大降低了客户机的性能。使用virtio虚拟机guest不用关注如何创建各种虚拟硬件设备(如磁盘,网卡,显卡等),可以用统一的虚拟设备,因此大大提高虚拟机的性能,这个统一的虚拟设备就是virtio。本文会...

2018-08-14 10:42:17 6871 7

原创 Xen使用console进入hvm虚拟机

HVM虚拟机默认不支持 xl console,需要使用图形界面安装好虚拟机后修改一些配置文件,让其支持xm/xl console 的连接方式。1. 在Dom0修改虚拟机的配置文件,添加:serial='pty'2. 修改虚拟机内部的 /boot/grub/menu.lst 或者 /boot/grub/grub.conf 文件,添加:serial --unit=0 --speed...

2018-07-30 21:18:34 962

原创 CentOS 6配置Bonding多网卡

1. 关闭和停止NetworkManager服务# service NetworkManager stop# chkconfig NetworkManager off2、加载bonding模块# modprobe --first-time bonding没有提示说明加载成功, 如果出现modprobe: ERROR: could not insert 'bonding':...

2018-07-18 21:25:01 1573

原创 KVM设置克隆虚拟机的网络

KVM克隆虚拟机后,需要设置虚拟机的网络,进入虚拟机后会发现没有eth0网卡,是因为虚拟机还使用原来的mac地址,需要修改之。编辑/etc/udev/rules.d/70-persistent-net.rules文件,把NAME="eth0"的那行配置注释掉或者删掉,把NAME="eth1"的修改成NAME="eth0",修改后如下:# vi /etc/udev/rules.d/70-p...

2018-07-18 18:03:57 652

原创 KVM使用Pass-through和SR-IOV

本文介绍了如何在KVM虚拟机平台上使用Pass-through和SR-IOV,至于Pass-through和SR-IOV的原理可以查阅其他文章。所谓Pass-through技术是指可以将PCI/PCIe设备绕过虚拟机平台直接分配给虚拟机使用,而SR-IOV设备除了有一个物理功能 (Physical Function, PF)之外,还可以提供许多虚拟功能 (Virtual Function, V...

2018-07-18 10:32:45 9947 5

原创 KVM复制虚拟机

KVM虚拟机的复制分为两种情况,第一种KVM宿主机上对虚拟机直接克隆,第二种通过复制配置文件与磁盘文件的虚拟机复制克隆(适用于异机的静态迁移)。方法一:KVM宿主机上对虚拟机直接克隆(需要在关机或暂停的状态下操作)1. Suspend the VM to be cloned. This is a requirement since it ensures that all data and ...

2018-07-16 16:52:22 4259

原创 CentOS 7安装KVM并创建虚拟机

本文参考自KVM的安装KVM官网文档&lt;KVM Virtualization in RHEL 7 Made Easy&gt;,这里记录安装和使用KVM的过程,以便后面查阅。准备工作检测是否支持KVM:KVM 是基于 x86 虚拟化扩展(Intel VT 或者 AMD-V) 技术的虚拟机软件,所以查看 CPU 是否支持 VT 技术,就可以判断是否支持KVM。有返回结果,如果结果中有vmx(Int...

2018-07-10 09:28:33 1341 2

转载 fork函数和vfork函数的区别

fork函数:子进程是父进程的一个拷贝,即子进程从父进程得到数据段和堆、栈段的拷贝,这些需要分配新的内存(不是与父进程共享,而是单独分配内存);而对于只读的代码段,通常使用共享内存的方式访问;fork返回后,子进程和父进程都从调用fork函数的下一条语句开始执行;由于子进程与父进程的运行是无关的,所以,父进程可先于子进程运行,子进程也可以先于父进程运行。vfork函数:vfork创建新进程的主要目...

2018-07-08 23:27:23 627

原创 进程创建详解与父子进程资源的管理

1. 父子进程执行顺序问题父进程在使用fork函数创建子进程后父进程与子进程互相不关联,以独立身份抢占CPU 资源,具体谁先执行由调度算法决定,用户空间没有办法干预。子进程执行代码的位置是fork/vfork 函数返回的位置。2. 子进程资源申请问题在使用fork函数创建子进程后,子进程重新申请新的物理内存空间,复制父亲进程地址空间所有的信息,子进程复制父亲进程的代码段,数据段,BSS 段,堆,栈...

2018-07-08 23:17:25 1506

转载 从源代码到可执行文件(编译链接全过程解析)

程序的生命周期从一个高级C语言程序开始,这种形式能够被人读懂,却不能被机器读懂,为了在系统上运行这个程序,该源程序需要被其他程序转化为一系列低级机器语言指令,然后将这些指令按照可执行目标程序的格式打包并以二进制磁盘文件形式存储起来。在Linux系统下,可用以下指令完成源程序到目标程序的转化:gcc -o hello hello.c main.cgcc 编译器驱动程序读取源文件hello.c和mai...

2018-07-03 21:49:27 4051

转载 C语言中的可变参数(printf的实现原理)

printf是根据格式化的字符来确定的栈中参数的值,长度。在C/C++中,对函数参数的扫描是从后向前的。C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出来,在计算机的内存中,数据有2块,一块是堆,一块是栈(函数参数及局部变量在这里),而栈是从内存的高地址向低地址生长的,控制生长的就是堆栈指针了,最先压入的参数是在最上面,就是说在所有参数...

2018-07-03 21:30:32 1235

转载 HTTP的长连接和短连接

1. HTTP协议与TCP/IP协议的关系HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。2. 如何理解HTTP协议是无状态的HTTP协...

2018-07-03 21:30:17 163

原创 笔试题

一. TCP协议如何保证传输的可靠性答:1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。2、数据校验3、数据合理分片和排序:  UDP协议:当IP数据报大于1500字节, 即大于最大传输单元(MTU)时,发送方IP层就需要分片(fragmentation),把数据报分成若干片,使每一片都小于MTU。而接收方IP层则需要进行数据报的重组,这样就会多做许多事情,而更严重...

2018-07-03 21:29:35 1698

转载 静态库与动态库的区别

什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:静态库之所以成为【静态库】,是因为在链接阶段,会将汇...

2018-07-03 21:27:28 5200

转载 二叉树的非递归遍历

二叉树定义的数据结构typedef struct BiNode{ char data; //此处,二叉树中节点值类型为字符型 struct BiNode *lchild,*rchild; //左右孩子节点}BiNode,*BiTree;二叉树的创建先申请根节点的空间,然后赋值,然后分别递归建立其左子树和右子树,按照先序序列输入构建一棵二叉树//按照先序序列输...

2018-07-03 21:25:08 192

转载 KMP算法

介绍串的普通模式匹配算法大体思路是:模式串从主串的第一个字符开始匹配,每匹配失败,主串中记录匹配进度的指针 i 都要进行 i-j+1 的回退操作(这个过程称为“指针回溯”),同时模式串向后移动一个字符的位置。一次次的循环,直到匹配成功或者程序结束。"KMP"算法相比于"BF"算法,优势在于:在保证指针 i 不回溯的前提下,当匹配失败时,让模式串向右移动最大的距离;并且可以在O(n+m)的时间数量级...

2018-07-03 21:24:37 921

原创 多线程pthread_join()的两种作用

pthread_join()函数原型:int pthread_join(pthread_t thread, void **retval);args:    pthread_t thread: 被连接线程的线程号    void **retval   : 指向一个指向被连接线程的返回码的指针的指针return:    线程连接的状态,0是成功,非0是失败当调用 pthread_join() 时,当...

2018-07-03 21:24:16 41015 6

原创 多线程pthread_join()和pthread_detach()函数的比较

pthread_join()函数:int pthread_join(pthread_t thread, void **retval);args:    pthread_t thread: 被连接线程的线程号    void **retval   : 指向一个指向被连接线程的返回码的指针的指针return:    线程连接的状态,0是成功,非0是失败当调用 pthread_join() 时,当前线...

2018-07-03 21:24:00 1921 1

转载 面试精选:链表问题集锦

下面是本文所要用到链表节点的定义:struct Node{ int data; Node* next;};1. 在O(1)时间删除链表节点题目描述:给定链表的头指针和一个节点指针,在O(1)时间删除该节点。[Google面试题]分析:本题与《编程之美》上的「从无头单链表中删除节点」类似。主要思想都是「狸猫换太子」,即用下一个节点数据覆盖要删除的节点,然后删除下一个节点。但是如果节...

2018-07-03 21:22:52 137

转载 TCP面向字节流和UDP面向报文的区别

TCP面向字节流打个比方比喻TCP,你家里有个蓄水池,你可以里面倒水,蓄水池上有个龙头,你可以通过龙头将水池里的水放出来,然后用各种各样的容器装(杯子、矿泉水瓶、锅碗瓢盆)接水。上面的例子中,往水池里倒几次水和接几次水是没有必然联系的,也就是说你可以只倒一次水,然后分10次接完。另外,水池里的水接多少就会少多少;往里面倒多少水,就会增加多少水,但是不能超过水池的容量,多出的水会溢出。结合TCP的概...

2018-07-03 21:22:15 10102

转载 结构体在内存中的存储方式

一个结构体变量定义完之后,其在内存中的存储并不等于其所包含元素的宽度之和。例一:#include &lt;iostream&gt;using namespace std;struct X { char a; int b; double c; }S1;int main() { cout &lt;&lt; sizeof(S1) &lt;&lt; endl; cout &lt;&...

2018-07-03 21:22:00 9505 1

原创 配置SR-IOV网卡的VF权限

可以使用 ip-link(8) 工具对SR-IOV网卡的VF进行权限配置,命令组:ip link set用于改变设备的权限。1. 设置VF的mac地址:ip link set dev p5p1 vf 0 mac aa:bb:cc:dd:ee:002. 对指定的VF添加信任: ip link set dev p5p1 vf 0 trust onThis command enables trust o...

2018-06-26 15:15:36 12504

原创 CentOS 7 配置iSCSI

iSCSI技术在工作形式上分为服务端(target)与客户端(initiator)。iSCSI服务端即用于存放硬盘存储资源的服务器,它作为前面创建的RAID磁盘阵列的存储端,能够为用户提供可用的存储资。iSCSI客户端则是用户使用的软件,用于访问远程服务端的存储资源。能够完成 iSCSI target/initiator 设定的项目非常多,这里使用的是targetcli项目。iSCSI Targe...

2018-06-06 17:55:04 13360

原创 CentOS 7配置网络

一、配置IP地址进入到 目录, 修改ifcfg-em1文件:[root@ccrfox141 ye]# cd /etc/sysconfig/network-scripts[root@ccrfox141 network-scripts]# lsifcfg-em1 ifcfg-em4 ifcfg-p5p2 ifdown-eth ifdown-isdn ifdown-routes ...

2018-06-03 21:49:23 2025

原创 CentOS 7源码安装 Xen 4.9

 CentOS 7源码安装 Xen跟Centos 6稍微有点不一样,这里记录下来以便以后查阅。安装前的配置和安装需要的软件包CentOS7系统安装以后,首先查看有没有开启SELinux,如果开启了要关闭SELinux的功能:[root@centos ~]# vi /etc/sysconfig/selinux # This file controls the state of SELi...

2018-06-03 12:05:13 1090

原创 CentOS 6升级Linux内核

本文参考自:http://elrepo.org/tiki/tiki-index.php1. 导入public keyrpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org2. 安装ELReporpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm3....

2018-05-30 22:44:38 824

原创 LeetCode—两数相加

题目来自LeetCode:https://leetcode-cn.com/problems/add-two-numbers/description/注意几点:链表对应结点相加时增加前一个结点的进位,并保存下一个结点的进位;两个链表长度不一致时,要处理较长链表剩余的高位和进位计算的值;如果最高位计算时还产生进位,则还需要添加一个额外结点。/** * Definition for singly-li...

2018-04-24 10:13:46 154

原创 二分查找

二分查找比较简单,直接贴代码:Position BinarySearch( List L, ElementType X ) { Position left = 0; Position right = L->Last; Position mid; while(left <= right) { mid = (left+right)/2; if ( L->

2018-04-23 21:14:30 163

原创 最大子列和问题

问题如下:使用在线处理的方法,“在线”的意思是指每输入一个数据就进行即时处理,在任何一个地方中止输入,算法都能正确给出当前的解。算法每次向右累加一次,就进行处理,如果当前的子列和小于0,则再继续向右加也不会是最大值,所以将其抛弃,从下一个数当做果起点从新开始累加。如果当前子列和大于过去的最大子列和,更新之。代码如下:#include &lt;stdio.h&gt;#include &lt;mal...

2018-04-23 16:46:38 210

转载 sigaction函数及信号集操作函数的使用

信号是与一定的进程相联系的。也就是说,一个进程可以决定在进程中对哪些信号进行什么样的处理。例如,一个进程可以忽略某些信号而只处理其他一些信号;另外,一个进程还可以选择如何处理信号。总之,这些总与特定的进程相联系的。因此,首先要建立其信号和进程的对应关系,这就是信号的安装登记。Linux主要有两个函数实现信号的安装登记:signal和sigaction。其中signal在系统调用的基础上实现,是库函...

2018-04-03 10:32:08 6251 2

原创 Linux中expect自动交互脚本的使用

最近在一台物理机上同时运行64个虚拟机进行测试,但每台虚拟机的操作都是一样的,所以用脚本来操作会方便很多,但唯一的问题就是要自动登录64台虚拟机后再进行操作,利用expect能解决这个问题。expect是用来进行自动化控制和测试的工具,在Ubuntu14的安装方法是:# apt-get install expectexpect常用命令:spawn:spawn命令

2018-01-31 22:10:40 812

原创 网络测试工具netperf的使用

Netperf是一种网络性能的测量工具,可以测试基于TCP或UDP吞吐、响应速率。Netperf包括Clien和Server端,Server端主要用来实现监听工作,Client端进行测试。根据流量传输方式可分为以下三种:单方向最大吞吐传输大量数据。双方向交互传输数据,对于tcp为单连接。针对tcp,每个连接交互传输数据。Netperf服务端Netperf服务端使用命令为nets

2018-01-24 15:39:45 6110

转载 MapReduce的一个通俗解释

其实我们可以从word count这个实例来理解MapReduce。MapReduce大体上分为六个步骤:input, split, map, shuffle, reduce, output。细节描述如下:1. 输入(input):如给定一个文档,包含如下四行:Hello JavaHello CHello JavaHello C++2. 拆分(split):将上

2017-12-14 21:08:13 4835

原创 Xen中DomU与Dom0之间的通信机制

首先介绍用于Dom0和DomU通信的相关技术事件通道:用于Dom和Xen之间、Dom和Dom之间异步事件通知机制I/O 共享环:I/O 共享环是在不同Domain 之间存在的一块固定的共享内存,用于在DomainU 和Domain0 之间传递I/O 请求和响应。I/O 共享环利用生产者和消费者的机理,来产生发送以及响应I/O 请求。授权表(Grant Table):授权表(Gran

2017-11-29 22:55:23 4200

原创 Xen创建虚拟机 loop device 数目限制问题

Ubuntu 14 默认对 loop devices 支持的最大数目是8,所以当我创建第九个虚拟机的时候,出现了下面的错误:Parsing config from /home/ye/ubuntu-pv/ubuntu-pv-9/ubuntu-pv-9.cfglibxl: error: libxl_exec.c:118:libxl_report_child_exitstatus: /etc/xe

2017-11-28 17:29:50 751

原创 Ubuntu14配置Bonding多网卡

Installationsudo apt-get install ifenslaveInterface ConfigurationStep 1: Ensure kernel supportBefore Ubuntu can configure your network cards into a NIC bond, you need to ensure that the corr

2017-11-27 17:08:34 4638

空空如也

空空如也

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

TA关注的人

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