一、概念题
1、解释什么是队列(queue),什么栈(stack),有何区别?
队列是一种特殊的线性表,他按照先进先出的原则存储数据。
栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
2、用C/C++或者Php,或Java,给出例子,解释什么是异常(exception)?
3、简述HashMap、HashSet、HashTable的区别。
Hashtable类
Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。
HashMap类
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key,null key只能有一个。
HashSet类
HashSet继承Set接口。
Set是一种不包含重复的元素的Collection。
4、public、protect和private的区别是什么?
二、数据库相关题
试设计一个商品相关数据库,要求包括商品类别、商品的基本信息,并完成下面的三个查询。
1、请写出创建相关表的SQL语句。
2. 使用标准SQL,得到2008年1月份入库的所有商品信息。
3. 使用标准SQL,得到“Toy”分类下的所有商品信息。
4. 使用标准SQL,统计出所有包含商品价格低于100.00的分类。
三、 程序填空题。
阅读下列说明、图以及Java程序,将应填入__(n)__处的字句写在答题纸的对应栏内。
1、[说明]
某订单管理系统的部分UML类图如图1-1所示
图4-1 订单管理系统的部分类图
图1-1中,Product表示产 品,ProductList表示所销售产品的列表,Order表示产品订单,0rderltem表示产品订单中的一个条目,OrderList表示订单列 表,SalesSystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如表1-1所示。
表1-1
类 |
成员 |
说明 |
ProductList |
ArrayList(Product) products |
|
Product String |
String code |
产品编号 |
description |
产品描述 |
|
double price |
产品单价 |
|
Boolean equals(Object object) |
若两个产品相同则返回true,否则返回false |
|
Orderltem |
Product product |
订单项中的产品 |
int quantity |
产品的订购数量 |
|
Product getProduct() |
获取订单项中的产品 |
|
Order |
ArrayList(Orderlten) items |
订单中包含的订单项 |
OrderList |
ArrayList(Order)orders |
订单 |
void addOrder(0rder order) |
向订单列表中添加新订单 |
|
int getNumberOfOrders() |
获取订单列表中的订单总数 |
|
SalesSystem |
ProductList catalog |
产品目录 |
OrderList sales |
订单列表 |
|
void statistic() |
依次统计产品目录中每个产品的订购总量,并打印 出每个产品的编号、说明、订购总量和订购金额 |
可以使用类java.util。ArrayList<E>来实现对象的聚集关系,如图4-1中OrderList与Order之间的聚集关系。for-each循环提供了一种遍历对象集合的简单方法。在for-each循环中,可以指定需要遍历的对象集合以及用来接收集合中每个元素的变量,其语法如下: for(用来接收集合中元素的变量:需要遍历的对象集合),如果要使用for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口java.util.Iterable<T>。Java程序1-1和Java程序1-2分别给出了类OrderList和方法statistic的Java代码。
[Java程序1-1]
import java.util.*;
public class OrderList __(1)__ {
private ArrayList<Order> orders;
public OrderListO {
this.orders = new ArrayList(Order) 0;
}
public void addOrder(Order order) {
this.orders, add (order);
}
public Iterator<Order> iteratorO {
return __(2)__;
}
public int getNunberOfOrders() {
return this.orders. size();
}
}
[Java程序1-2]
import java.util.*;
public class SalesSystem {
private ProductList catalog;
private OrderList sales;
private static PrintWriter stdOut = new PrintWriter(System.out,true);
public void statistic(){
for(Product product : __(3)__{
int number = 0;
for(Order order : __(4)__ {
for(__(5)__ : order){
if<product.equals(item.getProduct()))
numbe r += item.getQuantity();
}
}
stdOut.println(product.getCode() + ” ”
+ product.getDescription() + ” ”
+ number + ” ” + number *product.getPrice());
}
}
//其余的方法未列出
}
2、[说明]
传输门是传输系统中的重要装置。传输门具有 Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)、Closing(正在关闭)五种状态。触发状态的转换事件有 click、complete 和 timeout 三种。事件与其相应的状态转换如图 2-1 所示。
图 2-1 传输门响应事件与其状态转换图
下面的[Java 代码 1]与[Java 代码 2]分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。
[Java 代码 1]
public class Door {
public static final int CLOSED = 1;
public static final int OPENING = 2;
public static final int OPEN = 3;
public static final int CLOSING = 4;
public static final int STAYOPEN = 5;
private int state = CLOSED;//定义状态变量,用不同的整数表示不同状态
private void setState(int state){this.state = state;} //设置传输门当前状态
public void getState(){
// 此处代码省略,本方法输出状态字符串,
// 例如,当前状态为 CLOSED 时,输出字符串为”CLOSED”
}
public void click() { //发生 click 事件时进行状态转换
if ((1) ) setState(OPENING);
else if ( (2) ) setState(CLOSING);
else if ((3) ) setState(STAYOPEN);
//发生 timeout 事件时进行状态转换
public void timeout(){ if (state == OPEN) setState(CLOSING); }
public void complete(){ //发生 complete 事件时进行状态转换
if (state == OPENING) setState(OPEN);
else if (state == CLOSING) setState(CLOSED);
}
public static void main(String [] args){
Door aDoor = new Door();
aDoor.getState();
aDoor.click();
aDoor.getState();
aDoor.complete();
aDoor.getState();
aDoor.click();
aDoor.getState();
aDoor.click();
aDoor.getState();
return;
}
}
[Java 代码 2]
public class Door {
public final DoorState CLOSED = new DoorClosed(this);
public final DoorState OPENING = new DoorOpening(this);
public final DoorState OPEN = new DoorOpen(this);
public final DoorState CLOSING = new DoorClosing(this);
public final DoorState STAYOPEN = new DoorStayOpen(this);
private DoorState state = CLOSED;
//设置传输门当前状态
public void setState(DoorState state){ this.state = state;}
public void getState(){ //根据当前状态输出对应的状态字符串
System.out.println(state.getClass().getName());
}
public void click(){ (4) ;} //发生 click 事件时进行状态转换
public void timeout(){ (5) ;}//发生 timeout 事件时进行状态转换
public void complete(){ (6) ;}//发生 complete 事件时进行状态转换
public static void main(String[] args){
Door aDoor = new Door();
aDoor.getState();
aDoor.click();
aDoor.getState();
aDoor.complete();
aDoor.getState();
aDoor.timeout();
aDoor.getState();
return;
}
}
public abstract class DoorState { //定义所有状态类的基类
protected Door door ;
public DoorState(Door door) {this.door = door;}
public void click() {}
public void complete() {}
public void timeout() {}
}
class DoorClosed extends DoorState{ //定义一个基本的 Closed 状态
public DoorClosed(Door door) { super(door); }
public void click() { (7) ; }
//该类定义的其余代码省略
}
//其余代码省略