- 博客(9)
- 资源 (1)
- 收藏
- 关注
原创 先有鸡还是先有鸡蛋?计算机语言发展史给出的答案
先有第一只鸡还是先有第一只鸡蛋?这是个悖论。没有鸡哪儿来的鸡蛋呢?同样,没有鸡蛋怎么孵出鸡呢?计算机语言中其实也有类似的现象。以C语言和它的编译器gcc为例。C语言的编译器是用C语言写的,这样看来应该先有C语言。可是如果没有C语言编译器,C语言也没法运行。这里C语言就好像鸡蛋,而C语言编译器就好像是鸡。鸡孵化鸡蛋,C语言编译器编译C语言。在C语言这个范畴里,先有C语言还是先有C语言编译器也是一个悖
2006-12-17 21:50:00 2808
原创 面向对象技术伪术语--主动对象的批判 续
提出主动对象这个概念的人也许是为了能在面向对象技术和并行技术间搭一座强梁。面向对象技术模拟的是自然的世界。其中的对象一旦产生就处在运行中,而计算机却只能有一个启动进程。(下面我用线程这个术语表示进程和线程。)就算在该启动进程中启动更多的线程,其可同时运行的线程数总还是远远少于一个面向对象系统中对象的个数。我猜测他们可能用主动对象表示其服务程序运行在单独线程中的对象,而被动对象指其服务程序运行在主线
2006-12-15 13:35:00 1022
原创 面向对象技术伪术语--主动对象的批判
面向对象技术伪术语--主动对象的批判按照清华大学出版社绍/杨二人的《面向对象的系统分析》一书,主动对象是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行(主动服务)。另外一种就是被动对象,需要通过消息的驱动才能执行。该书中给出一个例子,比如哨兵站岗并对发现的情况主动报告。主动对象一般被实现为进程或线程。我认为这种把对象分成主动对象和被动对象是错误的。因为按照面向对象
2006-12-15 12:32:00 1202
原创 sql语法的一点思考,sqlplus的一点抱怨
Sql语句体现了英语的语言习惯。比如当使用select查询“select fields from table”的时候,我们是先输入字段名称,然后输入表名。这符合英语的习惯,就是先说小的地点,然后大地点。如果用汉语言习惯来描述应该是“从表中取字段:select table get fields”。那采用汉语习惯有什么好处呢?自己先动脑想想,嘿嘿!最近用oracel10g的sqlplus,感觉非常
2006-12-06 23:55:00 1217
原创 面向对象方法的困境--正方形不能继承自长方形?
面向对象理论诞生之初,由于没有最佳实践的指导,往往导致继承的滥用。一个很著名的例子就是java类库中的堆栈类Stack继承自向量类Vector。public class Stack extends Vector ...{ public Object push(Object item) ...{ addElement(item); return item; }
2006-09-07 20:46:00 8116 1
原创 java中的双重检查模式(double-check idiom)
在Effecitve Java一书的第48条中提到了双重检查模式,并指出这种模式在java中通常并不适用。该模式的结构如下所示:private Resource resource;public Resource getResource()...{ if (resource == null)...{ synchronized(this)...{ if (resource
2006-09-02 22:53:00 1535
原创 关于用信号量Semaphore实现互斥锁Mutex
在Doug lea的那本著名的《Java并发编程—设计原则与模式》,英文名"Concurrent Programming in Java™: Design Principles and Patterns, Second Edition",书中提到可以用信号量Semaphore实现互斥锁Mutex。虽然java中是通过synchronize关键字提供锁,并用这个基础设施实现信号量的。在有的系
2006-08-31 22:08:00 5190
原创 mysql 8小时空闲后连接超时的问题
应用程序和数据库建立连接,如果超过8小时应用程序不去访问数据库,数据库就断掉连接 。这时再次访问就会抛出异常,如下所示:Communications link failure due tounderlying exception: ** BEGIN NESTED EXCEPTION ** java.io.EOFExceptionSTACKTRACE:java.io.EOFException
2006-08-30 11:01:00 2325 2
原创 深入列表遍历问题,并分析spring和tomcat中观察者模式的实现
列表的遍历有两种方式,一种是采用for循环,如下所示:List list=new ArrayList();for(int i=0;ilist.size();i++)...{//...}还有一种是采用Iterator接口 ,如下所示:Iterator ite=list.iterator();while(ite.hasNext())...{//...}那么这两种方式
2006-08-29 18:55:00 1339
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人