世界是数字的重点读书笔记(计算机科普知识) 《世界是数字的》是世界顶尖计算机科学家Brian W.Kernighan写的一本计算机科普类读物,简明扼要但又深入全面地解释了计算机和通信系统背后的秘密,适合计算机初学者和非计算机专业的人读。这真的是一本好书,借Google常务董事长的话:对计算机、互联网及其背后的奥秘充满好奇的人们,这绝对是一本不容错过的好书。对于一个计算机已经学了N年的专业人士来说,这本书也许简单了点,
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(Blocking IO):即传统的IO模型。(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。(3)IO多路复用(IO Multiplexi
基于用户投票的排名算法 目录 基于用户投票的排名算法(一):Delicious和Hacker News 基于用户投票的排名算法(二):Reddit 基于用户投票的排名算法(三):Stack Overflow 基于用户投票的排名算法(四):牛顿冷却定律 基于用户投票的排名算法(五):威尔逊区间 基于用户投票的排名算法(六):贝叶斯平均 基于用户投票的排名算法(一):
长连接与短连接 TCP的长连接与短连接以及HTTP的长连接与短连接TCP的长连接与短连接当采用TCP协议进行网络通信时,整体过程包括三个部分,1、client与server之间连接的建立;2、client与server之间数据交互;3、client与server之间连接的关闭。连接建立就是经典的三次握手而连接的关闭需要四次握手,连接的建立与关闭都是需要消耗资源和时间的。TCP短连接是说:client向
变量声明与定义,小心别采坑 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下: 变量的声明有两种情况: (1) 一种是需要建立存储空间的(定义、声明)。例如:int a在声明的时候就已经建立了存储空间。 (2) 另一种是不需要建立存储空间的(声明)。例如:extern int
基于用户投票的排名算法(一):Delicious和Hacker News 互联网的出现,意味着"信息大爆炸"。用户担心的,不再是信息太少,而是信息太多。如何从大量信息之中,快速有效地找出最重要的内容,成了互联网的一大核心问题。各种各样的排名算法,是目前过滤信息的主要手段之一。对信息进行排名,意味着将信息按照重要性依次排列,并且及时进行更新。排列的依据,可以基于信息本身的特征,也可以基于用户的投票,即让用户决定,什么样的信息可以排在第一位。
【C++再学习】【09】static、const与类 1、类的const数据成员在类内部,const数据成员代表在对象的生命周期内该数据成员不可更改,也就是说这个const修饰的是该对象的一个数据,它是属于对象的,只有在该对象的有效期内起作用。const数据成员不能在类声明时赋初值只能放到构造函数初始化列表中进行,这是因为我们知道const数据只能在被创建时初始化而不能被重新赋值,又由于构造函数体是在对象创建完毕之后调用的函数,所以只有在创建
C++程序组织:.h .cpp与分离式编译 转载自:http://blog.csdn.net/pongba/article/details/19130为什么C++编译器不能支持对模板的分离式编译 刘未鹏(pongba)C++的罗浮宫(http://blog.csdn.net/pongba) 首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文
【C++再学习】【08】编译时与运行时 (一)首先来看看const常量相关的编译时与运行时:C++ const常量不同于有些语言,可以是编译时常量,也可以是运行时常量。int func(){int x=0,y=1;return x+y;}int main(){const int i = 0;int * p = (int *)&i;*p =1;int j = *p; const int
【C++再学习】【07】自增自减操作符背后的秘密 首先来看一个问题:Y=i++;Y=++i;上边两行语句我们要讨论的问题就是Y是否一样,可能大家都知道结果,但是我还是要说说这其中的道理,因为i++和++i都是表达式,表达式都是有值的,而前增量和后增量的结果是不同的。++i是先去做i=i+1,然后再把i作为表达式的结果;而i++是先把i作为表达式的结果,然后再去做i=i+1。当两种情况作为单独的完整表达式时,效果是一样没什么区别
【C++再学习】【06】程序以及对象在内存中的布局 首先介绍一下最基本的常识,C++程序占用的内存空间布局情况:1、栈区(stack):又编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。2、堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是他与数据结构的堆是两回事,分配方式倒是类似于数据结构的链表。3、全局区(static):也叫静态数据内存空间,存储
【C++再学习】【05】有关类的一些知识点整理 l 只有在没有自定义的任何构造函数的情况下,编译器才会提供默认构造函数,如果程序员有为类设计了构造函数,那么程序员也必须提供默认构造函数。如果不提供,像这种声明将会是非法的:Person ligang; l 注意如果类的成员函数不需要修改调用对象,那么就尽量将其设计成const成员函数,格式是在函数的最后加上const关键字,例如:char* Person::getName( ) co
【C++再学习】【04】宏与内联函数共同点与不同点 先把宏和内联函数的例子搬上来: #define square(x) (x*x) inline int square(int x) { return x*x;} 先直接上结论:共同点:由于每次函数调用会有一定的时间和空间开销,如果程序里需要频繁调用某个函数,这样就会带来大量开销,宏和内联函数可以直接替换程序中的函数调用,从而减少开销。不
【C++再学习】【03】函数形参实参与值传递引用传递新解 一开始没觉得这部分还需要整理一下,仔细看过书之后发现还有点意思,所以整理记录下来。根据传递方法的不同分成两大类整理,分别为继承自C的值传递以及C++新增的引用传递。一、值传递先看两行再简单不过的代码:int a = 10;int b = a;这是用一个变量去给另一个变量赋值的代码,经过这种赋值后b可以随便改变自己的值,但是不影响a的值,我想说的是:函数的值传递方式的本质就是变量
【C++再学习】【02】C部分一些整理 希望对象执行某种动作,需要向对象“发送”消息,C++提供了两种方式,一种方式是使用对象所属类中定义的方法,另一种方式是重新定义操作符。再整理一下C++基本整型:char、short、int、long,每种类型又分有符号版本和无符号版本,所以一共有8中整数类型。关于他们的长度,不同的系统可能会不同,但是C++有一个标准:short至少16位;int至少与short一样长;long至少32位,且至
【C++再学习】【01】新的开始 首先解释一下为什么叫C++再学习,本人科班出身,本科的时候主要学的语言就是C++,但是没用C++干过什么有意义的事,到现在也忘得差不多了,现在是时候好好重新再学习一下了,就准备写这样一个系列,记录下自己再学习过程中的一些理解,方便日后温习也省的再看几百页的书,同时把这样一个历程记录下来,相信以后回忆这段时光会很有意思。既然是再学习,所以可能很多比较简单没意思的东西就不会写了,尽量记录那些很容易忘记
大端(big endian)、小端(little endian)问题 可能在比较偏上层的程序编写过程中,一般不会遇到大端小端问题,因为都已经被抽象好了,而在编写比较底层一些的程序时,就要考虑大端小端问题。大端小端问题的本质就是字节序问题,说到字节序,就要提到两大CPU体系,Motorola的PowerPC系列以及Intel的x86系列,一般PowerPC系列采用的big endian而x86系列采用的是little endian。这两种模式有什么区别呢?很简
程序员/设计师能用上的 75 份速查表 75 份速查表,由 vikas 收集整理,包括:jQuery、HTML、HTML5、CSS、CSS3、JavaScript、Photoshop 、git、Linux、Java、Perl、PHP、Python、Ruby、Ruby on Rails、Scala、C#、SQLite、C++、C语言、Ubuntu、WordPress、Node.js、Oracle、NMAP、Mac OS X、Has