一、选择题(每题2分)
1.下列哪些情况可以终止当前线程的运行?
a. 抛出一个例外时。
b. 当该线程调用sleep()方法时。
c. 当创建一个新线程时。
d. 当一个优先级高的线程进入就绪状态时。
答案:ABD
2. 下面哪些为构造函数的特性定义
a. 在类中声明构造函数时,名称应该与类名相同
b. 具有重载特性,可以建立多个相同的名称
c. 使用类建立新对象时,会自动执行构造函数,因此在构造函数内设定变量的初值或进行内存分配
d. 以上都是
答案:ABCD
3. 关于异常处理机制的叙述哪些正确
a. catch部分捕捉到异常情况时,才会执行finally部分
b. 当try区段的程序发生异常时,才会执行catch区段的程序
c. 不论程序是否发生错误及捕捉到异常情况,都会执行finally部分
d. 以上都是
答案:BC
4. 下列关于接口的叙述中哪些是错误的
a. 接口中的数据必须设定初值
b. 接口中无法声明一般方法
c. 接口可以声明引用
d. 以上都正确
答案:BC
5. Java语言中,方法的重写(Overriding)和重载(Overloading)是多态性的不同表现。下边哪些说法是对的?
A. 重写是父类与子类之间多态性的一种表现。
B. 重写是一个类中多态性的一种表现。
C. 重载是一个类中多态性的一种表现。
D. 重载是父类与子类之间多态性的一种表现。
6.在Struts应用的视图中包含哪些组件?
A. JSP
B. Servlet
C. ActionServlet
D. Action
E. 代表业务逻辑或业务数据的JavaBean
F. EJB
G. 客户化标签
答案:A,G
7. struts框架中,关于FormBean,下列哪些说法是正确的:
A FormBean是一种数据bean,主要用来封装表单提交上来的数据,并把这些数据传递给Action
B 在FormBean中可以对页面上传递来的参数进行一下格式上的验证,这种验证是一种客户端的验证
C 用户每次提交表单,都会产生一个新的FormBean实例
D 动态FormBean不能进行验证操作
答案:A
8.以下哪些不是Hibernate的检索方式:
A、导航对象图检索
B、OID检索
C、ORM检索
D、QBC检索
E、本地SQL检索
F、HQL检索
答案:C
9.以下代码定义了一个变量,如何输出这个变量的值?
<bean:define id="stringBean" value=“helloWorld“/>
(A)<bean:write name=“stringBean"/>
(B) <bean:write name=“helloWorld"/>
(C)<%= stringBean%>
(D)<% String myBean=(String)pageContext.getAttribute(“stringBean”,PageContext.PAGE_SCOPE);
%>
<%=myBean%>
答案: A,D
10.EJB有哪些对象?
- Remote(Local)接口
- Home(LocalHome)接口
- Bean类
- Enterprise Bean Provider
答案:A B C
11方法可以进行servlet的调试?(A B C D E)
A、使用打印语句; 在桌面计算机上运行服务器
B、使用Apache Log4J
C、使用IDE集成的调试器
D、直接查看HTML源码
E、返回错误页面给客户
12、下面关于servlet的功用说法正确的有哪些?(A B C D E)
A、读取客户程序发送来的显式数据
B、读取客户程序发送来的隐式数据
C、生成相应的结果
D、发送显式的数据给客户程序
E、发送隐式的数据给客户程序
13、下面关于session的用法哪些是错误的?(A B D)
A、HttpSession session = new HttpSession();
B、String haha = session.getParameter(“haha”);
C、session.removeAttribute(“haha”);
D、session. setAttribute(“haha”);
14、关于<jsp:include page="Relative URL" />说法正确的有哪些?(A B C)
A、URL的输出在请求时被插入到JSP页面中
B、不能含有影响整个页面的JSP内容
C、被包含文件改变后不需更改使用它的页面
D、被包含文件更改后,需要手动地更新使用它的页面
15、关于bean的说法正确的有哪些?(B D)
A、具备一个零参数(空)的构造函数(不是必须的)
B、不应该有公开的实例变量(字段)
C、所有的属性都必须通过getXxx和setXxx方法来访问
D、布尔型的属性使用isXxx,而非getXxx
16、下面关于MVC说法错误的有哪些?(A C)
A、必须使用复杂的框架
B、使用内建的RequestDispatcher能够很好地实现MVC
C、MVC影响整个系统的设计
D、我们可以用MVC来处理单个请求
17、下面的标签中哪些是JSTL标签?(A B C)
A、<c:out…/>
B、<c:set…/>
C、<c:if…/>
D、<c:errors…/>
18、使用Junit测试equals()必须根据哪些属性来进行?(A B C)
A、反身性
B、对称性
C、传递性
D、一致性
19、以下哪些说法是正确的?C
(A)每个HTTP请求对应一个单独的ActionServlet实例
(B)对于每个请求访问HelloAction的HTTP请求,Struts框架会创建一个单独的HelloAction实例。
(C)每个子应用对应一个单独的RequestProcessor实例
(D)每个子应用对应一个单独的web.xml文件
20、ActionForm Bean对象是由谁创建的?C
(A) <html:form>标签处理类
(B) ActionServlet
(C) RequestProcessor
(D) Action
21、struts框架,错误的是,面那些说法正确?
A Struts中无法完成上传功能
B Struts框架基于MVC模式
C Struts框架容易引起流程复杂、结构不清晰等问题
D Struts可以有效地降低项目的类文件数目
答案:C
四、编程题(1、2题各15分,3题20分)
1、利用异常处理机制的方法来制作一个代码程序段。输入“I am 007”时,打印“亲爱的007,您好”;输入其他字符串时,打印“对不起,请下次进入”,然后程序结束
import java.io.*;
public class KB
{
public static String scan()
{
String str="";
try
{
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
str=buf.readLine();
}
catch(Exception e){}
return str;
}
}
public class MyExceptionTest {
public static void exceptionThrow() throws MyException1 {
throw new MyException1();
}
public static void anotherThrow() throws MyException2 {
throw new MyException2();
}
public static void main(String args[]) {
try {
String str=KB.scan();
if(str.equals("I am 007"))
exceptionThrow();
else
anotherThrow();
} catch (MyException1 e1) {
e1.printStackTrace();
} catch (MyException2 e2) {
e2.printStackTrace();
}
}
}
class MyException1 extends Exception {
MyException1() {
super("亲爱的007,您好");
}
}
class MyException2 extends Exception {
MyException2() {
super("对不起,请下次进入");
}
}
2、使用同步函数实现卖100张票。要求写两个类(主函数类:MainTest,线程类:ThreadTest),线程类实现Runnable接口。
public class MainTest {
public static void main(String args[])
{
Thread t=new Thread(new ThreadTest());
t.start();
}
}
class ThreadTest implements Runnable{
private int tickets = 100;
public void run() {
while(true)
{
sale();
}
}
public synchronized void sale()
{
if(tickets>0)
{
try{
Thread.sleep(10);
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" is saling ticket "+tickets--);
}
}
}
3、请完成一个选课系统里注册模块的程序设计:
条件:
学生的持久化类的属性有:id,username,password,sex,major,class,
课程的持久化类的属性有:id,coursename,classroom,coursetime,
JSP页面为:reg.jsp,regok.jsp,regbad.jsp;
完成学生与课程的持久化类的映射文件,设置成级连保存,延迟检索;
写出与注册页面相对应的的Action和ActionForm;要求ActionForm要对表单中的数据格式进行验证;Action要对学生的用户名进行唯一验证;如果没有重复的用户名就可以注册成功,否则失败;
写出检测用户名是否存在的方法;
根据session接口写出相应的方法;
Course.hbm.xml
<hibernate-mapping>
<class name="com.hibernate.Course" table="COURSES">
<id name="id" type="integer">
<column name="ID" />
<generator class="increment" />
</id>
<property name="coursename" type="string">
<column name="COURSENAME" length="45" not-null="true" />
</property>
<property name="coursetime" type="string">
<column name="COURSETIME" length="45" not-null="true" />
</property>
<property name="classroom" type="string">
<column name="CLASSROOM" length="45" not-null="true" />
</property>
<set name="stu_cou" cascade="save-update" lazy="true" inverse="true">
<key>
<column name="COU_ID" not-null="true" />
</key>
<one-to-many class="com.hibernate.StudentCourse" />
</set>
</class>
</hibernate-mapping>
Student.hbm.xml
<hibernate-mapping>
<class name="com.hibernate.Student" table="STUDENTS">
<id name="id" type="integer">
<column name="ID" />
<generator class="increment" />
</id>
<property name="username" type="string">
<column name="username" length="45" not-null="true" />
</property>
<property name="password" type="string">
<column name="password" length="45" not-null="true" />
</property>
<property name="sex" type="string">
<column name="SEX" length="45" not-null="true" />
</property>
<property name="stuclass" type="string">
<column name="STUCLASS" not-null="true" />
</property>
<property name="major" type="string">
<column name="major" length="45" not-null="true" />
</property>
<set name="stu_cou" cascade="save-update" lazy="true" inverse="true">
<key>
<column name="STU_ID" not-null="true" />
</key>
<one-to-many class="com.hibernate.StudentCourse" />
</set>
</class>
</hibernate-mapping>
StudentCourse.hbm.xml
<hibernate-mapping>
<class name="com.hibernate.StudentCourse" table="student_course">
<id name="id" type="integer">
<column name="ID" />
<generator class="increment" />
</id>
<many-to-one name="course" class="com.hibernate.Course">
<column name="COU_ID" not-null="true" />
</many-to-one>
<many-to-one name="student" class="com.hibernate.Student">
<column name="STU_ID" not-null="true" />
</many-to-one>
</class>
</hibernate-mapping>
struts-config.xml
<struts-config>
<data-sources />
<form-beans>
<form-bean name="RegFormBean"
type="com.formbean.RegFormBean"/>
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action path="/actions/reg"
type="com.action.RegAction"
name="RegFormBean"
input="/reg.jsp">
<forward name="bad"
path="/regbad.jsp" />
<forward name="success"
path="/regok.jsp" />
</action>
</action-mappings>
<message-resources parameter="MessageResource"
null="false"/>
</struts-config>
4.Java编程,打印昨天的当前时刻
public class YesterdayCurrent{
public void main(String[] args){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println(cal.getTime());
}
}
5.文件读写,实现一个计数器
public int getNum(){
int i = -1;
try{
String stri="";
BufferedReader in = new BufferedReader(new FileReader(f));
while((stri=in.readLine())!=null){
i = Integer.parseInt(stri.trim());
}
in.close();
}catch(Exception e){
e.printStackTrace();
}
return i;
}
public void setNum(){
int i = getNum();
i++;
try{
PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false)));
out.write(String.valueOf(i)); //可能是编码的原因,如果直接写入int的话,将出现java编码和windows编码的混乱,因此此处写入的是String
out.close() ;
}catch(Exception e){
e.printStackTrace();
}
}
6. 指出下面程序的运行结果:
class A{
static{
System.out.print("1");
}
public A(){
System.out.print("2");
}
}
class B extends A{
static{
System.out.print("a");
}
public B(){
System.out.print("b");
}
}
public class Hello{
public static void main(String[] ars){
A ab = new B(); //执行到此处,结果: 1a2b
ab = new B(); //执行到此处,结果: 1a2bab
}
}
注:类的static 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造
7.写一个Singleton模式的例子
public class Singleton{
private static Singleton single = new Singleton();
private Singleton(){}
public Singleton getInstance(){
return single;
}
}
8 删除表的重复记录
如果记录完全相同才算重复记录,那么: (sql server2000下测试通过)
select distinct * into #tmpp from tid
delete from tid
insert into tid select * from #tmpp
drop table #tmpp
如果有id主键(数字,自增1的那种),那么:(sql server2000下测试通过)
delete from tableA where id not in
(select id = min(id) from tableA group by name)