博文
甲骨文挖红帽墙角 为雅虎等提供Linux服务(2007-03-31 16:58:00)
摘要:甲骨文挖红帽墙角 为雅虎等提供Linux服务
据外国媒体报道,意识到Linux支持服务市场发展空间巨大,甲骨文近日公布了26个与红帽企业Linux有交易的企业,表示要为他们提供更低价的甲骨文Linux支持服务。
在这26家企业中,雅虎、BNP Paribas和斯坦福大学赫然榜上。去年11月,甲骨文宣布推出为红帽企业linux的支持服务。此前,甲骨文一直缺乏对开源Linux的支持服务。红帽出售Linux软件,并以此做为订购费用,其中包括支持和升级等。用户实际上可以免费购买其软件产品。
甲骨文则推出了低于红帽费用的支持服务,同时还继续向红帽不再提供支持的产品提供服务。尽管甲骨文支持和修复红帽软件,但做为一家开源产品开发者却是一个新手。上周,Sun微系统公司的CEO施瓦兹称,要取消甲骨文的Linux支持。
......
世界网站排名(2007-03-24 18:10:00)
摘要:
Google工程师详述Google的搜索结果排列算法
关键词: Google 搜索 排列算法
马特-卡兹(Matt Cutts)是Google公司品质管理部门的软件工程师。他的工作主要是给好的网站评定等级,并负责开发阻止虚假或垃圾网站出现在Google搜索结果上的技术。
图书馆管理员们提出最多的问题之一是:“对于什么样的结果应该位于搜索列表的最上方,Google是如何选择的?”现在品质工程师马特-卡兹介绍了快速入门的知识,解释了Google是如何在网上爬行和索引,以及如何评定搜索结果等级的。马特也向学校图书馆管理员提出建议,告诉他们如何辅导学生。
爬行和索引
在你浏览包含了Google搜索结果的网页之前,要发生很多事情。首先是在万维网数以十亿计的网页上爬行和索引,这个工作是由Googlebot完成的,它负责与全球的网络服务器连接以收集文件。爬行不是真的在网上漫游,而是访问网络服务器返回到一个特定的网页上,接着扫描该网页建立超链接并为每一个网页编上号码。爬行可收集大量的文件,但这些文件还不能直接用于搜索。
如果没有索引,在你想查询如“civil war”(南北战争)等内容时,Google的服务器将不得不在你每次搜索时阅读每一份文件的内容。因此第二个步骤是要建立一个索引,这样就需要“转换” 爬行所获得的数据。为了不必在每一份文件上扫描每一个单词,就需要在数据上做些文章,以便显示包含了特定单词的所有文件。例如,假设单词“civil”在编号为3、8、22、56、68和92的文件上出现过,而单词“war”出现编号为2、8、15、22、68和77的文件上。
一旦建立了索引,就开始对文......
世界编程大赛第一名写的程序(2007-03-24 18:09:00)
摘要:
把着段代码复制(从e100开始,到最后的q)下来存为文本文档,命名为1
在DOS下用“debug<1.txt”命令
生成一个可执行程序。
进去是一个3D游戏的旋转界面,还有一段美妙的音乐,真是牛!!!
快去看看吧
保证可执行,保证无毒!!!!!!
e100 33 f6 bf 0 20 b5 10 f3 a5 8c c8 5 0 2 50 68 13 1 cb e 1f be a1 1 bf 0 1
e11b 6 57 b8 11 1 bb 21 13 89 7 4b 4b 48 79 f9 ad 86 e0 8b c8 bd ff ff e8 20
e134 0 3d 0 1 74 1a 7f 3 aa eb f3 2d ff 0 50 e8 f 0 5a f7 d8 8b d8 26 8a 1 aa
e14f 4a 75 f9 eb de cb 57 bb 21 13 8b c1 40 f7 27 f7 f5 8b fb ba 11 1 4f 4f 4a
e168 39 5 7f f9 52 8b c5 f7 25 f7 37 2b c8 95 f7 65 2 f7 37 95 2b e8 fe e fe
e181 10 79 6 c6 6 fe 10 7 46 d0 14 d1 d1 d1 e5 79 ec 5a b8 11 1 ff 7 4b 4b 48
e19b 3b d0 75 f7 5f c3 83 f7 83 a6 5d 59 82 cd b2 8 42 46 9 57 a9 c5 ca aa 1b
e1b4 4f 52 b4 92 3f ab 6e 9e a8 1d c6 3 fc e 6a e7 ae bb 5f 7b 10 b8 b4 f7 8
e1cd e2 bf 36 4e 39 9d 79 29 3f a f9 36 52 16 fb 5 e8 e5 a6 c2 e9 b0 43 d3 a3
e1e6 cf d3 fd fd cb d1 4c 5e e0 63 58 86 bb 3e 9 c1 20 bc cc 91 a3 47 81 70 b3
e1ff d6 1a 9e c2 c9 12 e7 4e ad......
指针学习(2007-03-24 17:57:00)
摘要:一、数组的指针、指针数组以及指向指针的指针
考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类。
A)一维数组
在c和c++中数组的指针就是数组的起始地址(也就第一个元素的地址),而且标准文档规定数组名代表数组的地址(这是地址数值层面的数组表示)。例如:int a[10];int *p;
p=&a[0]//和p=a是等价的:
因为a是数组名,所以他是该数组的地址,同时因为第一个元素为a[0],那么&a[0]也代表了该数组的地址。但是我们是不是就说一个数组名和该数组的第一个元素的&运算是一回事呢?在一维的时候当时是的,但是在高维的时候,我们要考虑到维数给数组带来的影响。
a[10]是一个数组,a是数组名,它是一个包含10个int类型的数组类型,不是一般的指针变量噢!(虽然标准文档规定在c++中从int[]到int*直接转换是可以的,在使用的时候似乎在函数的参数为指针的时候,我们将该数组名赋值没有任何异样),a代表数组的首地址,在数字层面和a[10]的地址一样。这样我们就可以使用指针变量以及a来操作这个数组了。
所以我们要注意以下问题:
(1) p[i]和a[i]都是代表该数组的第i+1个元素;
(2) p+i和a+i代表了第i+1个元素的地址,所以我们也可以使用 *(p+I)和*(a+I)来引用对象元素;
(3)p+1不是对于指针数量上加一,而是表示从当前的位置跳过当前指针指向类型长度的空间,对于win32的int为4byte;
B)多维数组
对于二维数组a[4][6];由于数组名代表数组的起始地址,所以a(第一层)和第一个元素a[0][0]地址的数字是相同的,但是意义却是不同的。对于该数组我们可以理解为:a的一维数组(第一层),它有四个元素a[0]、a[1]、a[2]、a[3](第二层),而每个元素又含有6个元素a[0][0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5](第三层),…到此我们终于访问到了每个元素了,这个过程我们经历了:a->a[0]->a[0][0];
整体来讲:a是一个4行5列的二维数组,a表示它指......
软件测试的艺术(2007-03-24 17:49:00)
摘要:
测试:是为发现错误而执行程序的过程
回归测试:保留测试,当程序其它部件发生更动后重新执行,这就是所谓的‘回归测试’
黑盒测试:(数据驱动的测试/输入输出驱动的测试)在这种测试方法中,将程序视为一个黑盒子。测试目标与程序的内部机制和结构完全无关,而是将重点集中放在发现程序不按其规范正确运行的条件
白盒测试:(逻辑驱动的测试),允许我们检查程序的内部结构。对程序的逻辑结构进行检查,从中获取测试数据
一个测试用例必须包括两部分:
1)对程序的输入数据的描述(我自己理解为操作步骤)
2)对程序在上述输入数据下的正确输出结果的精确描述(理解为每一步操作步骤下的预期结果)
软件测试原则:
1)测试用例中一个必需部分是对预期输出或结果进行定义
2)程序员应当避免测试自己编写的程序
3)编写的软件的组织不应当测试自己编写的软件
4)应当彻底检查每个测试的执行结果
4)测试用例的编写不公应当根据有效和预料到的输入情况,而且也应当根据无效和求预料到的输入情况
6)检查程序是否‘未做其应该做的’仅是测试的一半,测试的另一半是检查程序是否‘做了其不应该做的’
7)应避免测试用例后即弃,除非软件本身就是一个一次性的软件
8)计划测试时不应默许假定不会发现错误
9)程序某部分存在更多错误的可能性,与该部分已发现错误数量成正比
10)软件测试是一项极富创造性、极具挑战力的工作......
俄罗斯算法求大数乘(2007-03-24 17:29:00)
摘要:
/* 俄罗斯式算法求大数乘 */
/* 原理: 举例 ( 9 * 8 ) */
/* (乘数) 9 (被乘数)8 */
/* 4 16 */
/* 2 32 */
/* 1 64 */
/* 将乘数为奇时的被乘数相加 8 + 64 = 72 OK ! */
/* 这钟算法只比传统的好,分治法就比这种要好 */
/* 编译环境: VC ++ 6.0 */
/* Author: 江南孤峰 Time: 2006-10-24 */
#include <stdio.h>
#include <ctype.h>
#define MAX 1000 //存结果的数组大小,乘数较大时需要修改这里
#define MULMAX 100 //存两个乘数的数组大小
void mul(char a[],char b[],int la,int lb);
void divTwo(char a[],int *la);
void add(char a[],char b[],int *la,int *lb);
int input(char a[],char b[],int *la,int *lb);
void mul(char a[],char b[],int length_a,int length_b){
// 求数......
编程高手是怎样炼成的(2007-03-24 17:27:00)
摘要:首先声明,偶不是高手,以免引起不必要的冷嘲热讽,呵呵。
估计很多的朋友在很小的时候就看过奥斯特洛夫斯基同学的《钢铁是怎样炼成的》,偶小时候在农村混,看的最多是各式各样的牛屎以及长得极象牛屎的山头,这些所谓的名著偶直到大学才有机会拜读,但说实话,偶是个俗人,还是更喜欢看一些痞子写的文字或带COLOR的BOOKS。偶之所以写这么个主题,主要是太多的朋友给偶发EMAIL或在VCHOME.NET提问,偶其实也与大家一样为生活而奔波,因此没有时间一一作答,在这作一次回答,还望海涵。
高手是一个哗众取宠的词汇,世上本来并没有高手,说的人多了也就有了高手,我看程序员只有老少之分,并无高低之分,比如偶就是一个老程序员,因此作为程序员,我们追求的应该是写出有用有价值的软件产品,呵呵,废话少说,切入正题吧!
1. 迷恋 + 热情;
爱因斯坦同学说:兴趣是最好的老师,这就是说一个人一旦对某事物有了浓厚的兴趣,就会主动去求知、去探索、去实践,并在求知、探索、实践中产生愉快的情绪和体验,并不断地激发学习的动力,这种说法很美妙,众所周知,程序员是一种有点乏味有点枯燥有点辛苦的技术工作,要能坚持下去,并能做得很好,没有迷恋没有热情是很难很难的,偶就很迷恋,迷恋C++,迷恋computer,迷恋network,偶迷恋for、if、while、case等等就如同歌手迷恋五线谱的小蝌蚪一样,我觉得程序代码真是无所不能,简简单单的几行代码就能实现丰富多彩的功能,你难道不觉得很NB吗?呵呵,因此,作为一名老程序员,我建议年轻的程序员们一定要对coding保持迷恋保持热情,那样我们才有可能做得更好。
2. 在项目中磨练与成长;
很多朋友经常问:他看了很多书,也做了较多的练习,但感觉水平并没有得到提高,这是为什么?呵呵,我觉得每个人不同,有些程序员通过看书,也能学到很多东东,但我个人觉得最好的提高方法,还是要参与到某一项目中去锻炼,从设计到开发到测试到维护一整套的磨练流程,项目是有周期的,有周期就有压力,有压力才能不分昼夜地去学习与实现,学习的效果也会很显著与深刻。
3. 数不胜数的加班;
偶这里所讲的加班并不单指工作上的OT(即overtime),而更多的是学习上的OT,偶认为程序员学习的黄金时间在毕业后的前三年,这三年......
IT开发工程师的悲哀(2007-03-18 15:18:00)
摘要:恭喜,你选择开发工程师做为自已的职业!
悲哀,你选择开发工程师做为自已的职业!
本文所指的开发工程师,仅指程序开发人员和以数字电路开发为主的电子工程师。当你选择计算机或者电子、自控等专业进入大学时,你本来还是有机会从事其它行业的,可你毕业时执迷不悟,仍然选择了开发做为你的职业,真是自做孽不可活。不过,欢迎你和我一样加入这个被其它人认为是风光无限的“白领”吧。如果你不是特别的与人世隔绝,我想你一定看过金老先生的名著《笑傲江湖》吧,里面有一门十分奇特的武功叫做"辟邪剑法",你看这个小说第一次看到这种功夫的练法时,我想你当时一定笑歪了牙“呵呵,真好玩!”,可是现在我很痛心的告诉你:你选择的开发工作就是你人生路上的"辟邪剑法",而你现在已经练了,并且无法再回头。
相对同时刚出校门同学从事其它行业而言优厚的薪水,以及不断学习更新的专业知识不仅仅让你感到生活的充实,更满足了你那不让外人知的虚荣心。在刚出校门的几年中,你经常回头看看被你落在后面的同学们,在内心怜悯他们的同时,你也会对自已天天加班的努力工作感到心里平衡:“有付出才会有回报”这句话在那几年中你说的最多,不管是对自已的朋友们还是自已的爱人。第二句最常说的话是对公司的领导:“不行我就走人!”,实际上你也真的走过几回。对了,在这几年中,因为你的经济条件不错,你开始买房、开始谈恋爱、结婚、开始有了自已的小孩。有时候你会对自已说再过两年就去买车。当然其中可能有许多大件是需要分期付款的,但你对前途充满了信心,你确信认为这种日子会永远的持续下去,即使不是变得更好的话。
日子总是在这种平淡中一天天的过去,就在那么不经意间,你突然发现自已已经快30岁了,或者已经30了,莫名的,你心里会漫延着一种说不清楚的不安情绪,你好像觉得前途并非像前几年那样变得越来越好,你也忽然发现你以前所瞧不起的同学里好像已经有不少开着车的了,也有几个人住着比你还大的房子,好像房款还是一次付清的,你突然明白你现在的生活比起你的同学来最多是中游偏上了。工作中最让你感到心里不舒服的是,你越来越不敢对你的领导说不了,即使比你来的晚的同事升职或提薪,你也只是在私下与朋友们一起喝酒时才敢发发牢骚,在头的面前你的声间越来越小、笑脸是越来越温柔。
你终于开始迷茫“再过几年我会是在......
Linux开发中的常用命令(2007-03-18 15:17:00)
摘要:
Linux开发中的常用命令
ls #以默认方式显示当前目录文件列表
ls –a #显示所有文件包括隐藏文件
ls –l #显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行
ls --color=never *.so > obj #不显示文字颜色,将所有so文件记录到obj文件中
cd dir #切换到当前目录下的dir目录 cd / #切换到根目录 cd .. #切换到到上一级目录 cd ../.. #切换到上二级目录 cd ~ #切换到用户目录,比如是root用户,则切换到/root下 rm file #删除某一个文件 rm -fr dir #删除当前目录下叫dir的整个目录 cp source target #将文件source 复制为 target cp /root/source . #将/root下的文件source复制到当前目录 cp –av soure_dir target_dir #将整个目录复制,两目录完全一样 cp –fr source_dir target_dir #将整个目录复制,并且是以非链接方式复制,当source目录带有符号链接时,两个目录不相同 mv source target #将文件source更名为target diff dir1 dir2 #比较目录1与目录2的文件列表是否相同,但不比较文件的实际内容,不同则列出 diff file1 file2 #比较文件1与文件2的内容是否相同,如果是文本格式的文件,则将不相同的内容显示,如果是二进制代码则只表示两个文件是不同的 comm file1 file2 #比较文件,显示两个文件不相同的内容 echo message #显示一串字符 echo "message message2" #显示不连续的字符串 cat: cat file #显示文件的内容,和DOS的type相同 cat file | more #显示文件的内容并传输到more程序实现分页显示,使用命令less file可实现相同的功能 more #分页命令,一般通过管道将内容传给它,如ls | more export LC_ALL=zh_CN.GB2312 #将环境变量LC_ALL的值设为zh_CN.GB2312 export DISPLAY=0:0 ......
C++学习基础知识(2007-03-18 15:16:00)
摘要:一、#include “filename.h”和#include 的区别
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件
#include 是指编译器将从标准库目录中开始查找此文件
二、头文件的作用
加强安全检测
通过头文件可能方便地调用库功能,而不必关心其实现方式
三、* , &修饰符的位置
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名
四、if语句
不要将布尔变量与任何值进行比较,那会很容易出错的。
整形变量必须要有类型相同的值进行比较
浮点变量最好少比点,就算要比也要有值进行限制
指针变量要和NULL进行比较,不要和布尔型和整形比较
五、const和#define的比较
const有数据类型,#define没有数据类型
个别编译器中const可以进行调试,#define不可以进行调试
在类中定义常量有两种方式
1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值;
2、 用枚举代替const常量。
六、C++函数中值的传递方式
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference)
void fun(char c) //pass by value
void fun(char *str) //pass by pointer
void fun(char &str) //pass by reference
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构
函数的类型不能省略,就算没有也要加个void
七、函数体中的指针或引用常量不能被返回
Char *func(void)
{
char str[]=”Hello Word”;
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉
return str;
}
函数体内的指针变量并不会随着函数的消亡而自动释放
八、一个内存拷贝函数的实现体
void *memcpy(void *pvTo,const void ......