行内技术
创造财富的程序员小团队
财富不等于金钱。不是说因为谈钱很俗,谈钱的确很俗。创造了有价值的东西就是创造财富。财富并不等于金钱,财富是一些基本的、我们需要的东西。食品、衣服、以及一些精神物品都是财富。所以,在原始社会,人也是有财富的,但是他们没有金钱。物物交换的时代更能体现什么是财富。你有一头牛,我有羊。人们每天生活需要很多物品,但不见得都得自己去种植或者养殖。如果这个世界还是物物交换的话,我得拿我有的东西去换。很明显,我只有拿有人要的东西才能换回我必需的物品。其他人也是一样。后来,大家都知道了,我们有了钱。虽然都知道钱能会贬值,但是也渐渐忘了钱只是财物的一种交换媒介而已。财富是被创造出来...
2013-3-3515
使用MySQL时需要注意的细节
1.LEFTJOIN和COUNT(*)SELECTa.id,COUNT(*)FROMaLEFTJOINbONb.a=a.idGROUPBYa.id这个查询试图统计出对于a中的每条记录来说,在b中匹配的记录的数目。问题是,在这样一个查询中,COUNT(*)永远不会返回一个0。对于a中某条记录来说,如果没有匹配的记录,那么那条记录还是会被返回和计数。只有需要统计b中的记录数目的时候才应该使用COUNT。既然可以使用COUNT(*),那么我们也可以使用一个参数来调用它(忽略掉NULL),我们可以把b.a传递给它。在这个例子中,作为一个连接主键,它不...
2013-3-3426
关于结对编程的一些事情
结对编程技术是一个非常简单和直观的概念:两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计。同一个算法、同一段代码或同一组测试、与两位程序员各自独立工作相比.结对编程往往只需花费大约一半的时间就能编写出质量更高的代码,但是,人与人之间的合作不是一件简单的事情——尤其当人们都早已习惯了独自工作的时候、实施结对编程技术将给软件项目的开发工作带来好处.只是这些好处必须经过缜密的思考和计划才能真正体现出来。而另一方面,两个有经验的人可能会发现配对编程里没有什么技能的转移,但是让他们在不同的抽象层次解决同一个问题会让他们更快地找到解决方案,而且错误更少。结对编程还有其他多种好处:...
2013-3-3456
HTML5canvas创意:飞翔的凤凰
当我看到这件作品的时候,我表示非常喜欢。这个作品的产生不仅仅需要编程和算法,作者肯定是个充满了艺术细胞的人。倘若有什么canvas艺术作品比赛的话,我想它就是获奖的那个。先观赏下演示吧。注意,要看到效果,请确保你的浏览器支持HTML5。如果你还在使用旧版IE,请更换新版浏览器。效果演示functionfillCircle(ctx,r){ctx.beginPath();ctx.moveTo(r,0);ctx.fillStyle='rgb(245,50,50)';ctx.arc(0,0,r,0,Math.PI*2,true);ctx.fil...
2013-3-3478
PHP遍历目录与目录下的文件
项目中有这么一个需求,需要遍历某个文件夹(目录)下的所有文件。下面是解决这个问题所写的PHP代码,在这里记录一下。第一种实现办法是用dir返回对象,第二种实现办法:用readdir()函数。<?php/**********************一个简单的目录递归函数第一种实现办法:用dir返回对象***********************/functiontree($directory){$mydir=dir($directory);echo"<ul>\n";while($file=$mydir->read()){...
2013-3-3634
MySQL中一些深入概念整理
1.视图视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询(即:包含一个SQL查询),仅仅是用来查看存储在别处的数据的一种设施。视图基本操作:(1)创建:CREATEVIEW;(2)查看:SHOWCREATEVIEWviewname;(3)删除:DROPVIEWviewname;(4)更新:CREATEORREPLACEVIEW。视图可以嵌套,但不能索引,也不能有关联的触发器或默认值。并非所有视图都是可更新的,如果MySQL不能正确确定被更新的基数据,则不允许更新(包括插入和删除)。视图不能更新的情况:(1)分组,使用GRO...
2013-3-3531
使用CURL伪造来源网址与IP
很多投票都有对来路的网址和IP进行验证,但是使用CURL可以伪造成任意的网址与IP,以绕过一些简单的验证,下面举一个简单的例子。程序运行之前,请确保php.ini中extension=php_curl.dll没有被注释掉。test.php<?php$ch=curl_init();curl_setopt($ch,CURLOPT_URL,"http://localhost/test_2.php");curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-FORWARDED-FOR:8.8.8.8','CLIE...
2013-3-3533
求大数阶乘的算法
在很多C/C++的书上,都给出了两种阶乘的计算方法,一种为利用递归进行计算;一种利用阶乘的定义进行计算。下面给出这两种算法的C程序源代码。1.利用阶乘的定义进行计算:unsignedlongfactorial(intn){if(n==0)return1;unsignedlongresult=1;for(inti=1;i
2013-3-3423
二进制补码是如何消除计算差异的
最近重新学习CPU体系结构,对使用二进制补码原理来消除带符号数和无符号数计算差异,以及整合减法运算器到加法运算器,从而简化CPU硬件设计的原理很感兴趣,所以特地思考了下,查看了一些网上关于two'scomplement的文章,但大部分还是太过学术,经过整理,我想以一种比较简洁的方式表达出来。为了简单起见,我使用了4位字长的寄存器作为例子,32位和64位道理一样。想了解补码更为科学的数学原理可以参考wikipedia关于one'scomplement、two'scomplement的相关文章。硬件设计以简洁为目标,所以整数的运算最好只有加法,而且不用对符号位进行特殊处理,...
2013-3-3472
少走弯路,学好C语言的推荐途径
为什么要学习C语言?为什么要学习、使用C语言?为什么要学习一个可能比自己都岁数大的编程语言?选择一门编程语言,“为什么而学”这个目的是最重要的,目的不明确就没法学好。这也是为什么很多学生朋友在大学里必修C语言却觉得没学明白的原因。因为学习的目的不明确,学习当然也没有动力。还有一个原因是C语言是工程实践性很强的语言,它不是来自某个研究所某个大学学院,而是实实在在从项目需要中产生,伴随着Unix的兴起而流行,语义简明清晰,功能强大而不臃肿,简洁而又不过分简单,实在是居家旅行工作学习必备之良友。C语言相比C++的优点之一就是最小惊讶原则,一是一二是二,不会在私...
2013-3-3469
PHP“相关文章推荐”功能的简易实现
一般做内容网站,需要在每一篇文章出现与该文章相关的文章列表。多数人使用的方法大概是:建立一个关键词列表,判断每篇文章包含有那些关键词,最后根据关键词找出与某篇文章最相关的文章。对于内容比较复杂的网站,确定关键列表词显然比较麻烦。后来我查阅了一些php函数,感觉similar_text(php4,php5)函数能够十分方便的达到我的要求。这个思路是:从文章列表中取出所有的文章标题,将所有的文章标题都同当前标题对比,将对比结果生成一个数组,按照相似度的大小由大到标题,利用similar_text将这些文章标题同原文章标题做对比,按标题的相似程度重新排列标题,就得到了与原文章...
2013-3-3375
JavaScript数据类型转换方法汇总
转换为布尔型用两次非运算(!):!!5==>true用布尔型的构造函数:newBoolean(5)==>true值转换为布尔类型为false:0,+0,-0,NaN,""(空字符串),undefined,null除上面的值其他值在转换以后为true,需要特别提到的是:"0",newObject(),function(){}转换为字符串类型加上空字符串"":123+ ""="123"用字符串构造函数:newString(123)="123".需要特别注意的转化:+0==>"0"-0==>"0"-In...
2013-3-3463
丑数UglyNumber查找算法
我们把只包含因子2、3和5的数称作丑数(UglyNumber)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数下面是一道在网络上广为流传的面试题,据说google曾经采用过这道题。所谓一个数m是另一个数n的因子,是指n能被m整除,也就是n%m==0。根据丑数的定义,丑数只能被2、3和5整除。也就是说如果一个数如果它能被2整除,我们把它连续除以2;如果能被3整除,就连续除以3;如果能被5整除,就除以连续5。如果最后我们得到的是1,那么这个数就是丑数,否则不是。基于前面的分析,我们可以写出如下的...
2013-3-3571
程序员必备素质--学习、思考与分享
有人说,程序员是个苦差事,一辈子总是要不停地学习,学习新的技术,学习新的架构,学习新的工具,一旦一段时间不学习,就会发现其他人嘴里冒出来的新鲜词,自己已经搞不懂是什么了。的确,作为程序员,学习很重要。还有人说,做程序员是典型的脑力劳动者,每天都要思考,想怎样才能做出更易于扩展、安全性更高的架构,思考如何才能够满足客户的需求,思考如何才能够让自己做出来的程序可维护性更好,思考如何让自己的产品更容易被用户所接受,很多很多需要思考的问题。另外,每次做完一个项目,总是要思考一下在其中获得了什么经验和教训,学到了什么知识,然后在仔细做个总结。的确,作为程序员,思考也非常重要。古...
2013-3-3634
JavaScript定义类与对象的一些方法
最近偶然碰到有朋友问我"hoisting"的问题。即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的。可以看看这个例子:vara='global';(function(){alert(a);vara='local';})();大家第一眼看到这个例子觉得输出结果是什么?'global'?还是'local'?其实都不是,输出的是undefined,不用迷惑,我的题外话就是为了讲这个东西的。其实很简单,看一看JavaScript运行机制就会明白。我们可以把这种现象看做"预声明"。但是如果稍微深究一下,会明白得更透彻。这里其实涉及到对象属性绑...
2013-3-3483
用分治法求数组中的最值
分治算法通俗的讲就是把一个规模比较大的问题分成n个规模较小的问题来解决,再将每个小规模的问题进行合并,最后得到结果。通常问题规模比较大难以用普通的编程方法实现,或者不可能实现的时候采用分治算法,能够简化问题的解决。下面举个例子,求出一个数组中的最大值和最小值。publicclassMaxAndMinValue{//直接算法得到最大值和最小值publicstaticvoidmain(String[]args){int[]A={-18,-16,9,-5,7,-40,0,35};System.out.println(getMaxValue(A));...
2013-3-3485
关于PHP在企业级开发领域的访谈
虽然PHP是Web应用开发中最广泛使用的环境,但它还是一度被认为无缘企业级开发。ZeevSuraski,ZendTechnologies公司创始人,该公司主要关注PHP的进展RobNicholson,高级技术研员,曾为IBM编写过程序设计语言运行时DerickRethans,PHP开发小组成员,eZ组件的项目负责人Q:企业软件的一个关键元素就是互操作性,它可以让软件与其他平台交换信息。大家都认为PHP在这方面表现欠佳,因为它的WS-*支持相对来说比较新且功能较少,成熟度不高。关于这点你们是怎么考虑的?它会不会有所改变...
2013-3-3545
JavaScript排序算法之归并排序
归并排序(Mergesort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用。归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。...
2013-3-3474
JavaScript排序算法之堆排序
堆积排序(Heapsort)是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。1991年计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(RobertW.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了著名的堆排序算法(HeapSort)。堆排序(HeapSort)是一树形选择排序。堆排序的特点是:在排序过程中,将R[l..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系(参见二叉树的顺序存储结构),在当前无序区中选择关键字最大(或最小)的记录...
2013-3-3481
JavaScript排序算法之希尔排序
希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。希尔排序按其设计者希尔(DonaldShell)的名字命名,该算法由1959年公布。一些老版本教科书和参考手册把该算法命名为Shell-Metzner,即包含MarleneMetznerNorton的名字,但是根据Metzner本人的说法,“我没有为这种算法做任何事,我的...
2013-3-3510