自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

鱼思故渊的专栏

不积跬步,无以至千里;不积小流,无以成江海

  • 博客(33)
  • 资源 (3)
  • 收藏
  • 关注

原创 Linux中虚拟内存和物理内存的关系

首先,让我们看下虚拟内存:第一层理解1.         每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构2.       一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存空间的分

2015-01-29 16:43:03 1683

原创 Linux下信号种类以及特殊信号的含义

可看到Linux支持的信号列表:$ kill -l1) SIGHUP        2) SIGINT        3) SIGQUIT       4) SIGILL 5) SIGTRAP       6) SIGABRT       7) SIGBUS        8) SIGFPE 9) SIGKILL      10) SIGUSR1      11) SIGSEGV     

2015-01-29 15:52:02 3486

原创 Linux中volatile关键字的作用

一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:

2015-01-29 15:05:09 2968 1

原创 linux中的exit()和_exit()函数区别

exit和_exit函数都是用来终止进程的。当程序执行到exit或_exit时,系统无条件的停止剩下所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。但是,这两个函数是有区别的。    exit()函数的作用是:直接使用进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构;_exit()函数则在这一基础上做了一些包装。在执行退出之前加了若干道工序。exit()函数与

2015-01-29 09:54:28 1110

原创 将二叉树转化为双向链表

递归解法:(1)如果二叉树查找树为空,不需要转换,对应双向链表的第一个节点是NULL,最后一个节点是NULL(2)如果二叉查找树不为空:如果左子树为空,对应双向有序链表的第一个节点是根节点,左边不需要其他操作;如果左子树不为空,转换左子树,二叉查找树对应双向有序链表的第一个节点就是左子树转换后双向有序链表的第一个节点,同时将根节点和左子树转换后的双向有序链 表的最后一个节点连接;

2015-01-29 08:50:43 2024

原创 linux内核--段页式管理内存的方法

一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不

2015-01-28 19:50:28 3492

原创 红黑树插入删除节点过程分析 && C代码实现

红黑树的插入和删除规则:红黑树的五个性质1、    每个节点要么是红的,要么是黑的2、    根节点时黑色的3、    每个叶节点(叶节点既指树尾端NIL指针或NULL节点)是黑色的4、    如果一个节点时红的,那么它的两个儿子都是黑色的5、    对每个节点,其到叶节点树尾端NIL指针的每一条路径都包含相同数目的黑节点这里所说的“叶节点”或者“NULL节点”,它不包

2015-01-28 13:42:23 1552

原创 深度优先搜索 && 广度优先搜索

类比二叉树先序遍历与图深度优先搜索在引入图的深度优先搜索之前,为了更加容易理解.先考究一种特殊的图---二叉树的深度优先搜索算法---即二叉树的递归遍历方法.二叉树的前序遍历算法: void TreeWalk(node* root) { if(root) { visit(root);

2015-01-27 19:37:06 1070

原创 二叉搜索树的创建 && 查找 & 插入 & 删除

二叉搜索树的删除:在删除之前需要从树中查找到这个节点,然后再针对情况来判断如何删除。分为三种情况,首先是此节点没有孩子节点,此节点有一个孩子节点,此节点有两个孩子节点void Delete(BinTree*& root,int value){ BinTree* delnode= NULL; if(root == NULL) return ; BinTree* temp

2015-01-19 10:47:55 1049

原创 相邻元素差的绝对值都是1,在这样的数组中找目标元素

有这样一个数组A,大小为n,相邻元素差的绝对值都是1。如:A={4,5,6,5,6,7,8,9,10,9}。现在,给定A和目标整数t,请找到t在A中的位置。除了依次遍历,还有更好的方法么?这道题目的解法非常有趣。数组第一个数为array[0],要找的数为y,设t = abs(y - array[0])。由于每个相邻的数字之差的绝对值为1。故第t个位置之前的数肯定都比y小。因此直接定位到

2015-01-18 17:00:36 2918

原创 二路归并 && 插入归并 && 原地归并

插入归并归并排序的时间复杂度为O(nlgn),空间复杂度为O(n);但是一般来讲,基于从单个记录开始两两归并的排序并不是特别提倡,一种比较常用的改进就是结合插入排序,即先利用插入排序获得较长的有序子序列,然后再两两归并(改进后的归并亦是稳定的,因为插入排序是稳定的)。之所以这样改进是有原因的:尽管插入排序的最坏情况是O(n^2),看起来大于归并的最坏情况O(nlgn),但通常情况下,由于插

2015-01-17 17:38:32 1652

原创 Trie树的详解及应用

Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。  Trie 的强大之处就在于它的时间复杂度。它的插入和查询时间复杂度

2015-01-14 20:21:48 1617

原创 一串首尾相连的珠子(m个),有N种颜色(N<=10),使得最短的字符串包含全部颜色

思路:先从index=0处搜索,每检查一颗珠子,响应的颜色数量+1,如果是新的颜色则总颜色数+1.                     当颜色总数为n时,找到第一个满足条件的连续序列。                           1>从该序列起始处搜索,若搜索处的颜色数量不为1,则表明该串还有别的珠子有该颜色,继续往前搜索并更新该序列,起始索引位置+1.         

2015-01-14 19:27:33 2557 1

原创 链表的归并排序

因为链表是节点式存储,不能做到随机存储,但是对于两个有序链表之间的合并不需要额外的空间,在O(1)空间复杂度O(n)时间复杂度内即可完成。所以对于链表排序,使用归并排序比较划算。typedef struct Node List;struct Node{ int value; List* next; }; //链表节点结构体首先合并两个

2015-01-14 18:05:09 1068

转载 位操作基础篇

转载:http://blog.csdn.net/morewindows/article/details/7354571在计算机中所有数据都是以二进制的形式储存的。位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千斤的效果,正因为位操作的这些优点,所以位操作在各大IT公司的笔试面试中一直是个热点问题。因此本

2015-01-14 14:40:20 729

转载 一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值

划分为m块时,需要具备的条件:m的取值为1~n每一部分之和为 sum/m; (sum为数组元素之和)sum % m == 0,否则不可能平分递归思想:假设分为m块,每一块之和即为subSum = sum / m。subSum即为每一块元素之和。如果array[i]在某一个块中,则需要在数组的其中元素中找出和值为(subSum - array[i])的组合。利用boo

2015-01-14 11:43:10 3125

转载 为什么只给出前序和后序,不能唯一确定一个二叉树

我们在学习二叉树的遍历时,都会不可避免的学到二叉树的三种遍历方式,分别是遵循(根-左-右)的前序遍历、遵循(左-根-右)的中序遍历以及遵循(左-右-根)的后序遍历。并且每一个二叉树都可以用这三种遍历方式并且分别转换为字符串序列,以便在计算机上面保存。但是我们在进行逆向操作的时候却会遇到困难:我们并不能从某一种遍历方式推断出唯一的二叉树,也就是说,这是个单向编码的过程。而当我们有一个二叉树的两种遍历

2015-01-13 22:55:52 13840 5

原创 由二叉树的前序遍历和中序遍历来求后序遍历的结果

假设有棵树,长下面这个样子,它的前序遍历,中序遍历,后续遍历都很容易知道。PreOrder:         GDAFEMHZInOrder:            ADEFGHMZPostOrder:       AEFDHZMG 现在,假设仅仅知道前序和中序遍历,如何求后序遍历呢?比如,已知一棵树的前序遍历是”GDAFEMHZ”,而中序遍历是”ADEFGHMZ”应该

2015-01-13 22:52:19 1082

原创 多线程读取全局变量 (在无锁状态下 会造成多少种值的出现)

int global = 0;// thread 1for(int i = 0; i < 10; ++i)global -= 1;// thread 2for(int i = 0; i < 10; ++i)global += 1;之后global的可能的值是多少(多种可能)?   这个问题考虑的是全局变量global的加减操作不是原子操作,在加减过程中有可能被打断,从而产生

2015-01-13 19:45:03 4361 1

转载 比较排序算法

比较排序算法分类比较排序(Comparison Sort)通过对数组中的元素进行比较来实现排序。比较排序算法(Comparison Sorts)CategoryNameBestAverageWorstMemoryStability 插入排序 (Insertion Sorts) 

2015-01-13 17:33:28 1025

原创 小白鼠试毒药,最少需要多少即可试出结果

有 1000  桶酒,其中 1  桶有毒。而一旦吃了,毒性会在 1  周后发作。现在我们用小老鼠做实验,要在 1  周内找出那桶毒酒,问最少需要多少老鼠。一只老鼠喝酒后又两种状态:死(0)和活(1).所以10只老鼠就能表示2的10次方个状态(即1024个)。2^0表示2的零次方。2^8表示2的8次方。设有10只老鼠编号分别为2^0,2^1, 2^2, 2^3, 2^4, 2^5,

2015-01-13 14:27:37 3897

原创 利用随机函数生成随机数

给定一个rand(),可以产生从0到RAND_MAX的随机数,其中RAND_MAX很大(常见值:16位int能表示的最大整数32767),写出利用rand()生成[a,b]中任意整数的函数,其中a>=0, b分析:这是在编程工作最常见的随机函数的应用,在这里做一个起点再合适不过。把随机数区间的起点从0变为a,同时把一共RAND_MAX+1个数的区间缩小至只含有b-a+1个数的区间,写为 a

2015-01-11 09:01:53 3929

原创 等概率无重复的从n个数中选取m个数

问题描述:程序的输入包含两个整数m和n,其中m学习过概率统计的同学应该都知道每一个数字被抽取的概率都应该为m/n. 那么我们怎么构造出这样的概率呢?在《编程珠玑》上面是这样解析的:  依次考虑整数0,1,2,.....,n-1,并通过一个适当的随机测试对每个整数进行选择。通过按序访问整数,我们可以保证输出结果是有序的。 假如我们考虑m = 2,n = 5的情况,那么选择的每一个数字的概率都

2015-01-11 08:57:27 20784

原创 使用Easybcd 安装双系统 windows+ubuntu

1)安装Easybcd2)稍等会运行 EasyBCD,以后自己在桌面上双击运行,在第一步要选择“简体中文”,然后点“Go”继续;   接下来的版权提示点“确定”继续;   3)在出来程序窗口左侧栏,点击“添加新条目”;   4)然后在右侧出来一个面板,点最右边的“NeoGrub”标签,再点它下边的“安装”按钮;   5)稍等安装完成,再点击它

2015-01-09 16:00:37 5294

原创 the virtual machine is configured for 64-bit guest operating systems

解决办法:修改BIOS设置 Security--Virtualization--Inter(R) Virtualization Technolog 设置为enable本机安装的是WIN 7 ,详细版本是:Windows 7 Ultimate, 32-bit 6.1.7601, Service Pack 1 。虚拟机版本:7.1.2 build-301548.在虚拟机上安

2015-01-09 14:50:47 15904

原创 字符串的排列和组合

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列

2015-01-08 22:46:46 943 1

原创 最大连续子序列乘积

问题描述给定一个整数序列(可能有正数,0和负数),求它的一个最大连续子序列乘积。比如给定数组a={3, -4, -5, 6, -2},则最大连续子序列乘积为360,即3*(-4)*(-5)*6=360。分析求最大连续子序列乘积与最大连续子序列和问题有所不同,因为其中有正有负还有可能有0。假设数组为a[],直接利用动归来求解,考虑到可能存在负数的情况,我们用Max[i]来

2015-01-08 22:21:08 931

原创 整数数组中两两之差绝对值最小的值

题目1:有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数。题目2:请求出最小连续子序列绝对值和,也就是求连续子序列之和的绝对值最小值针对问题1:方法《1》:暴力的方式。遍历所有的两个数的差,记录最小值。算法的复杂度O(n2)方法《2》:两个数要想差的绝对值最小,肯定是需要两个数大小相近。故有思路:先对数组进行排序,然后遍历一遍,相邻的

2015-01-08 16:01:10 14178

原创 数对之差的最大值 && 子数组的最大和

问题1: 在数组中,数字减去他的右边的数字得到一个数对之差,求所有数对之差的最大值。 例如数组{2.4.1.16.7.5.11.9}中,数对之差的最大值是11,是16减去5的结果。 问题2:给定一个含有n 个元素的数列,元素有正有负,找出和最小的一组相邻的书,既给定a[n],是的a[i]+a[i+1]+...+a[j]的和最小。先看第一道题目:如果从头遍历,遍历到某一个位置,从这个位置

2015-01-08 15:39:11 1660

原创 二叉树中任意两节点的最低共同父节点

通过两个和二叉树相关的算法题来看看和递归在二叉树中的应用输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。 思路: 如果这两个节点不在同一个子树下面,那么这棵树的根节点就是他们的共同最低父节点。如果两个都在右子树,那么以右子树的最上面的那个节点作为根节点,重新进行判断,递归调用。同理两个都在左子树,则方法同上。  也就是说,最终的结果分别只有三种情况,一个节点在

2015-01-05 14:34:49 5125 1

原创 二叉树的序列化与反序列化

一个二叉树被序列化为数组,如何反序列化,也就是如何从序列化好的一个数组恢复成二叉树?在上一篇文章中讲述了如何将一个有序数组创建成一个二叉搜索树,那么如果将将一个儿茶搜索树序列化为一个有序数组,然后按照上面的方法在反序列化即可。对二叉搜索树进行中序遍历即可得到一个有序的数组,那么上篇文章已经完成了对二叉搜索树的序列化和反序列化。同时如果想将二叉搜索树的序列化和反序列化的结果通过文件读取,也是同样

2015-01-04 19:15:28 2605

原创 如何将一个有序数组快速插入到一个二叉树中

输入一个有序的数组,如何实现将这个有序整数数组放到二叉树中?分析:对于二叉树,可以将这个有序数组插入到二叉搜索树中,毕竟二叉搜索树还是有很多特定的。那么对于创建二叉搜索树来说,就是简单的递归了。关于树的算法设计一定要联想到递归,因为树本身就是递归的函数。那么可以对于这个有序数组分析,将这个数组的中位数作为根节点,然后对于数组的前半部分创建一个树作为根节点的左子树,后半部分创建一个二叉搜索树

2015-01-04 16:21:20 3256

原创 两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和为 m

/*输入两个数m和n ,从数列1,2,3,4,.....n这些数中挑选几个使得和为m,找出所有的这样的组合*/void FindSum(int m,intn,vector& vec){ if(m < 0 || n < 0) return ; if(m == 0) { vector::iterator itr = ve

2015-01-04 08:57:23 1347

nginx源码分析--带注释

nginx源码分析,分析过程中将重要的部分进行了注释,以便理解

2014-11-26

libevent-1.4.12-stable-注释版

注释了libevent中很关键的部分,很重要的接口函数。

2014-03-07

3G模块驱动运用开发总结

在特定ARM开发板上使用linux 进行3G拨号的连接

2012-11-16

空空如也

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

TA关注的人

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