Java笔试题

JAVASE 部分

一、从如下选项中选择出三个正确的标识符 (Choose three)?javascript

A. IDoLikeTheLongNameClasshtml

B. $byte前端

C. constjava

D. _okpython

E. 3_casemysql

答:ABDlinux

二、如下哪两段代码能够正常编译经过 (Choosec++

two)?git

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

三、如下哪两段代码显示了"is-a""关系(Choose two)?

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


Copyright Tarena Corporation,2009.All rights reserved

2

 


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

class Container implements Component{

private Component[] children;

}

答:DE

四、运行以下代码的结果是什么? public class Static{

static {

int x = 5;

}

static int x,y;

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

myMethod();

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

}

public static void myMethod(){

y = x+++++x;

}

}

A.compiletime error

B.prints: 1

C.prints: 2

D.prints: 3

E.prints: 7

F.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

六、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);

}

}


Copyright Tarena Corporation,2009.All rights reserved

3

 

A. Compile time error B. compilation and output of false

C. compilation and output of true D. compilation and output of null

答:B

七、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;

答:ABD

八、下面那几个函数是 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 ){...}

答:AD

九、给出以下声明:

String s = “Example”;

合法的代码有哪些?

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

 

十、以下哪些不是 java 的关键字?

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

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

A)程序开发者必须本身建立一个线程进行内存释放的工做

B)垃圾收集将检查并释放不在使用的内存

C)垃圾收集容许程序开发者明确指定并当即释放该内存

D)垃圾收集可以在指望的时间释放被 java 对象使用的内存

答:B

十二、已知表达式 int m [ ] = {0,1,2,3,4,5,6};

下面哪一个表达式的值与数组下标量总数相等?

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


Copyright Tarena Corporation,2009.All rights reserved

4

 

答:D

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

A)经过调用 stop()方法而中止的线程。

B)经过调用 sleep()方法而中止的线程。

C)经过调用 wait()方法而中止的线程。

D)经过调用 suspend()方法而中止的线程。

答:D

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

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

B)使用 start()方法能够使一个线程成为可运行的,可是它不必定当即开始运行。

C)当一个线程由于抢先机制而中止运行,它被放在可运行队列的前面。

D)一个线程可能由于不一样的缘由中止并进入可运行状态。

答:BCD

1五、已知以下代码:

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

1六、已知以下代码:

public class Test

{

public static void main(String arg[] )

{

int i = 5;

do{

System.out.print(i);

}while(--i>5);

System.out.print(“finished”);

}

}

执行后的输出是什么?

A)5 B)4 C)6 D)finished


Copyright Tarena Corporation,2009.All rights reserved

5

 

答:AD

1七、已知以下代码:

switch (m)

{

case 0: System.out.print(“Condition 0”);

case 1: System.out.print(“Condition 1”);

case 2: System.out.print(“Condition 2”);

case 3: System.out.print(“Condition 3”);

default: System.out.print(“Other Condition ”);

}

当 m 的值为何时能输出“Condition 2”

A)0 B)1 C)2 D)3 E) 4F)None 答:ABC
1八、下面的哪些声明是合法的?

A)long 1 = 4990 B)int i = 4L C)float f =1.1 D)double d = 34.4 答:AD

1九、给出以下代码: class Test{ private int m; public static void fun() { //some code? } } 如何使成员变量 m 被函数 fun()直接访问? A)将 private int m 改成 protected int m B)将 private int m 改成 public int m C)将 private int m 改成 static int m D)将 private int m 改成 int m 答:C 20、如下哪一个方法用于定义线程的执行体? A)start() B)init() C)run() D)main() E)synchronized() 答:C
2一、请看以下代码

class Person {

private int a;

public int change(int m) {

return m;

}

}

public class Teacher extends Person {

public int b;


Copyright Tarena Corporation,2009.All rights reserved

6

 


public static void main(String arg[]) { Person p = new Person();

Teacher t = new Teacher();

int i;

// point x

}

}

下面哪些放在// point x?行是正确的?

A i = m;

B i = b;

C i = p.a;

D i = p.change(30);

E i = t.b;

答:DE

2二、给出下面的代码段:( )

public class Base{

int w, x, y, z;

public Base(int a, int b)

{x=a; y=b;

}

public Base(int a, int b, int c, int d)

{

//assignment x=a, y=b

w=d;z=c;

}}

在代码说明//assignment x=a, y=b 处写下以下哪几个代码是正确的?A)Base(a, b); B)x=a, y=b; C)x=a; y=b; D)this(a,b);答:CD

2三、给出下面代码:

public class Person{

static int arr[ ] =new int[10];

public static void main(String a [ ]){

System.out.println(arr[ 1 ]);

}

}

哪一个选项是正确的?

A. 编译时将产生错误;

B. 编译时正确,运行时将产生错误;

C. 输出 0;

D. 输出空。

答:C

2四、关于运算符>>和>>>描述正确的是


Copyright Tarena Corporation,2009.All rights reserved

7

 

A. >>执行移动

B. >>执行翻转

C. >>执行有符号右移,>>>执行无符号右移

D. >>执行无符号右移,>>>执行有符号右移

答:C

2五、下列关于栈的叙述正确的是

A 栈是非线性结构 B 栈是一种树状结构

C 栈具备先进先出的特征 D 栈具备后进先出的特征答:D

2六、选出 Java 语言中的关键词(多选)

A. NULL

B. sizeof

C. implements

D. extends

答:CD

2七、现有下述代码,选择出可以打印出”Test2”的数字(多选)

switch(x){

case 1:

System.out.println("Test1");

case 2:

case 3:

System.out.println("Test2");

break;

}

System.out.println("Test3");

A.0 D. 3 B.1 E. 4 C.2
答:CD

2八、字符(char)的整型表示范围为

A. 0 . . . 32767 C. -256 . . . 255

  B. 0 . . . 65535 D. -32768 . . . 32767 答:B

2九、选择 Java 语言中的基本数据类型(多选)

A. byte D. char

B. Integer E. long

C. String

答:ADE

30、从下列选项中选择正确的 Java 表达式(多选)


Copyright Tarena Corporation,2009.All rights reserved

8

 


A. int k=new String(“aa”);

B. String str=String(“bb”);

C. char c=74;

D. long j=8888;

答:CD

3一、下述代码的执行结果为

public class foo {

static String s;

public static void main (String[]args) {

System.out.printIn (“s=” + s);

}

}

A.代码可以编译,打印出“s=”

B.代码可以编译,打印出“s=null”

C.代码不可以编译,由于 String s 没有初始化

  D.代码可以编译,可是当调用 toString()时抛出 NullPointerException 异常答:B

3二、下述代码的执行结果是

class Super {

public int getLength() {return 4;}

}

public class Sub extends Super {

public long getLength() {return 5;}

public static void main (String[]args) {

Super sooper = new Super ();

Super sub = new Sub();

System.out.println(sooper.getLength()+ “,” + sub.getLength() );

}

}

A. 4, 4

B. 4, 5

C. 5, 4

D. 5, 5

E. 代码不能被编译答:E

3三、下述程序的执行结果为

int index = 1;

String [] test = new String[3];

String foo = test[index];

A. foo 的值为 “”

B. foo 的值为 null

C. 抛出一个异常


Copyright Tarena Corporation,2009.All rights reserved

9

 

D. 程序不可以被编译答:B

3四、关于 Java 语言,下列描述正确的是(多选)

A. switch 不可以做用在 String 类型上

B. List, Set, Map 都继承自 Collection 接口

C. Java 语言支持 goto 语句

D. GC 是垃圾收集器,程序员不用担忧内存管理答:AD

3五、指出下列程序运行的结果

public class Example{

String str=new String("good");

char[]ch={'a','b','c'};

public static void main(String args[]){

Example ex=new Example();

ex.change(ex.str,ex.ch);

System.out.print(ex.str+" and ");

System.out.print(ex.ch);

}

public void change(String str,char ch[]){

str="test ok";

ch[0]='g';

}

}

A good and abc

B good and gbc

C test ok and abc

D test ok and gbc

答:B

3六、int[][] myArray=new int[][]{new int[]{5,6,2},new int[]{6,9,7,8,3},new int[]{3,2}}; myArray[2][2]的值是()

A. 9

B. 2

C. 6

D. 越界

答:D

3七、下列描述中,那些符合 Java 语言的特征(多选)

A. 支持跨平台(Windows,Linux,Unix 等)

B. GC(自动垃圾回收),提升了代码安全性

C. 支持类 C 的指针运算操做

D. 不支持与其它语言书写的程序进行通信答:ABD


Copyright Tarena Corporation,2009.All rights reserved

10

 

 

3八、关于异常(Exception),下列描述正确的是(多选)

A. 异常的基类为 Exception,全部异常都必须直接或者间接继承它

B. 异常能够用 try{ . . .}catch(Exception e){ . . .}来捕获并进行处理

C. 若是某异常继承 RuntimeException,则该异常能够不被声明

D. 异常能够随便处理,而不是抛给外层的程序进行处理

答:ABC

3九、(单选)声明一个委托 public int myCallBack(int x); 则用该委托产生的回调方

法的原型应该是

A. void myCallBack(int x)

B. int receive(int num)

C. String receive(int x)

D. 不肯定的

答:B

40、(单选)下面的代码实现了设计模式中的什么模式 public class A {

private A instance;

private A() {

}

public static A getInstance {

if ( A == null )

instance = new A();

return instance;

}

}

A. Factory

B. Abstract Factory

C. Singleton

D. Builder

答:C

4一、class Class1

{

public static int Count = 0;

public Class1()

{

Count++;

}

}

public static void main(String args[]){


Copyright Tarena Corporation,2009.All rights reserved

11

 


Class1 o1 = new Class1();

Class1 o2 = new Class1();

}

请问,Class1.Count 的值是多少?( )

A. 1

B. 2

C. 3

D. 4

答:B

4二、三种字符串判空串方法:

1: bool isEmpty = (str.length() == 0);

2: bool isEmpty = (str == String.Empty);

3: bool isEmpty = (str == "");

哪一种方法正确?

A. 1

B. 2

C. 3

答:A

4三、MAX_LENGTH 是 int 型 public 成员变量,变量值保持为常量 100,用简短语句定义这个变量。

A .public int MAX_LENGTH=100;

B. final int MAX_LENGTH=100;

C. final public int MAX_LENGTH=100;

D. public final int MAX_LENGTH=100.

答:CD

4四、 String s=new String(“hello”);

String t =new String(“hello”);

char c [ ] ={?h?,?e?,?l?,?l?,?o?};

下列哪些表达式返回 true ?

A.s.equals(t);

B.t.equals(c);

C.s= =t ;

D.t.equals (new String(“hello”));

E.t= = c;

答:AD

4五、类 Teacher 和 Student 是类 Person 的子类; Teacher t;

Student s;

// t and s are all non-null.

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

最后一条语句的结果是:


Copyright Tarena Corporation,2009.All rights reserved

12

 

A.将构造一个 Student 对象;

B.表达式是合法的;

C.表达式是错误的;

D.编译时正确, 但运行时错误。

答:D

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

一、switch (m)

二、{ 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

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

A. Java 语言只容许单一继承

B. Java 语言只容许实现一个接口

C. Java 语言不容许同时继承一个类并实现一个接口

D. Java 语言的单一继承使得代码更加可靠.

答:AD

4八、main 方法的返回类型是:

A.int

B.void

C.boolean

D.static

E. public

答:B

4九、给定下列代码:

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”);

}


Copyright Tarena Corporation,2009.All rights reserved

13

 


}

oneMethod 正常运行, 将显示?

A. condition 1

B. condition 2

C. condition 3

D. finally

答:AD

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

1) public void modify() {

2) int I, j, k;

3) I=100;

4) while(I>0){

5) j=I*2;

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

5一、对于下列代码

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…}

答:BC

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

b. public interface A {}

public interface B extends A {}


Copyright Tarena Corporation,2009.All rights reserved

14

 

c. public interface A {}

public class B implements A {}

d. public class A {}

public class B { protected A a;}

答:A

5三、下面正确的是

A)float f = 3.14;

B)byte i = 225;

C)long k = 33;

D)int p[ ][ ];

答:CD

5四、下列建立数组的方法正确的是

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” ;

答:ACD


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

A. 线程对象必须实现 Runnable 接口

B. 启动一个线程直接调用线程对象的 run()方法

C. Java 提供对多线程同步提供语言级的支持

D. 一个线程能够包含多个进程

答:C


5六、public class X extends Thread implements Runnable{

public void run(){

System.out.println("this is run()");

}

public static void main(String args[]) {

Thread t=new Thread(new X());

t.start();

}

}

A 第一行会产生编译错误

B 第六行会产生编译错误

C 第六行会产生运行错误

D 程序会运行和启动答:D


Copyright Tarena Corporation,2009.All rights reserved

15

 

 


5七、根据线程安全的相关知识,分析如下代码,当调用 test 方法时 i>10 时是否会引发死锁?

public void test(int i)

{

lock(this) {

if (i>10) {

i--;

test(i);

}

}

}

A. 会锁死

B. 不会锁死

答:B

 

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

A ArrayList myList = new Object();

B List myList = new ArrayList();

C ArraylList myList = new List();

D List myList = new List();

答:B

5九、Which of the following are methods of the Runnable interface。

 A. run B. start C. yield D. stop 答:A

 

60、Java 网络程序设计中,下列正确的描述是(多选)

A. Java 网络编程 API 创建在 Socket 基础之上

B. Java 网络接口只支持 TCP 以及其上层协议

C. Java 网络接口只支持 UDP 以及其上层协议

D. Java 网络接口支持 IP 以上的全部高层协议答:AD

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

A. OutputStream 用于写操做

B. InputStream 用于写操做

C. I/O 库不支持对文件可读可写 API 答:A

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


Copyright Tarena Corporation,2009.All rights reserved

16


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

B. 标签实际上包含了元素和属性两部分。用元素来描述有规律的数据,用属性来描述系统数据。

C. XML 不可跨平台,不具有扩展性。

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

 

6三、(单选)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

答:C

6四、说说下面语句是否有错误,或可能出现的缺陷,并指出错误,或缺陷在哪里?

public class MyFile implements Runnable{ public void run(){

while (true){

try{

FileReader fr=new FileReader(new File("a.txt")) ; String line=fr.readLine(); System.out.println(line);

}catch(IOException err) {

}

Sleep(1000); }

}

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

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

3.没有关闭 FileReader

4.死循环,没有退出的可能

6五、判断下列语句是否正确,若是有错误,请指出错误所在?

List<Short> a = new ArrayList<Short>();

a.add(5);

答:错误,5 的默认类型为 int。

6六、判断下列语句是否正确,若是有错误,请指出错误所在?

void foo(final int []arg){

if (arg.length > 1)

arg[0] = 5;

}

答:正确


Copyright Tarena Corporation,2009.All rights reserved

17

 

 

6七、判断下列语句是否正确,若是有错误,请指出错误所在?

interface A{

int add(final A a);

}

class B implements A{

long add(final A a){

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

}

}

答:错误,返回值不是 long 类型

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

class A{

static{

System.out.print("a");

}

public A (){

System.out.print("x");

}

}

class B extends A{

static{

System.out.print("b");

}

public B (){

System.out.print("y");

}

}

public class Test{

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

ab = new B ();

}

}

答:abxyxy

6九、下列代码的输出结果是什么?

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="+i+"Value for j=" +j);


Copyright Tarena Corporation,2009.All rights reserved

18

 

}

}

}

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

Value for i=2Value for j=1

70、查看下面的代码,写出能够使程序正常执行的修改方法

1.public class MyClass {

2.static String s1;

3. String s2;

4. public static void main(String args[]) {

5. String s3;

6. System.out.println("s1 =" + s1);

7. System.out.println("s2 =" + s2);

8. System.out.println("s3 =" + s3);

9. }

10.}

答:删除第 7 行,将第 5 行改成 String s3 = "";

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

public static void main(String args[]) { String s1 = args[0];

String s2 = args[1];

String myStr = args[2];

System.out.printin("myStr =" + s2 + myStr);

}

}

答:java MyClass 1 2 3 4

7二、写出下面代码的执行结果

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("A"); StringBuffer sf2 = new StringBuffer("B"); aMethod(sf1,sf2);

System.out .println(sf1+ "":"+sf2);

}

}

答:AB:B

 

Copyright Tarena Corporation,2009.All rights reserved

19

 


7三、第 3 行中生成的 object 在第几行执行后成为 garbage collection 的对象?

1.public class MyClass {

2. public StringBuffer aMethod() {

3. StringBuffer sf = new StringBuffer("Hello");

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 行

7四、写出执行下面的代码后的结果

public class MyClass {

public static void main(String args[]) { java.util.Vector v1 = new java.util.Vector(); v1.addElement("Hello");

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

7五、写出执行下面代码后的正确结果

interface MyDB {

public void getConnection();

}

class MyDBDriver implements MyDB {

public void getConnection() {

System.out.println("getConnection()");

}

}

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()


Copyright Tarena Corporation,2009.All rights reserved

20

 

 

7六、下列程序运行的结果是

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("Tom", 3);

d.step = 25;

d.run(d);

System.out.println(d.step);

}

}

答:26

7七、下列程序运行的结果是

public class foo {

public static void main (String args[]){

String s;

System.out.println("s="+s);

}

}

答:编译出错

7八、请看下列程序,运行结果是

class Super{

int i=10;

Super(){

print();

i=20;

}

void print(){

System.out.print(i);

}


Copyright Tarena Corporation,2009.All rights reserved

21

 


}

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

7九、getSomething ()执行时发生 IllegalArgumentException 会出现什么样的结果?

void makeConnection(String url) {

try {

getSomething();

}catch(NullPointerException e) {

System.out.printin("Invalid URL") ;

return;

}catch(Exception e) {

System.out.println("Exception");

}

}

答:打印 Exception

80、有 2 个类 Cat 及 WhiteCat,代码以下:

public class Cat {

protected static String color = "random";

public Cat() {

}

public void showCatColor() {

System.out.println("Cat:" + color);

}

public static void showColor() {

System.out.println("Cat:" + color);

}

}

public class WhiteCat extends Cat {


Copyright Tarena Corporation,2009.All rights reserved

22

 


protected static String color = "white";

public WhiteCat() {

super();

}

public void showCatColor() { System.out.println("WhiteCat:" + color);
}

public static void showColor() { System.out.println("WhiteCat:" + color);
}

}

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

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


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

答:

int[] b = new int[]{....存入 98 个随机的 1~100 的整数};

int[] a = new int[100];


Copyright Tarena Corporation,2009.All rights reserved

23

 

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);

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

pacakge com.tarena;

class BubbleSort{

public static void main(String[] args)

{

int[] arr = {8,4,2,3,5};

arr = sort(arr);

for(int a : arr)

{

System.out.print(a+"\t");

}

}

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

int n = array.length;

do{

cnt = 0;

for( int i=1; i<n; i++ )

{

if( array[i]<array[i-1] )

{

int temp = array[i];

array[i] = array[i-1];

array[i-1] = temp;

cnt++;

}

}

n--;

}while( cnt!=0 );

return array;

}

}

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

答:

package com.tarena;


Copyright Tarena Corporation,2009.All rights reserved

24

 

 

public class WorkerThread extends Thread { private String message;

public WorkerThread(String message) {

this.message = message;

}

public void run(){

System.out.println(message);

}

public static void main(String[] args) {

new WorkerThread("hello world!").start();

}

}

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

答:public static String translate(String str) { String tempStr = "";

try {

tempStr = new String(str.getBytes("GBK"), "ISO-8859-1"); tempStr = tempStr.trim();

} catch (Exception e) { System.err.println(e.getMessage());

}

return tempStr;

}

8五、写一个单例

答:public class Singleton {

private Singleton sin = new Singleton();

private Singleton(){

}

public static Singleton init(){

return sin;

}

}

8六、请写出一个公用方法,输入 String 返回该串是否含有非空字符,并写出 junit

的测试用例

答:

public boolean hasBlank(String str){ if(str.endWith(" ")||str.startWith(" ")){

return false;


Copyright Tarena Corporation,2009.All rights reserved

25

 

}

else{

String[] strs=str.split(“ ”);

if(strs.length()==1){

return false;

}

}

return true;

}

@Test

public void testFun(){

System.out.println(TestString.nullString("test"));

}

8七、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("The ArrayList Sort Before:");

for (int i=0;i<num ;i++ )

{

list.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); System.out.println("list["+i+"]="+list.get(i));

}

}

public void SortIt()

{

Integer tempInt;

int MaxSize=1;

for(int i=1;i<list.size();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());


Copyright Tarena Corporation,2009.All rights reserved

26


}

else

{

for (int j=0;j<MaxSize ;j++ )

{

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

{

list.add(j,tempInt);

MaxSize++;

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

break;

}

}

}

}

System.out.println("The ArrayList Sort After:"); for(int i=0;i<list.size();i++) {

System.out.println("list["+i+"]="+list.get(i));

}

}

public static void main(String[] args)

{

InsertSort sort = new InsertSort(10,100);

sort.SortIt();

}

}

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

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

8八、建立类 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;


Copyright Tarena Corporation,2009.All rights reserved

27


}

public int getAge() {

return age;

}

public boolean isSex() {

return sex;

}

public int getWeight() {

return weight;

}

}

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

package com.tarena;

class SplitString

{

public static String split(String str,int num)

{

byte[] strs = str.getBytes();

if(strs[num-1]<0)

{

num=num-1;

}

byte[] news = new byte[num];

System.arraycopy(strs,0,news,0,num);

return new String(news);

}

public static void main(String[] args)

{

String str = split("我 ABC", 4);

System.out.println(str);

String str2 = split("我 ABC 走 DEF", 6);

System.out.println(str2);

}

}

90、现有一个 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;


Copyright Tarena Corporation,2009.All rights reserved

28

 


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();

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;

}

}

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

答:

package com.tarena;

import java.util.Arrays;

public class NumberSplitChar {

public static void main(String[] args) {

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


Copyright Tarena Corporation,2009.All rights reserved

29


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

for(int i=0;i<beforechars.length;i++){ if(beforechars[i]>='0' && beforechars[i]<='9'){

afterchars[j++]=beforechars[i];

}

}

Arrays.sort(afterchars);

for(int i=(afterchars.length-j);i<afterchars.length;i++){ System.out.print(afterchars[i]);
}

}

}


9一、排序都有哪几种方法?用伪代码实现一个快速排序

答:排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)

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

9二、请用 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;

}


Copyright Tarena Corporation,2009.All rights reserved

30

 

}

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

int tmp = this.integerQueue[0];

tail--;

return tmp;

} else {

System.err.println("队列为空!");

throw new RuntimeException();

}

}

}

 

9三、简述 JAVA 代码安全性

答:类加载器(class loader)加载程序运行所须要的全部类,它经过区分本机文件系统的类和网络系统导入的类增长安全性,这能够限制任何的特洛伊木马程序,由于本机类老是先被加载,一旦全部的类被加载完,执行文件的内存划分就固定了,在这个时候特定的内存地址被分配给对应的符号引用,查找表(lookuo table)也被创建,因为内存划分发生在运行时,解释器在受限制的代码区增长


Copyright Tarena Corporation,2009.All rights reserved

31

 

保护防止未受权的访问;而后字节码校验器(byte code verifier)进行校验,主要执行下面的检查:类符合 JVM 规范的类文件格式,没有违反访问限制,代码没有形成堆栈的上溢或者下溢,全部操做代码的参数类型都是正确的,没有非法的数据类型转换(例如将整型数转换成对象类型)发生;校验经过的字节码被解释器(interpreter)执行,解释器在必要时经过运行时系统执行对底层硬件的合适调用。

9四、简述 java 中的继承

答:Java 中是单继承关系,也就是说一个类只能有一个父类,可是能够同时实现多个接口;对于接口自己而言,能够继承多个接口。这样作的目的就是为了阻止由于多继承而形成的的业务对象自己的可读性的下降。

9五、简述 java 中的垃圾回收

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

五、一个 subclass 怎样调用 superclass 中的方法(myMethod)和构造函数?

答:用 super 关键字,子类去调用父类的方法,如:super.myMethod();子类去调

用父类的构造函数,如:super();。

9六、String a=null; if (a!=null && a.length()>10) {...}

上面面的代码,若是你用“&”替换“&&”将发生什么错误?

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

9七、abstract class 和 interface 有什么区别?

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

 

Copyright Tarena Corporation,2009.All rights reserved

32

 

9八、String, StringBuffer StringBuilder 的区别。

答:String 是不可变的;StringBuffer 是可变的,若是你对字符串中的内容常常进行操做,特别是内容要修改时,那么使用 StringBuffer,若是最后须要String,那么使用 StringBuffer 的 toString()方法,而且它是线程安全的; StringBuilder 是从 JDK 5 开始提供的类,为 StringBuffer 该类补充了一个单个线程使用的等价类;一般应该优先使用 StringBuilder 类,由于它支持全部相同的操做,但因为它不执行同步,因此速度更快。

9九、谈谈 final, finally, finalize 的区别

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

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

finalize —方法名。Java 技术容许使用 finalize() 方法在垃圾收集器将对

象从内存中清除出去以前作必要的清理工做。这个方法是由垃圾收集器在肯定

这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,所以

全部的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其

他清理工做。finalize() 方法是在垃圾收集器删除对象以前对这个对象调用的。

100、屋子里面有椅子,椅子有四只腿及靠背。屋子、椅子什么关系,椅子、腿、靠背什么关系(HAS-A,IS-A)?

答:屋子 HAS-A 椅子

椅子 HAS-A 四只腿及靠背

10一、你认为 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 支持方法重载。


Copyright Tarena Corporation,2009.All rights reserved

33


10). Java 不支持 C 中的 enum 关键字。

11). Java 不支持 C 中的 bitfields 能力。

12). Java 不支持 C 的 typedef。

13). Java 不支持 C 的方法指针。

14). Java 不支持 C 的可变参数表。

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

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

性强,程序可读性好,开发效率高,适合开发大型应用。就本人的经验而言,java

的开发效率优于 c++,实际上 java 大行其道的首要因素就是它够简单。java 尤

其不适合开发桌面程序,GUI 的 API 一直都是 java 的弱点;

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

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

10二、Java 中包含哪些基本数据类型?String 是最基本的数据类型吗?是否能够继承 String 类?

答:基本类型包括 byte、int、short、long、float、double、boolean

String 不是基本数据类型,由于 String 类是 final 的,因此不可以被继承。

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

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

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

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

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

10五、用最有效的方法算出 2 乘已 8 对于几?

答: 2 << 3。

10六、String s=new Stirng("xyz");建立了几个 String Object?

答:建立两个,一个在堆内存(经过 new 获得),另外一个在字符串常量池(“xyz”)对象。

10七、swtich 是否能做用在 byte 上?是否能做用在 long 上? 是否能做用在 char 上? 是否能做用在 short 上?是否能做用在 String 上?

答:能够用在 byte、short、int、char 和枚举类型。

10八、char 型变量中能不能存贮一个中文汉字?为何?

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


Copyright Tarena Corporation,2009.All rights reserved

34

 

 

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

答: 做用域 当前类 同包 子类 其它 public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × ×
重写:发生在父子类之间,方法名相同,参数的类型、个数、顺序相同,返回值相同,访问权限不能更封闭,抛出异常不能宽泛;

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

1十、说一下 “==”和 equals()方法在字串变量操做中的不一样?

答:”==”比较的是两个字符串对象的地址,equals()是比较的两个字符串的具体值。

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

答:必定要有 catch 或者 finally,catch 子句紧跟在 try 块后面,用来指定你想要捕捉的“异常”的类型。若是有 catch 的话,能够没有 finally。

1十二、能用 foreach 遍历访问的对象须要实现?

答:须要实现 Iterable 接口

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

HashSet 、Thread 、String 、FileInputStream 、Class

包:

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

Collection 、Set 、List 、Comparable 、Serializable

11四、Anonymous Inner Class (匿名内部类) 是否能够 extends(继承)其它类,是否能够 implements(实现)interface(接口)?

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

JButton button = new JButton();

button.addActionListener(new ActionListener()

{

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

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

 

Copyright Tarena Corporation,2009.All rights reserved

35


11五、Java 的接口和 C++的虚类的相同和不一样处。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

序列化的实现:将须要被序列化的类实现 Serializable 接口,该接口没有需实现的方法,implements Serializable 只是为了标注该对象是可被序列化的,而后使用一个输出流(如 FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用 ObjectOutputStream 对象的 writeObject(Object obj)方法就能够


Copyright Tarena Corporation,2009.All rights reserved

36


将参数为 obj 的对象写出(即保存其状态),要恢复的话则用输入流。

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

答:垃圾回收(GC)是 Java 语言的一个重要特性,做用是释放再也不被使用的内存。垃圾回收由系统进行管理。在系统认为须要的时候自动启动一个线程进行处理。尽可能减小垃圾内存,也就是新建对象,的数量,能够下降垃圾回收的频率。垃圾回收机制没法保证有足够的内存。

12二、什么是 JAVA 的反射?

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

12三、构造器 Constructor 是否能够被继承?是否能够被 Override?

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

12四、UDP 和 TCP 链接有和异同?

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

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

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

12六、在程序中退出两重循环能够用哪些语句?

答:能够使用标签:

loop1: for (;;) {

for (;;) {

break loop1;

}

}

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

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


Copyright Tarena Corporation,2009.All rights reserved

37


序域。

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

强类型系统:经过运行时类型识别(RTTI)(Run-Time Type Identification),程序可以使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。

装箱、拆箱:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。重载:是方法的名称相同。参数或参数类型不一样,进行屡次重载以适应不一样的须要。

CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

12八、Error 和 Exception 有什么区别? 列出你见过的 Exception 并简要说明。答:error 表示系统级的错误和程序没必要处理的异常,是恢复不是不可能但很困难的状况下的一种严重问题;好比内存溢出,不可能期望程序能处理这样的状况;

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

常见异常有:

NullPointerException:当操做一个空引用时会出现此错误。NumberFormatException:数据格式转换出现问题时出现此异常。ClassCastException:强制类型转换类型不匹配时出现此异常。ArrayIndexOutOfBoundsException:数组下标越界,当使用一个不存在的数

组下标时出现此异常。

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

答:内存泄露是指系统中存在没法回收的内存,有时候会形成内存不足或系统崩溃。Java 存在内存泄露。Java 中的内存泄露固然是指:存在无用可是垃圾回收器没法回收的对象。并且即便有内存泄露问题存在,也不必定会表现出来。本身实现堆栈的数据结构时有可能会出现内存泄露。

130、Java AWT 或 Swing 中的经常使用控件包括:

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

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

实现同步也有两种方法:一种是同步方法,另外一种是同步代码块。

同步方法是在方法返回类型前面加上 synchronized 关键字

同步代码块是 synchronized (这里写须要同步的对象){...}

13一、运行时异常与通常异常有何异同?

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


Copyright Tarena Corporation,2009.All rights reserved

38

 


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

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

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

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

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

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

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

  与进程相对应,线程与资源分配无关,它属于某一个进程,并与进程内的其余线程一块儿共享进程的资源。当进程发生调度时,不一样的进程拥有不一样的虚拟地址空间,而同一进程内的不一样线程共享同一地址空间。

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

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

13五、死锁的必要条件?怎么克服?

答:产生死锁的四个必要条件:

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

请求与保持条件:一个进程因请求资源而阻塞时,对已得到的资源保持不放。

不剥夺条件:进程已得到的资源,在末使用完以前,不能强行剥夺。

循环等待条件:若干进程之间造成一种头尾相接的循环等待资源关系。

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

死锁的解决方法:

a 撤消陷于死锁的所有进程;

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

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

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


Copyright Tarena Corporation,2009.All rights reserved

39

 


13六、谈谈对 ClassLoader 的理解?

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

13七、详细阐述一下 Collection 接口所包含的内容 ?

答:List:有序容许重复存放

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

LinkList-----按顺序存放数据的链表

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

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

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

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

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

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

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

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

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

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

140、Collection 和 Collections 的区别?

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

14一、HashMap 与 TreeMap 的区别?

答:HashMap 经过 hashcode 对其内容进行快速查找,而 TreeMap 中全部的元素都保持着某种固定的顺序,若是你须要获得一个有序的结果你就应该使用


Copyright Tarena Corporation,2009.All rights reserved

40


TreeMap(HashMap 中元素的排列顺序是不固定的)。

14二、ArrayList 和 Vector 的区别?

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

14三、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 就必须为之提供外同步。

14四、OOAD 中的 Association、Aggregation、Composition 的区别?

答:三者从概念上来说:Association 是通常的关联,有”use-a”的含义。 Aggregation 和 Composition 都有总体和部分的关系,其中 Aggregation 中的部分脱离了总体,部分仍然有意义,有”has a”的含义,是共享式的。而 Composition 中的部分脱离了总体,部分将没有任何意义,是独占式的。

  从代码实现的角度上讲:三者都是以属性出现,其中 Association 中做为属性出现时,不须要对其进行强制赋值,只要在使用是对其进行初始化便可。 Aggregation 中做为属性出现时,须要在构造器中经过传递参数来对其进行初始化。Composition 中 做为属性出现时,须要在总体的构造器中建立部分的具体实例,完成对其的实例化。

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


14五、j2ee 经常使用的设计模式?说明工厂模式?

答:Java 中的 23 种设计模式:

Factory(工厂模式), Builder(建造模式),Factory Method(工厂方法模式),

Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式),

Adapter(适配器模式),Bridge(桥梁模式),Composite(组合模式),

Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式),

Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式),

Iterator(迭代器模式),Mediator(调停者模式),Memento(备忘录模式),

 

Copyright Tarena Corporation,2009.All rights reserved

41


Observer(观察者模式),State(状态模式),Strategy(策略模式),

Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)

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


14六、请说出 ArrayList,Vector, LinkedList 的存储性能和特性

答:ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,它们都容许直接按序号索引元素,可是插入元素要涉及数组元素移动等内存操做,因此索引数据快而插入数据慢,Vector 因为使用了 synchronized 方法(线程安全),一般性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数据须要进行前向或后向遍历,可是插入数据时只须要记录本项的先后项便可,因此插入速度较快。

14七、JAVA 中经常使用的 XML 解析技术有哪些?区别是什么?

答: DOM、SAX 两种方式。

DOM:处理大型文件时其性能降低的很是厉害。这个问题是由 DOM 的树形结构所形成的,该结构占用的内存较多,并且 DOM 必须在解析文件以前把整个文档载入内存,适合对 XML 的随机访问。

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

14八、XML 文档定义有几种形式?有何本质区别?

答:两种形式 dtd 和 schema,区别:

  a.Schema 是标准的 XML 文件,而 DTD 则使用本身的特殊语法,所以,只须要知道 XML 的语法规则就能够编写 Schema 了,不须要再学习其它语法规则。

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

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

 

 

 

 

 

Copyright Tarena Corporation,2009.All rights reserved

42

 

 

 

 


JAVAEE 部分

一、O/R 能够实现____

A. 类到数据表的映射

B. 数据查询

C. 数据恢复

D. 数据集成

答:A

二、(单选)模块内聚度越高,说明模块内各成分彼此结合的程度越

A. 松散

B. 紧密

C. 没法判断

D. 相同

答:A

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

A. 需求说明书

B. 开发计划

C. 可行性报告

D. 设计说明书

答:A

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

A. 需求分析

B. 计划

C. 计划跟踪

D. 质量管理

答:A

五、(单选)单元测试通常在何时进行?

A. 编码完成后

B. 系统测试前

C. 测试用例编写完成后

D. 集成测试后

答:A

六、(多选)配置管理能起到如下哪些做用?

A. 版本管理

B. 变动管理

C. 需求管理


Copyright Tarena Corporation,2009.All rights reserved

43


D. 测试管理

答:ABCD

七、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

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

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

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

C. 客户端来的 get 请求将调用 doGet(),客户端来的 post 请求将调用 doPost()

方法。客户端来的全部请求都调用 service()方法。

D. 以上说法都不对。

答:BC

九、在服务器的网络编程中,解决会话跟踪的方法有:

A. 使用 Cookie。

B. 使用 URL 重写。

C. 使用隐藏的表单域。

D. 以上方法都不能单独使用。答:ABC

十、在如下哪些状况下 session 会话将结束生命周期

A. 客户端关闭浏览器。

B. 会话超时。

C. 服务器调用了 HttpSession 的 invalidate()方法。

D. 客户端没有访问本应用而链接到别的应用上。答:ABC

十一、由 a.jsp 传递一个参数:”我是竹子” 到 b.jsp。a.jsp 编码为 UTF-8,b.jsp编码为 gb2312 会出现何种状况_____?

A. 正常传递,无任何异常状况。

B. 没法传递中文信息。报错。

C. 能够传递。但 b.jsp 接到的参数为乱码。

D. 编译不经过,提示非法参数或语法错误。答:C

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

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


Copyright Tarena Corporation,2009.All rights reserved

44

 

B. 在 ServletResponse 对 象 中 封 装 了 用 户 请 求 信 息 , 然 后

ServletServletResponse 对象和 ServletRequest 对象传给用户所请求的Servlet。

C.Servlet 把响应结果写到 ServletRequest 中,而后由 Servlet 容器把响应结果传给用户。

D.以上都没错答:BCD

1三、What should be inserted on line 3 to allow compilation to succeed, and allow the output of "Set it to: 94"?

1. <html>

2. <body>

3.

4. <% x = x + 50; %>

5. Set it to: <%= x %>

6. </body>

7. </html>

A. <% int x = 44 %> B. <%@ int x = 44 %> C. <%! int x = 44; %>

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

1四、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

1五、关于 Cookie 和 HttpSession 的说法错误的是:

A. 缺省的 Session 实现机制采用的是 Cookie 技术

B. 一般以一个 PC 机做为同一个 Session 的衡量标志

C. 若是浏览器的安全级别设置的很是高,Cookie 可能就用不了了

D. 当 Cookie 不能用时,Session 就确定用不了了

答:D

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

A. 远程接口继承自 EJBObject,远程接口只是规定了客户机与 EJB 间的约定。

B. 本地接口继承自 EJBHome,本地接口提供建立、查找、删除 EJB 实例。

C. 远程接口与本地接口均是方法定义没有方法实现。

D. 远程接口与本地接口均有方法实现。

答:BC

1七、实现 JTA 说法错误的有:


Copyright Tarena Corporation,2009.All rights reserved

45

 

A. 须要实现 Transaction 接口。

B. 须要 Context 对象 lookup "javax.transaction.UserTransaction"。

C. 须要 Context 对象 lookup "javax.transaction.Transaction"。

D. 必须有相应方法开始事务和终止事务。

答:C

1八、J2EE 规范只承认的事务性资源类型有:

A. JDBC 数据库

B. JMS 消息队列服务器

C. 其它经过 JCA 访问的事务性服务

D. JCX 事务

答:ABC

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

答:D

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

A.SessionBean 分为 Stateful 和 Stateless 两种

B.EntityBean 分为 BMP 和 CMP 两种

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

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

2一、在 JSP 页面中定义一个方法,以下所示,选择一个正确的答:

?

<%!

void doPrint(){

out.println(“hello jsp”);

}

%>

?

A.编译没有问题

B.编译和调用都没有问题

C.编译出错

D.运行出错

答:C

2二、找出下面程序中可能引发异常的代码行,并说明缘由。

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

String admin_id = session.getAttribute(“admin_id”).toString();


Copyright Tarena Corporation,2009.All rights reserved

46

 

// 登陆者权限

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);

也会抛出空指针异常,

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);

}

2三、写出下面代码的输出结果(alert 的输出)


Copyright Tarena Corporation,2009.All rights reserved

47

 

function funTouch(){

var a = 10;

var b = 20;

var c = 10;

alert(a = b);

alert(a == b);

alert(a == c);

}

答:20 true false

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

2五、前 14 位通常为数字末位能够为字母

答:var regx=/^\d{14}(\d|X)$/;

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

答:function getBirthday()

{

var str = "110101195403297654";//提取 19540329

var dest = str.substring(6,10) + "-" + str.substring(10,12) + "-" + str.substring(12,14);

return dest;

}

2七、完成如下操做

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

(2)页面有一个下拉菜单和一个输入框,写一方法使下拉菜单值变更时输入框显示对应的值

(3)写一方法校验多选框有多少被勾选

答:

1.window.open 和 window.close

2.

<html>

<head>

<script type="text/javascript">

function show(f){

document.getElementById('ss').value=f;

}

</script>

</head>

<body>

<select id="s" onchange="show(this.value);"> <option id="one" value="one">


Copyright Tarena Corporation,2009.All rights reserved

48


one

</option>

<option id="two" value="two">

two

</option>

<option id="three" value="three">

three

</option>

</select>

<input type="text" id="ss" >

</body>

</html>

3.

function isChecked(v){

var checkboxid=document.getElementById("checkboxid"); var count=0;

for(var i=0;i<checkboxid.length;i++){

if(checkboxid[i].checked==true){

count++;

}

}

return count;

}

2八、对于 Jscript,对下面片段,解释每一行的用处

1.var news=getnews();

2.arr=news.split("{@}");

3.len=arr.length;

答:

1.把 getnews()方法获得的返回值赋给变量 news

2.把 news 这个字符串按@拆分的获得的数组赋给 arr

3.把数组 arr 的长度赋给 len 变量

2九、使用 html 实现以下的表格:

编码 姓名 时间 001 张三 2009-1-1 002 李四 2009-2-1 答:

<table border="1">

<tr>

<td>编码</td>

<td>姓名</td>

<td>时间</td>

</tr>

<tr>


Copyright Tarena Corporation,2009.All rights reserved

49


<td>001</td>

<td>张三</td>

<td>2009-1-1</td>

</tr>

<tr>

<td>002</td>

<td>李四</td>

<td>2009-2-1</td>

</tr>

</table>

30、javascript 经常使用的方面;

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

3一、Statement,PreparedStatement,CallableStatment 的区别答:

区别有如下几点:

1) Statement 是 PreparedStatement 和 CallableStatement 的父类;

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

3)PreparedStatement 在执行 sql 时,对传入的参数能够进行强制的类型转换。

以保证数据格式与底层的数据库格式一致。

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

3二、运行 ant 须要设置的环境变量有?

答:ANT_HOME、JAVA_HOME、PATH。

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

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

1.隐藏表单域:<input type="hidden">,很是适合步须要大量数据存储的会话应用。

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

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

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

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

答:不是一回事,J2EE(Java 2 Platform,Enterprise Edition)是一套全然不一样于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提升可移植性、安全与再用价值。J2EE 核心是一组技术规范与


Copyright Tarena Corporation,2009.All rights reserved

50

 

指南,其中所包含的各种组件、服务架构及技术层次,均有共通的标准及规格,让各类依循 J2EE 架构的不一样平台之间,存在良好的兼容性。其中,EJB 和 JDBC 都属于 J2EE 的一部分。

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

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

主要包括如下这些技术:

· Servlet

Servlet 是 Java 平台上的 CGI 技术。Servlet 在服务器端运行,动态地生成 Web 页面。与传统的 CGI 和许多其它相似 CGI 的技术相比,Java Servlet 具备更高的效率并更容易使用。对于 Servlet,重复的请求不会致使同一程序的屡次转载,它是依靠线程的方式来支持并发访问的。

· JSP

JSP(Java Server Page)是一种实现普通静态 HTML 和动态页面输出混合编码的技术。从这一点来看,很是相似 Microsoft ASP、PHP 等技术。借助形式上的内容和外观表现的分离,Web 页面制做的任务能够比较方便地划分给页面设计人员和程序员,并方便地经过 JSP 来合成。在运行时态,JSP 将会被首先转换成 Servlet,并以 Servlet 的形态编译运行,所以它的效率和功能与 Servlet 相比没有差异,同样具备很高的效率。

· EJB

EJB 定义了一组可重用的组件:Enterprise Beans。开发人员能够利用这些组件,像搭积木同样创建分布式应用。

· JDBC(Java Database Connectivity,Java 数据库链接)API 是一个标准 SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据库开发人员可以用标准 Java API 编写数据库应用程序。JDBC API 主要用来链接数据库和直接调用 SQL 命令执行各类 SQL 语句。利用 JDBC API 能够执行通常的 SQL 语句、动态 SQL 语句及带 IN 和 OUT 参数的存储过程。Java 中的 JDBC 至关与

Microsoft 平台中的 ODBC(Open Database Connectivity)。

3六、数据链接池的工做机制是什么?

答:J2EE 服务器启动时会创建必定数量的池链接,并一直维持很多于此数目的池链接。 客户端程序须要链接时,池驱动程序会返回一个未使用的池链接并将其表记为忙。若是当前没有空闲链接,池驱动程序就新建必定数量的链接,新建链接的数量有配置参数决定。当使用的池链接调用完成后,池驱动程序将此链接表记为空闲,其余调用就能够使用这个链接。

 

3七、什么是 ORM?

答:对象关系映射(Object—Relational Mapping,简称 ORM)是一种为了解决面向对象与面向关系数据库存在的互不匹配的现象的技术;简单的说,ORM 是通


Copyright Tarena Corporation,2009.All rights reserved

51

 

过使用描述对象和数据库之间映射的元数据,将 java 程序中的对象自动持久化到关系数据库中;本质上就是将数据从一种形式转换到另一种形式。


3八、Hibernate 有哪 5 个核心接口?

答:Configuration 接口:配置 Hibernate,根据其启动 hibernate,建立

SessionFactory 对象;

SessionFactory 接口:初始化 Hibernate,充当数据存储源的代理,建立

session 对象,sessionFactory 是线程安全的,意味着它的同一个实例能够被应

用的多个线程共享,是重量级、二级缓存;

Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的,

避免多个线程共享同一个 session,是轻量级、一级缓存;

Transaction 接口:管理事务;

Query 和 Criteria 接口:执行数据库的查询。

 


3九、JAVA 中如何进行事务的处理?

答:Connection 类中提供了 3 个事务处理方法:

setAutoCommit(Boolean autoCommit):设置是否自动提交事务,默认为自动

提交事务,即为 true,经过设置 false 禁止自动提交事务;

commit():提交事务;

rollback():回滚事务。

 


40、说出下列配置文件是何含义:

<bean id ="testLocal"

class="org.springframework.ejb.access.LocalStatelessSessionProxyFacto

ryBean">

<property name="jndiName"value="Test"/> <property name="businessInterface" value="net.greatsoft.cms.prv.test.TestLocal"/> <bean>

答:

定义一个 bean

对应的 2 个初始化参数 String jndiName 值为 test

String businessInterface 值为 net.greatsoft.cms.prv.test.TestLocal

4一、请写出一段利用 JDBC 链接 oracle 数据库并执行

答:

 

 

Copyright Tarena Corporation,2009.All rights reserved

52

 


public void testJdbc(){

Connection con = null;

PreparedStatement ps = null;

ResultSet rs = null;

try{

//step1:注册驱动;

Class.forName("oracle.jdbc.driver.OracleDriver");

//step 2:获取数据库链接;

con=DriverManager.getConnection(

"jdbc:oracle:thin:@192.168.0.23:1521:tarena",

"openlab","open123");

/************************查 询************************/

//step 3:建立 Statement;

String sql = "SELECT id, fname, lname, age, FROM Person_Tbl"; ps = con.prepareStatement(sql); //step 4 :执行查询语句,获取结果集;

rs = ps.executeQuery();

//step 5:处理结果集—输出结果集中保存的查询结果; while (rs.next()){

System.out.print("id = " + rs.getLong("id"));

System.out.print(" , fname = " + rs.getString("fname"));

System.out.print(" , lname = " + rs.getString("lname"));

System.out.print(" , age = " + rs.getInt("age"));

}

/************************JDBC 修 改*********************/

sql = "UPDATE Person_Tbl SET age=23 WHERE id = ?"; ps = con.prepareStatement(sql); ps.setLong(1, 88);

int rows = ps.executeUpdate(); System.out.println(rows + " rows affected.");

} catch (Exception e){

e.printStackTrace();

} finally{

try{

con.close(); //关闭数据库链接,以释放资源。

} catch (Exception e1) {

}

}

}


Copyright Tarena Corporation,2009.All rights reserved

53

 

 

 

4二、用你熟悉的语言写一个链接 ORACLE 数据库的程序,可以完成修改和查询工做。

答:JDBC 示例程序以下:

public void testJdbc(){

Connection con = null;

PreparedStatement ps = null;

ResultSet rs = null;

try{

//step1:注册驱动;

Class.forName("oracle.jdbc.driver.OracleDriver");

//step 2:获取数据库链接;

con=DriverManager.getConnection(

"jdbc:oracle:thin:@192.168.0.23:1521:tarena",

"openlab","open123");

/************************查 询************************/

//step 3:建立 Statement;

String sql = "SELECT id, fname, lname, age, FROM Person_Tbl"; ps = con.prepareStatement(sql); //step 4 :执行查询语句,获取结果集;

rs = ps.executeQuery();

//step 5:处理结果集—输出结果集中保存的查询结果; while (rs.next()){

System.out.print("id = " + rs.getLong("id"));

System.out.print(" , fname = " + rs.getString("fname"));

System.out.print(" , lname = " + rs.getString("lname"));

System.out.print(" , age = " + rs.getInt("age"));

}

/************************JDBC 修 改*********************/

sql = "UPDATE Person_Tbl SET age=23 WHERE id = ?"; ps = con.prepareStatement(sql); ps.setLong(1, 88);

int rows = ps.executeUpdate(); System.out.println(rows + " rows affected.");

} catch (Exception e){

e.printStackTrace();

} finally{

try{

con.close(); //关闭数据库链接,以释放资源。

} catch (Exception e1) {

}

}

}

 

Copyright Tarena Corporation,2009.All rights reserved

54

 


4三、从数据库中取出 100,000 条数据,每次插入数据库 1000 条,请写出 java 相关处理程序,其中 insertAll(ArrayList 或 Vector)为公共方法,已封装好从数据库取出的 100,000 条数据;要求实现功能:批量插入数据答:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.util.Iterator;

import java.util.List;

public class InsertBatch {

private static Connection conn;

static {

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection(

"jdbc:mysql://localhost:3306/test", "root", "1234");

}

public static boolean insertAll(List<?> result) { Iterator<?> it = result.iterator();

int i = 0;

try {

PreparedStatement ps = conn

.prepareStatement("insert into table values(?)");

while (it.hasNext()) {

++i;

ps.setString(0, it.next()+"");

if (i % 1000 == 0) {

ps.execute();

ps.clearBatch();

}

ps.addBatch();

}

return true;

} catch (SQLException e) {

e.printStackTrace();

}

return false;

}

}

 


Copyright Tarena Corporation,2009.All rights reserved

55

 

4四、Hibernate 实现中,load 和 get 方法的区别,find 和 iterate 的区别?

答:load 和 get 方法的区别:hibernate 对于 load 方法认为该数据在数据库中

必定存在,能够放心的使用代理来延迟加载,若是在使用过程当中发现了问题,只

能抛异常;而对于 get 方法,hibernate 必定要获取到真实的数据,不然返回 null。

find 和 iterate 的区别:find 方法经过一条 Select SQL 实现了查询操做,

而 iterate 方法要执行多条 Select SQL.iterate 第一次查询获取全部符合条件

的记录的 id,而后再根据各个 id 从库表中读取对应的记录,这是一个典型的 N+1

次的查询问题,若是符合条件记录有 10000 条,就须要执行 10001 条 Select SQL,

性能会很是差。


4五、Tomcat 缺省端口号是多少,若是须要修改哪一个目录下的哪一个文件?答:8080,/conf/server.xml

4六、介绍一下 hibernate 的工做原理、优势以及如何优化?

答:

工做原理:

启动 Hibernate 构建 Configuration 实例,初始化该实例中的全部变量 Configuration cfg = new Configuration().configure();

b.加载 hibernate.cfg.xml 文件至该实例内存,经过 hibernate.xfg.xml 文件中的 mapping 节点配置,加载 hbm.xml 文件至该实例内存;

c. 由 上 面 得 到 的 Configuration 实 例 构 建 一 个 SessionFactory 实 例 SessionFactory sf = cfg.buildSessionFactory();

d.由上面获得的 SessionFactory 实例建立链接 Session s = sf.openSession(); e.由上面获得的 Session 实例建立事务操做接口 Transaction 的一个实例 tx Transaction tx = s.beginTransaction();

f.经过 Session 接口提供的各类方法操做数据库的访问g.提交数据库的操做结果 tx.commit(); h.关闭 Session 连接 s.close();

优势:

a.对 JDBC 访问数据库的代码作了封装,大大简化了数据访问层繁琐的重复性代码。

b.Hibernate 是一个基于 JDBC 的主流持久化框架,是一个优秀的 ORM 实现。他很大程度的简化 DAO 层的编码工做

c.hibernate 使用 Java 反射机制,而不是字节码加强程序来实现透明性。 d.hibernate 的性能很是好,由于它是个轻量级框架。映射的灵活性很出色。它支持各类关系数据库,从一对一到多对多的各类复杂关系。优化:

a.使用双向一对多关联,不使用单向一对多b.灵活使用单向一对多关联c.不用一对一,用多对一取代


Copyright Tarena Corporation,2009.All rights reserved

56


d.配置对象缓存,不使用集合缓存

e.一对多集合使用 Bag,多对多集合使用 Set

f.继承类使用显式多态

g.表字段要少,表关联不要怕多,能够利用二级缓存

4七、hibernate 中的 java 对象有几种状态,其相互关系如何(区别和相互转换)答:在 Hibernate 中,对象有三种状态:临时状态、持久状态和游离状态。

临时状态:当 new 一个实体对象后,这个对象处于临时状态,即这个对象只是一个保存临时数据的内存区域,若是没有变量引用这个对象,则会被 jre 垃圾回收机制回收。这个对象所保存的数据与数据库没有任何关系,除非经过 Session 的 save 或者 saveOrUpdate 把临时对象与数据库关联,并把数据插入或者更新到数据库,这个对象才转换为持久对象;

持久状态:持久化对象的实例在数据库中有对应的记录,并拥有一个持久化表示(ID)。对持久化对象进行 delete 操做后,数据库中对应的记录将被删除,那么持久化对象与数据库记录再也不存在对应关系,持久化对象变成临时状态。

持久化对象被修改变动后,不会立刻同步到数据库,直到数据库事务提交。在同步以前,持久化对象是脏的(Dirty)。

游离状态:当 Session 进行了 Close、Clear 或者 evict 后,持久化对象虽然拥有持久化标识符和与数据库对应记录一致的值,可是由于会话已经消失,对象不在持久化管理以内,因此处于游离状态(也叫:脱管状态)。游离状态的对象与临时状态对象是十分类似的,只是它还含有持久化标识。

4八、对 hibernate 的延迟加载如何理解,在实际应用中,延迟加载与 session 关闭的矛盾是如何处理的?

答:延迟加载就是并非在读取的时候就把数据加载进来,而是等到使用时再加载。那么 Hibernate 是怎么知识用户在何时使用数据了呢?又是如何加载数据呢?其实很简单,它使用了代理机制。返回给用户的并非实体自己,而是实体对象的代理。代理对象在用户调用 getter 方法时就会去数据库加载数据。但加载数据就须要数据库链接。而当咱们把会话关闭时,数据库链接就同时关闭了。这种状况就叫作未初始化的关系。

延迟加载与 session 关闭的矛盾通常能够这样处理:

1)、关闭延迟加载特性。

操做起来比较简单,由于 hibernate 的延迟加载特性是在 hbm 配置里面可控制的。

默认 lazy="true",具体配置能够查看一下相关文档,就不详细叙述了。

但使用这个解决办法带来的隐患是十分大的。

首先,出现 no session or session was closed 就证实了您已经在使用外键关联表,若是去掉延迟加载的话,则表示每次查询的开销都会变得十分的大,若是关联表越多,后果也能够想象获得。因此不建议使用这个方法解决。

2)、在 session 关闭以前把咱们想要查询的数据先获取了。

首先须要了解一下 session 何时关闭,也就是它的生命周期。一般状况下 hibernate 会在查询数据关闭 session,而使用 getHibernateTemplate().get 方法查询后会延迟关闭的时间。会在事务结束后才关闭。使用拦截器(Interceptor)或过滤器(Filter)控制 session。

spring 为解决 hibernate 这一特性提供的解决方案,能够有效的控制 session 生命周期。


Copyright Tarena Corporation,2009.All rights reserved

57

 


4九、说出 Servlet 的生命周期,并说出 Servlet 和 CGI 的区别?

答:Servlet 被服务器实例化后,容器运行其 init 方法,请求到达时运行其 service 方法,service 方法自动派遣运行与请求对应的 doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其 destroy 方法。

与 cgi 的区别在于 servlet 处于服务器进程中,它经过多线程方式运行其 service 方法,一个实例能够服务于多个请求,而且其实例通常不会销毁,而 CGI 对每一个请求都产生新的进程,服务完成后就销毁,因此效率上低于 servlet。

50、WEB SERVICE 名词解释。JSWDL 开发包的介绍。JAXP、JAXM 的解释。SOAP、 UDDI,WSDL 解释。

答:Web Service 是基于网络的、分布式的模块化组件,它执行特定的任务,遵照具体的技术规范,这些规范使得 Web Service 能与其余兼容的组件进行互操做;

  JAXP(Java API for XML Parsing)定义了在 Java 中使用 DOM, SAX, XSLT 的通用的接口,这样在你的程序中你只要使用这些通用的接口,当你须要改变具体的实现时候也不须要修改代码;

  JAXM(Java API for XML Messaging)是为 SOAP 通讯提供访问方法和传输机制的 API;

  WSDL 是一种 XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操做。这种格式首先对操做和消息进行抽象描述,而后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务);

  SOAP 即简单对象访问协议(Simple Object Access Protocol),它是用于交换 XML 编码信息的轻量级协议;

  UDDI 的目的是为电子商务创建标准;UDDI 是一套基于 Web 的、分布式的、为 Web Service 提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的 Web Service 注册,以使别的企业可以发现的访问协议的实现标准。

5一、Struts 的控制器部分,视图部分包括哪些内容?

答:

控制器:在 struts 中,基本的控制器组件是 ActionServlet 类中的实例 servelt,实际使用的 servlet 在配置文件中由一组映射(由 ActionMapping 类进行描述)进行定义。对于业务逻辑的操做则主要由 Action 、 ActionMapping 、 ActionForward 这几个组件协调完成的,其中 Action 扮演了真正的业务逻辑的实现者,ActionMapping 与 ActionForward 则指定了不一样业务逻辑或流程的运行方向。struts-config.xml 文件配置控制器。

视图:视图主要由 JSP 创建,struts 包含扩展自定义标签库(TagLib),能够简化建立彻底国际化用户界面的过程。目前的标签库包括:Bean Tags、HTML tags、 Logic Tags、Nested Tags 以及 Template Tags 等。

5二、实际应用中,servelet 和 JSP 如何使用?

答:servlet 通常用来作控制流转,调用业务层方法,响应请求。jsp 用来作页面中数据的收集和表现。

 

Copyright Tarena Corporation,2009.All rights reserved

58


5三、jsp 有哪些动做?做用分别是什么?

答:JSP 共有如下 6 种基本动做:

jsp:include:在页面被请求的时候引入一个文件;

jsp:useBean:寻找或者实例化一个 JavaBean。;

jsp:setProperty:设置 JavaBean 的属性。;

jsp:getProperty:输出某个 JavaBean 的属性;

jsp:forward:把请求转到一个新的页面;

jsp:plugin:根据浏览器类型为 Java 插件生成 OBJECT 或 EMBED 标记

5四、MVC 的各个部分都有哪些技术来实现?如何实现?

答:MVC 是 Model-View-Controller 的缩写,Model 表明的是应用的业务逻辑(经过 JavaBean,EJB 组件实现),View 是应用的表示面(由 JSP 页面产生)Controller是经过应用的处理过程控制,(通常是一个 servert 或是 struts 中的 action)经过这种设计模型把应用逻辑,处理过程和显示逻辑分红不一样的组件实现,这些组件能够进行交互和重用。

5五、Session 的基本原理是什么?

答:Session 对象的原理在于,服务器能够为客户端建立并维护一个所谓的 Session 对象,用于存放数据。在建立 Session 对象的同时,服务器将会为该 Session 对象产生一个惟一编号,这个编号称之为 SessionID,服务器以 Cookie 的方式将 SessionID 存放在客户端。当浏览器再次访问该服务器时,会将 SessionID 做为 Cookie 信息带到服务器,服务器能够经过该 SessionID 检索到之前的 Session 对象,并对其进行访问。须要注意的是,此时的 Cookie 中仅仅保存了一个 SessionID,而相对较多的会话数据保存在服务器端对应的 Session 对象中,由服务器来统一维护,这样必定程度保证了会话数据安全性,但增长了服务器端的内存开销。存放在客户端的用于保存 SessionID 的 Cookie 会在浏览器关闭时清除。咱们把用户打开一个浏览器访问某个应用开始,到关闭浏览器为止交互过程称为一个“会话”。在一个“会话”过程当中,可能会向同一个应用发出了屡次请求,这些请求将共享一个 Session 对象,由于这些请求携带了相同的 SessionID 信息。Session 对象的正常使用要依赖于 Cookie。若是考虑到客户端浏览器可能出于安全的考虑禁用了 Cookie,应该使用 URL 重写的方式使 Session 在客户端禁用 Cookie 的状况下继续生效。


5六、JSP 中动态 INCLUDE 与静态 INCLUDE 的区别?Servlet 中 forward 与 redirect 的区别?

答:动态 INCLUDE 用 jsp:include 动做实现 <jsp:include page="head.jsp"/> 它老是会检查所含文件中的变化,适合用于包含动态页面,而且能够带参数;静态 INCLUDE 用 include 伪码实现,它不会检查所含文件的变化,适用于包含静态页面<%@include file="head.htm" %>

  forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,而后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,因此它的地址栏中仍是原来的地址。 redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器从新去请求那个地址,通常来讲浏览器会用刚才请求的全部参数从新请求,因此 session,request 参数均可以获取,而且从浏览器的地址栏中能够看到跳转后的


Copyright Tarena Corporation,2009.All rights reserved

59

 

连接地址。前者更加高效,在前者能够知足须要时,尽可能使用 forward()方法,而且,这样也有助于隐藏实际的连接;在有些状况下,好比,须要跳转到一个其它服务器上的资源,则必须使用 sendRedirect()方法。

5七、说出 JSP 的内置对象,并给出说明。

答:request 表示 HttpServletRequest 对象。它包含了有关浏览器请求的信息,而且提供了几个用于获取 cookie, header 和 session 数据的有用的方法。

  response 表示 HttpServletResponse 对象,并提供了几个用于设置送回 浏览器的响应的方法(如 cookies,头信息等)。

  out 对象是 javax.jsp.JspWriter 的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

  pageContext 表示一个 javax.servlet.jsp.PageContext 对象。它是用于方便存取各类范围的名字空间、servlet 相关的对象的 API,而且包装了通用的 servlet 相关功能的方法。

  session 表示一个请求的 javax.servlet.http.HttpSession 对象。Session能够存贮用户的状态信息。

  application 表示一个 javax.servle.ServletContext 对象。这有助于查找有关 servlet 引擎和 servlet 环境的信息。

  config 表示一个 javax.servlet.ServletConfig 对象。该对象用于存取 servlet 实例的初始化参数。

page 表示从该页面产生的一个 servlet 实例。

exception 针对错误网页,未捕捉的例外

5八、简述 struts 是怎样实现的 MVC 模型。

答:

在 Struts 框架中 Controller 功能由 ActionServlet 和 ActionMapping 对象构成,核心是一个 Servlet 类型的对象 ActionServlet,它用来接收客户端的请求。 ActionServlet 包括一组基于配置的 ActionMapping 对象,每一个 ActionMapping 对象实现了一个请求到一个具体的 Model 部分的 Action 处理器对象之间的映射。 Model 部分由 Action 和 ActionForm 对象构成。全部的 Action 处理器对象都是开发者从 Struts 的 Action 类派生的子类。Action 处理器对象封装了具体的处理逻辑,调用业务逻辑模块,而且把响应提交到合适的 View 组件以产生响应。 Struts 提供的 ActionForm 组件对象能够经过定义属性描述客户端表单数据,开发者能够从它派生子类对象,并利用它和 Struts 提供的自定义标记库相结合,能够实现对客户端的表单数据的良好封装和支持,Action 处理器对象能够直接对它进行读写,而再也不须要和 request、response 对象进行数据交互。经过 ActionForm 组件对象实现了对 View 和 Model 之间交互的支持(View 部分是经过 JSP 技术实现的)。Struts 提供了自定义的标记库,经过这些自定义标记库能够很是容易地和系统的 Model 部分交互,经过使用这些自定义标记库建立的 JSP 表单,能够实现对 Model 部分中的 ActionForm 的映射,完成对用户数据的封装。


5九、struts 中 actionform 和 action 属于 MVC 哪一层,为何?actionform 的功能有哪些?

答:actionform 属于 MVC 当中的 V 层,由于 M 层应该是封装了业务逻辑的对象,而 ActionForm 仅仅是一个 form-bean,封装了用户提交的表单数据(物理 View),


Copyright Tarena Corporation,2009.All rights reserved

60

 

能够在其中进行一些非业务逻辑的验证,并无真正的映射到模型数据,由于与层的关系比较密切,因此实际上它应该算是 View 层(逻辑 View);

action 应该属于 C 层,仅仅描述"作什么",与"如何作"(Model)关系不大,把

它归于 Controller 层比较合适。

ActionForm 的功能主要是:

1) 表单中的信息--->对象的封装

2) 表单信息的缓存

3) 表单信息验证(服务器端验证)建议用 validator 框架

60、一个 Web 页面包含哪三大要素,都有些什么标准。要解决跨浏览器访问的问题应注意哪些方面。

答:HTML/XHTML/CSS 都是基于 W3C 标准

夸浏览器访问问题主要是由于浏览器对于脚本语言的解析和支持程度不一样。要编写跨浏览器的页面,就要注意页面中的标签和脚本语言是否被支持。

6一、Servlet 是线程安全吗?如下代码中使用 synchronized 关键字的意义是什么?Synchronized (aList){

aList.remove (1);

}

答:默认不是线程安全的,可是 servlet 实现了 SingthreadModel 接口 就能单线程执行。此题中代码的意思是给 aList 对象加同步锁,保证 aList 对象在多线程任务环境中,每次只可以有一个线程调用 remove 方法。从而提升对 aList 对象操做的安全性和正确性。

6二、就 WEB2.0 相关信息作一下描述,谈谈你对这些技术概念的认识。

答:一些 WEB2.0 产品,就能够理解以上观点。

Blog:用户织网,发表新知识,和其余用户内容连接,进而很是天然的组织这些内容。

RSS:用户产生内容自动分发,定阅。

Podcasting:我的视频/声频的发布/定阅。

SNS:blog+人和人之间的连接。

WIKI:用户共同建设一个大百科全书。

从知识生产的角度看,WEB1.0 的任务,是将之前没有放在网上的人类知识,经过商业的力量,放到网上去。

WEB2.0 的任务是,将这些知识,经过每一个用户的浏览求知的力量,协做工做,把知识有机的组织起来,在这个过程当中继续将知识深化,并产生新的思想火花;从内容产生者角度看,WEB1.0 是商业公司为主体把内容往网上搬,而 WEB2.0 则是以用户为主,以简便随意方式,经过 blog/podcasting 方式把新内容往网上搬;

从交互性看,WEB1.0 是网站对用户为主;WEB2.0 是以 P2P 为主。

从技术上看,WEB 客户端化,工做效率愈来愈高。

咱们看到,用户在互联网上的做用愈来愈大;他们贡献内容,传播内容,并且提供了这些内容之间的连接关系和浏览路径。在 SNS 里面,内容是以用户为核心来组织的。WEB2.0 是以用户为核心的互联网

 

Copyright Tarena Corporation,2009.All rights reserved

61

 

6三、介绍一下 Struts 的工做原理?

答:struts 的工做原理可分为以下 8 步。

1.读取配置(初始化 ModuleConfig 对象)

Struts 框架总控制器(ActionServlet)是一个 Servlet,在 web.xml 中被配置成一个自动启动的 Servlet。读取配置文件 struts-config.xml 的配置信息,为不一样的 Struts 模块初始化相应的 ModuleConfig 对象。

2.用户请求

用户提交表单或调用 URL 向 WEB 应用程序服务器提交一个请求,请求的数据用 HTTP 协议上传给 WEB 服务器。

3.填充 FormBean

(*.do 请求)从 ActionConfig 中找出对应该请求的 Action 子类,若有对应的 Action 且这个 Action 有一个相应的 ActionForm,ActionForm 被实例化并用 HTTP 请求的数据填充其属性,并保存在 request 或 session 范围中,这样他们就能够被其它 Action 对象或 JSP 调用。若是没有对应的 Action,控制器则直接转发给 JSP 或静态页面。

4.派发请求

控制器根据配置信息 ActionConfig 将请求派发到具体的 Action,相应的 FormBean 一并传给这个 Action 的 execute()方法。

5.处理业务

Action 通常只包含一个 execute 方法,它负责执行相应的业务逻辑。执行完毕后返回一个 ActionFoward 对象,控制器经过该 ActionFoward 对象来进行转发工做。

6.返回响应

Action 根据业务处理的不一样结果返回一个响应对象给总控制器,该目标响应对相对应一个具体的 JSP 页面或另外一个 Action。

7.查找响应

总控制器根据业务功能 Action 返回的目标响应对象找到对应的资源对象,一般是一个具体的 JSP 页面。

8.响应用户

JSP 将结果展示给用户。

6四、Jdo 是什么?

答:JDO 是 Java 对象持久化的新的规范,为 java data object 的简称,也是一个用于存取某种数据仓库中的对象的标准化 API。JDO 提供了透明的对象存储,所以对开发人员来讲,存储数据对象彻底不须要额外的代码(如 JDBC API 的使用)。这些繁琐的例行工做已经转移到 JDO 产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO 很灵活,由于它能够在任何数据底层上运行。JDBC 只是面向关系数据库(RDBMS)JDO 更通用,提供到任何数据底层的存储功能,好比关系数据库、文件、XML 以及对象数据库(ODBMS)等等,使得应用可移植性更强。

6五、请简单画出 struts 技术构建 mvc 的流程图答:

 


Copyright Tarena Corporation,2009.All rights reserved

62

 


模型 Struts-config.x ActionForm 1.初始化 2.HTTP 请求 3.填写 Form 业务功能类 Client Struts 框架总控制器 JavaBean 7.转换 HTTP 请求 4.将请求交给 5. 调用后台业务 到目标响应对象 具体的 Action 处理 8.响应 6.返回目标响 功能类完成商业 应对象 逻辑 视图 业务功能控制器 JSP Action

 

6六、get 和 post 的区别?

答:Form 中的 get 和 post 方法,在数据传输过程当中分别对应了 HTTP 协议中的

GET 和 POST 方法。两者主要区别以下:

  1)Get 将表单中数据按照 variable=value 的形式,添加到 action 所指向的 URL 后面,而且二者使用“?”链接,而各个变量之间使用“&”链接;Post 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action 所指向 URL;

  2)Get 是不安全的,由于在传输过程,数据被放在请求的 URL 中;Post 的全部操做对用户来讲都是不可见的;

  3)Get 传输的数据量小,这主要是由于受 URL 长度限制;而 Post 能够传输大量的数据,因此在上传文件只能使用 Post;

4)Get 限制 Form 表单的数据集必须为 ASCII 字符,而 Post 支持整个 ISO10646 字符集;

5)Get 是 Form 的默认方法。

6七、JSP 和 Servlet 有哪些相同点和不一样点,他们之间的联系是什么?

答:JSP 是 Servlet 技术的扩展,本质上是 Servlet 的简易方式,更强调应用的外表表达。JSP 编译后是"类 servlet"。Servlet 和 JSP 最主要的不一样点在于, Servlet 的应用逻辑是在 Java 文件中,而且彻底从表示层中的 HTML 里分离开来。而 JSP 的状况是 Java 和 HTML 能够组合成一个扩展名为.jsp 的文件。JSP 侧重于视图,Servlet 主要用于控制逻辑。

6八、介绍一下 spring MVC 的工做原理、用途、为何用?

答:

工做原理:

1.spring mvc 请全部的请求都提交给 DispatcherServlet,它会委托应用系统的其余模块负责负责对请求进行真正的处理工做。


Copyright Tarena Corporation,2009.All rights reserved

63

 

2.DispatcherServlet 查询一个或多个 HandlerMapping, 找处处理请求的 Controller.

3.DispatcherServlet 请请求提交到目标 Controller

4.Controller 进行业务逻辑处理后,会返回一个 ModelAndView

5.Dispathcher 查询一个或多个 ViewResolver 视图解析器,找到 ModelAndView 对象指定的视图对象

6.视图对象负责渲染返回给客户端。

用途:

JSP、Servlet、JavaBean 技术的出现给咱们构建强大的企业应用系统提供了可能。但用这些技术构建的系统很是的繁乱,因此在此之上,咱们须要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts 便应运而生。为何用:

AOP 让开发人员能够建立非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就能够分解成方面并应用到域对象上,同时不会增长域对象的对象模型的复杂性。IOC 容许建立一个能够构造对象的应用环境,而后向这些对象传递它们的协做对象。正如单词 倒置 所代表的,IOC 就像反过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每个对象都是用其协做对象构造的。所以是由容器管理协做对象(collaborator)。 Spring 既是一个 AOP 框架,也是一 IOC 容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协做对象)。而后能够很容易地在须要时替换具备相似接口的协做对象。

6九、Spring 有几种事务管理,Spring 的事务管理接口是什么?

答:Spring 提供的事务管理能够分为两类:编程式的和声明式的。编程式的,比较灵活,可是代码量大,存在重复的代码比较多;而声明式的比编程式的更灵活方便。

  接口:其中最重要的三个接口:TransactionDefinition、Platform TransactionManager 、 TransactionStatus 。在 Spring 中,事务是经过 TransactionDefinition 接口来定义的。该接口包含与事务属性有关的方法, TransactionDefinition 接口中定义了五个表示隔离级别的常量、表明传播行为的常量,在 TransactionDefinition 中以 int 的值来表示超时时间, PlatformTransactionManager.getTransaction( ? ) 方 法 返 回 一 个 TransactionStatus 对象。返回的 TransactionStatus 对象可能表明一个新的或已经存在的事务(若是在当前调用堆栈有一个符合条件的事务)。 TransactionStatus 接口提供了一个简单的控制事务执行和查询事务状态的方法。

70、EJB2.0 有哪些内容?分别用在什么场合?

答:规范内容包括 Bean 提供者,应用程序装配者,EJB 容器,EJB 配置工具,EJB服务提供者,系统管理员。这里面,EJB 容器是 EJB 之因此可以运行的核心。EJB容器管理着 EJB 的建立,撤消,激活,去活,与数据库的链接等等重要的核心工做。

 

Copyright Tarena Corporation,2009.All rights reserved

64


7一、EJB 与 JAVA BEAN 的区别?

答:Java Bean 是可复用的组件,对 Java Bean 并无严格的规范,理论上讲,任何一个 Java 类均可以是一个 Bean。但一般状况下,因为 Java Bean 是被容器所建立(如 Tomcat)的,因此 Java Bean 应具备一个无参的构造器,另外,一般 Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久性。Java Bean 实际上至关于微软 COM 模型中的本地进程内 COM 组件,它是不能被跨进程访问的。 Enterprise Java Bean 至关于 DCOM,即分布式组件。它是基于 Java 的远程方法调用(RMI)技术的,因此 EJB 能够被远程访问(跨进程、跨计算机)。但 EJB 必须被布署在诸如 Webspere、WebLogic 这样的容器中,EJB 客户从不直接访问真正的 EJB 组件,而是经过其容器访问。EJB 容器是 EJB 组件的代理,EJB 组件由容器所建立和管理。客户经过容器来访问真正的 EJB 组件。

7二、说出几个与 spring 同类型的开源框架,说出几个与 hibernate 同类型的开源框架,说出几个与 struts 同类型的开源框架答:

与 spring 同类型的开源框架有:JUIDE、EJB3.0、picoContainer 等

与 hibernate 同类型的开源框架有:ibatis、SimpleORM、OJB、JPOX 等等可选

与 struts 同类型的开源框架有:struts2(webwork2)、JSF(以及 myfaces)、tapestry、EasyJWeb、Spring MVC、AppFuse 等

7三、说说对开源项目 apache 的了解,说出其中你使用过的项目并给以评价答:

Apache HTTP Server(简称 Apache)是 Apache 软件基金会的一个开放源码的网页服务器,能够在大多数计算机操做系统中运行,因为其多平台和安全性[1]被普遍使用,是最流行的 Web 服务器端软件之一。它快速、可靠而且可经过简单的 API 扩展,将 Perl/Python 等解释器编译到服务器中。

Apache 起初由伊利诺伊大学香槟分校的国家超级电脑应用中心(NCSA)开发。此后,Apache Httpd 被开放源代码团体的成员不断的发展和增强。Apache Http 网站服务器拥有牢靠可信的美誉,已经在全球超过半数的网站中被使用-特别是几乎全部最热门和访问量最大的网站。

Apache 支持许多特性,大部分经过编译的模块实现。这些特性从服务器端的编程语言支持到身份认证方案。一些通用的语言接口支持 Perl,Python, Tcl, 和PHP。流行的认证模块包括 mod_access, mod_auth 和 mod_digest。其余的例子有 SSL 和 TLS 支持(mod_ssl), 代理服务器 (proxy) 模块,颇有用的 URL 重写(由 mod_rewrite 实现),定制日志文件(mod_log_config),以及过滤支持(mod_include 和 mod_ext_filter)。Apache 日志能够经过网页浏览器使用免费的脚本 AWStats 或 Visitors 来进行分析。

7四、简要说明 JVM、JSP、Servlet、Web Server、Web Browser 之间的关系。答:当用户在 JSP 页面上提交了须要服务器处理的数据后,经过 Web Browser 发送到服务器端,Servlet 会根据用户的请求产生必要的相应,若是须要还会经过 JVM 或 Web Server 来获取资源,最后把服务器端的相应结果返回给用户。

7五、什么是 AJAX 和 AOP?


Copyright Tarena Corporation,2009.All rights reserved

65

 

答: Ajax 的全称是:AsynchronousJavaScript+XML。Ajax 不是一个技术,它其实是几种技术,每种技术都有其独特这处,合在一块儿就成了一个功能强大的新技术。Ajax 包括: XHTML 和 CSS 使用文档对象模型(Document Object Model) 做动态显示和交互 使用 XML 和 XSLT 作数据交互和操做 使用 XMLHttpRequest 进行异步数据接收 使用 JavaScript 将它们绑定在一块儿 。

AOP 是 OOP 的延续,是 Aspect Oriented Programming 的缩写,意思是面向切面编程。能够经过预编译方式和运行期动态代理实如今不修改源代码的状况下给程序动态统一添加功能的一种技术。AOP 实际是 GoF 设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP 能够说也是这种目标的一种实现。

7六、写出熟悉的 JSTL 标签。

答:<c:if>、<c:choose>、<c: when>、<c: otherwise>、<c:forEach>、<c:set>。

7七、谈谈对 Struts、spring 和 hibernate 的理解答:

  Struts 能够将 jsp 页面的表单关联起来,就是把 JSP 页面的表单数据封装成javaBean,这样的话,在 action 中你不再须要使用传统一的 request.get Parameter("name");还有 struts 有一个控制器,你在 struts 编程中的控制器(XxxAction)都是继承总的 ActionServlet,它能集中处理请求,而后转到相关的页面。还有 struts 的表单验证组件,不用你写 js 验证了,只须要你配置一下文件就能够了。另外 struts 的令牌机制能够防表单重复提交。

  Spring 是一个轻量级容器,非侵入性.包含依赖注入,AOP 等。它是为了解决企业应用程序开发复杂性而建立的。框架的主要优点之一就是其分层架构,分层架构容许您选择使用哪个组件,同时为 J2EE 应用程序开发提供集成的框架。

  Hibernate: 它可让咱们以 oo 的方式操做数据库,这让咱们看到了 hibernate 的强大之处,体验到操做数据的方便。但 hibernate 最耀眼之处是 hibernate 的缓存机制,而不是以 oo 的方式操做数据库。Hibernate 的缓存机制不外乎是一级缓存 session,二级缓存 sessionFactory,和第三方缓存如ehcache。也就是 hibernate 的最强大的地方是它的缓存,理解了这个才能真正的理解 hibernateHibernate 的命名查询/命名参数查询,就是将 hql 语句放在一个单独的 xml 文件之中,它仍然让人们以面向对象的方式去操纵数据,而不用在以 oo 的方式写着代码的同时,而后再转变思惟,用面向关系的方式去写那些 sql 语句。但 hibernate 不只作了这些,它的 native sql 查询方式,彻底知足 sql 语句的偏心者,它像 ibatis 同样,将 sql 语句放在配置文件之中。

7八、什么是 B/S 结构,C/S 结构?

答:C/S 是 Client/Server 的缩写。服务器一般采用高性能的 PC、工做站或小型机,并采用大型数据库系统,如 Oracle、Sybase、Informix 或 SQL Server。客户端须要安装专用的客户端软件。

  B/S 是 Brower/Server 的缩写,客户机上只要安装一个浏览器(Browser),如 Netscape Navigator 或 Internet Explorer,服务器安装 Oracle、Sybase、 Informix 或 SQL Server 等数据库。在这种结构下,用户界面彻底经过 WWW 浏览器实现,一部分事务逻辑在前端实现,可是主要事务逻辑在服务器端实现。浏览器经过 Web Server 同数据库进行数据交互。


Copyright Tarena Corporation,2009.All rights reserved

66

 


7九、Java 数据库编程包含哪些类?Java 数据库编程的基本过程是什么?答:用到的类:Connection、ResultSet、PreparedStatement、Statement

Java 中访问数据库的步骤以下:

1)注册驱动;

2)创建链接;

3)建立 Statement;

4)执行 sql 语句;

5)处理结果集(若 sql 语句为查询语句);

6)关闭链接。

80、什么是 UDDI、SOAP、WSDL?

答:UDDI 是一套基于 Web 的、分布式的、为 Web Service 提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的 Web Service 注册,以使别的企业可以发现的访问协议的实现标准。

  SOAP 即简单对象访问协议(Simple Object Access Protocol),它是用于交换 XML 编码信息的轻量级协议。

  WSDL 是一种 XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操做。这种格式首先对操做和消息进行抽象描述,而后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务)。

8一、部署一个 web 应用的步骤是什么?

答:1.将 web 应用放到 Tomcat 服务器的 Webapps 包下,

2.启动服务器

3.在地址栏中输入 http://localhost:8080/应用名/

8二、请写出十种以上你知道的 java 开源软件,并用一句话说明功能。

答:

Ibatis:持久层框架

Hibernate:持久层框架,它对 JDBC 进行了很是轻量级的对象封装

Struts:是一个基于 Sun J2EE 平台的 MVC 框架

Spring:是一个解决了许多在 J2EE 开发中常见的问题的强大框架

Tomcat:实现了 servlet、struts 框架的 web 服务器

WebWork:组件化和代码重用的拉出式 MVC 模式 J2EE Web 框架

Rose:系统分析和设计的工具

JUnit:用于单元测试

ANT:用于辅助开发、部署

Eclipse:IDE 集成开发工具

8三、用 JPA 写一个用户表的实体类,表结构以下:

CREATE TABLE user(

id NUMBER(8) primary key,

userName VARCHAR2(30), -- 用户名称

password VARCHAR (20), -- 密码


Copyright Tarena Corporation,2009.All rights reserved

67


);

答:

package com.tarena;

import java.io.*;

import java.persistence.*;

@Entity

@Table(name="user")

public class user implements Serializable{ @Id

@Column(name="id")

private Integer id;

@Column(name="userName")

private String username;

@Column(name="password")

private String password;

public long getID(){

return id;

}

public void setID(long id){

this.id = id;

}

public String getUsername(){

return username;

}

public void setUsername(String username){ this.username = username;

}

public String getPassword(){

return password;

}

public void setPassword(){

this.password = password;

}

}

8四、EJB3.0 有哪几种类型?写出一个 stateless bean 的本地接口类及实现类,接口以下 :String hello World();

答:会话 Bean(Session Bean),实体 Bean(Entity Bean)和消息驱动 Bean

(MessageDriven Bean)。

@Local

public interface StatelessBean{

String helloWorld();

}


Copyright Tarena Corporation,2009.All rights reserved

68

 

@Stateless

public class StatelessBeanImpl implements StatelessBean{ String helloWorld(){

System.out.println("Hello world!!!");

}

 

SQL 部分

一、当用下面的 SQL 语句对数据库进行查询时,为何会出错?

SELECT name, sal

FROM emp

WHERE sal =

(SELECT sal

FROM emp

WHERE name='John' OR deptno = 12)

A. 上述查询中不容许子查询

B. WHERE 语句中不容许出现逻辑运算符

C. 单行运算符后面的子查询返回多行

D. 多行运算符后的子查询返回单行答:C

二、下面查询中哪个查询返回全部没有下属的员工?

A. SELECT e.ename FROM emp e WHERE e.mgr IS NOT NULL;

B. SELECT e.ename FROM emp e WHERE e.empno IN (SELECT m.mgr FROM emp m) C. SELECT e.ename FROM emp e WHERE e.empno NOT IN (SELECT m.mgr FROM emp m)

D. SELECT e.ename FROM emp e WHERE e.empno IN (SELECT m.mgr FROM emp m WHERE m.mgr IS NOT NULL)

答:D

三、在 PL/SQL 块的变量声明部分声明的 number 类型的变量,若是没有给出变量的初始值,那么在 PL/SQL 块执行时,该变量的被初始化为:

A. 0

B. Null

C. 变量的初始值取决于变量定义中指定的长度和精度

D. 因为变量没有初始化,PL/SQL 块将没法执行答:B

四、在执行下面 SQL 时 DELETE FROM dept WHERE dept_id = 12;出现 integrated constraint error because the child record was found 错误,如何才能使这条 SQL 语句执行成功?

A. 执行以前,删除 child record

B. 没法使该命令执行成功

C. 在该命令上添加另外的关键字

D. 在命令中添加 cascade constraints 选项答:AD

五、Which statement shows the maximum salary paid in each job category of each department?_______

A.select dept_id, job_cat,max(salary) from employees where salary > max(salary);


Copyright Tarena Corporation,2009.All rights reserved

70

 


B.select dept_id, job_cat,max(salary) from employees group by dept_id,job_cat;

C. select dept_id, job_cat,max(salary) from employees;

D.select dept_id, job_cat,max(salary) from employees group by dept_id; E.select dept_id, job_cat,max(salary) from employees group by dept_id,job_cat,salary;

答:B

六、description of the students table:

sid_id number

start_date date

end_date date

which two function are valid on the start_date column?_________。

A.sum(start_date)

B.avg(start_date)

C.count(start_date)

D.avg(start_date,end_date)

E.min(start_date)

F.maximum(start_date)

答:CE

七、在关系数据库的询问优化中,事先处理文件,如排序、创建索引的目的是 A 优化表达式 B 减小中间结果 C 扩大缓冲数据 D 减小扫描文件的时间答:D

八、已知关系框架 R(A,B,C,D,E)及其上的函数相关性集合,F={ A →B,E→ A,CE→D},该关系框架的候选关键字是

A .AE B.BE C.CE D.DE

答:C

九、设有关系框架 R(A,B,C,D,E)及其上的函数相关性集合,F={ B →A, BC

→D},该关系框架 R 最高是

A 第一范式的 B 第二范式的 C 第三范式的 DBCDF 范式的

答:B

十、关系数据库中,主键是

A.为标识表中惟一的实体 B.建立惟一的索引,容许空值C.只容许以表中第一字段创建 D.容许有多个主键的答:A

 

十一、当运用 SQL 语句建立主键时,能够是

A.create table table

(column1 char(13) not null primary,

Column2 int not) on primary ;

B.alter table table with notcheck add


Copyright Tarena Corporation,2009.All rights reserved

71

 

constraint [PK_ table1] primary key nonclustered (column1) on primary ;

C.alter table table add primary key column; 答:C

十二、为数据库建立索引的目的是(___)

A.提升查询的检索功能 B.建立惟一索引

C.建立主键 D.归类

答:A

1三、在 SQL 语法中,SELECT 语句的完整语法较复杂,但至少包括的部分(___),使用关键字(___)能够把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(__),若是在 SELECT 语句中使用集合函数时,必定在后面使用(___)。

(1)A.SELECT,INTO B.SELECT,FROM

C.SELECT,GROUP D.仅 SELECT

(2)A.DISTINCT B.UNION C.ALL D.TOP

(3)A.JOIN B.UNION C.INTO D.LIKE

(4)A.GROUP BY B.COMPUTE BY C.HAVING D.COMPUTE答:BABA

1四、用 SELECT 进行模糊查询时,能够使用____关键字,但要在条件值中使用___

等通配符来配合查询。

答:like,%

1五、计算机字段的累加和的函数是_____,统计结果集行数的函数是______。答:sum 和 count

1六、什么是数据库系统?

答:数据库系统是储存、管理、处理和维护数据的软件系统,它由数据库、数据库管理员和有关软件组成。数据库系统的结构框架由外部层(单个用户的视图)、概念层(全体用户的公共视图)和内部层(存储视图)组成。

1七、试述数据库完整保护的主要任务和措施。

答:数据库的完整性保护也就是数据库中数据正确性的维护。数据库完整性包括

三个内容:实体完整性规则,参照物完整性规则以及用户定义完整性规则。

前两个是有 DBMS 自动处理。

实体完整性规则是说针对于基表中的关键字中属性值不能为空值,是数据库

完整性的基本要求,主关键字和元组的惟一性对应。

参照物完整性规则是不容许引用不存在的元组:即基表中的外关键字要么为

空,要么关联基表中必存在元组。

用户定于的完整性规则针对具体的数据环境由用户具体设置的规则,它反应

了具体应用中的语义要求。

一个完整性规则通常由下面三部分组成:完整性约束条件设置,完整性约束


Copyright Tarena Corporation,2009.All rights reserved

72

 

条件的检查以及完整性约束条件的处理.后两部分在数据库中通常有相应的模块处理。另外触发器也能够作完整性的保护,但触发器大量用于主动性领域。


1八、什么是触发器和存储过程?

答:触发器是存储在数据库中的块,这些块一旦被构造后,就能够屡次执行,当触发它的事件发生时调用该触发器。触发事件是指对表中数据的操做,如插入、删除和修改。

存储过程是将经常使用的或很复杂的工做,预先用 SQL 语句写好并用一个指定的名称存储起来, 那么之后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用 execute,便可自动完成命令。

1九、说出下面语句的做用:

Select rownum,last_name,salary

From (select last_name,salary from s_emp order by salary desc) Where rownum<=10;

答:选出 s_emp 表中工资前 10 名员工的姓名和工资。

20、说明在一个系统中权限管理中应该有哪些表、表间关系、各表哪些功能?

答:

角色和权限表是 m:n 的关系

操做表和权限表是 1:m 的关系

模块表和操做表是1:m的关系

表的大致设计以下:

-- 角色表

create table roles (

id int primary key auto_increment,

name varchar(20)

);

-- 系统模块表

create table modules (

id int primary key auto_increment,

name varchar(50),

url varchar(50)

);

-- 模块操做表

create table operations (

id int primary key auto_increment,

name varchar(20),

mid int,

constraint foreign key (mid) references modules(id)

);

 

Copyright Tarena Corporation,2009.All rights reserved

73


-- 权限表

create table rights (

id int primary key auto_increment,

name varchar(20),

url varchar(50),

operationid int references operations(id));

-- 角色权限设置表

create table rolerights (

id int primary key auto_increment,

roleid int references roles(id),

rightid int references rights(id)

);

2一、有三张表,学生表 S,课程表 C,学生课程表 SC,学生能够选修多门课程,

一门课程可能被多个学生选修,经过 SC 表关联。

(1) 写出建表以及插入语句;

(2) 写出 SQL 语句,查询选修了全部选修课程的学生;

(3) 写出 SQL 语句,查询选修了至少 2 门以上的课程的学生。

答:

(1)

create table student (id number(10) primary key,name varchar2(20)); create table course (id number(10) primary key,name varchar2(20)); create table sc(sid number(10) references student(id),cid number(10) references course(id),grade number(4,2));

insert into student values(1,'feifei'); insert into student values(2,'jingjing'); insert into student values(3,'nannan'); insert into student values(4,'yuanyuan'); insert into student values(5,'jiejie');

insert into course values(1,'corejava'); insert into course values(2,'c++'); insert into course values(3,'jdbc'); insert into course values(4,'hibernate');

insert into sc values(1,1,98);

insert into sc values(2,1,97);

insert into sc values(3,1,94);

insert into sc values(4,1,92);

insert into sc values(5,1,93);

insert into sc values(1,2,94);

insert into sc values(2,2,92);

insert into sc values(3,2,95);


Copyright Tarena Corporation,2009.All rights reserved

74


insert into sc values(5,2,97);

insert into sc values(1,3,92);

insert into sc values(2,3,92);

insert into sc values(4,3,91);

insert into sc values(1,4,99);

insert into sc values(3,4,89);

(2)

select sid,count(*) from sc group by sid having count(*)=(select count(*) from course);

(3)

select sid,count(*) from sc group by sid having count(*)>=2;

2二、SQL 题

--操做员表

select pkid,name,sys_corp_id '单位主键' from base_operator

--角色表

select pkid,sys_corp_id '单位主键',name from base_role

--角色与操做员的对应关系表

select pkid,base_role_id '角色主键',base_operator_id '操做员主键' from base_role_operator

--单位表

select pkid,name from sys_corp

--问题:

--1.显示出'开发'公司所拥有的操做员

--2.显示出'开发'公司每一个角色所对应的操做员信息--3.显示出'开发'公司每一个角色所对应的操做员的个数答:1.Select name from base_operator;

2.Select op.pkid,op.name,op.sys_corp_id

From base_operator op,base_role_operator ro ,base_role br

Where ro.base_operator_id =op.pkid

And br.pkid=ro.base_role_id;

3.Select max(br.name) ,count(*)

From base_role_operator ro,base_role br

Where ro.base_role_id=br.pkid

Group by br.base_role_id;

2三、下面是两个数据库表,分别记录员工姓名和工资 T_EMPLOYEE


ID NAME

2 张三

3 李四


Copyright Tarena Corporation,2009.All rights reserved

75


5 王五

··········


T_SALARY

ID SALARY

2 3400

3 4300

5 2500

··········

1.查询表 T_EMPLOYEE 中 id = 3 的员工记录

2.查询表 T_EMPLOYEE 中全部员工记录

3.联合查询表 T_EMPLOYEE 和 T_SALARY 中全部员工的姓名和工资记录,并按照薪水从高到低排列

答:

1.select * from t_employee where id = 3;

2.select * from t_employee;

3.select e.name,s.salary from t_employee e,t_salary s where e.id=s.id

order by s.salary;

2四、请根据如下要求来完成题目:

会议室预约模块:某公司有多个会议室,以房间号区分。若是某部门须要预约会议室,则会提交预约请求(包含预约开始使用时间、预约结束使用,所预约会议室房间号)。

设计一个表,保存会议室预约信息。

要求采用 SQL 语句及 JAVA 代码段判断 在 2003-3-10 下午 3:00~4:00 3 号会议室是否空闲。

请写出有关 SQL 语句以及相关 JAVA 的代码段。

答:

1)Sql 语句:

create table meeting(

id int primary key auto_increment,

room_id varchar(10),

isUsed char,

begin timestamp,

end timestamp

);

insert into meeting values(1,'201',1,'2003-03-10 15:00:00','2003-03-10 16:00:00');

insert into meeting values(2,'301',0,'2003-03-10 17:00:00','2003-03-10 22:00:00');

2)


Copyright Tarena Corporation,2009.All rights reserved

76

 

package com.tarena;

import java.sql.*;

public class Test {

public static void main(String[] args) {

String driverName = "com.mysql.jdbc.Driver";

String url = "jdbc:mysql://localhost:3306/tarena";

String username = "root";

String pwd = "1234";

Connection con = null;

Statement stmt = null;

ResultSet rs = null;

String start = "'2003-03-10 15:00:00'";

String end = "'2003-03-10 15:00:00'";

String room_id="201";

try {

Class.forName(driverName);

con = DriverManager.getConnection(url, username, pwd); stmt = con.createStatement();

String sql = "select isUsed from meeting where begin="+start+"and end = "+end+"and room_id="+room_id;

System.out.println(sql);

if (stmt.execute(sql)) {

rs = stmt.getResultSet();

} else {

int num = stmt.getUpdateCount();

}

StringBuffer sb = new StringBuffer();

while (rs.next()) {

sb.append("isFree:" + rs.getInt(1) + " ");

}

System.out.print(sb.toString());

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

con.close();

} catch (Exception e1) {

e1.printStackTrace();

}

}

}

}

2五、下面 SQL 命令哪些是 DML?(写命令,不要写标号)哪些是 DDL?


Copyright Tarena Corporation,2009.All rights reserved

77


A、SELECT

B、UPDATE

C、INSERT

D、DELETE

E、CREATE

F、ALTER

G、DROP

答:DML 命令是:ABCD;DDL 命令是:EFG。

2六、Oracle 数据库和 SQL Server 数据库字串连接操做符号是什么?

答:Oracle 数据库字串链接操做符是||,l 例如’a’||’b’等价于’ab’ SQL Server 数据库字串连接操做符号是”+”

2七、在 Oracle 数据库中,字符串是用单引号引发来的,那么,“I’m a student.” 这个字符串中有单引号,咱们用怎样的办法进行处理。

答:能够用两个单引号来表示是个单引号,例如:insert into w values(‘I ''m a student’);

2八、在 sqlPlus 中调试存储过程:

declare

-- Local variables here

begin

-- Test statements here

 DBMS_OUTPUT.PUT_LINE('hello world!'); end;

可是始终没有输出“hello world!”,若是要输出该内容如何去作。

A.sql->show all

B.sql->serveroutput OFF

C.sql->set serveroutput on

答:C

2九、为管理岗位业务培训信息,创建 3 个表:

S (SID,SN,SD,SA) SID,SN,SD,SA 分别表明学号、学员姓名、所属单位、学员年龄

C (CID,CN ) CID,CN 分别表明课程编号、课程名称

SC ( SID,CID,G ) SID,CID,G 分别表明学号、所选修的课程编号、学习成绩

1. 使用标准 SQL 嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名

2. 使用标准 SQL 嵌套语句查询选修课程编号为’02’的学员姓名和所属单位

3. 使用标准 SQL 嵌套语句查询不选修课程编号为’03’的学员姓名和所属单位

4. 使用标准 SQL 嵌套语句查询选修所有课程的学员姓名和所属单位

5. 查询选修课程超过 5 门的学员学号和所属单位

答:

建表 sql 语句:

create table s(

sid int(10) primary key,


Copyright Tarena Corporation,2009.All rights reserved

78

 

sn varchar(20) not null,

sd varchar(20) not null,

sa int(3) not null

);

create table c(

cid int(10) primary key,

cn varchar(20) not null

);

create table sc(

sid int(10) references s(sid),

cid int(10) references c(cid),

g int(10),

primary key(sid,cid)

);

insert into s values(1,"zhangsan","project",25); insert into s values(2,"lisi","mis",26); insert into s values(3,"wangwu","manager",27); insert into s values(4,"zhaoliu","mis",26);

insert into c values(01,"税收基础");

insert into c values(02,"Core Java");

insert into c values(03,"NetWork");

insert into sc values(1,01,70);

insert into sc values(1,02,75);

insert into sc values(1,03,80);

insert into sc values(2,01,80);

insert into sc values(2,03,69);

insert into sc values(3,02,73);

1)

select s.sid,s.sn

from s,c,sc

where s.sid=sc.sid

and c.cid=sc.cid

and c.name='税收基础';

2) select a.sn,a.sd from s a, c b

where b.cid in(select c.cid from sc c where a.sid=c.sid and b.cid=c.cid) and b.cid=02;

3) select a.sn,a.sd

from s a, c b

where b.cid not in(select c.cid from sc c where a.sid=c.sid and

b.cid=c.cid)

and b.cid=03;


Copyright Tarena Corporation,2009.All rights reserved

 

4) select sn,sd from s where sid in

(select sid from sc group by sid having count(cid)=(select count(cid) from c));

5) select sn,sd from s

where sid in(select sid from sc group by sid having count(distinct cid)>5);

30、a 部门表 b 员工表

a 表字段( id --部门编号 departmentName-部门名称 )

b 表字段( id--部门编号 employee- 员工名称 )

问题:如何一条 sql 语句查询出每一个部门共有多少人答:

建表语句:

create table a(

id int(5) primary key,

departmentName varchar(20)

);

create table b(

id int(5),

employee varchar(20)

);

insert into a values(1,"部门 1");

insert into a values(2,"部门 2");

insert into a values(3,"部门 3");

insert into b values(1,"emp1");

insert into b values(1,"emp2");

insert into b values(1,"emp3");

insert into b values(2,"emp4");

insert into b values(2,"emp5");

insert into b values(3,"emp6");

select departmentName,count(employee) from a,b where a.id=b.id group by departmentName;

3一、有一个表 LEANR,表里有三个字段分别是学号(student_id),课程(kc),成绩(grade)。

1.查询每一门课程的前两名

2.查询以 Grade 降序排列的第 31 至 40 条记录(不须要区分课程)

3.查询表中存在课程重复 4 次以上的记录,显示课程和重复的次数,而且按照重

复次数的降序排列

答:

1.select student_id,sc,grade

from (select student_id,sc,grade,

row_number() over(partition by sc order by grade desc)rn from

LEANR)

where rn<=2;

2.select student_id,grade

from (

select lea.*,rownum rm

from (

select *

from LEANR

order by grade desc

) lea

where rownum < 41

)

where rm between 31 and 40;

3.select sc,count(sc)

from LEANR

group by sc

having count(sc)>=2

order by count(sc) desc;

3二、存储过程和函数的区别

答:

从参数的返回状况来看:

若是返回多个参数值最好使用存储过程,若是只有一个返回值的话能够使用函数。

从调用状况来看:

若是在 SQL 语句(DML 或 SELECT)中调用的话必定是存储函数或存储的封装函数不能够是存储过程,但调用存储函数的时候还有好多限制以及函数的纯度等级的问题,若是是在过程化语句中调用的话,就要看你要实现什么样的功能。函数通常状况下是用来计算并返回一个计算结果而存储过程通常是用来完成特定的数据操做(好比修改、插入数据库表或执行某些 DDL 语句等等),因此虽然他们的语法上很类似但用户在使用他们的时候所须要完成的功能大部分状况下是不一样的。

3三、表名:高考信息表 students_info

准考证号 科目 成绩

Copyright Tarena Corporation,2009.All rights reserved

 

no subject score 2006001 语文 119 2006001 数学 108 2006002 物理 142 2006001 化学 136 2006001 物理 127 2006002 数学 149 2006002 英语 110 2006002 语文 105 2006001 英语 98 2006002 化学 129
写出高考总分在 600 以上的学生准考证号的 SQL 答:

select no

from students_info

group by no

having sum(score)>600;

3四、数据库基础:

1)使用 SQL 语句建立学生表 students

字段: 学号:s_id 姓名:s_name 年龄:age 班级:class 辅导员:assistant (请设计各字段类型与长度)

2)查询学生表中年龄大于 20 的全部学生的学号与姓名

3)删除 0201 班的全部同窗

4)查询 0302 班姓李的学生的个数

5)将班编号以’02’开头的全部班级的辅导员修改成‘李四’答:1)create table students(s_id number(10) primary key,

s_name varchar(30) not null,

age number(3) not null,

class varchar(20) not null,

assistant varchar(30));

2)select s_id,s_name from students where age>20;

3)delete from students where class=’0201’;

4)select count(s_name) from students

where s_name like ‘李%’ and class='0302';

5)update students set assistant='李四' where class like '02%';

3五、建表 Department 部门

字段名 中文名称 类型 长度 备注 depid 部门号 变长字符 10 主键 depname 部门名称 变长字符 depcj 部门平均成绩 浮点型保留 2 位小 数 表 Employee 人员表 字段名 中文名称 类型 长度 备注

 

empid 员工号 变长字符 10 主键 name 姓名 变长字符 10 depid 部门号 变长字符 10 Cj 成绩 浮点型保留 2 位小 数 xorder 名次 整型
实现表中的记录备下面相关题目使用

Department 表中嵌入记录


部门号 部门名称

A001 人力资源部

A002 财务部


Employee 表中嵌入记录

员工号 姓名 部门号 成绩 001 张三 A001 90 002 李四 A001 90 003 王五 A001 80 004 张飞 A002 70 005 刘备 A002 60 006 关羽 A002 50 1)写出建表以及嵌入记录语句

2)显示 A001 部门员工的姓名、成绩

3)显示全部员工的员工号、姓名、部门名称、成绩

4)将关羽的成绩修改为 52 分

5)按要求写视图 VdepEmpMax 求各部门的最高分,显示部门号、最高分红绩

6)按要求写存储过程 SP_Calc 求各部门的平均成绩,并更新到 Department 表 depcj 字段中

7)按要求写存储过程 SP_Order 求员工的名次,并更新到 Employee 表 xorder 字段中

8)按要求写视图 VdepEmp2,求各部门的前 2 名,显示部门号、员工号、成绩排序规则以下:

员工 部门 分数 名次 张三 A001 90 1 李四 A001 90 1 张飞 A002 70 1 刘备 A002 60 2
答:

1)

create table Department(depid varchar2(20) primary key, depname varchar2(20),

depcj number(10,2));

create table Employee(empid varchar2(20) primary key,

name varchar2(20),

depid varchar2(20),

cj number(10,2),

xorder number(10));

insert into Department(depid,depname) values('A001','人力资源部');

insert into Department(depid,depname) values('A002','财务部');

insert into Employee(empid, name, depid, cj) values('001',' 张 三

','A001',90);

insert into Employee(empid, name, depid, cj) values('002',' 李 四 ','A001',90); insert into Employee(empid, name, depid, cj) values('003',' 王 五 ','A001',80); insert into Employee(empid, name, depid, cj) values('004',' 张 飞 ','A002',70); insert into Employee(empid, name, depid, cj) values('005',' 刘 备 ','A002',60); insert into Employee(empid, name, depid, cj) values('006',' 关 羽 ','A002',50);
2)select name,cj from employee where depid='A001';

3)select e.empid,e.name,d.depname,e.cj from employee e, department d where e.depid=d.depid;

4)update employee set cj=52 where name=' 关羽';

5)

create view VdepEmpMax as (select deptid,max(cj) from employee e group by deptid)

6)

create or replace procedure SP_Calc

as

begin

update department d set depcj=(

select nvl(avg(cj),0) from employee e

where e.depid(+)=d.depid);

end;

/

7)

create or replace procedure SP_Order

as

begin

update employee w set xorder =(select b.rn from

(select empid,rank() over (partition by depid order by cj desc ) rn from employee) b

where w.empid=b.empid);

end;

8)

create or replace view VdepEmp2 as

select depid,name,cj,rn from

(select e.*,rank() over (partition by depid order by cj desc) rn from employee e) where rn<3;

3六、有一个数据表 userinfo,包含 userid,username 字段,其中 userid 是惟一的,username 可能重复,请写一句 sql 查询语句,把重复的记录所有取出来。

userid username

1 老王

2 老王

3 老李

4 老李

5 小张

要求返回记录集

userid username

1 老王

2 老王

3 老李

4 老李

答:

select * from userinfo where username in (select username from user group by username having count(username)>1);

3七、将表 a 中的数据查询出来,并写入表 b,使用 oracle 存储过程实现答:

create or replace procedure Insert_Pro

as

begin

insert into b (select * from a);

end;

3八、向表 a 中添加字段 PolicyNo,类型为字符串,长度为 25 位,请写出 SQL;答:alter table a add (PolicyNo varchar2(25) );

3九、向表 a 中的 PolicyNo 和 StartDate 字段上创建一个索引,请写出 SQL;答:create index a_index on a(PolicyNo, StartDate);

40、将表 a 中 ClassCode 字段的值修改成 01,条件是险种 RiskCode 为空的、终保日期 StartDate 大于“2007-02-01”、该保标志 UnderWriteFlag 为 1 或 3,请写出 SQL;

答:update a set ClassCode='01'

where StartDate>to_date(”2007-02-01”, “yyyy-mm-dd”)

and UnderWriteFlag in (1,3) and RiskCode=null;

4一、Sql 中左链接和右链接的做用分别是什么?

答:左链接:表示要查询的左边的表的全部记录均会被显示右链接:表示要查询的左边的表的全部记录均会被显示

4二、假设表 a 和表 b 的数据有对应关系,表 a、表 b 中数据记录之间的对应关系可能有几种?

答:一对1、一对多、多对多

4三、用 SQLPLUS 的________命令能够查看表的结构信息,包括列的名称和数据类型。

答:desc

4四、ORACLE 数据库的约束类型有________、_____、____、_________、________

_____________。

答:not null,unique,check,primary key,foreign key

4五、ORACLE 的数据库导入命令是________

答:imp

4六、目前主流的数据库产品有哪些? 你使用过的有哪几种?

答:Oracle、MySQL、DB二、SQLServer

4七、一个简单的论坛系统,以数据库存储以下数据:

用户名,发帖标题,发帖内容,回复标题,回复内容。

天天论坛访问量 200 万左右,更新帖子 10 万左右。

请给出数据库表结构设计,并结合范式简要说明设计思路。

答:用户表:存储用户信息;

用户所发的帖子表:存储用户所发的帖子;回复表:存储对帖子所作的回复。设计:

User:

  Create table user(id number(10) primary key, Uname varchar2(20) not null unique, );

Comments:

Create table comments(id number(10),

comments_id number(20) not null unique, title varchar2(20) not null,

comments varchar2(255) not null,

foreign key(id) reference user(id)

);

Replay:

Create table replay(id number(10),

comments varchar2(255) not null,

86. foreign key(id) reference comments(comments_id)

);

思路:由于此应用所要存储的数据量比较大,因此为了不数据的冗余,表的设计依托于第三范式。

4八、某公司的机构结构为树型结构,对应的表结构为 TableCompany(ComCode— 机构代码,Upper ComCode—上级机构代码),如何查询出总公司的全部下级机构?(java 或者 SQL 都可)。你以为这种思惟和设计是否合理?有什么好建议的?答:select t1.* from TableCompany t1, TableCompany t2

Where t1.ComCode = t2.UpperComCode

  这种设计比较容易让人理解,可是表中的数据联系过于紧密,数据量很大,会给后期维护形成不便,若是根据第三范式要求,将每一子公司独立成一张表,对于关系的维护和数据的管理都会变得比较方便。

4九、设计一个权限系统。相似 sqlserver 那样,包含用户,角色,权限。用户能够属于某个角色,也能够拥有指定的某个权限。设计数据库表结构,画出模型图。答:用户:create table user(id number(10) primary key, Uname varchar2(20) not null unique

Rights varchar2(10) foreign key references rights(id) unique, Part_id number(10) foreign key references part(id) unique );

  角色:create table part(id number(10) primary key, P_name varchar2(20) not null unque );

  权限:create table rights(id number(10) primary key, R_name varchar2(20) not null unque );

模型图:

 

87

操做系统部分

一、Unix 中如何查看本机 MAC 地址?

答:ipconfig –all

二、请对 linux 命令 su 的使用做说明:

答:1)做用:su 的做用是变动为其它使用者的身份,超级用户除外,须要键入该使用者的密码。

2)格式:su [选项]... [-] [USER [ARG]...]

3)主要参数

   -f , --fast:没必要读启动文件(如 csh.cshrc 等),仅用于 csh 或 tcsh 两种 Shell。

   -l , --login:加了这个参数以后,就好像是从新登录为该使用者同样,大部分环境变量(例如 HOME、SHELL 和 USER 等)都是以该使用者(USER)为主,而且工做目录也会改变。若是没有指定 USER,缺省状况是 root。

-m, -p ,--preserve-environment:执行 su 时不改变环境变数。

-c command:变动帐号为 USER 的使用者,并执行指令(command)后再变回原来使用者。

USER:欲变动的使用者帐号,ARG 传入新的 Shell 参数。

三、Unix 中如何删除文件

答:rm file

四、Unix 中如何对文件更名

答:mv file1 file2

五、Unix 中如何复制文件

答:cp file1 file2

六、Unix 中如何显示文件的内容

答:more、cat

七、show the path of work directory

答:pwd

八、go to previous directory

答:cd ..

九、show system date

答:date

十、verify memory

答:df –k

十一、show used kernel version


Copyright Tarena Corporation,2009.All rights reserved

88

 

答:uname –r

十二、show details of files and directory 答:ls –ld

1三、create two directories simultaneously 答:mkdir dir1 dir2

1四、remove a directory called 'dir1' and contents recursively 答:rm -r dir1

1五、create a symbolic link 'lnk1' to file 'file1' 答:ln -s lnk1 file1

1六、outputs the mime type of the file 'file1' as text 答:file file1

1七、lists known encodings

答:iconv –l

1八、search files with '. bin' extension within directory '/ home/user1' 答:find /home/user1 -name *.bin

1九、show list of partitions

答:mounted df –h

20、estimate space used by directory 'dir1' 答:du -sh dir1

2一、delete user 'helen' and the home directory 答:userdel -r user1

2二、change user owner of a directory 'directory1' and all the files and directories contained inside to 'helen' 答:chown -R user1 directory1

2三、create a tarball compressed into gzip for directory 'dir1' 答:tar -cvfz archive.tar.gz dir1

2四、view last six lines of a file 'file1' 答:tail -6 file1

2五、replace "string1" with "string2" in example.txt 答:sed 's/string1/string2/g' example.txt

 

Copyright Tarena Corporation,2009.All rights reserved

89

 

2六、show configuration of an ethernet network card 答:ifconfig eth0

2七、activate an interface 'eth0'

答:ifup eth0

2八、show routing table

答:route –n

2九、show hostname

答:hostname

30、display linux tasks using most cpu 答:top

3一、force closure of the process '3518' and finish it 答:kill -9 3518

3二、display kernel loaded

答:cat /proc/mounts

3三、displays linux tasks

答:ps

3四、Please write a script to count the number of .html files in /doc directory.

答:find . -name "*.html" | wc -l

3五、某文件的权限为:drw-r--r--,用数值形式表示该权限,则该八进制数为:

___,该文件属性是 ___ 。

答:八进制数为:644;该文件的属性是:文件的建立者拥有读写权限,其余人只有读权限

3六、安装 Linux 系统对硬盘分区时,必须有两种分区类型: ___ 和 ___ 。

答:必须有两种分区类型: 文件系统分区 和 交换分区 。

3七、CD-ROM 标准的文件系统类型是 ___。

答:iso9660

3八、Linux 使用支持 Windows 9.x/2000 长文件名的文件系统的类型是 ___。答:文件系统的类型是 vfat

3九、看下实例:

[root@mylinux u01]# ls -l

total 16


Copyright Tarena Corporation,2009.All rights reserved

90

 

drwxr-xr-x 6 root root 4096 Jul 3 2005 database drwxr-xr-x 19 oracle oinstall 4096 Jul 24 13:35 oracle
若是把目录 database 以及目录下的全部内容的用户和组设置成 oracle 和oinstall,用什么命令,如何写?

答:chown -R oracle:oinstall database

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Copyright Tarena Corporation,2009.All rights reserved

相关文章
相关标签/搜索