java笔试面试题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.单选题
二.多选题
三.简答题
四.查错题
五.编程题
六.数据库
一.单选题
1.下列不可作为java语言修饰符的是(D)
A) a1 B) $1
C) _1 D) 11
2.有一段java 应用程序,它的主类名是a1,那么保存它的源文件名可以是(A)
A) a1.java B) a1.class
C) a1 D) 都对
3.整型数据类型中,需要内存空间最少的是(D)
A) short B) long
C) int D) byte
4. Java 类可以作为(C)
A) 类型定义机制 B) 数据封装机制
C) 类型定义机制和数据封装机制 D) 上述都不对
5.在创建对象时必须(C)
A) 先声明对象,然后才能使用对象
B) 先声明对象,为对象分配内存空间,然后才能使用对象
C) 先声明对象,为对象分配内存空间,对对象初始化,然后才能使用对象
D) 上述说法都对
6.在调用方法时,若要使方法改变实参的值,可以(B)
A) 用基本数据类型作为参数
B) 用对象作为参数
C) A和B都对
D) A和B都不对
7. Java中(C)
A) 一个子类可以有多个父类,一个父类也可以有多个子类
B) 一个子类可以有多个父类,但一个父类只可以有一个子类
C) 一个子类可以有一个父类,但一个父类可以有多个子类
D) 上述说法都不对
8.Java语言具有许多优点和特点,哪个反映了Java程序并行机制的特点?(B)
A) 安全性 B) 多线性
C) 跨平台 D) 可移植
9. Character流与Byte流的区别是(C)
A) 每次读入的字节数不同
B) 前者带有缓冲,后者没有
C) 前者是字符读写,后者是字节读写
D) 二者没有区别,可以互换使用
10.以下声明合法的是(D)
A)default String s; B)public final static native int w( ) C)abstract double d; D)abstract final double hyperbolicCosine( )
11.关于以下application的说明,正确的是(C)
2. {
3. static int x=10;
4. static { x+=5;}
5. public static void main(String args[ ])6. {
7. System.out.println(“x=” + x); 8. }
9. static { x/=3;}
10. }
A)4行与9行不能通过编译,因为缺少方法名和返回类型
B)9行不能通过编译,因为只能有一个静态初始化器
C)编译通过,执行结果为:x=5
D)编译通过,执行结果为:x=3
12.关于以下程序代码的说明正确的是(D)
1.class HasStatic{
2. private static int x=100;
3. public static void main(String args[ ]){
4. HasStatic hs1=new HasStatic( );
5. hs1.x++;
6. HasStatic hs2=new HasStatic( );
7. hs2.x++;
8. hs1=new HasStatic( );
9. hs1.x++;
11. System.out.println(“x=”+x);
12. }
13. }
A) 5行不能通过编译,因为引用了私有静态变量
B) 10行不能通过编译,因为x是私有静态变量
C) 程序通过编译,输出结果为:x=103
D) 程序通过编译,输出结果为:x=102
13.以下选项中循环结构合法的是(C)
A)while (int i<7)
{
i++;
System.out.println(“i is “+i);
}
B) int j=3;
while(j) {
System.out.println(“ j is “+j);
}
C)int j=0;
for(int k=0; j + k !=10; j++,k++) {
System.out.println(“ j is “+ j + “k is”+ k);
}
D) int j=0;
do{
System.out.println( “j is “+j++);
if (j = = 3) {continue loop;}
}while (j<10);
14. 类Test1定义如下:
1.public class Test1{
2. public float aMethod(float a,float B){ } 3.
4.}
将以下哪种方法插入行3是不合法的。

(B)
A)public float aMethod(float a, float b,float C){ }
B)public float aMethod(float c,float D){ }
C)public int aMethod(int a, int B){ }
D)private float aMethod(int a,int b,int C){ }
15. 类Test1、Test2定义如下:
1. public class Test1
2.{ public float aMethod(float a,float B) throws 3. IOException { }
4. }
5. public class Test2 extends Test1{
6.
7.}
将以下哪种方法插入行6是不合法的。

( A )
A)float aMethod(float a,float B){ }
B)public int aMethod(int a,int B)throws Exception{ }
C)public float aMethod(float p,float q){ }
D)public int aMethod(int a,int B)throws IOException{ }
16. 关于以下程序段,正确的说法是( C )
1. String s1=”abc”+”def”;
2. String s2=new String(s1);
3. if(s1= =s2)
4. System.out.println(“= = succeeded”);
5. if (s1.equals(s2))
6. System.out.println(“.equals() succeeded”);
A)行4与行6都将执行 B)行4执行,行6不执行
C)行6执行,行4不执行 D)行4、行6都不执行
17. Java application中的主类需包含main方法,main方法的返回类型是什么?( D )
A)int B)float
C)double D)void
18. 以下哪个方法用于定义线程的执行体?(C)
A) start() B)init()
C)run() D)synchronized()
19. 以下标识符中哪项是不合法的( A )
A)const B)$double
C)hello D)BigMeaninglessName
20. 以下哪个关键字可以用来为对象加互斥锁?( D )
A)transient B)static
C) serialize D)synchronized
21. 在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同。

这种面向对象程序的特性称为( C )。

A)隐藏 B)覆盖
C)重载 D)Java不支持此特性
22. 以下关于构造函数的描述错误的是( A )。

A)构造函数的返回类型只能是void型。

B)构造函数是类的一种特殊函数,它的方法名必须与类名相同。

C)构造函数的主要作用是完成对类的对象的初始化工作。

D)一般在创建新对象时,系统会自动调用构造函数。

23. 下列哪些语句关于Java内存回收的说明是正确的? ( B )
A)程序员必须创建一个线程来释放内存
B)内存回收程序负责释放无用内存
C)内存回收程序允许程序员直接释放内存
D)内存回收程序可以在指定的时间释放内存对象
24. 若需要定义一个类域或类方法,应使用哪种修饰符?( C )
A)static B)package
C)private D)public
25. 有以下方法的定义,请选择该方法的返回类型( D )。

ReturnType method(byte x, double y) {
return (short)x/y*2;
}
A)byte B)short
C)int D)double
26.要从文件"file.dat"中读出第10个字节到变量c中,下列哪个方法适合? (D)
A) FileInputStream in=new FileInputStream("file.dat"); in.skip(9); int c=in.read();
B) FileInputStream in=new FileInputStream("file.dat"); in.skip(10); int c=in.read();
C) FileInputStream in=new FileInputStream("file.dat"); int c=in.read();
D) RandomAccessFile in=new RandomAccessFile("file.dat"); in.skip(9);
int c=in.readByte();
27. Java编程所必须的默认引用包为( B )
A) javA)sys包
B) javA)lang包
C) javA)util包
D)以上都不是
28. 下面语句在编译时不会出现警告或错误的是( C )
A) float f=3.14; B) char c=”c”;
C) Boolean b=null; D) int i=10.0;
29.下面不是合法标识符的是( A )
A) 2ofUS
B) giveMes
C) whataQuiz
D) $d2000_
30.下面哪一个是合法的数组声明和构造语句( C )
A) int[] ages = [100];
B) int ages = new int[100];
C) int[] ages = new int[100];
D) int() ages = new int(100);
31.下面说法不正确的是( C )
A) 一个子类的对象可以接收父类对象能接收的消息;
B) 当子类对象和父类对象能接收同样的消息时,它们针对消息产生的行为可能不同;
C) 父类比它的子类的方法更多;
D) 子类在构造函数中可以使用super( )来调用父类的构造函数;
32.给出下面代码段, 哪行将引起一个编译时错误?( D )
1) public class Test {
2) int n = 0;
3) int m = 0;
4) public Test(int a) { m=a; }
5) public static void main(String arg[]) {
6) Test t1,t2;
7) int j,k;
8) j=3; k=5;
9) t1=new Test();
10) t2=new Test(k);
11) }
12) }
A) 行1 B) 行4
C) 行6 D) 行9
33.下面程序中类ClassDemo中定义了一个静态变量sum,分析程序段的输出结果。

( C )
class ClassDemo {
public static int sum=1;
public ClassDemo() {
sum = sum + 5; }
}
public class ClassDemoTest{
public static void main(String args[]) {
ClassDemo demo1=new ClassDemo();
ClassDemo demo2=new ClassDemo();
System.out.println(demo1.sum);
}
}
A) 0 B) 6
C) 11 D) 2
34.下面这些类型的应用,那个不使用Java语言来编写?( A )
A)JavaScript B)Applet
C)Servlet D)Java Swing
35.声明成员变量时,如果不使用任何访问控制符(public, protected, private),则以下哪种类型的类不能对该成员进行直接访问( D )
A)同一类
B)同一包中的子类
C)同一包中的非子类
D)不同包中的子类
36.下列哪种异常是检查型异常,需要在编写程序时声明( C )
A)NullPointerException
B)ClassCastException
C)FileNotFoundException
D) IndexOutOfBoundsException
37.下面哪个流类属于面向字符的输入流( D )
A)BufferedWriter B)FileInputStream
C)ObjectInputStream D) InputStreamReader
38.下面关于数组声明和初始化的语句那个有语法错误?( C )
A)int a1[]={3,4,5};
B)String a2[]={"string1","string1","string1"};
C)String a3[]=new String(3);
D)int[][] a4=new int[3][3];
39.下面哪一行代码正确的声明了一个类方法(静态方法)?( D ) A)public int method(int i) B)protected method(int i)
C)public static method(String s)
D)protected static void method(Integer i)
40. 下面的方法,当输入为2的时候返回值是多少?( D )
public int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2:
result = result + i * 2;
case 3:
result = result + i * 3;
}
return result;
}
A)0 B)2
C)4 D)10
41. getCustomerInfo()方法如下,try中可以捕获三种类型的异常,如果在该方法运行中产生了一个IOException,将会输出什么结果( A )
public void getCustomerInfo() {
try {
// do something that may cause an Exception
} catch (java.io.FileNotFoundException ex){
System.out.print("FileNotFoundException!");
} catch (java.io.IOException ex){
System.out.print("IOException!");
} catch (javA)lang.Exception ex){
System.out.print("Exception!");
}
}
A)IOException!
B)IOException!Exception!
C)FileNotFoundException!IOException!
D)FileNotFoundException!IOException!Exception!
42.新建一个流对象,下面哪个选项的代码是错误的?( B )
A)new BufferedWriter(new FileWriter("A.txt"));
B)new BufferedReader(new FileInputStream("A.dat"));
C)new GZIPOutputStream(new FileOutputStream("A.zip"));
D)new ObjectInputStream(new FileInputStream("A.dat"));
43. Java的集合框架中重要的接口java.util.Collection定义了许多方法。

选项中哪个方法不是Collection接口所定义的?( C )
A)int size()
B)boolean containsAll(Collection c)
C)compareTo(Object obj)
D)boolean remove(Object obj)
44.一个线程在任何时刻都处于某种线程状态(thread state),例如运行状态、阻塞状态、就绪状态等。

一个线程可以由选项中的哪种线程状态直接到达运行状态?( D )
A)死亡状态
B)阻塞状态(对象lock池内)
C)阻塞状态(对象wait池内)
D)就绪状态
45.选项中哪一行代码可以替换题目中//add code here而不产生编译错误?( A )public abstract class MyClass {
public int constInt = 5;
//add code here
public void method() {
}
}
A)public abstract void method(int a);
B)value = value + 5;
C)public int method();
D)public abstract void anotherMethod() {}
46. File类是IO包中唯一表示磁盘文件信息的对象,它定义了一些与平台无关的方法来操纵文件。

通过调用File类提供的各种方法,我们能够创建、删除文件、重命名文件、判断文件的读写权限及是否存在,设置和查询文件的最近修改时间等。

下面的代码片段实现的是什么功能?( B )
File file = new File("C:\\test.dat");
if (file.exists()) {
file.delete();
}
A)创建C:\test.dat。

B)删除C:\test.dat。

C)打开C:\test.dat文件输出流。

D) 移动C:\test.dat
47.阅读Shape和Circle两个类的定义。

在序列化一个Circle的对象circle到文件时,下面哪个字段会被保存到文件中? ( B )
class Shape {
public String name;
}
class Circle extends Shape implements Serializable{
private float radius;
transient int color;
public static String type = "Circle";
}
A)name B)radius
C)color D)type
48.下面是People和Child类的定义和构造方法,每个构造方法都输出编号。

在执行new Child("mike")的时候都有哪些构造方法被顺序调用?请选择输出结果 ( D )
class People {
String name;
public People() {
System.out.print(1);
}
public People(String name) {
System.out.print(2);
= name;
}
}
class Child extends People {
People father;
public Child(String name) {
System.out.print(3);
= name;
father = new People(name + ":F");
}
public Child(){
System.out.print(4);
}
}
A)312 B) 32
C)432 D) 132
49.下面哪个选项中的代码没有定义内部类,或者错误的定义了内部类? ( C )
A)public Class Line {
int length;
Class Point {//内部类代码}
}
B) public Class Line {
public Point getPoint() {
return new Point(){//内部类代码};
}
}
C) public Class Line { //外部类代码 }
Class Point {//内部类代码}
D) public Class Line {
public int calcLength() {
Class Point {//内部类代码}
}
}
50.list是一个ArrayList的对象,哪个选项的代码填写到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?( D )
Iterator it = list.iterator();
int index = 0;
while (it.hasNext()){
Object obj = it.next();
if (needDelete(obj)) {
//needDelete返回boolean,决定是否要删除
//todo delete
}
index ++;
}
A)list.remove(obj); B)list.remove(index);
C)list.remove(it.next()); D)it.remove();
二.多选题
1.下列说法正确的有(BCD )
A.环境变量可在编译source code时指定
B.在编译程序时,所能指定的环境变量不包括class path
C. javac一次可同时编译数个Java源文件
D. javac.exe能指定编译结果要置于哪个目录(directory)
2.下列标识符不合法的有(ACD )
A.new
B.$Usdollars
C.1234
D.car.taxi
3.下列说法错误的有(BCD )
A.数组是一种对象
B.数组属于一种原生类
C. int number=[]={31,23,33,43,35,63}
D.数组的大小可以任意改变
4.不能用来修饰interface的有(ACD )
A.private
B.public
C.protected
D.static
5.下列正确的有(ACD )
A. call by value不会改变实际参数的数值
B. call by reference能改变实际参数的参考地址
C. call by reference不能改变实际参数的参考地址
D. call by reference能改变实际参数的内容
6.下列说法错误的有(ACD )
A.在类方法中可用this来调用本类的类方法
B.在类方法中调用本类的类方法时可直接调用
C.在类方法中只能调用本类中的类方法
D.在类方法中绝对不能调用实例方法
7.下列说法错误的有(ABC )
A. Java面向对象语言容许单独的过程与函数存在
B. Java面向对象语言容许单独的方法存在
C. Java语言中的方法属于类中的成员(member)
D. Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同
三.简答题
1.构造器Constructor是否可被override?
答:不能,应为构造器不能被继承,所以不能被重写,但是可以被重载。

2.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
答:接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类中可以有静态的main方法。

3.写clone()方法时,通常都有一行代码,是什么?
答:clone有缺省行为,Super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。

4.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
答:不能。

abstract需要重载,static为类方法,没有重载一说 abstract为没有实现的方法,native为本机实现的方法,自相矛盾。

abstract方法没有实现,也不可能实际调用抽象方法,没有必要synchronized修饰,当然子类可以根据需要同步该方法。

5.String s="Hello";s=s+"world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
答:没有。

原来的对象中的内容还是“Hello”,只是后来的s引用指向的是另一个对象“Hello world”而已。

6.String s = new String("xyz");创建了几个String Object? 二者之间有什么区别?
答:创建了两个Stirng Object ,一个是对象“xyz”,一个是new String()来创建的。

但是由new String()创建的对象是“xyz”的一个拷贝内容是完全一样的,使用equal ()比较是true的,但是使用“==”比较是false的。

7.String 和StringBuffer的区别
答:StringBuffer是可变的,但是String是不可变的。

String实例化以后所有的属性都是final的,而StringBuffer确不是。

8.在 JAVA 中,如何跳出当前的多重嵌套循环?
答:在最外层循环前加 label 标识,然后用 break:label 方法即可跳出多重循环。

9.静态变量和实例变量的区别?
答:静态变量也称为类变量,归全类共有,它不依赖于某个对象,可通过类名直接访问;而实例变量必须依存于某一实例,只能通过对象才能访问到它。

10.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
答:会执行。

如果finally没有return则在finally后执行。

如果有这finally执行后就结束,不会执行try中的return。

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

答:同步(synchronized)和异步(asynchronized)是对于多线程(multi-threading)而言的
同步可防止并发主要出于数据安全的考虑 .如某一线程在执行完对数据的加法操作后
在还没来得及使用新数据之前被另一线程就抢先执行了减法操作这样它就没法得到它单一施加影响的数据结果,存在安全隐患异步允许并发 ajax技术通常都是异步实现的,
去服务端请求数据的同时前台的操作不会阻塞而是异步进行节省时间的同时保证了
效率。

12.启动一个线程是用run()还是start()?
答: 启动线程肯定要用start()方法。

当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。


并不意味着线程就会立即运行。

当CPU分配给它时间时,才开始执行run()方法(如果
有的话)。

start()是方法,它调用run()方法.而run()方法是你必须重写的. run()方法中包含的是线程的主体。

13.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
答:分几种情况:
1.其他方法前是否加了synchronized关键字,如果没加,则能。

2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。

3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。

4.如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能
同步,因为非静态的方法用的是this。

14.List、Map、Set三个接口,存取元素时,各有什么特点
答:List 以特定次序来持有元素,可有重复元素。

Set 无法拥有重复元素,内部排序。

Map 保存key-value值,value可多值。

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

16.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不一定对。

当没有重写equas和hashcode时是错的,他们的hashcode一定相同,但是一旦按照自己的意愿来重写这两个方法,就有可能有不同的hashcode。

17.请说出你所知道的线程同步的方法。

答:wait():使一个线程处于等待状态,并且释放所持有的对象的 lock;sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException 异常;notify():唤醒一个处于等待状态的线程,注意的是在调用
此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级;notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

18.java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说
出他们分别是哪些类?
答:字节流,字符流。

字节流继承于 InputStream、 OutputStream,字符流继承于Reader、 Writer。

在 java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

19.Java 中常用的设计模式?说明工厂模式?
答: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(模板方法模式), ChainOf Responsibleity(责任链模式)。

工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供数
据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相
同的方法,但是这些方法针对不同的数据进行了不同的操作。

首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。

然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。

当得到子类的实例后,开发人员可以调用基类中
的方法而不必考虑到底返回的是哪一个子类的实例。

20.什么是 ORM?
答:对象关系映射(Object—Relational Mapping,简称 ORM)是一种为了解决面向对象与面向关系数据库存在的互不匹配的现象的技术;简单的说, ORM 是通过使用描
述对象和数据库之间映射的元数据,将 java程序中的对象自动持久化到关系数据库中;本质上就是将数据从一种形式转换到另外一种形式。

21.什么是重量级?什么是轻量级?
答:轻量级是指它的创建和销毁不需要消耗太多的资源,意味着可以在程序中经常创
建和销毁 session 的对象;重量级意味不能随意的创建和销毁它的实例,会占用很多
的资源。

22.如何事务处理?
答:Connection 类中提供了 3 个事务处理方法:
setAutoCommit(Boolean autoCommit):设置是否自动提交事务,默认为自动提交事务,即为 true,通过设置 false 禁止自动提交事务;commit():提交事务;rollback():回滚
事务。

23.JDBC,Hibernate 分页怎样实现?答:方法分别为:
1) Hibernate 的分页:
Query query = session.createQuery("from Student");
query.setFirstResult(firstResult);//设置每页开始的记录号
query.setMaxResults(resultNumber);//设置每页显示的记录数
Collection students = query.list();
2) JDBC 的分页:根据不同的数据库采用不同的 sql 分页语句
例如: Oracle 中的 sql 语句为: "SELECT * FROM (SELECT a.*, rownum r FROM
TB_STUDENT) WHERE r between
2 and 10" 查询从记录号 2 到记录号 10 之间的所有记录
Mysql 中是利用 limit 来进行分页的。

24.说出 Servlet 的生命周期。

答:Web 容器加载 Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其 init 方法进行 Servlet的初始化,请求到达时运行其 service 方法, service 方法自动派遣运行与请求对应的 doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其 destroy 方法。

25.forward 和 redirect 的区别?
答:forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个 URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以 session,request 参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的链接地址。

前者更加高效,在前者可以满足需要时,尽量使用 forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用 sendRedirect()方法。

26.jsp 有哪些内置对象?作用分别是什么?
答:JSP 共有以下 9 种基本内置组件(可与 ASP 的 6 种内部组件相对应):request:用户端请求,此请求会包含来自 GET/POST 请求的参数;
response:网页传回用户端的回应;
pageContext:网页的属性是在这里管理;
session:与请求有关的会话期;
application:servlet 正在执行的内容;
out:用来传送回应的输出;
config:servlet 的构架部件;
page:JSP 网页本身;
exception:针对错误网页,未捕捉的例外。

27.javascript 常用的方面
答:常用于数据输入校验和页面特殊效果等
28.页面间对象传递的方法
答:request,session,application,cookie 等
29.过滤器有哪些作用?
答:可以验证客户是否来自可信的网络,可以对客户提交的数据进行重新编码,可以从系统里获得配置的信息,可以过滤掉客户的某些不应该出现的词汇,可以验证用户是否登录,可以验证客户的浏览器是否支持当前的应用,可以记录系统的日志等等。

30.EJB 的几种类型
答:会话(Session)Bean、实体(Entity)Bean、消息驱动的(Message Driven)Bean;会话 Bean 又可分为有状态(Stateful)和无状态(Stateless)两种;实体Bean 可分为 Bean 管理的持续性(BMP)和容器管理的持续性(CMP)两种。

31.请写出 spring 中 I0C 的三种实现机制
答:三种机制为:通过 setter 方法注入、通过构造方法注入和接口注入。

32.写出你熟悉的开源框架以及各自的作用。

答:框架:hibernate、spring、struts;
Hibernate 主要用于数据持久化;
Spring 的控制反转能起到解耦合的作用;
Struts 主要用于流程控制。

四.查错题
1. abstract class Name{
private String name;
public abstract boolean isStupidName(String name){}
}
答案:错。

abstract method 必须以分号结尾,且不带花括号。

2. public class Something{
void doSomething(){
private String s="";
int l=s.length();
}
}
答案:错。

局部变量前不能放置任何访问修饰符(private、public和protecteD)。

final 可以用来修饰局部变量。

final是费访问修饰符。

3. abstract class Something{
private abstract String doSomething();
}
答案:错。

abstract的method不能以private修饰。

abstract的method就是让子类implement(实现)具体细节在,不可以用private把abstract method封锁起来那。

(同理,abstract method 前不能加final)。

4. public class Something{
public int addOne(final int x){
return ++x;
}
}
答案:错。

int x 被修饰成final,意味着x不能在addOne method中被修改。

public static void main(String[] args){
Other o=new Other();
new Something().addOne(o);
}
public void addOne(final Other o){
o.i++;
}
}
class Other{ public int i; }
答案:正确。

在addOne method 中,参数o被修饰成final,修改的是o的成员变量。

如果修改的是o的引用就错。

6. class Something{
int i;
public void doSomething(){
System.out.println("i="+i);
}
}
答案:正确。

输出的是“i=0”。

int i属于实例变量或叫成员变量,有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的实例变量或叫成员变量。

final的实例变量没有
default value,必须在constructor(构造器)结束之前被赋予一个明确的值。

可以修
改为“final int i=0”。

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方法不能调用非静态的方法。

可改成"System.out.println("s,doSomething() returns"+s.doSomething());"同理,static method 不能访问非静态成员变量。

10. interface A{
int x=0;
}
class B{
int x=1;
}
class C extends B implements A{
public void pX(){
System.out.println(x);
}
publci static void main(String[] args){
newC().pX();
}
}
答案:错误。

在编译时会发生错误,错误原因是未明确x调用,两个x都匹配。

对于父类的变量,可以用super.x来明确,而接口的属性默认为public static final.所以可以通过A)x来明确。

五.编程题
1.使用Java语言编写代码,将一个正整数分解质因数,例如:输入90,打印输出90=2*3*3*5。

答:
public class Math{
/** * 分解质因数 **/
public static void main(String[] args) {
int n,i;
System.out.println("please input a number:");
Scanner input=new Scanner(System.in);
n=input.nextInt();
System.out.println(n);
for(i=2;i<=n;i++) {
while(n!=i) {
if(n%i==0) {
System.out.println(i);
n=n/i;
}else{
break;
}
}
}
System.out.println(n);
}
2. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子
长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?答:
public class Rabit {
/**
* 古典问题:兔子
* @param args
*/
public static void main(String[] args) {
int f1 = 1;
int f2 = 1;
for(int n = 1; n <= 20; n++){
System.out.println(f1+ "\t" + f2);
if(n % 2 ==0){
System.out.print("");
}
f1 = f1 + f2;
f2 = f2 + f1;
}
}
}
3.创建一个静态方法,给它传入一个对象,请循环的打印出该对象所在类的类名和所
实现的方法名
答:
import javA)lang.reflect.*;
public class Test{
public static void test(Object obj){
Class clazz=obj.getClass();
Method[] ms=clazz.getDeclaredMethods();
long len=Array.getLength(ms);
for(int i=0;i<len;i++){
System.out.println("类名:"+clazz.getName()+
"方法名:"+ms[i].getName());
}
}
class A{
public void b(){}
public void c(){}
public void d(){}
public void e(){}
}
public static void main(String[] args){
Test t=new Test();
Test.A a=t.new A();
test(a);
}
}
4.给你一组字符串如:iu7i8hy4jnb2,让你编程输出里面的数字:7842 答:
public class TestDemo {
public static void main(String[] args) {
String s = "iu7i8hy4jnb2";
s = s.replaceAll("[^\\d]", "");
System.out.println(s);
}
}
5.给你一组字符串,倒序输出。

答:
public class TestDemo {
public static void main(String[] args) {
String s = "iu7i8hy4jnb2";
StringBuffer sb = new StringBuffer(s);
sB)reverse();
System.out.println(sb);
}
}
六.数据库
1. 有三张表,学生表 S,课程 C,学生课程表 SC,学生可以选修多门课程,一门课程可以被多个学生选修,通过 SC 表关联。

1)写出建表语句;
2)写出 SQL 语句,查询选修了所有选修课程的学生;
3)写出 SQL 语句,查询选修了至少 5 门以上的课程的学生。

答:1)建表语句如下(mysql 数据库):。

相关文档
最新文档