Java技术笔试题集(附答案)(基础必备)

更新时间:2024-07-10 09:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第 1 页 共 71 页

达内技术笔试题集

加拿大·达内外企IT培训集团

Copyright Tarena Corporation,2009.All rights reserved

第 2 页 共 71 页

技术笔试题集共分以下四部分内容:

共324题

一、JAVASE: 共152题

二、JAVAEE: 共84题

三、SQL: 共49题

四、操作系统: 共39题

Copyright Tarena Corporation,2009.All rights reserved

第 3 页 共 71 页

JAVASE部分

1、Choose the three valid identifiers from those listed below. (Choose three)? A. IDoLikeTheLongNameClass B. $byte C. const D. _ok E. 3_case 答:ABD

2、Which of the following lines of code will compile without error (Choose two)? A.

int i=0; if (i) {

System.out.println(“Hi”); } B.

boolean b=true; boolean b2=true; if(b==b2) {

System.out.println(“So true”); } C.

int i=1; int j=2;

if(i==1|| j==2)

System.out.println(“OK”); D.

int i=1; int j=2;

if (i==1 &| j==2)

System.out.println(“OK”); 答:BC

3、Which two demonstrate a \A. public interface Person { }

public class Employee extends Person{ } B. public interface Shape { }

public interface Rectandle extends Shape { } C. public interface Colorable { }

public class Shape implements Colorable { }

D. public class Species{ }

public class Animal{private Species species;} E. interface Component{ }

class Container implements Component{ private Component[] children; }

答:DE

4、What will happen when you attempt to compile and run the following code?

public class Static{

static {

int x = 5; }

static int x,y;

public static void main(String args[]){

Copyright Tarena Corporation,2009.All rights reserved

第 4 页 共 71 页

x--;

myMethod();

System.out.println(x + y + ++x); }

public static void myMethod(){

y = x+++++x; }

}

1. compiletime error 2. prints: 1 3. prints: 2 4. prints: 3 5. prints: 7 6. prints: 8 答:d

5、What is the correct ordering for the import, class and package declarations when found in a single file?

A. package, import, class B. class, import, package C.import, package, class D. package, class, import 答:A

6、What will happen when you attempt to compile and run the following code.

public class Pvf{

static boolean Paddy;

public static void main(String argv[]){ System.out.println(Paddy); } }

A. Compile time error B. compilation and output of false C. compilation and output of true D. compilation and output of null 答:B

7、Given the folowing classes which of the following will compile without error?

interface IFace{}

class CFace implements IFace{} class Base{}

public class ObRef extends Base{

public static void main(String argv[]){ ObRef ob = new ObRef(); Base b = new Base();

Object o1 = new Object(); IFace o2 = new CFace(); }

}

A. o1=o2; B. b=ob; C. ob=b; D. o1=b;

答:B

8、下面那几个函数是public void method(){...}的重载函数?

A public void method( int m){...} B public int method(){...}

C public void method2(){...} D public int method(int m,float f ){...} 答:A、B、D

Copyright Tarena Corporation,2009.All rights reserved

第 5 页 共 71 页

9、给出如下声明:

String s = “Example”; 合法的代码由哪些?

A s>>>=3 B s[3]= “X” C int i = s.iength() D s = s +10 答:C

10、如下哪些不是java的关键字?

A const B NULL C false D this E native 答:B

11、下面关于继承的哪些叙述是正确的

A 在java中只允许单一继承 B 在java中一个类只能实现一个接口 C 在java中一个类不能同时继承一个类和实现一个接口 D java的单一继承是代码更可靠。 答:A、D

12、关于垃圾收集的哪些叙述是对的

A 程序开发者必须自己创建一个线程进行内存释放的工作 B 垃圾收集将检查并释放不在使用的内存

C 垃圾收集允许程序开发者明确指定并立即释放该内存 D 垃圾收集能够在期望的时间释放被java对象使用的内存 答:B

13、已知表达式 int m [ ] = {0,1,2,3,4,5,6}; 下面哪个表达式的值与数组下标量总数相等?

A m.length() B m.length C m.length()+1 D m.length-1 答:D

14、方法resume()负责恢复哪些线程的执行

A 通过调用stop()方法而停止的线程。 B 通过调用sleep()方法而停止的线程。 C 通过调用wait()方法而停止的线程。 D 通过调用suspend()方法而停止的线程。 答:D

15、有关线程的哪些叙述是对的

A 一旦一个线程被创建,它就立即开始运行。

B 使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行。 C 当一个线程因为抢先机制而停止运行,它被放在可运行队列的前面。 D 一个线程可能因为不同的原因停止并进入就绪状态。 答:BCD

16、已知如下代码: public class Test {

long a[] = new long [10];

public static void main(String arg[] ){ System.out.print(a[6]); } }

请问哪个语句是正确的?

A Output is null. B Output is 0

C When compile, some error will occur. D When running, some error will occur. 答:C

Copyright Tarena Corporation,2009.All rights reserved

第 11 页 共 71 页

46、类 Teacher 和 Student 是类 Person 的子类;

Teacher t; Student s;

// t and s are all non-null.

if (t instanceof Person ){ s=(Student)t; }

最后一条语句的结果是:

A.将构造一个Student 对象; B.表达式是合法的;

C.表达式是错误的; D.编译时正确, 但运行时错误。 答:D

47、给出下面代码段(多选)

1、switch (m)

2、{ case 0 :System.out.println(“case 0”); 1. case 1: System.out.println(“case 1”); break; 2. case 2:

3. default : System.out.println(default”); 4. }

下列m 的哪些值将引起 “default ”的输出? A.0 B. 1 C. 2 D. 3

答:CD

48、下列哪些说法是正确的?

A. Java语言只允许单一继承 B. Java语言只允许实现一个接口 C. Java语言不允许同时继承一个类并实现一个接口 D. Java语言的单一继承使得代码更加可靠. 答:AD

49、main方法的返回类型是:

A.int B.Void C.Boolean D.Static E. public 答:BDE

50、给定下列代码:

public void test() { try {

oneMethod();

System.out.println( “condition 1”);

} catch (ArrayIndexOutOfBoundsException e){ System.out.println(“condition 2”); }catch(Exception e){

System.out.println(“condition 3”); }finally{

System.out.println(“finally”); } }

oneMethod 正常运行, 将显示?

A. condition 1 B. condition 2 C. condition 3 D. finally 答:AD

51、下列代码哪几行会出错

1) public void modify() { 2) int I, j, k; 3) I=100;

4) while(I>0){ 5) j=I*2;

Copyright Tarena Corporation,2009.All rights reserved

第 12 页 共 71 页

6) System.out.println(“The value of j is “ +j); 7) k=k+1; 8) I--; 9) } 10) }

A. line 4 B. line 6 C. line 7 D. line 8

答:C

52、对于下列代码

public class Parent {

public int addValue (int a ,int b ){ int s; s = a + b; return s; } }

class Child extends Parent { }

下述哪些方法可以加入类Child?

A . int addValue(int a ,int b){//do something…} B. public void addValue(){//do something…} C. public int addValue(int a ){//do something…}

D. public int addValue( int a, int b )throws MyException {//do something…} 答:B、C

53、请选出下面两个类间关系描述错误的项 a. public interface A {} public class B extends A {} b. public interface A {}

public interface B extends A {} c. public interface A {}

public class B implements A {} d. public class A {}

public class B { protected A a;} 答:A

54、下面正确的是

A)float f = 3.14; //默认为double类型 B)byte i = 225; //默认为int类型 C)log k = 33; D)int p[ ][ ]; 答:C、D

55、下列创建数组的方法正确的是

A)int two Dim[ ][ ] = new int[4][ ]; B)int two Dim[ ][ ] = new int[ ][4]; C)int two Dim[ ][ ] = new int[4][5]; D)char a[ ] = {‘A’, ‘B’}; E)char c[ ] = “ABC” ; 答:A、C、D

56、关于线程设计,下列描述正确的是

A. 线程对象必须实现Runnable接口 B. 启动一个线程直接调用线程对象的run()方法 C. Java提供对多线程同步提供语言级的支持 D. 一个线程可以包含多个进程

Copyright Tarena Corporation,2009.All rights reserved

第 13 页 共 71 页

答:C

57、public class X extends Thread implements Runnable{ public void run(){

System.out.println(\ }

public static void main(String args[]) {

Thread t=new Thread(new X()); t.start(); } }

A 第一行会产生编译错误 B 第六行会产生编译错误 C 第六行会产生运行错误 D 程序会运行和启动 答:D

58、根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁? public void test(int i) {

lock(this) { if (i>10) { i--; test(i); } } }

A. 会锁死 B. 不会锁死 答:B

59、欲构造ArrayList类得一个实例,此类继承了List接口,下列哪个方法是正确的:

A ArrayList myList = new Object(); B List myList = new ArrayList(); C ArraylList myList = new List(); D List myList = new List(); 答:B

60、Which of the following are methods of the Runnable interface。 A. run B. start C. yield D. stop 答:A

61、Java网络程序设计中,下列正确的描述是(多选) A. Java网络编程API建立在Socket基础之上 B. Java网络接口只支持TCP以及其上层协议 C. Java网络接口只支持UDP以及其上层协议 D. Java网络接口支持IP以上的所有高层协议 答:AD

62、Java I/O程序设计中,下列描述正确的是

A. OutputStream用于写操作 B. InputStream用于写操作 C. I/O库不支持对文件可读可写API

Copyright Tarena Corporation,2009.All rights reserved

第 14 页 共 71 页

答:A

63、选出对于XML的评论正确的选项___

A. XML是一种语言无关平台无关的自描述语言。

B. 标签实际上包含了元素和属性两部分。用元素来描述有规律的数据,用属性来描述系统数据。 C. XML不可跨平台,不具备扩展性。

D.XML文档中的每一个元素都处在一个名字空间中;如果没有指定的名字空间,缺省的名字空间就是和该元素相关联的名字空间。 答:AD

64、(单选)What compiler switch creates an xml file from the xml comments in the files in an assembly?

A. /text B. /doc C. /xml D. /help 答:A

65、说说下面语句是否有错误,或可能出现的缺陷,并指出错误,或缺陷在哪里? public class MyFile implements Runnable{ public void run(){ while (true){ try{

FileReader fr=new FileReader(new File(\ String line=fr.readLine(); System.out.println(line); }catch(IOException err) { }

Sleep(1000); } }

答: 1.fr.readLine()没有这个方法

2.Sleep(1000)需要用Thread.sleep(1000);

66、判断下列语句是否正确,如果有错误,请指出错误所在? List a = new ArrayList(); a.add(5);

答:错误,默认封装int类型。

67、判断下列语句是否正确,如果有错误,请指出错误所在? void foo(final int []arg){ if (arg.length > 1) arg[0] = 5;

}

答:正确

68、判断下列语句是否正确,如果有错误,请指出错误所在? interface A{

int add(final A a);

}

class B implements A{

long add(final A a){

return this.hashCode() + a.hashCode(); }

}

答:返回值不是long类型

69、指出下面程序的运行结果:

Copyright Tarena Corporation,2009.All rights reserved

第 15 页 共 71 页

class A{

static{

System.out.print(\ }

public A (){

System.out.print(\ } }

class B extends A{ static{

System.out.print(\ }

public B (){

System.out.print(\} }

public class Test{

public static void main(String[] args){ A ab = new B (); ab = new B (); } }

答:abxyxy

70、下列代码的输出结果是什么? public class MyFor {

public static void main (String argv[]){ int i; int j;

outer:for(i=1;i<3;i++) inner:for(j=1;j<3;j++){

if (j==2) continue outer;

System.out .println(\ } } }

答:Value for i=1Value for j=1 Value for i=2Value for j=1

71、查看下面的代码,写出可以使程序正常执行的修改方法 public class MyClass { static String s1; String s2;

public static void main(String args[]) { String s3;

System.out.println(\ System.out.println(\ System.out.println(\ } }

答:删除第8行或者将第6行改为String s3 = \

72、为了显示myStr = 23 这样的结果,写出在控制台输入的命令 public class MyClass {

public static void main(String args[]) {

Copyright Tarena Corporation,2009.All rights reserved

第 16 页 共 71 页

String s1 = args[0]; String s2 = args[1]; String myStr = args[2];

System.out.printin(\ } }

答:java MyClass 1 2 3 4

73、写出下面代码的执行结果 public class MyClass {

static void aMethod(StringBuffer sf1, StringBuffer sf2) { sf1.append(sf2); sf2 = sf1; }

public static void main(String[] args){

StringBuffer sf1 = new StringBuffer(\ StringBuffer sf2 = new StringBuffer(\ aMethod(sf1,sf2);

System.out .println(sf1+ \ } }

答:AB:B

74、第3行中生成的object在第几行执行后成为garbage collection的对象? 1.public class MyClass {

2. public StringBuffer aMethod() {

3. StringBuffer sf = new StringBuffer(\4. StringBuffer[] sf_arr = new StringBuffer[1]; 5. sf_arr[0] = sf; 6. sf = null;

7. sf_arr[0] = null; 8. return sf; 9. } 10.}

答:第7行

75、写出执行下面的代码后的结果 public class MyClass {

public static void main(String args[]) {

java.util.Vector v1 = new java.util.Vector(); v1.addElement(\

v1.addElement(new Float(3.14f)); v1.addElement(10);

System.out.println(v1.elementAt(0) + \+ v1.elementAt(1) v1.elementAt(2)); } }

答:Hello : 3.14 : 10

76、写出执行下面代码后的正确结果 interface MyDB {

public void getConnection();

}

class MyDBDriver implements MyDB {

Copyright Tarena Corporation,2009.All rights reserved

+ \

第 17 页 共 71 页

public void getConnection() {

System.out.println(\ } }

public class MyClass {

public static void aMethod(MyDB db) { db.getConnection(); }

public static void main(String args[]) { MyDBDriver db_driver = new MyDBDriver(); aMethod(db_driver); } }

答:getConnection()

77、下列程序运行的结果是 class A { class Dog {

private String name; private int age; private int step;

Dog(String s, int a) { name = s; age = a; step = 0; }

public void run(Dog fast) { fast.step++; } }

public static void main(String args[]) { A a = new A();

Dog d = a.new Dog(\ d.step = 25; d.run(d);

System.out.println(d.step); } }

答:26

78、下列程序运行的结果是 public class foo {

public static void main (String args[]){ String s;

System.out.println(\ } }

答:编译出错

79、请看下列程序,运行结果是 class Super{

int i=10; Super(){

print();

Copyright Tarena Corporation,2009.All rights reserved

第 18 页 共 71 页

i=20;

}

void print(){

System.out.print(i); }

}

public class Sub extends Super{

int j=30; Sub(){

print(); j=40; }

void print(){

System.out.print(j); }

public static void main(String[] args){

System.out.print(new Sub().j); } }

答:03040

80、getSomething ()执行时发生IllegalArgumentException会出现什么样的结果? void makeConnection(String url) { try {

getSomething();

}catch(NullPointerException e) {

System.out.printin(\ return;

}catch(Exception e) {

System.out.println(\ } }

答:Exception

81、有2个类Cat及WhiteCat,代码如下: public class Cat { protected static String color = \ public Cat() { } public void showCatColor() { System.out.println(\ } public static void showColor() { System.out.println(\ } }

public class WhiteCat extends Cat { protected static String color = \ public WhiteCat() { super(); }

Copyright Tarena Corporation,2009.All rights reserved

第 19 页 共 71 页

public void showCatColor() { System.out.println(\ } public static void showColor() { System.out.println(\ } }

请分析下面各段程序的运行结果

A.WhiteCat whiteCat = new WhiteCat(); Cat cat = whiteCat; cat.showColor(); cat.showCatColor(); B.Cat cat = new Cat();

WhiteCat whiteCat = (WhiteCat) cat; cat.showColor(); cat.showCatColor();

C.Cat cat = new WhiteCat();

WhiteCat whiteCat = (WhiteCat) cat; cat.showColor(); cat.showCatColor(); 答:

A段执行的结果是: Cat:random WhiteCat:white

B段执行的结果是:

会抛出java.lang.ClassCastException异常 C段执行的结果是: Cat:random

WhiteCat:white

82、现有1~100共一百个自然数,已随机放入一个有98个元素的数组a[98]。要求写出一个尽量简单的方案,找出没有被放入数组的那2个数,并在屏幕上打印这2个数。注意:程序不用实现自然数随机放入数组的过程。

答:

int[] b = new int[]{....存入98个随机的1~100的整数}; int[] a = new int[100]; for(int t : b) a[t-1]=t;

for(int t=0; t < a.length; t++) if(a[t]==0)

System.out.println(t+1);

83、写一段程序用冒泡算法对数组int[]array内的元素有小到大重新排列 答:

pacakge com.tarena; class BubbleSort{

public static int[] sort(int[] array) { int temp;

for(int i=0;i

for(int j=array.length-1;j>i;j--){

Copyright Tarena Corporation,2009.All rights reserved

第 20 页 共 71 页

if(array[j]

array[j] = array[j-1]; array[j-1] = temp; } } }

return array; } }

84、设计线程一个类WorkerThread,其构造函数接受一个message字符串作为参数,把该字符串打印到console上,同时,在WorkThread的main函数中启动该线程

答:

package com.tarena;

public class WorkerThread extends Thread { public WorkerThread(String message) { System.out.println(message); } public static void main(String[] args) {

new WorkerThread(\ } }

85、在web应用开发过程中经常遇到输出某种编码的字符,如从GBK到iso8859-1等,如何输出一个某种编码的字符串?

public static String translate(String str) { String tempStr = \ try {

tempStr = new String(str.getBytes(\ tempStr = tempStr.trim(); } catch (Exception e) {

System.err.println(e.getMessage()); }

return tempStr; }

86、写一个单例

答:public class Singleton {

private static Singleton sin = null;

static{

sin = new Singleton(); }

private Singleton(){ }

public static Singleton init(){ return sin; }

Copyright Tarena Corporation,2009.All rights reserved

第 21 页 共 71 页

}

87、请写出一个公用方法,输入String返回该串是否含有非空字符,并写出junit的测试用例 答:

public boolean hasBlank(String str){

if(str.endWith(“ ”)||str.startWith(“ ”)){ Return false;

} else{

String[] strs=str.split(“ ”); if(strs.length()==1){

return false;

}

}

return true; }

@Test

public void testFun(){

System.out.println(TestString.nullString(\}

88、JAVA实现一种排序

答:用插入法进行排序代码如下 package com.tarena; import java.util.*; class InsertSort {

ArrayList list;

public InsertSort(int num,int mod) {

list = new ArrayList(num); Random rand = new Random();

System.out.println(\ for (int i=0;i

list.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); System.out.println(\ } }

public void SortIt() {

Integer tempInt; int MaxSize=1;

for(int i=1;i

tempInt = (Integer)list.remove(i);

if(tempInt.intValue()>=((Integer)list.get(MaxSize-1)).intValue()) {

list.add(MaxSize,tempInt); MaxSize++;

System.out.println(list.toString()); } else

Copyright Tarena Corporation,2009.All rights reserved

第 22 页 共 71 页

{

for (int j=0;j

if (((Integer)list.get(j)).intValue()>=tempInt.intValue()) {

list.add(j,tempInt); MaxSize++;

System.out.println(list.toString()); break; } } } }

System.out.println(\ for(int i=0;i

System.out.println(\ } }

public static void main(String[] args) {

InsertSort sort = new InsertSort(10,100); sort.SortIt(); } }

JAVA类实现序例化的方法是实现java.io.Serializable接口

Collection框架中实现比较要实现Comparable 接口和 Comparator 接口

89、创建类Person,其中存储的成员数据为:age(int),sex(boolean),weight(int),至少有一个构造函数可以初始化这三个属性值,同时提供获取这三个属性值的public方法 答:

public class Person { private int age; private boolean sex; private int weight;

public Person() { }

public Person(int age, boolean sex, int weight) { this.age = age; this.sex = sex; this.weight = weight; }

public int getAge() { return age; }

public boolean isSex() { return sex; }

public int getWeight() { return weight; } }

Copyright Tarena Corporation,2009.All rights reserved

第 23 页 共 71 页

90、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如\我ABC\,应该截为\我AB\,输入\我ABC汉DEF\,6,应该输出为\我ABC\而不是\我ABC+汉的半个\。 答:

package com.tarena;

class SplitString {

String SplitStr; int SplitByte;

public SplitString(String str,int bytes) {

SplitStr=str; SplitByte=bytes;

System.out.println(\ }

public void SplitIt() {

int loopCount;

loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split Byte+1);

System.out.println(\

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

if (i==loopCount){

System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length())); } else {

System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte))); } } }

public static void main(String[] args) {

SplitString ss = new SplitString(\中dd文dsaf中男大3443n中国43中国人0ewldfls=103\ ss.SplitIt(); } }

91、现有一个32位的整型变量 value和一个有32个元素的数组a[32]

要求:a.对value随机赋值;b.让数组a[n]的值等于value“位n”的值,0<=n<=31。 举例:如果value的“位0”(Bit0)=0,那么a[0]=0;如果value的“位10”(Bit10)=1,那么a[10]=1。 答:

package com.tarena; import java.util.Random; public class TestArray { final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };

public static void main(String[] args) { Random r = new Random();

Copyright Tarena Corporation,2009.All rights reserved

第 24 页 共 71 页

int value = r.nextInt(); System.out.println(value); char[] cs = TestArray.test(value, 1); int[] is = new int[32]; for (int i = 0; i < cs.length; i++) { is[i]=((int)cs[i])==0? cs[i]:cs[i]-48; } for (int i = 0; i < is.length; i++) { System.out.print(is[i]); } } public static char[] test(int i, int shift) { char[] buf = new char[32]; int charPos = 32; int radix = 1 << shift; int mask = radix - 1; do { buf[--charPos] = digits[i & mask]; i >>>= shift; } while (i != 0); return buf; } }

92、编写程序将由数字及字符组成的字符串中的数字截取出来并按顺序输出,例如:“ABC137GMNQQ2049PN5FFF”输出结果应该为01234579 答:

package com.tarena;

import java.util.Arrays;

public class NumberSplitChar { public static void main(String[] args) {

String str=\ char[] beforechars=str.toCharArray();

char[] afterchars=new char[beforechars.length]; int j=0;

for(int i=0;i='0' && beforechars[i]<='9'){ afterchars[j++]=beforechars[i]; } }

Arrays.sort(afterchars);

for(int i=(afterchars.length-j);i

93、排序都有哪几种方法?用伪代码实现一个快速排序 答:排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选

Copyright Tarena Corporation,2009.All rights reserved

第 25 页 共 71 页

择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)

快速排序的伪代码:使用快速排序方法对a[ 0 :n- 1 ]排序从a[ 0 :n- 1 ]中选择一个元素作为middle,该元素为支点;把余下的元素分割为两段left和right,使得left中的元素都小于等于支点,而right中的元素都大于等于支点;

递归地使用快速排序方法对left进行排序;递归地使用快速排序方法对right进行排序;所得结果为left + middle + right。

94、请用JAVA实现两个类,分别实现堆栈(Stack)和队列(Queue)操作。 答:public class MyStack { private List list; public MyStack(){

list = new ArrayList(); }

public boolean isEmpty(){ return list.size() == 0; }

public void push(Object obj){ list.add(obj); }

public Object pop(){ if(list.size()>0){

Object obj = list.get(list.size()-1); list.remove(list.size()-1); return obj; }else{

return null; } }

public int getNumber(){ return list.size(); } }

class IntegerQueue {

public int[] integerQueue;// 用来当队列 public int tail;// 队尾

public int size;// 队的长度,也可以设置一个默认值,溢出时从新申请

public IntegerQueue(int size) { integerQueue = new int[size]; this.size = size; tail = 0; }

public void inQueue(int i) { if (tail < size) {

this.integerQueue[tail] = i; tail++; } else {

System.err.println(\溢出啦!\ } }

public int outQueue() { if (tail >= 0) {

Copyright Tarena Corporation,2009.All rights reserved

第 26 页 共 71 页

}

}

int tmp = this.integerQueue[tail]; tail--; return tmp; } else {

System.err.println(\队列为空!\ throw new RuntimeException(); }

95、简述JAVA代码安全性

答:类加载器(class loader)加载程序运行所需要的所有类,它通过区分本机文件系统的类和网络系统导入的类增加安全性,这可以限制任何的特洛伊木马程序,因为本机类总是先被加载,一旦所有的类被加载完,执行文件的内存划分就固定了,在这个时候特定的内存地址被分配给对应的符号引用,查找表(lookuo table)也被建立,由于内存划分发生在运行时,解释器在受限制的代码区增加保护防止未授权的访问;然后字节码校验器(byte code verifier)进行校验,主要执行下面的检查:类符合JVM规范的类文件格式,没有违反访问限制,代码没有造成堆栈的上溢或者下溢,所有操作代码的参数类型都是正确的,没有非法的数据类型转换(例如将整型数转换成对象类型)发生;校验通过的字节码被解释器(interpreter)执行,解释器在必要时通过运行时系统执行对底层硬件的合适调用。

96、简述java中的继承

答:Java中是单继承关系,也就是说一个类只能有一个父类,但是可以同时实现多个接口;对于接口本身而言,可以继承多个接口。这样做的目的就是为了阻止因为多继承而造成的的业务对象本身的可读性的降低。

97、简述java中的垃圾回收

答:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。 Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法:System.gc() 或Runtime.getRuntime().gc() 。

98、一个subclass怎样调用superclass中的方法(myMethod)和构造函数? 答:用super关键字,子类去调用父类的方法,如:super.myMethod();子类去调用父类的构造函数,如:super();。

99、String a=null; if (a!=null && a.length()>10) {...} 上面面的代码,如果你用“&”替换“&&”将发生什么错误?

答:会抛出空指针异常;&&会短路,只要遇到boolean值为false就不会再往后执行了;而&则是会把两边的运算都执行完。

100、abstract class和interface有什么区别?

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。新型多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,所有成员变量都是public static final的。一个类可以实现多个接口,当类实现接口时,必须实现接口的所有方法。抽象类在Java语言中表示的是一种单继承的关系,而接口表示的是多继承的关系;抽象类中可以定义自己的成员变量,也可以包含非抽象的方法,而在

Copyright Tarena Corporation,2009.All rights reserved

第 27 页 共 71 页

接口中只能有静态的常量,所有方法必须是抽象的;实现抽象类时可以只实现其中的部分方法,而要是实现一个接口的话就必须实现这个接口中的所有抽象方法。

101、String, StringBuffer StringBuilder的区别。 答:String的长度是不可变的; StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法;线程安全;

StringBuilder是从 JDK 5 开始,为StringBuffer该类补充了一个单个线程使用的等价类;通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

102、谈谈final, finally, finalize的区别

答:final —修饰符(关键字)如果一个类被声明为final,意味着它不能再派 生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的 ,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不 被改变。被声明为final的变量必须在声明时给定 初值,而在以后的引用中只 能读取,不可修改。被声明为final的方法也同样只能使用,不能重载

finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块( 如果有的话)

finalize —方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对 象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定 这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此 所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其 他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 103、屋子里面有椅子,椅子有四只腿及靠背。屋子、椅子什么关系,椅子、腿、靠背什么关系(HAS-A,IS-A)?

答:屋子HAS-A椅子

椅子HAS-A四只腿及靠背

104、你认为java与其他(你所了解的)语言相比,有什么优点和缺点? 答:1). Java没有预处理指令。(如C中的#define , #include , #ifdef等)。C中的常量定义在Java中用static final来取代。

2). Java中没有C中的全局变量。

3). Java中的主类型的size是确定的,而C中主类型的size跟平台相关。

4). Java中没有了指针,它使用了类似的句柄来取代指针,但是Java中不允许对句柄进行加减,没有取地址操作符之类的东东。

5). Java有垃圾收集机制,不需要自己释放空间。

6). Java没有goto语句。Java在C提供的控制语句基础上增加了异常处理和标签break和continue语句。这些可以替代goto的作用。

7). C要求一个方法或块中使用的所有局部变量的定义在该方法或块的最开始处定义,而Java允许这些定义在方法或块的任意地方出现。

8). Java不要求在调用一个函数以前已经定义了该函数,可以在调用点后面定义。而C有这个要求。

9). Java不支持C中的strut 和 union类型。Java支持方法重载。 10). Java不支持C中的enum关键字。 11). Java不支持C中的bitfields能力。 12). Java不支持C的typedef。 13). Java不支持C的方法指针。 14). Java不支持C的可变参数表。

java和.net的都不适合做桌面程序,这两个比较适合写WEB的程序;

c++比较适合写桌面程序c++/java都是强类型的静态预编译型语言。优点是结构性强,程序可读性

Copyright Tarena Corporation,2009.All rights reserved

第 28 页 共 71 页

好,开发效率高,适合开发大型应用。就本人的经验而言,java的开发效率优于c++,实际上java大行其道的首要因素就是它够简单。java尤其不适合开发桌面程序,GUI的API一直都是java的弱点;

perl/python是动态解释型语言。perl是弱类型的而python是强类型的,后者的变量一旦赋值,就拥有了类型,不能再赋其他类型的值。不象javascript/perl可以随便定义。perl是unix下的王牌工具,在缺乏IDE的字符界面下,很好地弥补了unix;

shell/utility的不足,并且部分继承了面向对象语言的灵活性。适合用来搭建大程序。

105、Java中包含哪些基本数据类型?String是最基本的数据类型吗?是否可以继承String类? 答:基本类型包括byte、int、short、long、float、double、boolean

String不是基本数据类型,因为String类是final的,所以不能够被继承。

106、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?

答:Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回与参数最接近的长整数,参数加1/2后求其floor。

107、Bit和 Byte是什么意思?它们之间有什么关系?

答:bit中文名称是位,是用以描述电脑数据量的最小单位。

byte(字节)是计算机信息技术用于计量存储容量和传输容量的一种计量单 位1byte=8bit

108、用最有效的方法算出2乘已8对于几? 答: 2 << 3。

109、String s=new Stirng(\创建了几个String Object? 答:创建两个,一个在堆内存(通过new得到),另一个在字符串常量池(“xyz”)对象。

110、swtich是否能作用在byte上?是否能作用在long上? 是否能作用在char上? 是否能作用在short上?是否能作用在String上?

答:可以用在byte、short、int、char和枚举类型。

111、char型变量中能不能存贮一个中文汉字?为什么?

答:能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的。

112、java语言中public、private、protected三个关键字的用法,重写和重载的区别。 答:

作用域 当前类 同包 子类 其它

public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × ×

重写:发生在父子类之间,方法名相同,参数的类型、个数、顺序相同,返回值相同,访问权限不能更封闭,抛出异常不能宽泛;

重载:发生在同一个类中,方法名相同,但是参数不同(类型不同或个数不同或参数的顺序不同),返回值可以不相同。

113、说一下 “==”和equals()方法在字串变量操作中的不同? 答:”==”比较的是两个字符串对象的地址,equals()是比较的两个字符串的具体值。

114、异常机制中try{}后一定要跟catch和finally吗?

答:一定要有catch或者finally,catch子句紧跟在try块后面,用来指定你想要捕捉的“异常”的类型。如果有catch的话,可以没有finally。

115、能用foreach遍历访问的对象需要实现?

Copyright Tarena Corporation,2009.All rights reserved

第 29 页 共 71 页

答:需要实现Iterable接口

116、说出一些JDK常用的类,包,接口,请各举5个 类:

HashSet 、Thread 、String 、FileInputStream 、Class 包:

java.lang 、java.io 、java.util 、java.text 、java.sql 接口:

Collection 、Set 、List 、Comparable 、Serializable

117、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

答:匿名内部类是可以继承其它类,同样也可以去实现接口的,用法为:

JButton button = new JButton();

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e){//some mothod...} });

这样的用法在swing编程中是经常使用的,就是因为它需要用到注册监听器机制,而该监听类如果只服务于一个组件,那么,将该类设置成内部类/匿名类是最方便的。

118、Java的接口和C++的虚类的相同和不同处。

答:由于Java 不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。

119、JAVA中数组有没有length()这个方法? String有没有length()这个方法? 答:数组是没有length()方法的,数组是使用数组对象.length来得到该数组的长度;String是有length()方法的。

120、接口是否可继承接口? 抽象类是否可实现接口? 抽象类是否可继承实体类?

答:接口是可以继承接口的并且可以继承多个其它接口;抽象类可以实现接口中的方法;抽象类可以继承实体类。

121、java中用char型变量中能不能存放一个中文汉字?

答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文字符是没问题的。

122、面向对象的特征有哪些方面?

答:面向对象的特征主要有以下几个方面:

1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

3)封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

4)多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

Copyright Tarena Corporation,2009.All rights reserved

第 30 页 共 71 页

123、什么是java序列化,如何实现java序列化?

答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题;

序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

124、什么是垃圾回收?什么时候触发垃圾回收?如何降低垃圾回收的触发频率?它能保证程序有足够的可用内存吗?

答:垃圾回收(GC)是Java语言的一个重要特性,作用是释放不再被使用的内存。垃圾回收由系统进行管理。在系统认为需要的时候自动启动一个线程进行处理。

尽量减少垃圾内存,也就是新建对象,的数量,可以降低垃圾回收的频率。垃圾回收机制无法保证有足够的内存。

125、什么是JAVA的反射?

答:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。

126、构造器Constructor是否可以被继承?是否可以被Override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

127、UDP和TCP连接有和异同?

答:TCP协议是面向连接的,每个数据包的传输过程是:先建立链路、数据传输、然后清除链路。数据包不包含目的地址。受端和发端不但顺序一致,而且内容相同。它的可靠性高;UDP协议是面向无连接的,每个数据包都有完整的源、目的地址及分组编号,各自在网络中独立传输,传输中不管其顺序,数据到达收端后再进行排序组装,遇有丢失、差错和失序等情况,通过请求重发来解决。它的效率比较高。

128、程序注释的用途有哪些?带注释的程序有什么缺点?

答:注释可以说明程序,给自己或他人在阅读程序时提供帮助,使程序更容易理解,也就是增强程序代码的可读性。过多的代码注释会使程序结构变得不清晰。

129、在程序中退出两重循环可以用哪些语句? 答:可以使用标签: loop1: for (;;) { for (;;) {

break loop1; } }

130、什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是 重载?CTS、CLS和CLR分别作何解释?

答:应用程序域:一种边界,它由公共语言运行库围绕同一应用程序范围内创建的对象建立(即,从应用程序入口点开始,沿着对象激活的序列的任何位置)。应用程序域有助于将在一个应用程序中创建的对象与在其他应用程序中创建的对象隔离,以使运行时行为可以预知。在一个单独的进程中可以存在多个应用程序域。

托管代码:由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。

强类型系统:通过运行时类型识别(RTTI)(Run-Time Type Identification),程序能够使用基类

Copyright Tarena Corporation,2009.All rights reserved

第 31 页 共 71 页

的指针或引用来检查这些指针或引用所指的对象的实际派生类型。

装箱、拆箱:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。 重载:是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。 CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

131、Error和Exception有什么区别? 列出你见过的Exception并简要说明。

答:error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;

exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

常见异常有:

NullPointerException:当操作一个空引用时会出现此错误。 NumberFormatException:数据格式转换出现问题时出现此异常。 ClassCastException:强制类型转换类型不匹配时出现此异常。

ArrayIndexOutOfBoundsException:数组下标越界,当使用一个不存在的数组下标时出现此异常。

132、java中会存在内存泄露吗?请简单描述。

答:内存泄露是指系统中存在无法回收的内存,有时候会造成内存不足或系统崩溃。Java存在内存泄露。Java中的内存泄露当然是指:存在无用但是垃圾回收器无法回收的对象。而且即使有内存泄露问题存在,也不一定会表现出来。自己实现堆栈的数据结构时有可能会出现内存泄露。

133、Java AWT或Swing中的常用控件包括:

答:JTable,BorderLayout,GridLayout, FlowLayout,JFrame,Jlabel。

134、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 答:多线程有两种实现方法:继承Thread类或者实现Runnable接口。

实现同步也有两种方法:一种是同步方法,另一种是同步代码块。 同步方法是在方法返回类型前面加上synchronized关键字 同步代码块是synchronized (这里写需要同步的对象){...}

135、运行时异常与一般异常有何异同?

答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

136、sleep()和wait()有什么区别?

答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

137、同步和异步有何异同,在什么情况下分别使用他们?请举例说明

答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

138、进程和线程分别该怎么理解?

答:进程是资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块PCB中。以表示该进程拥有这些资源或正在使用它们。另外,进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。

与进程相对应,线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进

Copyright Tarena Corporation,2009.All rights reserved

第 32 页 共 71 页

程的资源。当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。

线程只由相关堆栈(系统栈或用户栈)寄存器和线程控制表TCB组成。寄存器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。

发生进程切换与发生线程切换时相比较,进程切换时涉及到有关资源指针的保存以及地址空间的变化等问题;线程切换时,由于同不进程内的线程共享资源和地址 空间,将不涉及资源信息的保存和地址变化问题,从而减少了操作系统的开销时间。而且,进程的调度与切换都是由操作系统内核完成,而线程则既可由操作系统内 核完成,也可由用户程序进行。

139、死锁的必要条件?怎么克服? 答:产生死锁的四个必要条件:

互斥条件:一个资源每次只能被一个进程使用。

请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

死锁的解决方法:

a 撤消陷于死锁的全部进程;

b逐个撤消陷于死锁的进程,直到死锁不存在;

c从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。

d从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态

140、谈谈对ClassLoader的理解?

答:ClassLoader加载类用的是全盘负责委托机制。所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入;委托机制则是先让parent(父)类加载器 (而不是super,它与parent classloader类不是继承关系)寻找,只有在parent找不到的时候才从自己的类路径中去寻找。此外类加载还采用了cache机制,也就是如果 cache中保存了这个Class就直接返回它,如果没有才从文件中读取和转换成Class,并存入cache,这就是为什么我们修改了Class但是必须重新启动JVM才能生效的原因。

141、详细阐述一下Collection接口所包含的内容 ? 答:List:有序允许重复存放

ArrayList----按顺序存放数据的数组

LinkList-----按顺序存放数据的链表 Vector-------线程安全的按顺序存放数据的数组 Set:无序不允许重复存放

HashSet---根据HashCode()和equals()方法来判断是否有重复

SortedSet:有序

TreeSet------通过实现Comparable接口和Comparator接口而具有排序功能的集合

142、请说出集合类中List、Map、Set的区别

答:List和Set继承了Collection接口,而map不是;List中存放元素有顺序并且可以重复;set中存放的元素是无序并且是不可能重复的;Map中存放是键值对。

143、请说出你所知道的线程同步的方法。

答:wait():使一个线程处于等待状态,并且释放所持有的对象的lock;

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常;

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级;

notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

Copyright Tarena Corporation,2009.All rights reserved

第 33 页 共 71 页

144、Collection 和 Collections的区别?

答:Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set 和List;Collections是个java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

145、HashMap与TreeMap的区别?

答:HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。

146、ArrayList和Vector的区别?

答:同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的;数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半。

147、HashMap和Hashtable的区别?

答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hastable的方法是synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

148、OOAD中的Association、Aggregation、Composition的区别? 答:三者从概念上来讲:Association是一般的关联,有”use-a”的含义。Aggregation和Composition都有整体和部分的关系,其中Aggregation中的部分脱离了整体,部分仍然有意义,有”has a”的含义,是共享式的。而Composition中的部分脱离了整体,部分将没有任何意义,是独占式的。 从代码实现的角度上讲:三者都是以属性出现,其中Association中作为属性出现时,不需要对其进行强制赋值,只要在使用是对其进行初始化即可。Aggregation中作为属性出现时,需要在构造器中通过传递参数来对其进行初始化。Composition中 作为属性出现时,需要在整体的构造器中创建部分的具体实例,完成对其的实例化。

从数据库的层面上来讲:Association不需要被级联删除,Aggregation不需要被级联删除,Composition是需要被级联删除的。

149、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(责任链模式)

工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

150、请说出ArrayList,Vector, LinkedList的存储性能和特性 答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和

Copyright Tarena Corporation,2009.All rights reserved

第 34 页 共 71 页

插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

151、JAVA中常用的XML解析技术有哪些?区别是什么? 答: DOM、SAX 两种方式。

DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的数结构所造成的,这结构占用的内存较多,而且DOM必须在解析文件之前把整个文档载入内存,适合对XML的随机访问

SAX:不现于DOM,SAX是事件驱动型的XML解析方法。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问。

152、XML文档定义有几种形式?有何本质区别? 答:两种形式dtd和schema,区别:

a.Schema是标准的XML文件,而DTD则使用自己的特殊语法,因此,只需要知道XML的语法规则就可以编写Schema了,不需要再学习其它语法规则。

b.Schema利用命名空间将文件中特殊的节点与Schema说明相联系,一个XML文件可以有多个对应的Schema;而一个XML文件只能有一个相对应的DTD文件。

c.Schema的内容模型是开放的,可以随意扩充,而DTD则无法解读扩充的内容.DTD只能把文件类型定义为一个字符串,而XML Schema 却允许把文件类型定义为整数,浮点数,字符串,布尔值或其他各各数据类型,而无须重新定义。

Copyright Tarena Corporation,2009.All rights reserved

第 35 页 共 71 页

JAVAEE部分

1、O/R可以实现____

A. 类到数据表的映射 B. 数据查询 C. 数据恢复 D. 数据集成 答:A

2、(单选)模块内聚度越高,说明模块内各成分彼此结合的程度越 A. 松散 B. 紧密 C. 无法判断 D. 相同 答:A

3、(单选)软件需求分析阶段的输出主要是

A. 需求说明书 B. 开发计划 C. 可行性报告 D. 设计说明书 答:A

4、(单选)以下选项中不是项目经理的职责的是?

A. 需求分析 B. 计划 C. 计划跟踪 D. 质量管理 答:A

5、(单选)单元测试一般在什么时候进行?

A. 编码完成后 B. 系统测试前 C. 测试用例编写完成后 D. 集成测试后 答:A

6、(多选)配置管理能起到以下哪些作用?

A. 版本管理 B. 变更管理 C. 需求管理 D. 测试管理 答:ABCD

7、Data Sources与DriverManager都可获得Connection对象,有何区别____? A.Data Sources是同步的,DriverManager是异步的。 B.Data Sources是异步的,DriverManager是同步的。 C.Data Sources必须从Context 对象查找JNDI名获得Connection对象,DriverManager只需提供链拉字符串,用户名,登录密码即可得到Connection对象。

D.Data Sources与DriverManager没有不同,只是一个东西的两种叫法。 答:C

8、以下是关于HttpServlet类中doGet()、doPost()、doDelete()、doPut()、service()方法的描述。

A. HttpServlet中没有doDelete()这个方法。

B. doGet()、doPost()、service()这些方法都不是线程安全的。

C. 客户端来的get请求将调用doGet(),客户端来的post请求将调用doPost()方法。客户端来的所有请求都调用service()方法。 D. 以上说法都不对。 答:C

9、在服务器的网络编程中,解决会话跟踪的方法有: A. 使用Cookie。 B. 使用URL重写。 C. 使用隐藏的表单域。 D. 以上方法都不能单独使用。 答:ABC

10、在以下哪些情况下session会话将结束生命周期 A. 客户端关闭浏览器。 B. 会话超时。

C. 服务器调用了HttpSession的invalidate()方法。 D. 客户端没有访问本应用而连接到别的应用上。 答:ABC

11、由a.jsp传递一个参数:”我是竹子” 到b.jsp。a.jsp编码为UTF-8,b.jsp编码为gb2312

Copyright Tarena Corporation,2009.All rights reserved

第 36 页 共 71 页

会出现何种情况_____?

A. 正常传递,无任何异常情况。 B. 无法传递中文信息。报错。

C. 可以传递。但b.jsp接到的参数为乱码。 D. 编译不通过,提示非法参数或语法错误。 答:C

12、以下是用户请求访问Servlet的过程的描术,哪些是错误的:

A. servlet容器将创建一个ServletRequest对象和ServletResponse对象。

B. 在ServletResponse对象中封装了用户请求信息,然后ServletServletResponse对象和ServletRequest对象传给用户所请求的Servlet。

C.Servlet把响应结果写到ServletRequest中,然后由Servlet容器把响应结果传给用户。 D.以上都没错 答:BCD

13、What should be inserted on line 3 to allow compilation to succeed, and allow the output of \1. 2. 3.

4. <% x = x + 50; %> 5. Set it to: <%= x %> 6. 7.

A. <% int x = 44 %> B. <%@ int x = 44 %> C. <%! int x = 44; %> D. <%! int x = 44; !%> E. <%@ int x = 44; @%> 答:C

14、Given the HttpServlet method:

doGet(HttpServletRequest, HttpServletResponse) Which statement is true?

A. It returns servlet version information. B. It returns servlet context information. C. It services an HTTP GET request. D. It services an HTTP OPTIONS request. 答:C

15、关于Cookie和HttpSession的说法错误的是: A. 缺省的Session实现机制采用的是Cookie技术 B. 通常以一个PC机作为同一个Session的衡量标志

C. 如果浏览器的安全级别设置的非常高,Cookie可能就用不了了 D. 当Cookie不能用时,Session就肯定用不了了 答:D

16、下列EJB2.0中描述正确的有:

A. 远程接口继承自EJBObject,远程接口只是规定了客户机与EJB间的约定。 B. 本地接口继承自EJBHome,本地接口提供创建、查找、删除EJB实例。 C. 远程接口与本地接口均是方法定义没有方法实现。 D. 远程接口与本地接口均有方法实现。 答:BC

17、实现JTA说法错误的有: A. 需要实现Transaction接口。

B. 需要Context对象lookup \。 C. 需要Context对象lookup \。 D. 必须有相应方法开始事务和终止事务。 答:C

Copyright Tarena Corporation,2009.All rights reserved

第 37 页 共 71 页

18、J2EE规范只认可的事务性资源类型有:

A. JDBC数据库 B. JMS消息队列服务器 C. 其它通过JCA访问的事务性服务 D. JCX事务 答:ABC

19、关于EJB的Home接口和Remote接口,描述错误的是: A.Remote接口定义了业务方法,用于EJB客户端调用业务方法 B.Home接口是EJB工厂,用于创建、移除、查找EJB实例 C.JNDI树上绑定的是Remote接口 D.JNDI树上绑定的是Home接口 答:C

20、关于EJB的描述错误的是:

A.SessionBean分为Stateful和Stateless两种 B.EntityBean分为BMP和CMP两种

C.Message-Driven Bean相当于JMS应用中的消息生产者

D.假设EJB由容器管理事务,在EJB方法中需要会滚的话执行如下代码: ctx.getUserTransaction().rollback();(假设ctx为该EJB的Context) 答:D

21、在JSP页面中定义一个方法,如下所示,选择一个正确的答: ? <%!

void doPrint(){

out.println(“hello jsp”); } %> ?

A.编译没有问题 B.编译和调用都没有问题 C.编译出错 D.运行出错 答:C

22、找出下面程序中可能引起异常的代码行,并说明原因。 // 登录编号,长度在0-38间

String admin_id = session.getAttribute(“admin_id”).toString(); // 登录者权限

String admin_right = request.getParameter(“admin_right”); // 登录者号码

String admin_no = request.getParameter(“admin_no”); if (admin_right.equals(“”))

out.println(“对不起,没有授权”); // 登录者特别号

int admin_no = Integer.parseInt(admin_no); // 所在组

String admin_group = admin_id.substring(38);

请将上段程序按照您的习惯重新写一下。 答:

a.在if (admin_right.equals(“”))这行可能引起空指针异常,如果登录者权限的值为空时,会导致request.getParameter(“admin_right”)得到是一个空值,如果再使用这个变量时,就有可能会抛出空指针异常。

b.当登录号码的值为空时,Integer.parseInt(admin_no)也可能会抛空指针异常;

c. 当登录编号的值为空值时,String admin_group=admin_id.substring(38);也会抛出空指针异常,

Copyright Tarena Corporation,2009.All rights reserved

第 38 页 共 71 页

d. 在int admin_no = Integer.parseInt(admin_no);这行也定义了一个重名的变量admin_no 重写后:

// 登录编号,长度在0-38间

String admin_id = session.getAttribute(“admin_id”).toString(); // 登录者权限

String admin_right = request.getParameter(“admin_right”); // 登录者号码

String admin_no = request.getParameter(“admin_no”); // 登录者特别号 int admin_num = 0; // 所在组

String admin_group = null;

if (“”.equals(admin_right)){

out.println(“对不起,没有授权”); }

if(admin_no!=null){

admin_num = Integer.parseInt(admin_no); }

if(admin_id!=null){

admin_group = admin_id.substring(38); }

23、写出下面代码的输出结果(alert的输出) function funTouch(){ var a = 10; var b = 20; var c = 10; alert(a = b); alert(a == b); alert(a == c); }

答:20 true false

24、检查身份证号码正确性长度 15 或18位 答:var regx=/^[0-9]{15,18}$/;

25、前14位一般为数字末位可以为字母 答:var regx=/^\\d{14}(\\d|X)$/;

26、身份证号码中带有出生日期,请编写取出出生日期的函数,格式为 YYYY-MM-DD。 答:function getBirthday() {

var str = \提取19540329

var dest = str.substring(6,10) + \ str.substring(12,14); return dest; }

27、完成以下操作

(1)写出打开和关闭窗口方法

(2)页面有一个下拉菜单和一个输入框,写一方法使下拉菜单值变动时输入框显示对应的值 (3)写一方法校验多选框有多少被勾选 答:

Copyright Tarena Corporation,2009.All rights reserved

第 39 页 共 71 页

1.window.open和window.close 2.

3.

function isChecked(v){

var checkboxid=document.getElementById(\ var count=0;

for(var i=0;i

return count; }

28、对于Jscript,对下面片断,解释每一行的用处 1.var news=getnews(); 2.arr=news.split(\ 3.len=arr.length; 答:

1.把getnews()方法得到的返回值赋给变量news 2.把news这个字符串按@拆分的得到的数组赋给arr 3.把数组arr的长度赋给len变量

29、使用html实现如下的表格: 编码 姓名 时间 001 张三 2009-1-1 002 李四 2009-2-1 答:

编码

Copyright Tarena Corporation,2009.All rights reserved

第 40 页 共 71 页

姓名 时间

001 张三 2009-1-1

002 李四 2009-2-1

30、javascript常用的方面;

答:常用于数据输入校验、页面特殊效果、AJAX等。

31、Statement,PreparedStatement,CallableStatment的区别 答:

区别有以下几点:

1) Statement是PreparedStatement和CallableStatement的父类;

2)Statement是直接发送Sql语句到数据库,事先没有进行预编译。PreparedStatement会将sql进行预编译,当sql语句要重复执行时,数据库会调用以前预编译好的sql语句,所以PreparedStatement在性能方面会更好;

3)PreparedStatement在执行sql时,对传入的参数可以进行强制的类型转换。以保证数据格式与底层的数据库格式一致。

4)CallableStatement 适用与存储过程的查询表达语句

32、运行ant需要设置的环境变量有? 答:ANT_HOME、JAVA_HOME、PATH。

33、解释四种会话跟踪技术?

答:隐藏表单域、URL重写,Cookie、Session。

1.隐藏表单域:

2.URL重写:URL可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。

3.Cookie:一个Cookie是一个小的,已命名数据元素。服务器使用SET-Cookie头标将它作为HTTP响应的一部分传送到客户端,客户端被请求保存Cookie值,在对同一服务器的后续请求使用一个Cookie头标将之返回到服务器。与其它技术比较,Cookie的一个优点是在浏览器会话结束后,甚至在客户端计算机重启后它仍可以保留其值。

4.Session:使用setAttribute(String str,Object obj)方法将对象捆绑到一个会话

34、J2EE 、EJB、JDBC 是一回事吗,它们之间有什么关系?

答:不是一回事,J2EE(Java 2 Platform,Enterprise Edition)是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性。其中,EJB和JDBC都属于J2EE的一部分。

35、J2EE是什么?它包括哪些技术?

答:从整体上讲,J2EE是使用Java技术开发企业级应用的一种事实上的工业标准,它是Java技术不断适应和促进企业级应用过程中的产物。适用于企业级应用的J2EE,提供一个平台独立的、可移植的、多用户的、安全的和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。J2EE是一个标准,而不是一个现成的产品。 主要包括以下这些技术:

Copyright Tarena Corporation,2009.All rights reserved

本文来源:https://www.bwwdw.com/article/bqt.html

Top