zoukankan      html  css  js  c++  java
  • J2EE面试题集(附答案)


    创业需要的是勇气;投资需要的是资本;成功需要的是眼光
                                                          
    1、 概述struts,以及struts如何实现MVC架构的?
    答:struts framework是一种基于java的技术,Web应用程序开发人员通过struts framework即可充分利用面向对象设计、代码重用以及"编写一次、到处运行"的优点。Struts提供了一种创建Web应用程序的框架,其中对应用程序的显示、表示和数据的后端代码进行了抽象。Struts采用jsp作为MVC的视图,由ActionServlet具体指定的action动作类作为控制器即MVC中的C,负责视图与模型之间的交互。控制器的每个入口点都由名为struts-config.xml的配置文件设置。该文件把来自视图的请求映射为特定的JAVA类以进行相应的处理,控制器还指定下一个视图的位置。Struts中的模型主要指的就是javabean,它是模型的代表,主要封装数据和业务逻辑。
    Struts的处理流程:
    l 控制器进行初始化工作,读取配置文件,为不同的Struts模块初始化相应的ModulConfig对象。
    l 控制器接收Http请求,并从ActionConfig中找出对应于该请求的Action子类,如果没有对应的Action,控制器直接将请求转发给JSP或者静态页面,否则控制器将请求分发至具体的Action类进行处理。
    l 在控制器调用具体的Action的Execute方法之前,ActionForm对象将利用Http请求中的参数来填充自已。还可以在ActionForm类中调用Validate方法来检查请求参数的合法性,并且可以返回一个包含所有错误信息的ActionErrors对象。
    l 执行具体的的Execute的方法,它负责执行相应的业务逻辑。执行完后,返回一个ActionForward对象,控制器通过该ActionForward对象来进行转发工作。也可以把Action要处理的业务逻辑封装在JavaBean中,如果系统中还有EJB,那么通过JavaBean调用EJB以完成业务处理;如果没有EJB,那么就直接在JavaBean中连接数据库,进行数据库相关的操作。

    2、概述MVC体系结构。
    答:MVC包括三类对象,model是应用对象,view是视图,controller是控制器,它定义用户界面对用户输入的响应方式。
    在MVC体系中,模型通常被称为"业务逻辑",是真正完成任务的代码,视图就是使用界面,反映数据的变化。控制器控制着模型和视图之间的交互过程,它决定着向用户返回怎样的视图、检查通过界面输入的信息以及选择处理输入信息的模型
    在MVC中,表示层和逻辑层分离,各部分可相互独立进行开发,便于开发和维护,提高了开发效率。

    3、多线程的优点。
    答:可分两方面来答:
    1、 相对于单线程而言 :
    可以响应多任务的并发操作。
    多线程取消了主循环和轮流检测机制,一个线程可以暂停而不阻止系统其他的部分的执行,而且当程序中一个线程阻塞时,只有那个被阻塞的线程暂停,所有其他的线程继续执行。
    2、 相对于进程而言:(可以答也可以不答)
    它所要求的开销比较小,转换成本较小。
    所有线程共享同一地址空间,相互协作。
    彼此之间通信很容易。

    5、 用java访问Oracle数据库、取得记录并输出到界面

    [b]5、用java访问Oracle数据库、取得记录并输出到界面
    答:..........................
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection conn=DriverManager.getConnection( url , username , password );
    Statement stmt=conn.createStatement();
    String str="select * from [table]";
    ResultSet rs=stmt.executeQuery(str);
    While(rs.next())
    {
    ........................
    }
    rs.close();
    stmt.close();
    conn.close();

    7、 java类是否可以多继承,怎么实现多继承?
    答:java没有多继承,但可以通过接口的形式来达到多继承的目地。



    9、接口有什么优点
    答:接口有以下优点:
    l 接口只是一个框架而没有实现,因此在接口定义时不需要考虑接口中的方法如何实现。
    l 利用接口可达到实现多继承的目地。
    l 可以在不暴露对象的类的前提下,暴露对象的编程接口。
    l 不用强迫类关系在无关类中截获相似处(采用适配器就可以了)。
    l 声明想执行的一个或多个方法。

    10、 ArrayList 与 Vector 的区别
    答:主要从两个方面来说明:
    l 安全、效率方面
    如果要实现同步安全,则要用Vector,否则则用ArrayList,因为ArrayList不考虑同步安全的问题,所以效率要高些。
    l 资源方面
    当两者的容量已满时,它们都会自动增长其容量,但Vector是按其容量的一倍增长,而ArrayList则按其容量的50%增加,所以Vector更能节省资源。


    1。请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别。线程安全与否

    // thread-safe or unsafe, could contain null values or not

    2。请问你在什么情况下会在你的JAVA代码中使用可序列化?(5)cluster中session复制,缓存persist与reload
    为什么放到HttpSession中的对象必须要是可序列化的?(5)没必须,不过session反序列化过程会导致对象不可用.
    // save, communicate

    3。为什么在重写了equals()方法之后也必须重写hashCode()方法?(10)API规范

    // implementations of dictionaries need hashCode() and equals()

    4。sleep()和wait()有什么区别?(10)前者占用CPU,后者空闲CPU
    // threads communication: wait() and notifyAll()

    5。编程题:用最有效率的方法算出2乘以17等于多少?

    // 2<<4+2

    6。JAVA是不是没有内存泄漏问题?看下面的代码片段,并指出这些代码隐藏的问题。
    ...
    Object[] elements = new Object[10];
    int size;
    ...
    public Object pop() {
    if (size == 0)
    return null;
    Object o = elements[--size];
    return o;
    }

    // elements[size] = null;

    7。请阐述一下你对JAVA多线程中“锁”的概念的理解。10)同步因子,在某段代码上增加同步因子,那么整个JVM内部只能最多有一个线程执行这段,其余的线程按FIFO方式等待执行.



    // optimistic lock, pessimistic lock, signal, dead lock, starvation, synchronization

    8。所有的递归实现都可以用循环的方式实现,请描述一下这两种实现方式各自的优劣。
    并举例说明在什么情况下可以使用递归,而在什么情况下只能使用循环而不能使用递归?(5)(5)没发现所有的递归都可以用循环实现的,尤其是那种不知道循环重数的递归算法.递归的优点是简炼,抽象性好;循环则更直观.递归一般用于处理一级事务能转化成更简的二级事务的操作.归纳不出二级事务或者二级事务更复杂的情况不能用.



    // recursive: when you need a stack and stack memory is enough
    // non-recursive: when you need a queue

    9。请简要讲一下你对测试驱动开发(TDD)的认识。(10)

    // write unit testing code first

    10。请阐述一下你对“面向接口编程”的理解。(10)1,利于扩展;2,暴露更少的方法;

    // adapter, listener, bridge, decorator, proxy... patterns

    11。在J2EE中有一个“容器(Container)”的概念,不管是EJB、PICO还是Spring都有他们
    各自实现的容器,受容器管理的组件会具有有生命周期的特性,请问,为什么需要容器?
    它的好处在哪里?它会带来什么样的问题?(15)组件化,框架设计...


    // encapsulation

    12。请阐述一下你对IOC(Inversion of Control)的理解。(可以以PICO和Spring的IOC作为例子说明他们在实现上各自的特点)(10)

    // reduce classes' dependencies



    13。下面的代码在绝大部分时间内都运行得很正常,请问在什么情况下会出现问题?问题的根源在哪里?(10)wait和notify使用目的不能达到,wait()的obj,自身不能notify().出题人对wait和notify机制不够理解.
    import java.util.LinkedList;

    public class Stack {

    LinkedList list = new LinkedList();

    public synchronized void push(Object x) {
    synchronized(list) {
    list.addLast( x );
    notify();
    }
    }

    public synchronized Object pop()
    throws Exception {
    synchronized(list) {
    if( list.size() <= 0 ) {
    wait();
    }
    return list.removeLast();
    }
    }
    }

    // dead lock, synchronized on both 'list' and 'this'


     






    J2EE面试题集锦(附答案)
    一、基础问答
      1.下面哪些类可以被继承?
       java.lang.Thread (T)
       java.lang.Number (T)
       java.lang.Double (F)
       java.lang.Math  (F)
       java.lang.Void  (F)
             java.lang.Class  (F)
       java.lang.ClassLoader (T)

      2.抽象类和接口的区别

      (1)接口可以被多重implements,抽象类只能被单一extends
      (2)接口只有定义,抽象类可以有定义和实现

      (3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)

      3.Hashtable的原理,并说出HashMap与Hashtable的区别

      HashTable的原理:通过节点的关键码确定节点的存储位置,即给定节点的关键码k,通过一定的函数关系H(散列函数),得到函数值H(k),将此值解释为该节点的存储地址.
    HashMap 与Hashtable很相似,但HashMap 是非同步(unsynchronizded)和可以以null为关键码的.

      4.forward和redirect的区别

      forward: an internal transfer in servlet
      redirect: 重定向,有2次request,第2次request将丢失第一次的attributs/parameters等

      5.什么是Web容器?

      实现J2EE规范中web协议的应用.该协议定义了web程序的运行时环境,包括:并发性,安全性,生命周期管理等等.

      6.解释下面关于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,远程方法调用


      8.XML的解析方法

      Sax,DOM,JDOM

      9.什么是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。

      10.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

      答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
      同步的实现方面有两种,分别是synchronized,wait与notify

     

    二、Java编程与程序运行结果


      2.文件读写,实现一个计数器

      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();
            }
        }
      3. 指出下面程序的运行结果:

    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 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造

      4.写一个Singleton模式的例子

    public class Singleton{
    private static Singleton single = new Singleton();
    private Singleton(){}
    public Singleton getInstance(){
      return single;
    }
    }
    三、数据库

      1.删除表的重复记录

      如果记录完全相同才算重复记录,那么:  (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)
      2.delete from tablea & truncate table tablea的区别

      truncate 语句执行速度快,占资源少,并且只记录页删除的日志;
      delete 对每条记录的删除均需要记录日志


    JAVA编程题
    1.



    欢迎加入更多J2EE面试题……

    更多相关面试题请参阅这里:
    一道有趣的C#考试题目

    J2EE面试题集(附答案)  J2EE认证试题集


    11.
    interface Playable {
        void play();
    }
    interface Bounceable {
        void play();
    }
    interface Rollable extends Playable, Bounceable {
        Ball ball = new Ball("PingPang");
    }
    class Ball implements Rollable {
        private String name;
        public String getName() {
            return name;
        }
        public Ball(String name) {
            this.name = name;        
        }
       public void play() {
            ball = new Ball("Football");
            System.out.println(ball.getName());
        }
    }
    这个错误不容易发现。
    答案: 错。"interface Rollable extends Playable,
    Bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的"Ball
    ball = new Ball("PingPang");"。任何在interface里声明的interface variable
    (接口变量,也可称成员变量),默认为public static final。也就是说"Ball ball = new
    Ball("PingPang");"实际上是"public static final Ball ball = new
    Ball("PingPang");"。在Ball类的Play()方法中,"ball = new
    Ball("Football");"改变了ball的reference,而这里的ball来自Rollable interface,Rollable
    interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在"ball =
    new Ball("Football");"这里显示有错。
    网魂工作室 [2006-04-04 10:14 AM]
    8.
    public class Something {
         public static void main(String[] args) {
            Something s = new Something();
            System.out.println("s.doSomething() returns " + doSomething());
        }
        public String doSomething() {
            return "Do something ...";
        }
    }
    看上去很完美。
    答案: 错。看上去在main里call
    doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call
    non-static methods。可改成"System.out.println("s.doSomething() returns " +
    s.doSomething());"。同理,static method不能访问non-static instant variable。
    9.
    此处,Something类的文件名叫OtherThing.java
    class Something {
        private static void main(String[] something_to_do) {        
            System.out.println("Do something ...");
        }
    }
    这个好像很明显。
    答案: 正确。从来没有人说过Java的Class名字必须和其文件名相同。但public class的名字必须和文件名相同。
    10.
    interface  A{
       int x = 0;
    }
    class B{
       int x =1;
    }
    class C extends B implements A {
       public void pX(){
          System.out.println(x);
       }
       public static void main(String[] args) {
          new C().pX();
       }
    }
    答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import
    java.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public
    static final.所以可以通过A.x来明确。



    6.
    class Something {
        int i;
        public void doSomething() {
            System.out.println("i = " + i);
        }
    }
    有什么错呢? 看不出来啊。
    答案: 正确。输出的是"i = 0"。int i属於instant variable (实例变量,或叫成员变量)。instant
    variable有default value。int的default value是0。
    7.
    class Something {
        final int i;
        public void doSomething() {
            System.out.println("i = " + i);
        }
    }
    和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?
    答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant
    variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为"final int i =
    0;"。


  • 相关阅读:
    Servlet Class4
    Servlet Class3
    Servlet Class2
    Servlet Class1
    HTTP基础知识
    XML基础知识
    JAVA Class25
    JAVA Class24
    JAVA Class23
    JAVA Class22
  • 原文地址:https://www.cnblogs.com/ComputerVip/p/13915680.html
Copyright © 2011-2022 走看看