自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一路前行的专栏

C++ STL UNIX环境编程 Linux内核

  • 博客(105)
  • 资源 (2)
  • 收藏
  • 关注

原创 同步、异步与阻塞、非阻塞经典段子(来自网络)

老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。3 老张把响水壶放到火上,立等水

2014-09-08 23:24:20 1493

转载 Linux内核高端内存

Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。段页式机制如下图。 Linux内核地址空间划分通常32位Linux内核地址空间划分0~3G为用户空间,3~4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。

2014-09-01 09:26:04 978

原创 Nginx如何解决“惊群”现象

首先解释下什么是“惊群”现象:如果多个工作进程同时拥有某个监听套接口,那么一旦该套接口出现某客户端请求,此时就将引发所有拥有该套接口的工作进程去争抢这个请求,能争抢到的肯定只有某一个工作进程,而其他工作进程注定要无功而返,这种现象即为“惊群”。Nginx解决这种“惊群”现象使用的是负载均衡的策略,接下来先结合Nginx的源码详细介绍下Nginx的这种负载均衡策略。首先是Nginx如何开启负

2014-08-31 12:59:34 4334

原创 剑指offer面试题31:连续子数组的最大和

问题描述:一个N个整数元素的一维数组(A[0],A[1],...,A[n-2],A[n-1]),这个数组当然有很多子数组,那么子数组之和的最大值是多少呢?解题思路:定义两个变量,nStart表示以当前元素为首的子数组的最大值,nAll表示遍历到当前元素时最大子数组的值.从数组的尾元素开始遍历.有如下的递推公式:nStart = max(A[i], nStart + A[i]);

2014-08-22 21:32:59 1400

原创 Linux信号机制

信号概念信号是软件中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法。每个信号都有一个名字,这些名字都以三个字符SIG开头。例如,SIGABORT是要装信号,当进程调用abort函数时产生这种信号。不存在编号为0的信号。很多条件可以产生信号:当用户按某些终端键时,引发终端产生的信号。在终端按DELETE键(或者很多系统中的Ctrl+C键)通常产生终

2014-08-17 16:16:40 1236

原创 分享几个常见基础的面试题

面试题 1:sizeof 和 strlen 的区别sizeof 和 strlen 有以下区别:sizeof 是一个操作符,strlen 是库函数。sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾为‘\ 0‘的字符串作参数。编译器在编译时就计算出了 sizeof 的结果。而 strlen 函数必须在运行时才能计算出来。并且 sizeof计算的是数据类型占内

2014-08-15 15:20:43 1317

原创 Linux高级进程间通信:UNIX域套接字

UNIX域套接字简介UNIX域套接字用于在同一台机器上运行的进程间的通信。虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高。UNIX域套接字仅仅复制数据,它们并不执行协议处理,不需要添加和删除网络报头,无需计算检验和,不要产生顺序号,无需发送确认报文。UNIX域套接字提供流和数据报两种接口。UNIX域数据报服务是可靠的,既不会丢失消息也不会传递错误。UNIX域套接字是套接字和

2014-08-14 18:51:04 3083

原创 Linux环境进程间通信:共享内存

共享内存简介共享内存允许两个或多个进程共享一给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,所以这是最快的一种IPC。共享内存的方式有两种:mmap()系统调用和系统V共享内存。mmap()系统调用mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write(

2014-08-14 16:06:49 1093 1

原创 IO复用

IO复用简介IO复用使得程序能同时监听多个文件描述符,这对提高

2014-08-14 12:04:37 2022

原创 tcp/ip协议listen函数中backlog参数的含义

listen函数的定义如下所示:#include int accept(int sockfd, struct sockaddr * restrict addr, socklen_t *restrict len);返回值:若成功则返回文件(套接字)描述符,若出错则返回-1int listen(int sockfd, int backlog);返回值:若成功则返回0;若出错则返回-1

2014-08-11 22:03:06 3212 3

原创 IO复用、多进程和多线程三种并发编程模型

I/O复用模型I/O复用原理:让应用程序可以同时对多个I/O端口进行监控以判断其上的操作是否可以进行,达到时间复用的目的。在书上看到一个例子来解释I/O的原理,我觉得很形象,如果用监控来自10根不同地方的水管(I/O端口)是否有水流到达(即是否可读),那么需要10个人(即10个线程或10处代码)来做这件事。如果利用某种技术(比如摄像头)把这10根水管的状态情况统一传达到某一点,那么就只需要1个

2014-08-08 17:06:00 9285 2

转载 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概念性问题,并没有深入地阅读分析源码,我也是草草翻过这本书,请有兴趣的朋友自己参考相关资料。此书出版较早,分析的版本为2.4.16,故出现的一些概念可能跟最新版本内核不同。此书已经开源,阅读地址 

2014-08-04 21:57:17 898

原创 Same Tree

问题描述:Given two binary trees, write a function to check if they are equal or not.Two binary trees are considered equal if they are structurally identical and the nodes have the same value.解题思路:

2014-08-01 11:09:41 950

原创 Climbing Stairs

问题描述:You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?解题思路:这是一个典型的斐波那契数列,对于

2014-07-30 21:54:45 874

原创 将字符串转换成数字

问题描述:Implement atoi to convert a string to an integer.解题思路:对于一个字符串需要注意一下几点:1、过滤字符串开头的所有空格字符;2、注意数字字符前面的“+”和“-”字符,从而确定数字的正负号;3、只处理数字字符,一旦出现非数字字符,立即停止字符串处理,并返回已处理的结果;4、返回结果时要注意数字越界的问题,不能

2014-07-30 21:48:43 1507

原创 Combinations

问题描述:Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.For example,If n = 4 and k = 2, a solution is:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]解题思路

2014-07-30 21:42:55 905

原创 Single Number I & II

Single Number I问题描述:Given an array of integers, every element appears twice except for one. Find that single one.解题思路:既然除了某个元素出现一次外,其他所有元素都出现两次,那么可以异或数组的所有元素,得到的结果就是我们所要找的那个元素的值。class Solu

2014-07-30 11:01:06 852

原创 Partition List

问题描述:Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.You should preserve the original relative order of the nodes in

2014-07-30 10:41:22 943

原创 复杂链表的复制

问题描述:A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.Return a deep copy of the list.解题思路:将1->2->3->4->NUL

2014-07-30 08:29:05 901

原创 Leet Code—Jump Game II

问题描述:Given an array of non-negative integers, you are initially positioned at the first index of the array.Each element in the array represents your maximum jump length at that position.Your goa

2014-07-29 21:08:59 698

原创 Reverse Words in a String

问题描述:Given an input string, reverse the string word by word.For example,Given s = "the sky is blue",return "blue is sky the".解题思路:每遍历出一个单词时,将该单词添加一个空格字符(如果临时字符串为空,即扫描出第一个单词,就不要添加空格字符),然后添加

2014-07-29 21:04:35 882

原创 shell脚本实现检测回文字符串

所有回文字的结构特征如下:

2014-07-29 18:01:10 4319

原创 九章算法——面试题思路

面试题1 落单的数题目描述:有2n+1个数,其中2n个数两两成对,1个数落单,找出这个数。要求O(n)的时间复杂度,O(1)的空间复杂度。进阶问题:如果有2n+2个数,其中有2个数落单,该怎么办?答:初阶:将2n+1个数异或起来,相同的数会抵消,异或的答案就是要找的数。进阶:假设两个不同的数是a和b,并且a!=b,将2n+2个数异或起来就会得到c=a

2014-07-29 10:49:58 4230

转载 C/C++ 笔试、面试题目大汇总

1.求下面函数的返回值(微软)int func(x) {     int countx = 0;     while(x)     {           countx ++;           x = x&(x-1);      }     return countx; } 假定x = 9999。 答案:8思路:将x转化为2进制,看含

2014-07-22 23:11:03 921

原创 Leet code —Jump Game

问题描述:Given an array of non-negative integers, you are initially positioned at the first index of the array.Each element in the array represents your maximum jump length at that position.Determin

2014-07-22 20:01:40 796

原创 编程实现获取linux服务器cpu、内存和磁盘使用率

1.获取cpu使用率的方法:

2014-07-01 21:44:07 7976 2

原创 使用libvirt库创建kvm虚拟机

使用libvirt库创建虚拟机(domain)需要使用XML文件作为配置文件,如下是一个最基本的虚拟机配置文件

2014-07-01 20:50:47 1326

原创 QEMU-KVM创建虚拟机自动指定IP的配置

在使用qemu创建虚拟机的过程中是无法指定IP地址的,可是在实际应用中,我们是需要虚拟机拥有IP地址的,并且不是人为去虚拟机操作系统上配置。在qemu虚拟机技术文档(http://qemu.weilnetz.de/qemu-doc.html#pcsys_005fmonitor)里捣鼓了好久,发现在给虚拟机创建虚拟网卡时可以指定MAC地址,顿时眼前大亮:如果可以给一个虚拟机网卡唯一指定一个MAC地址

2014-07-01 20:33:27 19273 1

原创 typedef struct与struct定义结构体

今天在定义结构体的时候发现typedef struct与struct定义结构体有一些不同之处:结构也是一种数据类型, 可以使用结构变量, 因此,  象其它 类型的变量一样, 在使用结构变量时要先对其定义。   定义结构变量的一般格式为:        struct 结构名        {               类型  变量名;               类

2014-06-27 22:12:20 3383

转载 linux获取系统时间

1.时间表示在程序当中,我们经常要输出系统当前的时间,比如我们使用date命令的输出结果。这个时候我们可以使用下面两个函数time_t time(time_t *tloc);                    //时间精度为秒char *ctime(const time_t *clock);            //将秒数转化为字符串time函数返回从1970年1月1

2014-06-24 20:27:41 1196

转载 用libvirt进行KVM迁移问题汇总

本文主要以解决问题的方式介绍KVM(在线)迁移虚拟机的方法,可能内容包含的不是很全面,这些只是我在实验的时候遇到的问题(我操作之前是裸环境,一步一步debug到成功,如果按照下述方法,基本不会出太大差错),当然如果遇到的问题没有被包含可以留言回复或加入QQ群:93146027。。。之前一直以为KVM虚拟机迁移需要共享存储,虚拟机的镜像放到共享存储中,迁移的过程相当于启动一个监听虚拟机,将内

2014-06-23 22:04:40 4732

原创 Linux编程获取本机IP地址

使用函数getifaddrs来枚举网卡IP,其中使用到的结构体如下所示:struct ifaddrs { struct ifaddrs *ifa_next; /* Next item in list */ char *ifa_name; /* Name of interface */ unsigned int ifa_

2014-06-21 10:55:33 2161 1

转载 GDB常用命令

Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。和所有常用的调试工具一样,gdb提供了以下功能: # 监视程序中变量的值 # 在程序中设置断点 # 程序的单步执行在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc或cc编译时就

2014-06-19 16:20:30 565

原创 使用KVM虚拟机遇到的问题(持续更新)

1.qemu-kvm、kvm、qemu 和 qemu-system-x86_64四种命令的区别qemu 和 qemu-system-x86_64:启动qemu虚拟机的命令,x86_64为64位系统时使用的命令qemu-x86_64  仅仅模拟CPUqemu-system-x86_64 模拟整个PCqemu-kv和 kvm:如果要开启kvm支持,需要使用qemu-kvm或者kvm

2014-06-18 10:46:29 14174

原创 让命令提交后不受本地关闭终端窗口/网络断开连接的干扰

项目中操作场景:本地机器上通过ssh连接服务器进行相关操作。这里就出现一个问题,在我们本地程序中,向服务器发送一个命令是没有任何问题的,可是当本次程序意外关闭或者由于网络断开连接,这是我们通过本地程序在服务器上创建的进程也就会被杀死。所以问题就来了:如何让对应进程能无间断的执行,即通过本机程序在服务器上创建一个进程,当本地关闭ssh连接或者与服务器的网络断开之后,这个创建的进程要继续存在而不会被杀

2014-06-16 20:57:53 1995

转载 通过网络连接到QEMU monitor

在我的KVM书中,关于QEMU监控器(monitor)的使用还是讲了不少东西的,不过,翻看以前收藏的一篇文章,发现其中提到的通过网络访问QEMU monitor的方法是没有在书中提及的。所以,在这里简单介绍一下吧,也是给自己留个记忆。(如果–仅仅是如果,有再版的话,可以考虑加上一两页来讲个东东。)1. QEMU monitor支持远程telnet访问:View Code BAS

2014-06-16 12:08:45 3219

原创 GCC参数详解

[介绍]gcc and g++分别是gnu的c & c++编译器gcc/g++在执行编译工作的时候,总共需要4步1.预处理,生成.i的文件2.将预处理后的文件不转换成汇编语言,生成文件.s 3.有汇编变为目标代码(机器代码)生成.o的文件4.连接目标代码,生成可执行程序[参数详解]-x language filename设定文件所使用的语言,使后缀名无效,对

2014-06-13 16:37:44 991

转载 如何写Makefile

如何写Makefile在该文开始之前,在chianunix推荐一篇有关Makefile的论坛文章“跟我一起写Makefile”:http://www.chinaunix.net/old_jh/23/408225.html在csdn见陈浩专栏:http://blog.csdn.net/haoel/article/details/2886#comments 而本文主要关注如

2014-06-09 15:29:11 1021

原创 stdarg.h——用于函数接受可变参数

stdarg.h——用于函数接受可变参数

2014-06-08 21:59:30 965

原创 记录锁(record locking)机制

记录锁机制介绍

2014-06-08 21:32:22 1740

数据结构课程设计——约瑟夫问题

设编号为1-n的n(n>0)个人按顺时针方向围成一圈.首先第1个人从1开始顺时针报数.报m的人(m 为正整数).令其出列。然后再从他的下一个人开始,重新从1顺时针报数,报m的人,再令其出列。如此下去,直到圈中所有人出列为止。求出列编号序列。

2011-07-01

空空如也

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

TA关注的人

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