- 博客(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
原创 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
原创 九章算法——面试题思路
面试题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
原创 使用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
数据结构课程设计——约瑟夫问题
2011-07-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人