JAVA面试题集六

本文深入探讨Java中的关键概念,包括异常处理、集合框架、多线程、数据库连接池及JNDI等,同时介绍了Struts框架的应用及常用的设计模式。
1. RuntimeException与Exception的区别,并列举你所知道的RuntimeException类。
JVM在运行过程中抛出的异常都是RuntimeException类型或它的子类类型的。

如果在一个方法中可能会抛出RuntimeException异常,方法中可以不捕获,
方法声明中也可以不标识throws子句。下面三块代码都是合法的:

public class RuntimeExceptionTest {
  public static void main(String[] args) {
    int a = 4/0;
  }
}

public class RuntimeExceptionTest {
  public static void main(String[] args) {
    try{
        int a = 4 / 0;
    }catch(Exception e){e.printStackTrace();}
  }
}

public class RuntimeExceptionTest {
  public static void main(String[] args) throws RuntimeException{
    int a = 4 / 0;    
  }
}


常见RuntimeException:

ArithmeticException     算数异常
BufferOverflowException   缓存溢出异常
ClassCastException     类型不匹配异常
IllegalArgumentException 非法参数异常
IndexOutOfBoundsException 数组下标越界异常
NoSuchElementException   没有这个成员异常
NullPointerException       空指针异常


扩展:Error
Error是Throwable的子类,表示应用程序不需要捕获的严重的错误。一旦发生,程序立刻终止。
===================================================================================

2. ArrayList和Vector,HashMap,Hashtable哪些是线程安全的。HashMap和Hashtable哪个可以用
null作为key和value。

Vector, Hashtable是线程安全的。Hashtable允许用null作key和value。
===================================================================================

3.抽象类与接口的相同与不同的描述?

抽象类可以用作基类,其中定义的属性和方法可由其子类继承并使用,也就是代码重用;
接口主要的作用是把实现与使用相分离(参考下面的代码),
并且接口中的方法,各个子类可以给出不同的实现,也就是多态。
接口中的所有方法都是抽象方法,定义的变量都是常量;
抽象类中可以有抽象方法,也可以没有。
抽象类和接口都不能被实例化。

//接口中只能声明常量,和抽象方法(不用写abstract)
interface I{
  public static final int MAX =100;
  public int f (int m);
}

//实现接口I的类
class Imp implements I{
  public int f(int m){
    m += 10;
    return m;
  }
}

//使用接口的类
class Use {
  public int k ( I m , int n){
    int t = m.f(n);
    return t;
  }
}

public class InterfaceTest {
  public static void main(String[] args) {
    I x = new Imp();   //赋值兼容规则 , 接口是特殊的抽象基类
    Use y = new Use();
    int t = y.k(x,10);
    System.out.println(t);
  }
}
===================================================================================

4. 请把"ab","ef","cd","ij","gh"这5个字符串按给定的顺序加入到一个List对象,然后对该List对象进行快速排序,并打印结果。

public class ListTest {
  public static void main(String[] args) {
    String s1 = "ab";
    String s2 = "ef";
    String s3 = "cd";
    String s4 = "ij";
    String s5 = "gh";
    Vector v = new Vector();
    //把对象加入Vector
    v.add(s1);
    v.add(s2);    
    v.add(s3);
    v.add(s4);
    v.add(s5);
    //排序
    Collections.sort(v);
    //输出
    Iterator it = v.iterator();
    while (it.hasNext()){
        String t = (String)it.next();
        System.out.println(t);
    }
  }
}
==============================================================================

5.拷贝c:/temp.txt文件为c:/temp2.txt文件

import java.io.*;
public class FileCopyTest {
  public static void main(String[] args) {
    try{
        FileReader fr = new FileReader("c://temp.txt");
        BufferedReader br = new BufferedReader(fr);
        FileWriter fw = new FileWriter("c://temp2.txt");
        PrintWriter pw = new PrintWriter(fw,true);
        String line ;
        while ((line = br.readLine()) != null){
          pw.println(line);
        }
    }catch(Exception e) {e.printStackTrace();}    
  }
}
==============================================================================
6.JNDI的全称是什么,简单描述它的用途。
JNDI = Java Naming and Directory Interface
JNDI是J2EE提供的命名服务,命名服务用来确定网络中可以访问的对象,在一个命名服务中,
把一个名称和对象绑定在一起,并且可以通过给定的名称找到对应的对象。
命名服务在分布式应用程序中是不可缺少的,它不仅提供了方便,更主要的是提供了一层间接引用。
JNDI是接口,由J2EE服务器实现,应用程序使用。
==============================================================================

7.你是否使用过数据库连接池?请简要描述数据库连接池的工作原理。
连接池就是在内存中缓存一定数量的数据库连接,每次需要数据库操作的时候,从连接池中去取出连接,
使用完之后,放回连接池。这样,不用每次需要连接数据库的时候都建立物理连接。可以提高数据库访问
性能。
==============================================================================

8.JDBC中Statement和PreparedStatement有什么不同?简要说明PreparedStatement对性能的影响。
Statement对象代表一个静态SQL语句,只能执行一次.
PreparedStatement对象代表一个预编译的SQL语句,可以被多次执行,效率更高.
==============================================================================

9.请完成程序,查询table1表中field1字段的值是1的纪录,并将查询结果定位到查询结果中的
第三行并打印第三行的vcField的值,field1字段类型是number.
Connection con = ... ;
String sql = "select vcField from table1 where field1 = ?";


     Connection con = null;
    String sql = "select vcField from table1 where field1 = ?";
    PreparedStatement ps = con.prepareStatement(sql);
    ps.setInt(1,1);
    ResultSet rs = ps.executeQuery();
    rs.next();
    rs.next();
    rs.next();
    String vcField = rs.getString("vcField");
    System.out.println(vcField);          
==============================================================================

10.线程有哪两种实现方法?
继承Thread类
实现Runnable接口
==============================================================================

11.请用匿名类的方式实现一个线程,并打印"Running..."

public class AnonymousInnerClassTest {
  public static void main(String[] args) {
    (new Thread(){               //匿名类开始
        public void run(){
          System.out.println("Running...");
        }                         //匿名类结束      
    }).start();
  }
}

==============================================================================

12.synchronized(object){...}中object起什么作用?
object是监视器要监视的对象.当一个对象被监视器监视的时候,同一时刻只能有一个线程
访问它,其它要访问它的线程必须在等待队列中等待.
==============================================================================

13.JSP中<jsp:include/>和<%@ include%>有什么区别?

动态INCLUDE用<jsp:include/>动作实现
<jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,
适合用于包含动态页面,并且可以带参数 ;

静态INCLUDE用include伪码实现,不会检查所含文件的变化,适用于包含静态页面
<%@ include file="included.htm" %>
==============================================================================

14.MVC模式中这三个字母的含义是什么并加以说明.
M: Model   模型, 可以是JavaBean, EJB
V: View   视图, 可以是html,jsp
C: Control 控制器, 可以是Servlet
MVC模式的核心是控制器,它负责接受请求,调用模型中的业务逻辑,派发请求等.
==============================================================================

15.Struts中五个基本类是什么?哪个类属于MVC模式中的控制器?

ActionServlet         (控制器)
RequestProcessor
Action
     ForwardAction
     IncludeAction
     DispatchAction
     LookupDispatchAction
     SwitchAction
ActionForm
     DynaActionForm            
==============================================================================

16.Struts中继承Action后必须实现哪个方法,该方法返回类型是什么?
必须实现execute()方法, 返回类型是ActionForward.
==============================================================================

17.简要说明5种常用的J2EE设计模式.

Facade模式: 解耦分层,利于扩展变化
Factory模式:解耦了对象的创建过程和使用过程,使系统的可扩展性增强,稳定性增强
DTO模式:   将数据封装成普通的JavaBeans,在J2EE多个层次之间传输
MVC模式:   MVC模式是J2EE Web层的主要实现
Proxy模式: 代理模式可以强迫客户端对一个对象的方法调用间接通过代理类进行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值