自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(38)
  • 资源 (14)
  • 收藏
  • 关注

原创 MudOS阅读笔记

1      总述主要看了网络处理相关代码,并将select模型修改为kqueue模型;阅读了定时处理相关代码,并将单层时间轮改为多层时间轮;阅读内存以及虚拟机相关代码。2      网络及并发Select缺陷与kqueue改进:mudOS的网络处理是基于select模型的,该接口存在一系列不足:1)           内核不存储事件标记,那么每次调用select时都有大量内

2014-11-18 16:41:12 842

原创 编程之美-数组分割

编程之美'数组分割'和扩展将一个数组划分成两个子数组,要求他们的和最接近1.长度要求相等的情况: 2.长度没有要求的情况:都能用动态规划解决#include#includeusing namespace std;void ArraySplit1(int a[], int n)//两个子数组长度要求相等{int

2013-10-09 19:48:21 852

原创 编程之美-数组分割

编程之美'数组分割'和扩展(扩展只需要转化为整数数组,加个固定的偏移)将一个数组划分成两个子数组,要求他们的和最接近1.长度要求相等的情况: 2.长度没有要求的情况:都能用动态规划解决#include#includeusing namespace std;void ArraySplit1(int a[], int n)

2013-10-09 19:44:43 159

转载 布隆过滤器

原文链接:http://www.google.com.hk/ggblog/googlechinablog/2007/07/bloom-filter_7469.html2007年7月3日 上午 09:35:00发表者:Google(谷歌)研究员 吴军        在日常生活中,包括在设计计算机软件时,我们经常要判断一个元素是否在一个集合中。比如在字处理软件中,需要检查一

2013-10-03 12:22:49 581

转载 七个有效的文本编辑习惯

虽然是一篇老文章,但是每次阅读仍然帮助很大  如果你要花大量的时间键入文本, 写程序或编写HTML脚本, 你可以通过有效地使用一个好的编辑器来替你节省时间. 本文将引导你如果快速地完成你的编辑工作, 并且减少你的错误.  本文将以开放源码软件Vim(Vi IMproved)为例向你展示如何进行有效的编辑, 但这里提到的原则对其它的编辑器也是一样, 选择合适的编辑器是进行高效的编辑的第一

2013-06-09 15:36:09 583

转载 简明 Vim 练级攻略

vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令。非常不错。——————————正文开始——————————你想以最快的速度学习人类史上最好

2013-06-09 15:34:34 516

转载 python/c++ 深拷贝与浅拷贝

1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。 2. copy.deepcopy 深拷贝 拷贝对象及其子对象 一个很好的例子:  import copya = [ 1 , 2 , 3 , 4 , [ ' a ' , ' b ' ]] # 原始对象  b = a # 赋值,传对象的引用  c = copy.copy(a) # 对象拷贝,浅

2013-06-06 10:36:09 772

转载 命令式编程与函数式编程

突然直接明白了他们的含义。所谓命令式编程,是以命令为主的,给机器提供一条又一条的命令序列让其原封不动的执行。程序执行的效率取决于执行命令的数量。因此才会出现大O表示法等等表示时间空间复杂度的符号。而函数式语言并不是通常意义上理解的“通过函数的变换进行编程”。注意到纯的函数式语言中是没有变量的(没有可以改变的东西,所有的东西在定义以后就都是不变的),那么这样的东西有什么好处呢?就比如

2013-05-29 10:57:48 755

原创 printf以%d形式输出浮点数的问题

float value = 1.0;printf("value_int = %d\n", value); 对于上面的代码,会输出什么结果呢?(结果是0,当然这跟你的计算机是大端还是小端有关,大小端分析一样,这里是以小端为例)是不是觉得很奇怪,value的浮点数表示形式是0x3F800000,如果以整形输出,应该也是这个值的十进制表示才对的。单精度浮点数表示是:1位符

2013-05-24 20:46:15 6993 3

原创 C/C++中几种函数调用方式的比较

1.cdecl: C的函数默认调用方式,适用可变参数,这种方式由于是函数调用者清理堆栈,所以又导致了生成代码增长(因为每次函数调用之后都是实现清理功能的代码,如果是函数自己清理,则只需要一份清理代码就可以了)2.stdcall: 函数清理堆栈,不可用于可变参数。3.fastcall:  类似stdcall, 但把因为它是通过寄存器来传送参数的(实际上,它用ECX和EDX

2013-05-24 18:04:14 979

原创 算法:字符串匹配、BF/KMP/近似匹配

#include#includeusing namespace std;#define MAXSTR 100//----------------BF---------------- 时间o(n*m)int StringMatch_BF(char *str, char *pat) //O(M*N) M=|str| , N=|pat|{ if(str==NU

2013-05-20 17:20:46 910

转载 TCP/UDP 套接字及缓冲区的一些问题

Socket的send函数在执行时报EAGAIN的错误当客户通过Socket提供的send函数发送大的数据包时,就可能返回一个EGGAIN的错误。该错误产生的原因是由于send 函数中的size变量大小超过了tcp_sendspace的值。tcp_sendspace定义了应用在调用send之前能够在kernel中缓存的数据量。当应用程序在socket中设置了O_NDELAY或者O_

2013-05-17 17:50:22 1647

转载 TCP传输策略

TCP数据流分类基于TCP的各类解决方案,可以根据数据吞吐量来大致分成两大类: (1)交互数据类型,例如telnet,ssh,这种类型的协议在大多数情况下只是做小流量的数据交换,比如说按一下键盘,回显一些文字等等。 (2)数据成块类型,例如ftp,这种类型的协议要求TCP能尽量的运载数据,把数据的吞吐量做到最大,并尽可能的提高效率。针对这两种情况,TCP给出了两种不同的策略来进行数

2013-05-17 17:48:10 1316

原创 算法:完美洗牌算法:一个长度为2n的(整型)数组元素为 a1 a2 ... an b1 b2 ... bn

问题描述:一个长度为2n的数组元素为 a1 a2 ... an b1 b2 ... bn要求: 用O(1)的空间代价, 在O(n)时间内把数组变成 b1 a1 b2 a2 b3 a3 ... bn an (分治法时间复杂度O(nlogn))采取置换的方法,当需要保证似乎循环无遗漏置换。需要用到数论原根等证明定理。http://user.qzone.qq.com/4143

2013-05-17 16:34:19 1396

原创 算法:最长递增子序列、最长公共子串

#include#include#define MAXSEQUENCE 1000#define MAXDIF 1000using namespace std;void Print_LCS(int (*rec)[100],int a[], int b[], int i, int j);//---------最长递增子序列-----------//动态规划 O(

2013-05-16 23:31:36 559

转载 组合数学-catalan数

1. Catalan数(卡特兰数)http://buptdtt.blog.51cto.com/2369962/832586卡特兰数:规定h(0)=1,而h(1)=1,h(2)=2,h(3)=5,h(4)=14,h(5)=42,h(6)=132,h(7)=429,h(8)=1430,h(9)=4862,h(10)=16796,h(11)=58786,h(12)=208012,

2013-05-16 23:26:35 627

原创 算法:数字拆分(重复、无重复)

如果单纯是要求拆分数,可用生成函数解决。以下是要求输出所有拆分:无重复:形如6=1+5=1+2+3=2+4,共3种无重复拆分方式重复: 形如                6=1+5=1+1+4=1+1+1+3=1+1+1+1+2=1+1+1+1+1=1+1+2+2=1+2+3=2+4=2+2+2=3+3, 共10种重复拆分方式

2013-05-16 23:23:56 3088

原创 算法:背包问题

背包问题用逆序减少空间复杂度的情况下,//背包问题,如果是多维背包(质量,容积,个数),则加矩阵维度;如果是01背包,则逆序内循环,如果是完全背包(每种物品个数不限),则顺序内循环,如果是混合背包(限制每种物品的个数)。#includeusing namespace std;#define MAXN 110#define MAXK 110

2013-05-16 22:49:34 680

原创 腾讯编程初赛0

小明系列故事——买年货    Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)    Total Submission(s): 1480           Accepted Submission(s): 636  Problem Description

2013-05-16 22:45:40 525

原创 腾讯编程初赛4

小明系列问题——小明序列http://acm.hdu.edu.cn/showproblem.php?pid=4521Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 925    Accepted Submission(s):

2013-05-16 22:03:39 453

原创 白色粉末

十袋白色粉末,其中有一袋溶于水两分钟以后会变蓝,现在只有四个杯子,无限多的水,要求是在最短的时间内找出这袋特殊的粉末方法一:一二三四号粉末放第1个杯子里,五六七八号粉末放第2个杯子里, 剩下的九十号分别放到剩下的两个杯子里,这样的话,如果刚好是九十号中的一个是特殊粉末,那么只需两分钟就可以鉴别,如果是1号杯子变蓝,只需把水全部倒 掉把一二三四号粉末分别放到1234号杯子里再过两分钟就可以鉴别,

2013-05-16 21:27:08 684

原创 C++内存管理相关

1.定位new: new (addr) 类型。通过这种方式,可实现内存分配与对象构造的分离。2.利用标准库模板allocator,实现对象构造和内存分配的分离(如预先分配存储区但不构造),析构和内存释放的分离(如pop_back),一种可行的实现可能是利用上面的 定位new。3.new  和delete 的定制,类可以通过new, delete的操作符重载来接手内存的管

2013-05-16 21:09:19 496

原创 C++11新特性

1.右值引用与移动构造语义:    针对C++对临时变量只能以值或常引用的形式作为函数实参的问题,右指引用即临时变量对象的引用,可借此实现一种新的移动构造复制语义,避免对象拷贝赋值下的大量对象构造复制开销。http://bbs.chinaunix.net/thread-1251475-1-1.html2.通过使用 extern 来修饰一个模板类,告知编译器该模板无需在当前编译单元内

2013-05-16 18:11:37 666 1

转载 C++高级机制-异常

C++异常机制的实现方式和开销分析:http://baiy.cn/doc/cpp/inside_exception.htmC++ 异常 与 ”为什么析构函数不能抛出异常“ 问题:http://www.cnblogs.com/zhyg6516/archive/2011/03/08/1977007.html1.当无异常抛出时,其开销就是在函数调用的时候将函数注册到异常处理链中,这些

2013-05-16 17:57:41 940

转载 Effective C++

1.尽量以const,enum,inline替换#define:编译器取代预编译器,错误追溯。2.为多态基类声明virtual析构函数:通过基类指针可以析构继承类对象。3.别让异常逃离析构函数:C++的异常实现机制一般都是不允许多重异常的,如果析构函数吐出异常,那么会出现资源泄露等不确定性行为或程序中止。异常发生时往往要回退并析构对象,那么从这点看析构函数也是不允许抛出异常

2013-05-16 17:33:23 466

原创 PROC的实现

挂载在/PROC,通过特殊文件系统的形式提供内核数据的接口。对该文件系统中文件的读写操作是映射到PROC读写操作,可能的一种实现是根据文件路径名标识内核数据或者是构建类似于register_sysctl_table表的结构(对应/proc/sys)。一般只能对文件读写,对该文件系统中的文件创建和删除可以通过内核模块调用相关函数的方法来实现。-----

2013-05-16 15:30:10 660

原创 文件映射,共享内存的实现

文件映射:    mmap()实际上是一个vma的创建过程,分配进程线性区来映射打开的文件,把对文件的读写转为对内存的读写,在频繁移动指针读写文件的时候,读写效率有很大的提高。    mmap()函数会调用特定文件系统的mmap(),全部执行之后,线性区结构vm_area_struct的vm_file指向映射文件的文件对象,vm_pgoff指向映射文件中的偏移,vm_ops指向相应的线性区

2013-05-16 15:25:41 681

原创 管道,FIFO的实现

管道:     利用inode里面的i_pipe指向的pipe_inode_info结构来表示管道的特殊信息(缓冲区,等待队列,当前待读数据信息等),相关的VFS对象被组织为pipefs特殊文件系统以加速它们的处理。    pipe()创建管道,在pipefs中分配新的索引结点并初始化,初始化pipe_inode_info结构。分配一个只读文件对象和一个只写文件对象,    它

2013-05-16 14:59:09 844

转载 EPOLL基本概念及数据结构

epoll基本概念1、基于概念    epoll是一种机制,来处理大量并发连接时事件的读写顺序。在linux的网络编程中,很长的时间都在使用select来做事件触发。2.5.X内核后,引入epoll。epoll是Linux内核为处理大批量句柄而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连

2013-05-15 23:21:25 2169

原创 POLL/EPOLL的实现剖析

参考自:http://blog.csdn.net/21aspnet/article/details/2627662?reload#reply 里面有源码的详细剖析。POLL实现剖析:sys_poll()首先设置关键数据结构struct poll_wqueues中的回调函数poll_wait(用来将current加入到每个fd对应的等待队列中)。接着kmalloc()获得存储

2013-05-15 23:17:12 692

原创 TCP流量控制,拥塞控制

TCP流量控制:TCP采用滑动窗口协议来进行流量控制,可允许在接收端缓冲区不溢出的情况下连续发送多个分组,加速数据的传输的同时防止了接收端缓冲区溢出问题。窗口的几种改变:1. 窗口左边沿向右移动,但右边沿不动(合拢):数据被发送且确认但发送窗口变小,可能是接收端进程没来的及处理。2. 窗口右边沿向右移动,但左边沿不动(张开):接收端进程读取了数据,接收缓存被释放。3. 窗口左边沿不

2013-04-28 11:54:33 607

转载 vfork()的若干问题

转自:http://chhaj5236.blog.163.com/blog/static/1128810812013327102727881/参考资料[1]对vfork进行了较为详细的描述:vfork()函数和fork()一样会创建一个新进程,所不同的是vfork()创建的子进程与父进程共享地址空间,且父进程会被阻塞,直到子进程调用exec()家族的某个函数,或调用_exit()。由于父子进程

2013-04-28 11:30:07 883

原创 Window7和UBUNTU双系统硬盘安装,UBUNTU安装配置过程

考虑到图形界面IDE的需求,直接安装ubuntu桌面版,而没有考虑安装server版再下载GNOME等。附加从硬盘引导安装的步骤。1.下载Ubuntu Desktop 12.04 LTS,我下的是32位的,下载到任意目录均可,最好是C盘根目录了。下载好后解压IOS找到casper,从中解压initrd.lz和vmlinuz两个文件到C盘。2.下载 EasyBCD,安装好后依

2012-07-05 17:20:47 913

转载 系统引导过程及硬盘分区结构

系统引导过程及硬盘分区结构一、系统引导过程简介系统引导过程主要由以下几个步骤组成(以硬盘启动为例)1、 开机;2、 BIOS加电自检(POST---Power On Self Test),内存地址为0fff:0000;3、 将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处;4、 检查(WORD)0000:7df

2012-07-04 10:23:22 957

原创 malloc,free,new,delete的比较

malloc和free是C标准库函数里的,声明在stdlib.h中,实现上都会通过系统调用让操作系统完成动态内存的分配或释放,具体实现是通过在划分的内存块前面设计一个长度字段和有效字段,当malloc时,搜寻内存池中不小于所要求字节数的内存块,设置内存块前面的长度字段并将有效字段置0。当free时,只需简单得通过指针向前找到该内存块的有效字段,置1重新定为有效即可。所以free是开销很小的,开销大

2012-03-21 22:37:32 512

原创 从printf的实现原理来谈对C/C++中可变参数函数的实现理解

printf函数原型:int _cdecl printf(const char*format, …);首先传递给函数的参数中要有函数用以了解到参数个数的信息,比如printf开始的format字符串,通过%来标识变量,如printf("hello my rank is %d in %d",i,j);printf搜寻第一个参数format指向的字符串"hello my rank is %

2012-03-20 22:50:30 1730

原创 C/C++编译链接原理

看了c++ primer,写过一些C++程序后,对其中的编译链接原理总是不明就里,想来这也难怪,因为平常都是在VS上,什么都是封装好了的,隐藏了太多的细节。本着自己一贯来对底层实现探究的兴趣,结合借鉴他人的想法,记下自己对C/C++编译链接原理的一些理解,要是能给看到此文章的你带来一丁点帮助就欣慰了。编译是把源文件经过预编译,优化,汇编翻译成机器语言的过程,这些机器语言代码数据以一定的格式CO

2012-03-20 12:29:52 1209 1

转载 如何成为一个C++高级程序员

C++这门语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的复杂性。现在 C++ 的使用范围比以前已经少了很多,java、C#、python 等语言在很多方面已经可以代替C++。但是也有很多地方是其他语言完全无法替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器。  现在学习 java、C#等语言的人数远远高于C++

2012-03-12 15:05:37 433

Google云计算论文三篇(中英双版)

中英文对照 英文不好的同学可以对着中文版看~

2013-06-13

天书夜读从汇编语言到windows内核编程

天书夜读从汇编语言到windows内核编程,以汇编语言为引,带你畅游windows内核,熟悉内核编程

2013-06-13

有效使用内存

有效使用内存,程序中内存的使用至关重要,内存的管理如何直接决定了程序的质量好坏~

2013-06-13

链接与加载详解

链接与加载详解,链接与加载的知识是程序人员必须掌握的~

2013-06-13

编程高手箴言

想成为编程高手吗,想从程序猿进阶吗,看编程高手箴言

2013-06-12

人月神话(项目管理)

人月神话,讲项目管理的,自己还没达到那层次,暂且传上来供以后阅读~

2013-06-12

现代编译原理

传说中的龙书,编译原理的经典之作,不多说了~

2013-06-12

数据结构与算法分析–C++描述(第3版,WEISS著,含习题答案)

数据结构与算法分析–C++描述(第3版,WEISS著)

2013-06-12

omnicppcomplete

该插件的安装参考 http://design.liberta.co.za/articles/code-completion-intellisense-for-cpp-in-vim-with-omnicppcomplete/ 想对STL补全的话,需要下载SGI的STL源码来生成,测试gnu的stl源码不支持补全

2013-06-11

sgi的stl源码

sgi的stl源码,提供给那些外网访问不方便的同学~

2013-06-11

空空如也

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

TA关注的人

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