1. 接口和抽象类的区别
l 接口描述了方法的特征,而不给方法的实现,接口的出现一方面是解决java的单继承问题,另一方面是实现了方法的可接插性(动态调用才构成多态)
l 抽象类提供了部分实现,抽象类不能实例化,抽象类的存在主要是把公共的代码移到抽象类中,尽可能从抽象类继承,而不从具体类继承
l 接口的属性必须是常量(public static final),而抽象类的属性没有要求
l 接口的每个方法只是声明不包括内容,抽象类的方法既可以是抽象的也可以不是抽象的,一般至少有一个抽象的
2. 类之间的关系
l 一般化关系 类与类之间的继承关系,接口与接口之间的继承关系,类与接口的实现关系
l 关联关系 类与类之间的连接,一个类可以知道另一个类的属性和方法,在java语言中使用实例变量体现
l 聚合关系 关联关系的一种,是较强的关联关系,是整体和部分的关系,它与关联关系不用,关联关系的类处在同一个层次,而聚合关系的类处在不平等的层次,一个代表整体一个代表部分,在java中使用实例变量体现
l 合成关系 关联关系的一种,比聚合关系强的关系,整体对象负责部分对象的生命周期,部分对象在每一个时刻,只能与一个对象发生合成关系,在java语言中使用实例变量体现
l 依赖关系 比关联关系弱的关系,在java语言中体现为返回值,参数,局部变量和静态方法调用
3. is-a, has a 和 is-like-a 的含义
is-a: 类A,B完全属于I1的孩子是is-a方式(没有扩充),而C与I1是is-like-a方式
public interface I1 {
public void m1();
}
public class A implements I1 {
public void m1() {
}
}
public class B implements I1 {
public void m1() {
}
}
public class C implements I1 {
public void m1() {
}
public void m2(){
}
}
has-a:持有对方引用(关联关系)
public class A{
B b = new B();
}
public class B{
public hello1() {}
}
4. 软件设计原则
l OCP(开闭原则),对扩展开放,对修改关闭;
l 里氏代换原则(LSP),任何类的出现地方,子类一定可以出现(is-a)
l 依赖倒转原则(DIP),尽量依赖于抽象,而不要依赖于具体,(为什么叫面向抽象编程,面向接口编程?就是这个原理)
l 接口隔离原则(ISP):尽量提供可能小的单独接口,而不是提供大的总接口,使通信尽可能窄。(不用提供特别大的,分类)
l 合成复用原则(CARP),尽量使用合成,聚合关系达到复用,而不要用继承关系达到复用。
l 迪比特法则(LOD),一个软件实体应该尽可能少的与其它实体发生作用(一个类要调用好多类才能实现的话,这样如果有些类改变了会造成影响)
5. Dao(Data Access Object)数据访问对象,属于J2EE设计模式。属于GoF中策略模式的特例,用一个Dao接口隐藏了持久化操作的细节,这样使用这个模式的业务对象,无需了解底层的数据库持久化知识。区分“业务逻辑”和“持久化逻辑”通常是有好处的,业务逻辑通常关心的是应用程序的核心流程和业务规则,持久化逻辑关注的是如何访问和操作持久化数据。换句话说:把业务逻辑和规则放在一边,与持久化相关的问题放在另一边。
6. Properties文件的读取
Properties props = new Properties();
InputStream is = ItemManager.class.getResourceAsStream("factory-class-mapping.properties");
props.load(is);
String className = props.getProperty("item-dao-factory");
this.itemDaoFactory=(ItemDaoFactory)Class.forName(className).newInstance();
7. Tomcat解决get提交乱码问题,需要在TOMCAT_HOME/conf/server.xml文件中进行配置,加入URIEncoding=”GB18030”属性 如:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GB18030"/>
8. 实体类与普通类的区别:实体类的属性与数据表字段对应,实体类具有OID(对象标识),OID与数据库中的主键对应
User.java(实体类,实体类是比较简洁的,体现了现实中的属性,它的行为不要混在一起,类的职责明确很重要,这样便于管理,职责划分,划分的越细,重用程度就越高)
UserManager.java(管理类,体现了现实中的行为,我们通过管理类来管理,通常采用单例模式,因为它没有状态)
9. jsp页面字符集声明的含义
pageEncoding :表示jsp文件本身的编码
contextType:表示响应HTTP内容的类型,客户端最终见到的页面内容的编码
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
10. 管理类
通常一个模块就暴露一个类就可以了,所以把读取树的类放到manager类里让客户端访问,这也是一个门面模式,fasader模式。如果每个类都暴露,让客户端觉得复杂,来回调用好几个类才能完成某个功能。