1.问题引入

C语言中有些函数使用可变参数,比如常见的 `int printf( const char *format [, argument]... );`, 第一个参数format是固定的,其余的参数的个数和类型都不固定。例如:

1
2
printf("Enjoy yourself everyday!/n");
printf("The value is %d!/n", value);

这种可变参数可以说是C语言一个比较难理解的部分,这里会由几个问题引发一些对它的分析。 注意:在C++中有函数重载(overload)可以用来区别不同函数参数的调用,但它还是不能表示任意数量的函数参数。

2.printf()实现原理

C语言用va_start等宏来处理这些可变参数。这些宏看起来很复杂,其实原理挺简单, 就是根据参数入栈的特点从最靠近第一个可变参数的固定参数开始,依次获取每个可变参数的地址。 下面我们来分析这些宏。

微博首先是媒体

但更确切点说,它是自媒体。它即是名人、权威们的自媒体,也是草根们的自媒体。在中国,草根现在靠着微薄,也有了些话语权,但声音还比较稚嫩, 分贝也不够大,但无论如何,跟着意见领袖们起起哄是必须地,支持也好,反对也罢,声音还是比从前大多了。要注意的是,一个草根的声音很小,但草根 们的声音一旦被叠加,再加上从众效应,其力量可能超乎我们想象,这时自媒体会变成众媒体(与传统的公众媒体是有区别的)。众媒体是个双刃剑,其好 处是,多数时候,这个众媒体可能代表大多数的声音,但另一方面,作为自媒体,微博毕竟是个性化的,即使看不清真相,也能知道看问题有不同的角度。 而当其成为众媒体时,其声音可能是趋同的,一旦人们形成某种较特殊的群体心理,个性将开始湮没、理性将开始丧失,这就有点危险,尤其在中国。

1.250定律

拉德认为:每一位顾客身后,大体有250名亲朋好友。如果您赢得了一位顾客的好感,就意味着赢得了250个人的好感;反之,如果你得罪了一名顾客, 也就意味着得罪了250 名顾客。在你的网站访客中,一个访客可能可以带来一群访客,任何网站都有起步和发展的过程,这 个过程中此定律尤其重要。

2.达维多定律

达维多认为,一个企业要想在市场上总是占据主导地位,那么就要做到第一个开发出新产品,又第一个淘汰自己的老产品。国内网站跟风太严重,比如 前段时间的格子网,乞讨网,博客网,一个成功了,大家一拥而上。但实际效果是,第一个出名的往往最成功,所以在网站的定位上,要动自己的脑筋, 不是去捡人家剩下的客户。同理,买人家出售的数据来建站效果是很糟糕的。

3.木桶定律

水桶定律是指,一只水桶能装多少水,完全取决于它最短的那块木板。这就是说任何一个组 织都可能面临的一个共同问题,即构成组织的各个部分往往 决定了整个组织的水平。注意审视自己的网站,是速度最糟糕?美工最糟糕?宣传最糟糕?你首先要做的,不是改进你最强的,而应该是你最薄弱的。

4.马太效应

《新约》中有这样一个故事,一个国王远行前,交给三个仆人每人一锭银子,吩咐他们:“你们去做生意,等我回来时,再来见我。”国王回来时,第一个 仆人说:“主人,你交给我们的一锭银子,我已赚了10锭。”于是国王奖励他10座城邑。第二个仆人报告说:“主人,你给我的一锭银子,我已赚了5锭。” 于是 国王例奖励了他5座城邑。第三个仆人报告说:“主人,你给我的一锭银子,我一直包在手巾里存着,我怕丢失,一直没有拿出来。”于是国王命令将第三个仆人 的一锭银子也赏给第一个仆人,并且说:“凡是少的,就连他所有的也要夺过来。凡是多的,还要给他,叫他多多益善。”这就是马太效应。在同类网站中,马太 效应是很明显的。一个出名的社区,比一个新建的社区,更容易吸引到新客户。启示是,如果你无法把网站做大,那么你要做专。作专之后再做大就更容易。

作为一家商业社交网站,LinkedIn显得低调而沉稳。与Facebook以宽泛社交为宗旨,被各种分享、聚会、礼物以及“动他(她)一下”等好玩的程序渲染的热闹相比, LinkedIn有着商业范儿的严肃简洁,只有一些基本的联络和互动功能。但也正是这种专注的定位和扎实的发展路线,让LinkedIn最终成为世界上最大的专业网站之一, 更在招聘领域独占鳌头。截至2010年年底,LinkedIn已拥有9000万注册用户,这些用户分布在200多个国家和地区,其中每月平均活跃用户占到72%,每天产生4万条 招聘信息。

在这个偏执狂才能生存的时代,专注的 LinkedIn为自己开创了招聘服务、营销服务、付费用户这三种稳定增长的收入渠道。2007年到2010年的近三年中,LinkedIn的线下 收入实现了从47%到86%的增长。2009年开始更是达到了平均每季18%的增幅,这为LinkedIn首次IPO铺平了道路。

创业是一种修行

2002年,“连环”创业家雷德·霍夫曼(Reid Hoffman)创建了LinkedIn,他现在担任公司董事会主席。此外,这位活跃的创业投资者还曾经为60多家硅谷新创企业提供 过咨询和资金,其中包括Facebook。

时光倒转到1993年,当美国在线公司(AOL)开始用送软盘来吸引人们上网的时候,霍夫曼意识到互联网变革已经开始了。当时霍夫曼已经从斯坦福大学拿到符号系统学 的学士学位,正在牛津大学攻读哲学硕士。斯坦福的学习让他了解了软件,而牛津的学习让他意识到自己应该更广阔地接触人们的生活。他发现,软件可以实现和千百万人 交流沟通的目的,于是决定创建一家软件公司。

但当他去向VC求助的时候。他们问他:“你做过软件吗?你要我们为你的公司投上百万美元的资金,你应该做过这个吧?”当霍夫曼回答“没有”的时候,他们让他“先去找份工作”。

本节向大家介绍一下UML需求分析的一般步骤,本节用实例向大家介绍,相信通过本节的介绍你对UML需求分析有一定的认识。下面让我们一起来学习具体介绍吧。

基于UML需求分析

在初步的业务需求描述已经形成的前提下,基于UML需求分析大致可分为以下步骤:
(1)利用用例及用例图表示需求。从业务需求描述出发获取执行者和场景;对场景进行汇总、分类、抽象;形成用例;确定执行者与用例、用例与用例图 之间的关系,生成用例图。
(2)利用包图及类图表示目标软件系统的总体框架结构。根据领域知识、业务需求描述和既往经验设计目标软件系统的顶层架构;从业务需求描述中 提取“关键概念”,形成领域概念模型;从概念模型和用例出发,研究系统中主要的类之间的关系,生成类图。
上述两个步骤并没有时序关系,它们可以并行展开,如图1所示。

本节将依次介绍上述步骤中涉及的UML语言机制,并结合“家庭保安系统”实例说明每步骤中基于UML需求分析方法。

也许你经常会听到人们把Linux及BSD系统混为一谈,甚至于媒体都这么说。当然,事实上这两者确实有很多相似之处,比如它们都是基于Unix演变而来, 而且基本上这两类系统都是由非盈利组织及团队开发,另外我更想说的是,这两个系统都有一个共同的目标–那就是创建最有用、最可靠的操作系统。 那么 这两个系统的区别到底在哪里?国外一位名为 Jack Wallen 的科技 Blogger 发表了一篇名为 10 differences between Linux and BSD 的文章,从许可证、 代码控制、内核 vs 操作系统、UNIX-Like、基本系统、更多来自于源代码、升级、前沿技术、硬件支持及用户群等10方面描述了 Linux 与 BSD 之间的 10 个不同之处。

1、许可证

正如我们所知道的,Linux 操作系统是基于 GPL 许可证授权下的。该许可证可防止开源软件被转换为封闭源代码软件及确保源代码的可用性。 GPL 许可证的 目的就是防止二进制包成为唯一的软件发行源。

而 BSD 许可证的限制则要少得多,它甚至允许二进制包成为唯一的发行源。这就是核心差异,可以这样理解:GPL 许可证让您有权拥有任何你想要使用该软件的 方法,但你必须确保提供源代码给下一个使用它的人(包括你对它的改变部分)。而 BSD 许可证并不是要求你必须那么做。( 译者注:这里分别维基百科上对 BSD 及 GPL 许可证的解释)

Linux系统越来越受到电脑用户的欢迎,于是很多人开始学习Linux时,学习linux,你可能会遇到linux内核问题,这里将介绍linux内核中idle知识, 在这里拿出来和大家分享一下。

1. idle是什么

简单的说idle是一个进程,其pid号为 0。其前身是系统创建的第一个进程,也是唯一一个没有通过fork()产生的进程。在smp系统中,每个处理器单元有 独立的一个运行队列,而每个运行队列上又有一个idle进程,即有多少处理器单元,就有多少idle进程。系统的空闲时间,其实就是指idle进程的"运行时间"。 既然是idle是进程,那我们来看看idle是如何被创建,又具体做了哪些事情?

php安全过滤是防止注入的第一道防线,不得大意。提到PHP的安全过滤,不得不提的两个东西是`set_magic_quotes_runtime` 和 `magic_quotes_gpc`。

`set_magic_quotes_runtime()` 可以让程序员在代码中动态开启或关闭 `magic_quotes_runtime`,`set_magic_quotes_runtime(1)` 表示开启, `set_magic_quotes_runtime(0)` 则表示关闭。当`set_magic_quotes_runtime(1)`时,从数据库或通过`fread`之类的函数读取的文本,将自动对' "和\自动 加上反斜杠\进行转义,防止溢出。这在对数据库的数据进行转移的时候非常有用。但在一般情况下,应当将其关闭,否则从数据库读取出来的数据单引 号、双引号和反斜杠都会被加上\,导致显示不正常。像Discuz,PHPWind都在公共文件的头部加上一句 `set_magic_quotes_runtime(0);` 强制关闭 `magic_quotes_runtime` 。

`magic_quotes_gpc` 和 `magic_quotes_runtime` 的区别在于,`magic_quotes_gpc` 是对通过GET、POST、COOKIE传递的数据进行转义,一般在数据入库前 要先进行转义,`magic_quotes_gpc`不能在代码中动态开启或关 闭,需要到`php.ini`将`magic_quotes_gpc`设置为on或off,代码中可以用`get_magic_quotes_gpc` 获取 `magic_quotes_gpc`的状态。当`magic_quotes_gpc`为off时,需要手工对数据进行addslashes,代码如下:

入侵者使用假IP地址发送包,利用基于IP地址证实的应用程序。其结果是未授权的远端用户进入带有防火墙的主机系统。

假设有两台主机A、B和入侵者控制的主机X。假设B授予A某些特权,使得A能够获得B所执行的一些操作。X的目标就是得到与B相同的权利。 为了实现该目标,X必须执行两步操作:首先,与B建立一个虚假连接;然后,阻止A向B报告网络证实系统的问题。主机X必须假造A的IP地址, 从而使B相信从X发来的包的确是从A发来的。

我们同时假设主机A和B之间的通信遵守TCP/IP的三次握手机制。握手方法是:

1
2
3
A->:SYN(序列号=M)
B->A:SYN(序列号=N),ACK(应答序号=M+1)
A->B:ACK(应答序号=N+1)

采用PHP5+ 开发的一个简单的 PHP HTML DOM 分析,支持 invalid HTML 并提供非常简单的方式来操作 HTML 元素。在 HMTL 页面 上查找标签所使用的语法与 jQuery (一个轻量级,实用的 javascript 框架) 相似,从页面中抽取内容只需要一行代码。开源代码: http://sourceforge.net/projects/simplehtmldom/

它具有以下几个特点:
1. 只支援 PHP5 以上.
2. 可以分析不严谨 (invalid) 的 HTML.
3. 支援简单的 CSS Selector.
4. 简单的 DOM 操作.
5. 会维持 HTML 中的原始格式 .
下面是使用手册上举的几个简单的使用示例。