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

相關文章
相關標籤/搜索