关于字符串的逆序排列,PHP内置了strrev()函数,测试代码如下:
header('Content-type: text/html; charset=utf-8');
$str = implode('', range(9, 0));
print '<p><strong>Before reversed: </strong>'.$str.'</p>';
print '<p><strong>After reversed: </strong>'.strrev($str).'</p>';
/*
输出如下:
Before reversed: 9876543210
After reversed: 0123456789
*/
如果不用内置的strrev()函数,又该如何实现呢?这里试验了3种方法(二分法、循环法、递归法),但没有进行性能测试。
(全文…)
递归遍历目录是个老话题,难度不大,但考验一个程序员的逻辑是否严谨。“There Is More Than One Way To Do It”。递归遍历目录可以有很多种方法,但无论采用何种,都要合理追求效率、可读性的平衡。
上午抽空试验了两种方法:常规方法(第1页)和SPL(第2页)方法,本人推荐具有统一接口的SPL方法,更干净更清晰更健壮。两种方法均返回层状结构的HTML字符串(当然,稍加修改可以返回数组,应需而变吧)。测试结果如下:

(全文…)
页面: 1 2
当年在校的时候,徐老师与Chris把我领进了微软体系的大门,从穷途末路的asp开始捣腾了几个项目,在向.net过渡之际,我却结识了PHP开始走上开源之路。如今,我完全脱离微软路线快两年了。
最近,徐老师让我帮忙在一周之内改版XXX图书馆的前台部分,但不能动任何的后台管理部分。站点由超星使用Java + SQL Server 2005架构,没有提供核心代码的源文件。总数据量在18万左右,由于超星出于“巧妙”架构的需要把数据库设计得很死板,没有给第三方开发者留下任何选择的余地,更不要提“重构”二字。难怪馆方在UI上、在功能上都对它多有不满,而对方也不搭理,只好请徐老师帮忙。不管是谁来帮忙,都只能被迫遵照它的“巧妙”而“巧妙”,他们怎么干的我们也得怎么干。
我之前也没使用Java做过实际项目,也只是了解一些Java基础罢了,因此我也很乐意接受这个小小的挑战。在分析了其数据库设计后,确定我能做出的“变动”是可以满足馆方在数据呈现方式上的要求。于是,在业余时间了解servlet的基本原理、J2EE开发的基本常识等等,这其间Peter给我不小的帮助。考虑到快速开发和小心求证的需要,我使用“纯生态”的jsp、不考虑多层,代码可谓“很难看”……呵呵
本地开发使用精简的SQL Server 2005 Express 和 Management Studio Express,其中需要更改身份验证方式并启用sa登录。与MySQL相比,SQL语句基本上是差不多的,比较大的差异是SQL分页。网上有三种关于SQL SERVER查询的较常见的分页方案,我采用SELECT TOP 和 NOT IN进行分页:
SELECT TOP 页大小 *
FROM TestTable
WHERE id NOT IN
(SELECT TOP 页大小*(页数-1) id FROM TestTable ORDER BY id DESC)
ORDER BY ID DESC
当然,这种分页方案在不同数量级的环境中会有不同的表现,需要实际进行拷证,适当做些优化或另选分页方案。
但是,接下来发生了两件很尴尬的事情。
一、周末去对方那里调试安装,打开优盘的时候发现自己没有带上自己完成的程序,可是明明我是拷贝了的呀?!哎,也许是我前夜熬得太晚,看走眼了……还好,从邮箱中下了一份,虽然不是最新的,但对安装测试是足够了。
二、更不幸的是,在调试安装过程中,发现对方给我开发用的数据库是很老的版本,目前的在设计上发生了很大变化,这着实很雷人。怎么办呢?只好在现场分析新的数据库设计能否支持改版需求,给对方负责人坦白哪些是不可能做到的,我的改版会触动哪些东西。幸好,对方是个计算机专业研究生毕业的,沟通起来很是顺畅,很有耐心,也理解和赞同我的看法。最后,我说我会继续研究一下关键的地方,并让她下周跟领导再商榷一下,如果不同意我的改版意见,就尽量让超星来改版(尽管这微乎其微)。
后来一周,对方领导还是坚持原来的要求,继续让我来改版。这在技术论证上是行不通的,或者说不在我的能力范围内。其实是做不到的,不然超星也不会选择目前的难看也难使用的UI和数据呈现方式。我也不希望,我的改版勉强应付过去后,留了一个烂摊子给后来的开发者。最后,只好让徐老师圆了场。
一次失败的Java小项目由此而来。