博文

汉语编程:令老美深感“来自中国的恐慌”(2008-04-29 19:35:00)

摘要:眼下,无论多么高级的黑客破密软件,也很难以英文破密的方式来破解中文加密程序,这对于国外的恶意破坏我国国家安全分子,也无疑筑起了一道“钢铁长城”, 想要进入“汉语编程”软件不懂汉语编程,就如同“盲人摸象”,即使将来外国人学了汉语编程,但因为所有源代码都掌握在中国人手里,也不过于担心计算机的安 全问题。正如来自美联社的报道中所言:汉语编程,令老美也深感“来自中国的恐慌”!据统计,在受“间谍软件”攻击的国家中,中国是最大的受害国之一,仅去年下半年,全球平均每天约有6.4万台计算机受到恶意程序影响,其中有26%在中国,这一比例高于其他任何国家。有资料显示,近年来,在世界上传播的杀伤力最大的病毒几乎都在中国肆虐过,日益突出的国防信息安全问题,早已引起全世界的普遍关注,解决好国防信息安全问题,必须要强化全民国防观念,走独立自主的创新发展道路。据汉语编程发明人沈志斌介绍:现代信息安全模式以由远端到近端逐级安全保护模式,其安繁琐性大其安全性提高幅度较小,而“汉语编程”从程序本身使信息安全方式发生改变,木马程序、僵尸网络、黑客攻击这一系列的网络安全问题都是在系统文件密码破解建立后门所完成的,想要根治这些信息安全隐患就要从“汉语编程”开始,因为“汉语编程”的底层是汉字,是以汉字及符号为编译语言基本字符单位,不依赖于任何一种编程语言,其软件加密方式以汉字独有的特点进行加密,虽然现在黑客活动猖獗,间谍软件盛行,但是面对全汉字编写的程序也只能望尘莫及,眼下,无论多么高级的黑客破密软件,也很难以英文破密的方式来破解中文加密程序,这对于国外的恶意破坏我国国家安全分子,也无疑筑起了一道“钢铁长城”,想要进入“汉语编程”软件不懂汉语编程,就如同“盲人摸象”,即使将来外国人学了汉语编程,但因为所有源代码都掌握在中国人手里,也不过于担心计算机的安全问题。正如来自美联社的报道中所言:汉语编程,令老美也深感“来自中国的恐慌”!有资料表明:汉语编程问世14年来,已经开发出160多种软件和200多种益智游戏,这些产品,到目前为止,尚没有受到任何一种病毒的入侵,也没有任何一种木马能够盗取资料,可以想象“汉语编程”在信息安全上所起的“革命”性作用。......

阅读全文(1985) | 评论:0

 全面整理的C++面试题[转](2008-04-28 01:52:00)

摘要:1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。private 也被集成,只事派生类没有访问权限而已。virtual可加可不加。子类的空间里有父类的所有变量(static除外)。同一个函数只存在一个实体(inline除外)。子类覆盖它的函数不加virtual ,也能实现多态。在子类的空间里,有父类的私有变量。私有变量不能直接访问。 --------------------------------------------------------------------------2.输入一个字符串,将其逆序后输出。(使用C++,不建议用伪码) #include <iostream>using namespace std; void main(){  char a[50];memset(a,0,sizeof(a));  int i=0,j;  char t;  cin.getline(a,50,'\n');  for(i=0,j=strlen(a)-1;i<strlen(a)/2;i++,j--)  {   t=a[i];      a[i]=a[j];   a[j]=t;  }  cout<<a<<endl;  } //第二种 string str;cin>>str;str.replace;cout<<str; --------------------------------------------------------------------------3.请简单描述Windows内存管理的方法。 内存管理是操作系统中的重要部分,两三句话恐怕谁也说不清楚吧~~我先说个大概,希望能够抛砖引玉吧 当程序运行时需要从内存中读出这段程序的代码。代码的位置必须在物理内存中才能被运行,由于现在的操作系统中有非常多的程序运行着,内存中不能够完全放下,所以引出了虚拟内存的概念。把哪些不常用的程序片断就放入虚拟内存,当需要用到它的......

阅读全文(2022) | 评论:2

大学计算机软件专业生应该学什么[摘](2007-10-14 23:54:00)

摘要:           收到一封mail,是一个计算机系大三学生写来的,想听听我的建议,面临将要毕业的关口,应该学点什么才能对将来有用。随后又有不少朋友通过mail,im等等方式询问我对这个问题的看法。   我本来不是计算机专业出身,也并非大师之类的人物,本来不敢好为人师。不过,既然作了这个行业,也算有点心得,被问到,也就说点心得和建议,对与不对,各位看官指教。盖个体情况差距极大,本文是个人观点,也就姑且一听,有用则用,当然,这世上怕也没有所谓万全之策的。   1、你是否真的喜欢计算机   我是真的喜欢的。如果让我选择发了大财做什么,我仍然继续玩计算机,只不过可以更自由自在的玩喜欢的东西。如果你也喜欢,喜欢学新的东西,喜欢复杂而精巧的设计,喜欢工程之美,那就适合走技术道路。如果不是这样,这条路比较辛苦,还请三思。其实产业里相关的领域也大有可为,比如说写技术相关的趋势作者,鲜有优秀的。目前除了互联网周刊的陈琼同学,我还没看到给商业媒体写技术相关的写手有几个写的好的,甚至往往都有致命的本质错误。诸如此类的周边领域很多,都有不错的机会,不一一列举。   2、假如1你回答的是喜欢,那么   你需要学习很多东西。我认为不可缺少的东西包括:   * 基础理论  * 算法  * C语言  * C++或java,如果精通C,可以舍弃C++,学java  * unix  * 正则表达式  * 任何一种脚本语言(目前推荐python)   依次讲解为什么这么说   * 基础理论和算法   20年来,应用层面急速发展,令人眼花撩乱,而实际上,大幕之后的东西,从1972年C和unix诞生以来就没有过本质的变化。在操作系统,数据库理论,编译原理,信息管理系统理论之类,都是*相对*静止的。虽然其中有类似于微内核还是整体内核之类的理论之争,但是几乎不影响格局,大可以放心去学。学这些东西唯一的问题是理论枯燥,最好是结合实践,做一些应用,学一些理论,张弛有度,这样总能保证好奇心旺盛。   学这些东西的目的是为了真正的了解计算机。不真正了解一个东西,很难举一反三,很难作到融汇贯通。其实高校教的这些东西都极有价值,只不过是在缺乏实践的基础上填鸭,效果往往变成了应付考试。 * C语言 ......

阅读全文(2765) | 评论:2

评审透露微软笔试经验(2007-10-12 21:41:00)

摘要:                    每年的秋季学期,正是校园招聘的高峰期。作为招聘流程的第一个重要环节,在今年的九月至十一月里,微软公司将统一安排三场全国性的笔试进行初选。对微软笔试感兴趣的考生,或许都想知道自己的答卷是怎么被“评判”的? 本文是去年笔试出题和阅卷小组对当年部分考生提问的一些解答,仅与今年参加笔试的同学们做参考。需要说明的是,虽然今年笔试的基本思路与去年大体一致,但请同学们仍以今年的考卷题型为准。  2006年微软笔试评审组   撰文:邹欣   1.  2006年秋季学期的笔试是由微软多个部门的工程师和经理集体出题,所有申请技术职位的应届毕业同学都建议考试。由于全国有很多所高校,因此我们还分了全国统一考卷(written test)和在各个城市进行的小型考试(mini-test)。   2.  为了让各次考试有一个可比的分数,HR要求我们出题的难度尽量一致。2006年9月27日第一个mini-test后,通过分析同学们的反馈(3%很难、40%难、54%一般、3%容易),我们认为题目的难度基本符合要求(略微“一般”了一点)。于是在以后的考题中稍稍提高了难度,并对各类题型略为修改。从分数看,不少同学大大低估了试题的难度,或者说低估了我们对答案的期望。一言蔽之——我们希望看到接近“职业”水平的答案:)。   3.  倒扣分:公司的大部分同事们认为这是比较有效的甄别方法。我们尽量避免非常偏僻的知识点和有争议的答案。   4.  判分:我们所有的卷子都全部判分,每个部门都抽调了不少工程师加班判卷。我个人所看到的情况是,同学们写的每一行都会被看到,对于一些很难读通的程序,我们会一起分析,不会因为一眼看不懂就给个0分。对于单项题答得非常好的同学,我们会特别标记。像这样的无绝对标准答案的试卷,判卷是~相~当累人的活。至于会不会把所有分数都全部告知考生,这由各个你所申请的部门决定。   5.  英语:由于所有题目都是英语,一些同......

阅读全文(2246) | 评论:0

从Cache学习卓越编程  (2007-10-11 21:37:00)

摘要:不了解计算机系统,就不能写出卓越程序!”这是《编程卓越之道》系列丛书的主要思想。实际上也是如此!那么,怎么去了解系统呢?我是从缓存(cache,发音同cash)这个概念入手的。之前看到个经典的程序:libsvm。其中使用了cache,于是就对它产生浓厚的兴趣。 CPU-Z是一款免费绿色软件,用于测量CPU、缓存、内存、主板等核心硬件的参数!我们要看的是CPU和缓存,因为我最关心的cache在这里嘛。先看看CPU页的时钟-核心速度,它就是通常说的 CPU 的主频了,多为 2.4GHz、1.4GHz。这里要说明的是,主频并不直接代表CPU的运算速度,但和运算速度有关。主频= 倍频 x 外频。外频是CPU和主板之间的同步运行的速度,此时可以理解为CPU的外频直接与内存相通,目前以133MHz外频的CPU为主流。前端总线一般被认为是外频的另一个名字,其实它是数据传输的速度。如果数据传输的极限速度不能满足CPU的运算速度,则过度提高倍频是没有意义的,一般倍频在5~8倍之间CPU的性能会得到充分发挥,极限为10倍。 寄存器 -> 一级Cache -> 二级Cache -> 主存 -> 磁盘。这是现代计算机的存储层次。寄存器和一级(L1)Cache都在CPU上,大多数奔腾2、3、4 CPU 都提供二级(L2)Cache,但是有些赛扬芯片没有,访问他们所需时钟周期(主频的倒数)的个数分别为2~3,7~10,70~100,10e6~10e7。每个时钟周期内CPU处理的指令数目根据数据依赖关系和资源约束而变化。关于CPU-Z中的Cache,L1有数据和跟踪两项,前者叫数据Cache,用于存储数据,一般的Intel CPU 该值为4~32 KB(一般为8 KB),后者用于存储指令,所以也叫指令Cache。针对Cache的访问决定程序的速度,如果频繁调用其中的数据(叫Cache命中,Cache Hit),则程序速度较快,否则造成Cache缺失(Cache Miss),到二级Cache甚至是主存和磁盘存取数据,则速度大打折扣,这就是上文说的数据传输的问题。 想给个例子:C语言实现1000 x 1000的两个double矩阵相乘。目前正在研究“分块(blocking)”,我还不知如何控制数据存储在L1/L2,欢迎大家探讨。 参考资料 1、CP......

阅读全文(2909) | 评论:0

正则表达式30分钟入门教程(2007-10-04 20:21:00)

摘要:正则表达式30分钟入门教程 作者:deerchao 来源:unibetter大学生社区 转载请注明来源 本文已更新,推荐您查看第二版。 本文目标 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。一旦入门后,你可以从网上找到更多更详细的资料来继续学习。 别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并不像你想像中的那么困难。当然,如果你看完了这篇教程之后发现自己明白了很多,却又几乎什么都记不得,那也是很正常的--其实我认为没接触过正则表达式的人在看完这篇教程后能把提到过的语法记住80%以上的可能性为零。这里只是让你明白基本道理,以后你还需要多练习,多查资料,才能熟练掌握正则表达式。 说明 正则表达式是用于进行文本匹配的工具,所以本文里多次提到了在字符串里搜索/查找,这种说法的意思是在给定的字符串中,查找与给定的正则表达式相匹配的部分。有可能字符串里有不止一个部分满足给定的正则表达式,这时每一个这样的部分被称为一个匹配。匹配在本文里可能会有三种意思:一种是形容词性的,比如说一个字符串匹配一个表达式;一种是动词性的,比如说在字符串里匹配正则表达式;还有一种是名词性的,就是刚刚说到的“字符串中满足给定的正则表达式的一部分”。 文本格式约定:专业术语 特殊代码/语法格式 正则表达式 正则表达式中的一部分(用于分析) 用于在其中搜索的字符串 对正则表达式或其中一部分的说明 什么是正则表达式? 很可能你使用过Windows/Dos下用于文件查找的通配符,也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比通配符更能精确地描述你的需求--当然,代价就是更复杂。比如你可以编写一个正则表达式来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。 入门 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。例如,\d+就是......

阅读全文(2220) | 评论:0

 如何阅读源代码(转)(2007-10-03 14:05:00)

摘要:作者:ariesram 来源:不详  写在前面的话: 自从我在linuxaid.com.cn上发表一些文章开始,就不断的有网友发来电子邮件,或者是就其中某些问题进行探讨,或者是查询其他文章的地址(往往这些网友看的是其他网站转载的我的文章),我很高兴自己写出的文章有这么多人回应,因为这是对我最好的赞赏,也很高兴有这么多人对我的文章感兴趣。但是常常因为工作关系。有很多邮件是询问我的其他文章在哪里能够找到,我不一定能够及时回复,也觉得回复同样的问题比较麻烦,所以在这里重复一下,我为linuxaid.com.cn写的文章都能在www.linuxaid.com.cn的应用开发栏目中找到,我的一部分文章收集在bambi.may10.ca/~ariesram/articles下面(这是一个很简陋的网页,只有文本格式的文章,也欢迎有兴趣的网友帮我设计一下网页),我的邮件地址:ariesram@linuxaid.com.cn, 或者ariesram@may10.ca。请转载文章的网站保留这一说明,欢迎网友写email给我探讨问题,虽然我不能保证能及时回复。 正文: 由于工作的关系,我常常需要读一些源代码,并在上面做一些修改并且拿来使用,或者是借鉴其中的某些部分。可以说,open source对于程序员来说,是很有意义的事情。根据我的经验,读源代码,至少有3个好处。第一个好处是可以学习到很多编程的方法,看好的源代码,对于提高自己的编程水平,比自己写源代码的帮助更大。当然不是说不用自己写,而是说,自己写代码的同时,可以从别人写的好的源代码中间学习到更多的编程方法和技巧。第二个好处是,可以提高自己把握大规模源代码的能力。一个比较大型的程序,往往都是经过了很多个版本很长的时间,有很多人参与开发,修正错误,添加功能而发展起来的。所以往往源代码的规模都比较大,少则10-100多k, 多的有好几十个MB. 在阅读大量源代码的时候,能够提高自己对大的软件的把握能力,快速了解脉络,熟悉细节,不仅仅是编程技巧,还能在程序的架构,设计方面提高自己的能力。(这里说一句题外话,<<设计模式>>这本书相信很多人都看过,而且很多人对它推崇备至,奉为经典。现在也出了不少书,都是冠以"设计模式"这一名称。在书中就提到,设计模式并不是一本教材,不是教你如何去编程序,而是把平时编程中一些固定的模式......

阅读全文(4786) | 评论:1

影响大学生就业的几个关键问题(2007-09-19 00:54:00)

摘要:影响大学生就业的几个关键问题 小序:          回到公司总部做技术培训和人员招募有一段时间了,心中感慨万千。回顾一下自己的学习历程,首先应该认真检讨一下自己:从小学开始,学习就一直不是很好——浮浮躁躁、欠缺扎实。很幸运,我借助小时候被父亲培养出来的求知欲加上物理老师在探索、研究方面的启蒙以及朋友父亲在计算机方面的启蒙进入了心仪的计算机行业发展,并且有机会在这个行业中从事一些与招聘和培训相关的工作。目前,我工作中最重要的两个topic就是:“什么样的人是可以招进公司的”和“什么样的人是可以培训出来的”。很遗憾,我没有专业HR的经验,对于如何识别一个人的人品、性格、职业发展的前景等不太在行,我的责任仅体现在技术与专业知识方面。          与我的大多数技术文章不同,本篇文章的议题和内容是比较严肃的(尽管也会忍不住调侃两句),因为它牵扯到当代大学教育、学生就业、企业招聘等重要的话题。正因为这个话题是严肃的,所以我在写这篇文章的时候,也尽可能地保持了客观的视角和中立的心态——时刻劝告自己不要像个愤青一样攻击社会和教育、不要小人得志般地针砭大学生(说实话,大学生是有自己的一些缺点,但也有自己的难处,而且,大学生中也有很多好样的!)。          本来这篇文章早就写出来了,之所以没有挂出来是因为我一直在想这样一个问题——这篇文章挂出来的目的是什么?现在,我似乎找到了答案,那就是:真诚地帮助目前在校的学生瞄准企业需求、修正自己的学习轨迹、顺利进入企业工作;同时帮助公司招聘和培训越来越多的优秀人才。          最后恳请大家在看完文章后,留下您的宝贵意见——为了中国的IT教育、IT企业,也为了你自己。 正文: 相信大家都听说过建国初期、赶上自然灾害那阵子,曾经出现过有人饿死的情况——那是因为物资太匮乏了。现在已经不会再有这样的消息了——因为物质水平上来了。呵呵,你可能会问:怎么今天提起这个来了?事情是这样的——最近被调回总部搞招......

阅读全文(2812) | 评论:0

 算法为王--正本溯源系列之一 (2007-09-19 00:38:00)

摘要:  算法 为王--正本溯源系列之一             以前曾旁观过一些软件工程师们争论, 当然也包括很多大学里的学生和朋友, 常见的一种是为谁的技术高, 谁懂的技术深刻较劲, 用C++的朋友很看不起用VB的, 精通操作系统的人看不起精通Excel的人, 精通编译原理的人看不起培训Dot Net的, 用UNIX的看不起Windows编程的人, 程序员相轻, 比文人更甚, 这样歧视的话语和语调流行很广. 可能有老师或者所谓资深专家对一个初学者这样说,你要想成为高手, 必须要扎实的学好操作系统,编译原理, 数据结构等等一大堆的科目. 我在想, 公司里有一个文员, 每天和Excel报表打交道, 非常的熟悉,并且很聪明, 用VB Script写了很多自动化的功能,使自己的工作效率成倍的增长, 这样的人也许不懂计算机的原理, 不懂什么操作系统,c++语言等,你能说她很低级吗? 你能不为她而投去敬佩的目光吗? 她和精通操作系统的你区别有多大? 天上与地下, 你说,那好,我们现在就谈论这个问题.   计算机原理, 操作系统, 编译原理, 编程语言这些东西, 说到底其实都是知识, “知其然”是知识, “知其所以然”也是知识. 这些书本上的知识是前人智慧的结晶, 里面充斥着天才的思想和绝妙的算法, 是很长时间内科学家们不断的创新和试错, 才能得到今天的地步, 典型的一个例子是操作系统,一个控制硬件系统的软件,里面每一个章节都是算法或者逻辑的汇总, 每一页枯燥的文字背后的目的就是介绍一个算法, 这些算法慢慢成为思想, 成为体系结构, 然后成为规则, 成为你必须记忆的知识. 你学习的时候感觉很难掌握, 是啊,你一节课学习的东西其实是前人几个月甚至几年想到的解决办法, 你如果要切实的理解,就必须顺着计算机科技发展的历史, 每一阶段出现的困难和怎么去解决它这个思路的角度去理解.   这些课程你学的很好,都知道是怎么回事了,它只是表明你知道了前辈们的劳动成果, 也学会了很多成熟的思维和算法, 给自己写程序很多的启发, 其他并没有多大的意义, 它和公司里的文员精通Excel的意义一样, 你的优越感只是你自己幻想的......

阅读全文(2659) | 评论:0

微内核过程引擎的设计思路和构架(2007-09-19 00:10:00)

摘要:微内核过程引擎的设计思路和构架   作者:TIBCO中国研发中心 胡长城(银狐999)          这两年基于流程引擎技术构建的应用系统越来越受到客户的追捧和认可,能否支持 “流程可定制、可更改、可运行”也逐渐成为客户衡量一个应用系统主要标准之一。又比如目前被大家广泛提及的SOA(面向服务架构),为客户解决“业务敏捷性问题”提供了新的指导思想和方法。但是SOA的整体构架必须依赖于三方面技术的支撑:解决互通互联的技术与标准,比如我们所熟知的消息总线技术、JBI、SCA等等;解决流程管理的技术与标准,比如BPM,Workflow等;以及解决业务模型构建的技术与标准,正如我们所熟知的MDA(模型驱动架构)等。可见与流程应用相关技术的重要性。        最近也有很多企业的朋友向我抱怨他们给客户实施工作流项目的时候,不论是采用第三方的工作流产品,还是扩展开发开源的工作流引擎,总是非常棘手,碰到很多难以应对的问题,而且这些问题一般出现在项目后期。因为在需求调研的过程中客户也无法欲知,因为客户也不清楚流程系统应该具有什么功能。        可以说,从工作流项目实施角度可以阐述很多可以注意的事项,但是本篇从另一个角度来辅助大家看待流程问题。这个角度完全是从一个“源”角度来探索—— 如果你清楚了一个过程引擎的实现思路和构架,我想你就不会在为那“怪异的客户需求”而惊奇了,相反,你可以很轻松的应对。        是的,本篇主旨就是讲解“微内核过程引擎的设计思路和构架”。        在进入文章正文之前,我还有必要稍稍补充两点: (1)       在前一篇杨洪波先生已经为大家诠释了工作流(Workflow)与业务流程管理(BPM)的异同。为了减少名词概念方面的误导性,本篇采用了流程(Process)这个概念,来规避Workflow与Business Process所可能带来的概念差......

阅读全文(3035) | 评论:0