UML 及其他

1.名词解释
答:  JDO  是Java对象持久化的新的规范,为Java Data 0bject的简称,也是一个用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运行。JDBC只是面向关系数据库(RDBMS) ,  JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。 JDO ( Java Data Object ) 是 SUN 为了在传统数据存储上存取 Java 对象而建立的一个标准。 使用 JDO,Java 开发人员开发程序时使用面向对象的观点来处理数据存储, 而不用花时间去学习和考虑不同数据库的细节。
JNDI: (Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
答:JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
POJO: Plain Old Java Object
IOC: 依赖注入
答:IOC-全称Inversion of Control,中文解释:控制反转。另外,IOC又称DI(全称)Dependency Injection,中文解释:依赖注入。
ORM:答:ORM对象-关系映射(Object-Relation Mapping)模式是指在单个组件中负责所有实体域对象的持久化,封装数据访问细节
JDBC: (Java Database Connectivity) 是用于执行SQL 语句的Java 应用程序接口,由一组用Java 语言编写的类和接口组成。JDBC 是一种规范,他让各数据库厂商为Java 程序员提供标准的数据库访问类和接口,这样就使得独立于DBMS 的Java 应用程序的开发工具和产品成为可能
2、j2ee常用的设计模式?说明工厂模式。
    Java中的23种设计模式:
Factory(工厂模式),      Builder(建造模式),       Factory Method(工厂方法模式),
Prototype(原始模型模式),Singleton(单例模式),    Facade(门面模式),
Adapter(适配器模式),    Bridge(桥梁模式),        Composite(合成模式),
Decorator(装饰模式),    Flyweight(享元模式),     Proxy(代理模式),
Command(命令模式),      Interpreter(解释器模式), Visitor(访问者模式),
Iterator(迭代子模式),   Mediator(调停者模式),    Memento(备忘录模式),
Observer(观察者模式),   State(状态模式),         Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
3、如果说有两个类 一个Student,一个Message如何在配置文件中写二者一对一的关系并设置及联关系(在删除学生的同时与之对应的信息也删掉)?(写出一种即可)应用UML画出Student和Message的类图和关系。

•动态代理
在JDK1.3之后加入了可协助开发动态代理功能的API,您不必为特定对象与方法编写特定的代理对象,使用动态代理,可以使得一个处理者(Handler)服务于各个对象。首先,一个处理者的类设计必须实现java.lang.reflect.InvocationHandler接口,以实例来进行说明,例如

主要的概念是使用Proxy .newProxyInstance ()静态方法建立一个代理对象,建立代理对象时必须告知所要代理的接口,之后您可以操作所建立的代理对象,在每次操作时会执行InvocationHandler的invoke()方法,invoke ()方法会传入被代理对象的方法名称与执行参数,实际上要执行的方法交由method.invoke(),您在method.invoke()前后加上记录动作,method.invoke ()传回的对象是实际方法执行过后的回传结果。要实现动态代理,同样必须定义所要代理的接口,例如:

•一个 Bean 从建立到销毁,如果是使用 BeanFactory来生成、管理 Bean 的话,会历经几个执行阶段。.–Bean 的建立•由 BeanFactory 读取 Bean 定义文件,并生成各个 Bean 实例。–属性注入•执行相关的 Bean 属性依赖注入。
–BeanNameAware 的setBeanName ( )
•如果 Bean 类有实现 org . springframework . beans . Factory. BeanNameAware 接口,则执行它的setBeanName ()方法。
–BeanFactoryAware 的 setBeanFactory()
•如果 Bean 类有实现 org .springgframework . beans . factory . BeanFactoryAware 接口,则执行它的SetBeanFactory ( )方法。–BeanPostProcessors 的 processBeforelnitialization ( )
–initializingBean 的 afterPropertiesSet ( )
•如果 Bean 类己实现 org.springframework . beans.factory.InitializingBean 接口,则执行它的 afterPropertiesSet ( )方法。
–Bean 定义文件中定义init-method
•可以在 Bean 定义文件使用” init-method“属性设定方法名称:
–BeanPostProcessors 的 processaAfterlriitialization ( )
•如果有任何的 BeanPostProcessors实例与 Bean 实例关联,则执行 PostProcessors 实例的 processaAfterlnitialization()方法。
–DisposableBean的destroy ( )
•在容器关闭时,DisposableBean 如果 Bean 类有实现 org. springframework.beans.factory接口,则执行它的 destroy ( ) 方法。
–Bean 定义文件中定义 destroy-method
•在容器关闭时,可以在 Bean 定义文件中使用” destroy-method”属性设定方法名称.
4.什么是UML,包括哪些?
标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。

5..解释下面关于J2EE的名词
(1)JNDI:Java Naming & Directory Interface,JAVA命名目录服务.主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能.
  (2)JMS:Java Message Service,JAVA消息服务.主要实现各个应用程序之间的通讯.包括点对点和广播.
  (3)JTA:Java Transaction API,JAVA事务服务.提供各种分布式事务服务.应用程序只需调用其提供的接口即可.
  (4)JAF: Java Action FrameWork,JAVA安全认证框架.提供一些安全控制方面的框架.让开发者通过各种部署和自定义实现自己的个性安全控制策略.
  (5)RMI:Remote Method Interface,远程方法调用
EJB:Enterprise  JavaBeans  企业JavaBean组件 
IDL:Interface  Definition  Language  接口定义语言 
JTS:Java  Transaction  Service  Java事务服务 
Object  Serialization:对象序列化 
JavaMail:Java邮件服务 
JDBC:数据库访问API 
JSP:Java  Server  Pages 
Servlet: 
Session  Bean(会话BEAN) 
Entity  Bean(实体BEAN) 
Message  Driver  Bean(消息驱动BEAN) 
Session  Bean分为两种: 
Stateless  Session  Bean(无状态会话Bean) 
Statefull  Session  Bean(有状态会话Bean) 
Entity  Bean分为两种: 
CMP:Container  Manager  Persistence(容器管理持久性)
BMP:Bean  Manager  Persistence(Bean管理持久性) 
其他缩写名词: 
DTO:Data  Transport  Object  数据传输对象 
JDO:Java  Data  Object 
DAO:Database  Access  Object  数据库访问对象 
POJO:Proterozoic  Java  Object  Java原生对象 
VO:Value  Object  值对象 
SOAP:Simple  Object  Access  Protocol  简单对象访问协议
6.什么是Web容器?
  实现J2EE规范中web协议的应用.该协议定义了web程序的运行时环境,包括:并发性,安全性,生命周期管理等等.
7.什么是Web Service?
  Web Service就是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。
  Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows,Linux)中使用。
  注:SOAP协议(Simple Object Access Protocal,简单对象访问协议),它是一个用于分散和分布式环境下网络信息交换的基于XML的通讯协议。在此协议下,软件组件或应用程序能够通过标准的HTTP协议进行通讯。它的设计目标就是简单性和扩展性,这有助于大量异构程序和平台之间的互操作性,从而使存在的应用程序能够被广泛的用户访问。
  优势:
  (1).跨平台。
  (2).SOAP协议是基于XML和HTTP这些业界的标准的,得到了所有的重要公司的支持。
  (3).由于使用了SOAP,数据是以ASCII文本的方式而非二进制传输,调试很方便;并且由于这样,它的数据容易通过防火墙,不需要防火墙为了程序而单独开一个“漏洞”。
  (4).此外,WebService实现的技术难度要比CORBA和DCOM小得多。
  (5).要实现B2B集成,EDI比较完善与比较复杂;而用WebService则可以低成本的实现,小公司也可以用上。
  (6).在C/S的程序中,WebService可以实现网页无整体刷新的与服务器打交道并取数。
  缺点:
  (1).WebService使用了XML对数据封装,会造成大量的数据要在网络中传输。
  (2).WebService规范没有规定任何与实现相关的细节,包括对象模型、编程语言,这一点,它不如CORBA。
                           选择题,编程题集锦
一、选择题(每题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有哪些对象?
A. Remote(Local)接口
B. Home(LocalHome)接口
C. Bean类
D. 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)

你可能感兴趣的:(设计模式,bean,struts,C#,UML)