Java笔试题【7】

来源:互联网 发布:java中scanner用法 编辑:程序博客网 时间:2024/06/05 06:36

一、基础问答

    不能被继承的类有[Long  Double Float  Short  Void Class  Math  String]

    他们都被final修饰

        类可以被继承[Thread   ClassLoader  Number Calendar

]

  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 staticfinal, 抽象类字段默认是"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,远程方法调用

 

  7.EJB是基于哪些技术实现的?并说 出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别.

 

  EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现.

 

  SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件.EntityBean被用来代表应用系统中用到的数据.对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑;EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体.

 

  Session Bean 还可以再细分为 StatefulSession Bean 与 Stateless Session Bean .这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体.Stateless SessionBean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 StatelessSession Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method.换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行.从内存方面来看, Stateful Session Bean 与 Stateless SessionBean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态.

 

  8.XML的解析方法

 

  Sax,DOM,JDOM

 

  9.什么是Web Service?

 

  Web Service就是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。

Web Service所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等,所以Web Service可以在任何支持这些标准的环境(Windows,Linux)中使用。

 

  注:SOAP协议(Simple Object AccessProtocal,简单对象访问协议),它是一个用于分散和分布式环境下网络信息交换的基于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

 

  11.JSP中动态INCLUDE与静态INCLUDE的区别?

 

  动态INCLUDE用jsp:include动作实现

 

 

 

  它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数

 

  静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面

 

  

 

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

 

  1.Java编程,打印昨天的当前时刻

 

public class YesterdayCurrent{

  public voidmain(String[] args){

    Calendar cal= Calendar.getInstance();

   cal.add(Calendar.DATE, -1);

   System.out.println(cal.getTime());

  }

}

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

 

  public intgetNum(){

        int i =-1;

        try{

            Stringstri="";

           BufferedReader in = new BufferedReader(new FileReader(f));

           while((stri=in.readLine())!=null){

               i = Integer.parseInt(stri.trim());

            }

           in.close();

       }catch(Exception e){

            e.printStackTrace();

        }

        returni;

    }

 

 

更多相关面试题请参阅这里:

.Net面试题集(最全最新)

一道有趣的C#考试题目

某公司招收.net高级程序员的试卷

Google:21道能力倾向测试面试题

GOOGLE面试题

Google的面试题,你能做出多少?

据说是阿尔卡特(中国)的面试题目(C)

成为编程高手的基础素养

微软面试题——微软的智力题——三个灯泡

Java面试题汇总及c/c++面试题(最新最全)

J2EE面试题集(附答案)

Java面试题集(欢迎大家踊跃提供)

更多相关面试试题请点击左侧的相关内容主题……

 

    public voidsetNum(){

        int i =getNum();

       i++;       

        try{

           PrintWriter out=new PrintWriter(new BufferedWriter(newFileWriter(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{

    publicstatic 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.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset

[hidden]import java.util.*;

public class bycomma{

public static String[] splitStringByComma(Stringsource){

  if(source==null||source.trim().equals(""))

    return null;

  StringTokenizer commaToker = new StringTokenizer(source,",");

   String[]result = new String[commaToker.countTokens()];

   int i=0;

  while(commaToker.hasMoreTokens()){

    result[i] =commaToker.nextToken();

    i++;

   }

   returnresult;

}

public static void main(String args[]){

String[] s =splitStringByComma("5,8,7,4,3,9,1");

int[] ii = new int[s.length];

for(int i = 0;i ii[i] =Integer.parseInt(s[i]);

}

   Arrays.sort(ii);

    //asc

    for(inti=0;i    System.out.println(ii[i]);

    }

    //desc

    for(inti=(s.length-1);i>=0;i--){

   System.out.println(ii[i]);

    }

}

}[/hidden]

2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。

[hidden]package test.format;

import java.text.NumberFormat;

import java.util.HashMap;

public class SimpleMoneyFormat {

  public staticfinal String EMPTY = "";

  public staticfinal String ZERO = "零";

  public staticfinal String ONE = "壹";

  public staticfinal String TWO = "贰";

  public staticfinal String THREE = "叁";

  public staticfinal String FOUR = "肆";

  public staticfinal String FIVE = "伍";

  public staticfinal String SIX = "陆";

  public staticfinal String SEVEN = "柒";

  public staticfinal String EIGHT = "捌";

  public staticfinal String NINE = "玖";

  public staticfinal String TEN = "拾";

  public staticfinal String HUNDRED = "佰";

  public staticfinal String THOUSAND = "仟";

  public staticfinal String TEN_THOUSAND = "万";

  public staticfinal String HUNDRED_MILLION = "亿";

  public staticfinal String YUAN = "元";

  public staticfinal String JIAO = "角";

  public staticfinal String FEN = "分";

  public staticfinal String DOT = ".";

 

  private staticSimpleMoneyFormat formatter = null;

  privateHashMap chineseNumberMap = new HashMap();

  privateHashMap chineseMoneyPattern = new HashMap();

  privateNumberFormat numberFormat = NumberFormat.getInstance();

 

  privateSimpleMoneyFormat() {

    numberFormat.setMaximumFractionDigits(4);

   numberFormat.setMinimumFractionDigits(2);

   numberFormat.setGroupingUsed(false);

 

   chineseNumberMap.put("0", ZERO);

   chineseNumberMap.put("1", ONE);

   chineseNumberMap.put("2", TWO);

   chineseNumberMap.put("3", THREE);

   chineseNumberMap.put("4", FOUR);

   chineseNumberMap.put("5", FIVE);

   chineseNumberMap.put("6", SIX);

   chineseNumberMap.put("7", SEVEN);

   chineseNumberMap.put("8", EIGHT);

   chineseNumberMap.put("9", NINE);

   chineseNumberMap.put(DOT, DOT);

 

   chineseMoneyPattern.put("1", TEN);

   chineseMoneyPattern.put("2", HUNDRED);

   chineseMoneyPattern.put("3", THOUSAND);

   chineseMoneyPattern.put("4", TEN_THOUSAND);

   chineseMoneyPattern.put("5", TEN);

   chineseMoneyPattern.put("6", HUNDRED);

   chineseMoneyPattern.put("7", THOUSAND);

   chineseMoneyPattern.put("8", HUNDRED_MILLION);

  }

 

  public staticSimpleMoneyFormat getInstance() {

    if(formatter == null)

      formatter= new SimpleMoneyFormat();

    returnformatter;

  }

 

  public Stringformat(String moneyStr) {

   checkPrecision(moneyStr);

    Stringresult;

    result =convertToChineseNumber(moneyStr);

    result =addUnitsToChineseMoneyString(result);

    returnresult;

  }

 

  public Stringformat(double moneyDouble) {

    returnformat(numberFormat.format(moneyDouble));

  }

 

  public Stringformat(int moneyInt) {

    returnformat(numberFormat.format(moneyInt));

  }

 

  public Stringformat(long moneyLong) {

    returnformat(numberFormat.format(moneyLong));

  }

 

  public Stringformat(Number moneyNum) {

    returnformat(numberFormat.format(moneyNum));

  }

 

  private StringconvertToChineseNumber(String moneyStr) {

    Stringresult;

    StringBuffercMoneyStringBuffer = new StringBuffer();

    for (int i =0; i < moneyStr.length(); i++) {

     cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i +1)));

    }

    //拾佰仟万亿等都是汉字里面才有的单位,加上它们

    intindexOfDot = cMoneyStringBuffer.indexOf(DOT);

    intmoneyPatternCursor = 1;

    for (int i =indexOfDot - 1; i > 0; i--) {

     cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY +moneyPatternCursor));

     moneyPatternCursor = moneyPatternCursor == 8 ? 1 : moneyPatternCursor +1;

    }

 

    StringfractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf("."));

   cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."),cMoneyStringBuffer.length());

    while(cMoneyStringBuffer.indexOf("零拾") != -1) {

     cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"),cMoneyStringBuffer.indexOf("零拾") + 2, ZERO);

    }

    while(cMoneyStringBuffer.indexOf("零佰") != -1) {

     cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零佰"),cMoneyStringBuffer.indexOf("零佰") + 2, ZERO);

    }

    while(cMoneyStringBuffer.indexOf("零仟") != -1) {

     cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"),cMoneyStringBuffer.indexOf("零仟") + 2, ZERO);

    }

    while(cMoneyStringBuffer.indexOf("零万") != -1) {

     cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零万"),cMoneyStringBuffer.indexOf("零万") + 2,TEN_THOUSAND);

    }

    while(cMoneyStringBuffer.indexOf("零亿") != -1) {

     cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零亿"),cMoneyStringBuffer.indexOf("零亿") + 2,HUNDRED_MILLION);

    }

    while(cMoneyStringBuffer.indexOf("零零") != -1) {

     cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零零"),cMoneyStringBuffer.indexOf("零零") + 2, ZERO);

    }

    if(cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length() - 1)

     cMoneyStringBuffer.delete(cMoneyStringBuffer.length() - 1,cMoneyStringBuffer.length());

   cMoneyStringBuffer.append(fractionPart);

 

    result =cMoneyStringBuffer.toString();

    returnresult;

  }

 

 

  private StringaddUnitsToChineseMoneyString(String moneyStr) {

    Stringresult;

    StringBuffercMoneyStringBuffer = new StringBuffer(moneyStr);

    intindexOfDot = cMoneyStringBuffer.indexOf(DOT);

   cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN);[/hidden]

 

 

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

 

更多相关面试题请参阅这里:

一道有趣的C#考试题目

某公司招收.net高级程序员的试卷

.Net面试题集(最全最新)(欢迎加入更多.Net 面试题)

Google:21道能力倾向测试面试题

GOOGLE面试题

Google的面试题,你能做出多少?

据说是阿尔卡特(中国)的面试题目(C)

世界大公司面试题——微软的面试题

世界大公司面试题——微软的面试题(答案)

成为编程高手的基础素养

微软面试题——微软的智力题——三个灯泡

Java面试题汇总及c/c++面试题(最新最全)

J2EE面试题集(附答案)

Java常见面试题集--面试题全面综合(一)

Java常见面试题集--面试题全面综合(二)

Java面试题集(欢迎大家踊跃提供)

.Net面试题集(最全最新)(欢迎加入更多.Net 面试题)

 

更多相关面试试题

更多面试题请点击左侧的相关内容主题……

 

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

Tags: J2EE面试题集锦(附答案), J2EE面试题 , JAVA面试题 , J2EE常见面试题

上一篇: Java面试题集(欢迎提供更多Java面试题)

下一篇: Java面试题(最新最全Java面试题汇总)

评论(12) | 引用(0) | 阅读(32204)

引用地址:

注意: 该地址仅在今日23:59:59之前有效

travel Says:

2008/03/19 00:13

2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。

测试过了,数字自己再转换吧。(小数还没处理,看个想法吧 )

public class NumToChinese {

    publicstatic void main(String[] args) {

    //StringnumberString = args[1];//args[0] is the class name "NumToChinese"

    StringnumberString = "123400567089";

   System.out.println("original number is :"+numberString); 

    char[] numberChar= numberString.toCharArray();

    int length =numberString.length();

    String[]chineseChar = new String[length];

   chineseChar[0]="";

    for (int i =1;i<length; i++){

       switch(i%8)  {

        case 1:chineseChar[i]="十";break;

        case 2: chineseChar[i]="百";break;

        case 3:chineseChar[i]="千";break;

        case 4:chineseChar[i]="万";break;

        case 5:chineseChar[i]="十";break;

        case 6:chineseChar[i]="百";break;

        case 7:chineseChar[i]="千";break;

        case 0:chineseChar[i]="亿";

    }

}

   StringBufferresult = new StringBuffer();

    for (intj=0;j<length;j++){

        charfirst = numberChar[j];

        Stringsecond = chineseChar[length-1-j];

        if(first!='0')     

           result.append(first).append(second);

       else {

            if(((length-1-j)%4)==0)

               result.append(second);

            else{

               String temp = result.substring(result.length()-1);

               if(!temp.equals("零")) result.append("零");

            }

        }

    }

   System.out.println("the reversed chinese number is :"+result.toString());

  }

 

}

牛发癫 Says:

2008/03/10 11:29

好东西,不顶就对不住你了

不 Says: 

2007/11/02 16:09

谢谢

skyfire82 Says: 

2007/08/27 13:46

好东西  顶

dfdsfdsf Says: 

2007/08/26 19:09

dcffd

acici Says: 

2007/08/12 09:57

查看详情

chenzhengrong Says: 

2007/08/10 10:43

太叼了!!!

网魂工作室 Says: 

2006/04/04 10:14

11.

interface Playable {

    void play();

}

interface Bounceable {

    void play();

}

interface Rollable extends Playable, Bounceable {

    Ball ball =new Ball(\"PingPang\");

}

class Ball implements Rollable {

    privateString name;

    publicString getName() {

        returnname;

    }

    publicBall(String name) {

       this.name = name;       

    }

   public voidplay() {

        ball =new Ball(\"Football\");

       System.out.println(ball.getName());

    }

}

这个错误不容易发现。

答案: 错。\"interface Rollableextends 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 = newBall(\"PingPang\");\"。在Ball类的Play()方法中,\"ball = newBall(\"Football\");\"改变了ball的reference,而这里的ball来自Rollableinterface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在\"ball = new Ball(\"Football\");\"这里显示有错。

网魂工作室 Says: 

2006/04/04 10:14

8.

public class Something {

     publicstatic void main(String[] args) {

       Something s = new Something();

       System.out.println(\"s.doSomething() returns \" +doSomething());

    }

    publicString 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 {

    privatestatic 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 voidpX(){

     System.out.println(x);

   }

   public staticvoid main(String[] args) {

      newC().pX();

   }

}

答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时importjava.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确。

 

网魂工作室 Says: 

2006/04/04 10:13

 

6.

class Something {

    int i;

    public voiddoSomething() {

       System.out.println(\"i = \" + i);

    }

}

有什么错呢? 看不出来啊。

答案: 正确。输出的是\"i = 0\"。int i属於instant variable (实例变量,或叫成员变量)。instant variable有defaultvalue。int的default value是0。

7.

class Something {

    final int i;

    public voiddoSomething() {

       System.out.println(\"i = \" + i);

    }

}

和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?

答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instantvariable没有default value,必须在constructor(构造器)结束之前被赋予一个明确的值。可以修改为\"finalint i = 0;\"。

0 0