- 浏览: 155302 次
- 性别:
- 来自: 杭州
最新评论
文章列表
对LSP的理解,之前只停留在表面,并未深入理解。表面理解是指认为LSP就是仅仅依靠面向对象多态的特性,在使用基类对象的地方都能使用子类对象简单的替换。这还不是严格的遵循LSP。真正的要遵循LSP原则,是必须子类和基类行为上的绝对一致。基于契约的设计可以很好的保证了对LSP的遵循。
下面简单的java代码,揭示了LSP真谛:
package com.oop.lsp;
public class Base {
public void lspViolate(String s1, String s2) {
}
public void lspFollow(String s1, St ...
- 2011-12-01 00:03
- 浏览 619
- 评论(0)
人的力量
•过程和技术对于项目的结果只有次要的影响,首要的影响是人。
•如果项目要取得成功,必须构建起具有合作精神、自组织的团队。
•凝聚在一起的软件团队是最强大的软件开发力量。
敏捷宣言
•人和交互 > 过程和工具
•可以工作的软件> 面面俱到的文档
•客户合作 > 合同谈判
•随时应对变化> 遵循计划
人和交互 >过程和工具
•沟通能力比技术能力更重要
•从小、免费工具入手,直到不能胜任再引入大工具
•团队构建比环境的构建更重要
可以工作的软件> 面面俱到的文档
•没有文档的软件是灾难,但过多的文档比 ...
- 2011-11-21 23:39
- 浏览 521
- 评论(0)
函数型语言
•Erlang:大量使用并发的时候使用
协作式和抢占式
•协作多线程、协作式系统
–每个任务自动放弃控制
–同时执行的线程数无限制
–适合处理大量的仿真元素
线程与设计
•线程使你能够创建更加松 ...
- 2011-11-20 21:31
- 浏览 543
- 评论(0)
控制器抽象层,包括抽象事件的定义及控制器的定义:
public abstract class Event {
private long eventTime;
protected final long delayTime;
public Event(long delayTime) {
this.delayTime = delayTime;
}
public void start() { // Allows restarting
eventTime = System.currentTimeMillis() + delayTime;
}
public boolean ...
- 2011-11-17 23:48
- 浏览 635
- 评论(0)
XP(Extreme Programming)
http://xprogramming.com/index.phpKISS(Keep it simple, Stupid!)
http://en.wikipedia.org/wiki/KISS_principleYAGNI(You Aren't Going to Need It)
http://www.artima.com/weblogs/viewpost.jsp?thread=36529Minimalism(LIM:Less is more)
http://en.wikipedia.org/wiki/MinimalismUser st ...
- 2011-11-17 15:32
- 浏览 603
- 评论(0)
内置注解
•内置注解
–@Override
–@Deprecated
–@SuppressWarnings
•元注解
–@Target
–@Retention
–@Documented
–@Inherited
编写注解处理器
•内置注解很少,打多时候,程序员自定义注解,并编写处理器处理它们
•使用的反射方法:
–Class.getDeclaredMethods
–Method.getAnnotation(见java.lang.reflect.AnnotatedElement,Class、Method、Field都实现了它)
注解元素可用的类型 ...
- 2011-10-27 23:57
- 浏览 480
- 评论(0)
1、执行下面的SQL,找到被锁的表:
select b.owner table_owner,b.object_name,c.username,c.sid,c.serial#
from v$locked_object a,dba_objects b,v$session c
where a.object_id=b.object_id and c.sid=a.session_id; 2、根据查询结果中每条记录的sid和serial#杀掉SESSION:
alter system kill session '[sid],[serial#]';
- 2011-10-26 18:45
- 浏览 845
- 评论(0)
枚举类型
特性
•继承自java.lang.Enum
•values()返回枚举数组
•自动提供equals和hashCode方法
•自动实现Comparable和Serializable接口
•可以用==比较两个枚举值
•默认name()等同toString()
•valueOf将字符串名称转换为枚举类型值
添加方法
•枚举定义必须在方法定义之前
•枚举定义结束后使用分号
•可以有构造函数和main函数
•可以覆盖toString
•
枚举秘密
•编译后是一个final的class
•values方法由编译器生成
•编译器生成带单个s ...
- 2011-10-26 00:31
- 浏览 565
- 评论(0)
Left side (xx) of 'y' operation has null value. Operation not possible
I have been seeing a lot of messages like this in my dotCMS logs:
?
- 2011-10-12 15:14
- 浏览 961
- 评论(0)
论文:
Martin Fowler: Continuous Integration http://www.martinfowler.com/articles/continuousIntegration.html (中译版:http://www.cnblogs.com/itech/archive/2010/07/12/1775785.html)
持续集成理论和实践的新进展: http://www.infoq.com/cn/articles/ci-theory-practice
乔梁专栏: http://www.infoq.com/cn/author/%E4%B9%94%E6%A2%81( ...
- 2011-10-08 14:16
- 浏览 497
- 评论(0)
Maven内置变量说明:
${basedir} 项目根目录
${project.build.directory} 构建目录,缺省为target
${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
${project.packaging} 打包类型,缺省为jar
${project.xxx} 当前pom文件的任意节点的内容
- 2011-09-22 14:01
- 浏览 500
- 评论(0)
File
•可表示文件也可表示目录
•相关类:FilenameFilter
•相关功能:
–list
–listFiles
io的装饰器模式
•一般先用缓冲装饰,再用其他装饰
•当使用DataOutputStream时,写字符串并且让DataInputStream能够恢复它的唯一可靠做法是用UTF-8编码,即使有writeUTF和readUTF方法
InputStream
•典型用法:
–DataInputStream in =new DataInputStream(new BufferedInputStream(new ByteArrayInput ...
- 2011-09-05 00:20
- 浏览 540
- 评论(0)
详见以下测试代码及其注释:
package test;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertSame;
import static junit.framework.Assert.assertTrue;
import java.lang.r ...
- 2011-08-30 01:02
- 浏览 795
- 评论(0)
关于Java中使用容器的几个注意点
在看老代码时,看到一处使用HashSet的场景,检查了放入HashSet的类型参数,发现这个类型并没有重写equals和hashCode方法,这个后果的严重程度可想而知。就此暂时总结了以下几点,并配合测试代 ...
- 2011-08-27 01:28
- 浏览 565
- 评论(0)
Build Number Maven Plugin的使用方法
1. Build Number Maven Plugin用于获取svn的版本及分支目录,可以将它们用于应用中
2.先在maven的setting.xml中添加仓库,用于下载该插件:
<pluginRepository>
<id>codehaus</id>
<name>codehaus</name>
<url>http://repository.codehaus.org</url>
</plug ...
- 2011-08-23 23:07
- 浏览 975
- 评论(0)