天天看點

華為Java魔鬼面試題

華為公司招聘java程式員面試題

第一部分:選擇題

  QUESTION NO: 1

  1、public class Test {

  public static void changeStr(String str){

  str="welcome";

  }

  public static void main(String[] args) {

  String str="1234";

  changeStr(str);

  System.out.println(str);

  Please write the output result :

  QUESTION NO:2

  1. public class Test {

  2. static boolean foo(char c) {

  3. System.out.print(c);

  4. return true;

  5. }

  6. public static void main( String[] argv ) {

  7. int i =0;

  8. for ( foo('A'); foo('B')&&(i<2); foo('C')){

  9. i++ ;

  10. foo('D');

  12. }

  13. }

  14. }

  What is the result?

  A. ABDCBDCB

  B. ABCDABCD

  C. Compilation fails.

  D. An exception is thrown at runtime.

QUESTION NO: 3

  1. class A {

  2. protected int method1(int a, int b) { return 0; }

  3. }

  Which two are valid in a class that extends class A? (Choose two)

  A. public int method1(int a, int b) { return 0; }

  B. private int method1(int a, int b) { return 0; }

  C. private int method1(int a, long b) { return 0; }

  D. public short method1(int a, int b) { return 0; }

  E. static protected int method1(int a, int b) { return 0; }

  QUESTION NO: 4

  1. public class Outer{

  2. public void someOuterMethod() {

  3. // Line 3

  4. }

  5. public class Inner{}

  6. public static void main( String[]argv ) {

  7. Outer o = new Outer();

  8. // Line 8

  9. }

  10. }

  Which instantiates an instance of Inner?

  A. new Inner(); // At line 3

  B. new Inner(); // At line 8

  C. new o.Inner(); // At line 8

  D. new Outer.Inner(); // At line 8//new Outer().new Inner()

  QUESTION NO: 5

  Which method is used by a servlet to place its session ID in a URL that is written to the servlet’s response output stream?

  A. The encodeURL method of the HttpServletRequest interface.

  B. The encodeURL method of the HttpServletResponse interface.

  C. The rewriteURL method of the HttpServletRequest interface.

  D. The rewriteURL method of the HttpServletResponse interface.

QUESTION NO: 6

  Which two are equivalent? (Choose two)

  A.

  B.

  C.

  D.

  E.

  F.

  G.

  QUESTION NO: 7

  Which of the following statements regarding the lifecycle of a session bean are correct?

  1. java.lang.IllegalStateException is thrown if SessionContext.getEJBObject() is invoked when a stateful session bean instance is passivated.

  2. SessionContext.getRollbackOnly() does not throw an exception when a session bean with bean-managed transaction demarcation is activated.

  3. An exception is not thrown when SessionContext.getUserTransaction() is called in the afterBegin method of a bean with container-managed transactions.

  4. JNDI access to java:comp/env is permitted in all the SessionSynchronization methods of a stateful session bean with container-managed transaction demarcation.

  5. Accessing resource managers in the SessionSynchronization.afterBegin method of a stateful session bean with bean-managed transaction does not throw an exception.

 

 第二部分:概念題

  1. 描述Struts體系結構?對應各個部分的開發工作主要包括哪些?

  3. JSP有哪些内置對象和動作?它們的作用分别是什麼?

  4、SQL問答題

  SELECT * FROM TABLE

  和

  WHERE NAME LIKE '%%' AND ADDR LIKE '%%'

  AND (1_ADDR LIKE '%%' OR 2_ADDR LIKE '%%'

  OR 3_ADDR LIKE '%%' OR 4_ADDR LIKE '%%' )

  的檢索結果為何不同?

  5、SQL問答題

  表結構:

  1、 表名:g_cardapply

  字段(字段名/類型/長度):

  g_applyno varchar 8;//申請單号(關鍵字)

  g_applydate bigint 8;//申請日期

  g_state varchar 2;//申請狀态

  2、 表名:g_cardapplydetail

  g_name varchar 30;//申請人姓名

  g_idcard varchar 18;//申請人×××号

  其中,兩個表的關聯字段為申請單号。

  題目:

  1、 查詢×××号碼為440401430103082的申請日期

  2、 查詢同一個×××号碼有兩條以上記錄的×××号碼及記錄個數

  3、 将×××号碼為440401430103082的記錄在兩個表中的申請狀态均改為07 九塾教育 http://rooms9.com

  4、 删除g_cardapplydetail表中所有姓李的記錄

華為Java筆試題

一、 單項選擇題

  1.Java是從( )語言改進重新設計。

  A.Ada B.C++ C.Pasacal D.BASIC

  答案:B

  2.下列語句哪一個正确( )

  A. Java程式經編譯後會産生machine code

  B. Java程式經編譯後會産生byte code

  C. Java程式經編譯後會産生DLL

  D. 以上都不正确

  3.下列說法正确的有( )

  A. class中的constructor不可省略

  B. constructor必須與class同名,但方法不能與class同名

  C. constructor在一個對象被new時執行

  D. 一個class隻能定義一個constructor

  答案:C

  4.提供Java存取資料庫能力的包是( )

  A.java.sql B.java.awt C.java.lang D.java.swing

  答案:A

  5.下列運算符合法的是( )

  A.&& B.<> C.if D.:=

  6.執行如下程式代碼

  a=0;c=0;

  do{

  --c;

  a=a-1;

  }while(a>0);

  後,C的值是( )

  A.0 B.1 C.-1 D.死循環

  7.下列哪一種叙述是正确的( )

  A. abstract修飾符可修飾字段、方法和類

  B. 抽象方法的body部分必須用一對大括号{ }包住

  C. 聲明抽象方法,大括号可有可無

  D. 聲明抽象方法不可寫出大括号

  答案:D

  8.下列語句正确的是( )

  A. 形式參數可被視為local variable

  B. 形式參數可被字段修飾符修飾

  C. 形式參數為方法被調用時,真正被傳遞的參數

  D. 形式參數不可以是對象

  9.下列哪種說法是正确的( )

  A. 執行個體方法可直接調用超類的執行個體方法

  B. 執行個體方法可直接調用超類的類方法

  C. 執行個體方法可直接調用其他類的執行個體方法

  D. 執行個體方法可直接調用本類的類方法

  二、 多項選擇題

  1.Java程式的種類有( )

  A.類(Class) B.Applet C.Application D.Servlet

  2.下列說法正确的有( )

  A. 環境變量可在編譯source code時指定

  B. 在編譯程式時,所能指定的環境變量不包括class path

  C. javac一次可同時編譯數個Java源檔案

  D. javac.exe能指定編譯結果要置于哪個目錄(directory)

  答案:BCD

  3.下列辨別符不合法的有( )

  A.new B.$Usdollars C.1234 D.car.taxi

  答案:ACD

  4.下列說法錯誤的有( )

  A. 數組是一種對象

  B. 數組屬于一種原生類

  C. int number=[]={31,23,33,43,35,63}

  D. 數組的大小可以任意改變

  5.不能用來修飾interface的有( )

  A.private B.public C.protected D.static

  6.下列正确的有( )

  A. call by value不會改變實際參數的數值

  B. call by reference能改變實際參數的參考位址

  C. call by reference不能改變實際參數的參考位址

  D. call by reference能改變實際參數的内容

  7.下列說法錯誤的有( )

  A. 在類方法中可用this來調用本類的類方法

 B. 在類方法中調用本類的類方法時可直接調用

  C. 在類方法中隻能調用本類中的類方法

  D. 在類方法中絕對不能調用執行個體方法

  8.下列說法錯誤的有( )

  A. Java面向對象語言容許單獨的過程與函數存在

  B. Java面向對象語言容許單獨的方法存在

  C. Java語言中的方法屬于類中的成員(member)

  D. Java語言中的方法必定隸屬于某一類(對象),調用方法與過程或函數相同

  答案:ABC

  9.下列說法錯誤的有( )

  A. 能被java.exe成功運作的java class檔案必須有main()方法

  B. J2SDK就是Java API

  C. Appletviewer.exe可利用jar選項運作.jar檔案

  D. 能被Appletviewer成功運作的java class檔案必須有main()方法

  三、 判斷題

  1.Java程式中的起始類名稱必須與存放該類的檔案名相同。( )

  答案:正确

  2.Unicode是用16位來表示一個字的。( )

  3.原生類中的資料類型均可任意轉換。( )

  答案:錯誤

華為JAVA inteview topics

JAVA 方面

1 面向對象的特征有哪些方面

2 String 是最基本的資料類型嗎?

3 int 和 Integer 有什麼差別

4 String 和StringBuffer 的差別

5 運作時異常與一般異常有何異同?

異常表示程式運作過程中可能出現的非正常狀态,運作時異常表示虛拟機的通常

操作中可能遇到的異常,是一種常見運作錯誤。java 編譯器要求方法必須聲明抛

出可能發生的非運作時異常,但是并不要求必須聲明抛出未被捕獲的運作時異

常。

6 說出一些常用的類,包,接口,請各舉5 個

7 說出ArrayList,Vector, LinkedList 的存儲性能和特性

ArrayList 和Vector 都是使用數組方式存儲資料,此數組元素數大于實際存儲的

資料以便增加和插入元素,它們都允許直接按序号索引元素,但是插入元素要涉

及數組元素移動等記憶體操作,是以索引資料快而插入資料慢,Vector 由于使用了

synchronized 方法(線程安全),通常性能上較ArrayList 差,而LinkedList 使用

雙向連結清單實作存儲,按序号索引資料需要進行前向或後向周遊,但是插入資料時

隻需要記錄本項的前後項即可,是以插入速度較快。

8 設計4 個線程,其中兩個線程每次對j 增加1,另外兩個線程對j 每次減少1。

寫出程式。

以下程式使用内部類實作線程,對j 增減的時候沒有考慮順序問題。

public class ThreadTest1{

private int j;

public static void main(String args[]){

ThreadTest1 tt=new ThreadTest1();

Inc inc=tt.new Inc();

Dec dec=tt.new Dec();

for(int i=0;i<2;i++){

Thread t=new Thread(inc);

t.start();

t=new Thread(dec);

}

private synchronized void inc(){

j++;

System.out.println(Thread.currentThread().getName()+"-inc:"+j);

private synchronized void dec(){

j--;

System.out.println(Thread.currentThread().getName()+"-dec:"+j);

class Inc implements Runnable{

public void run(){

for(int i=0;i<100;i++){

inc();

class Dec implements Runnable{

dec();

9.JSP 的内置對象及方法。

request request 表示HttpServletRequest 對象。它包含了有關浏覽器請求的資訊,并且提

供了幾個用于擷取cookie, header, 和session 資料的有用的方法。

response response 表示HttpServletResponse 對象,并提供了幾個用于設定送回 浏覽器的

響應的方法(如cookies,頭資訊等)

out out 對象是javax.jsp.JspWriter 的一個執行個體,并提供了幾個方法使你能用于向浏覽器回

送輸出結果。

pageContext pageContext 表示一個javax.servlet.jsp.PageContext 對象。它是用于友善存

取各種範圍的名字空間、servlet 相關的對象的API,并且包裝了通用的servlet 相關功能的

方法。

session session 表示一個請求的javax.servlet.http.HttpSession 對象。Session 可以存貯用

戶的狀态資訊

application applicaton 表示一個javax.servle.ServletContext 對象。這有助于查找有關

servlet 引擎和servlet 環境的資訊

config config 表示一個javax.servlet.ServletConfig 對象。該對象用于存取servlet 執行個體的初

始化參數。

page page 表示從該頁面産生的一個servlet 執行個體

10.用socket 通訊寫出用戶端和伺服器端的通訊,要求客戶發送資料後能夠回顯

相同的資料。

參見課程中socket 通訊例子。

11 說出Servlet 的生命周期,并說出Servlet 和CGI 的差別。

Servlet 被伺服器執行個體化後,容器運作其init 方法,請求到達時運作其service 方

法,service 方法自動派遣運作與請求對應的doXXX 方法(doGet,doPost)等,

當伺服器決定将執行個體銷毀的時候調用其destroy 方法。

與cgi 的差別在于servlet 處于伺服器程序中,它通過多線程方式運作其service

方法,一個執行個體可以服務于多個請求,并且其執行個體一般不會銷毀,而CGI 對每

個請求都産生新的程序,服務完成後就銷毀,是以效率上低于servlet。

12.EJB 是基于哪些技術實作的?并說出SessionBean 和EntityBean 的差別,

StatefulBean 和StatelessBean 的差別。

13.EJB 包括(SessionBean,EntityBean)說出他們的生命周期,及如何管理事務

的?

14.說出資料連接配接池的工作機制是什麼?

15 同步和異步有和異同,在什麼情況下分别使用他們?舉例說明。

16 應用伺服器有那些?

17 你所知道的集合類都有哪些?主要方法?

18 給你一個:驅動程式A,資料源名稱為B,使用者名稱為C,密碼為D,資料庫表為T,

請用JDBC 檢索出表T 的所有資料。

19.說出在JSP 頁面裡是怎麼分頁的?

頁面需要儲存以下參數:

總行數:根據sql 語句得到總行數

每頁顯示行數:設定值

目前頁數:請求參數

頁面根據目前頁數和每頁行數計算出目前頁第一行行數,定位結果集到此行,對

結果集取出每頁顯示行數的行即可。

資料庫方面:

1. 存儲過程和函數的差別

存儲過程是使用者定義的一系列sql 語句的集合,涉及特定表或其它對象

的任務,使用者可以調用存儲過程,而函數通常是資料庫已定義的方法,

它接收參數并傳回某種類型的值并且不涉及特定使用者表。

2. 事務是什麼?

事務是作為一個邏輯單元執行的一系列操作,一個邏輯工作單元必須有四個

屬性,稱為 ACID(原子性、一緻性、隔離性和持久性)屬性,隻有這樣才能成

為一個事務:

原子性

事務必須是原子工作單元;對于其資料修改,要麼全都執行,要麼全都不執行。

一緻性

事務在完成時,必須使所有的資料都保持一緻狀态。在相關資料庫中,所有規則

都必須應用于事務的修改,以保持所有資料的完整性。事務結束時,所有的内部

資料結構(如 B 樹索引或雙向連結清單)都必須是正确的。

隔離性

由并發事務所作的修改必須與任何其它并發事務所作的修改隔離。事務檢視資料

時資料所處的狀态,要麼是另一并發事務修改它之前的狀态,要麼是另一事務修

改它之後的狀态,事務不會檢視中間狀态的資料。這稱為可串行性,因為它能夠

重新裝載起始資料,并且重播一系列事務,以使資料結束時的狀态與原始事務執

行的狀态相同。

持久性

事務完成之後,它對于系統的影響是永久性的。該修改即使出現系統故障也将一

直保持。

3. 遊标的作用?如何知道遊标已經到了最後?

遊标用于定位結果集的行,通過判斷全局變量@@FETCH_STATUS 可以判

斷是否到了最後,通常此變量不等于0 表示出錯或到了最後。

4. 觸發器分為事前觸發和事後觸發,這兩種觸發有和差別。語句級觸發和

行級觸發有何差別。

事前觸發器運作于觸發事件發生之前,而事後觸發器運作于觸發事件發

生之後。通常事前觸發器可以擷取事件之前和新的字段值。

語句級觸發器可以在語句執行前或後執行,而行級觸發在觸發器所影響

的每一行觸發一次。

華為Java面試題(二)

程式設計題:

1.現在輸入n個數字,以逗号,分開;然後可選擇升或者降序排序;按送出鍵就在另一頁面顯示按什麼 排序,結果為, ,

答案(1)

public static String[] splitStringByComma(String source)

{

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

return null;

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

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

int i=0;

while(commaToker.hasMoreTokens()){

result[i] = commaToker.nextToken();

i++;

return result;

循環周遊String數組Integer.parseInt(String s)變成int類型組成int數組Arrays.sort(int[] a),a數組升序降序可以從尾部開始輸出

2.金額轉換,阿拉伯數字的金額轉換成中國傳統的形式如:

(¥1011)->(一千零一拾一進制整)輸出。

3、繼承時候類的執行順序問題,一般都是選擇題,問你将會列印出什麼?

答:父類:

package test;

public class FatherClass

public FatherClass()

System.out.println("FatherClass Create");

子類:

import test.FatherClass;

public class ChildClass extends FatherClass

public ChildClass()

System.out.println("ChildClass Create");

public static void main(String[] args)

FatherClass fc = new FatherClass();

ChildClass cc = new ChildClass();

輸出結果:

C:>java test.ChildClass

FatherClass Create

ChildClass Create

4、内部類的實作方式?

答:示例代碼如下:

public class OuterClass

private class InterClass

public InterClass()

System.out.println("InterClass Create");

public OuterClass()

InterClass ic = new InterClass();

System.out.println("OuterClass Create");

OuterClass oc = new OuterClass();

輸出結果:

C:>java test/OuterClass

InterClass Create

OuterClass Create

再一個例題:

public class OuterClass {

private double d1 = 1.0;

//insert code here

You need to insert an inner class declaration at line 3. Which two inner class declarations are

valid?(Choose two.)

A. class InnerOne{

public static double methoda() {return d1;}

B. public class InnerOne{

static double methoda() {return d1;}

C. private class InnerOne{

double methoda() {return d1;}

D. static class InnerOne{

protected double methoda() {return d1;}

E. abstract class InnerOne{

public abstract double methoda();

說明如下:

一.靜态内部類可以有靜态成員,而非靜态内部類則不能有靜态成員。 故 A、B 錯

二.靜态内部類的非靜态成員可以通路外部類的靜态變量,而不可通路外部類的非靜态變量;return d1 出錯。

故 D 錯

三.非靜态内部類的非靜态成員可以通路外部類的非靜态變量。 故 C 正确

四.答案為C、E

5、Java 的通信程式設計,程式設計題(或問答),用JAVA SOCKET程式設計,讀伺服器幾個字元,再寫入本地顯示?

答:Server端程式:

import java.net.*;

import java.io.*;

public class Server

private ServerSocket ss;

private Socket socket;

private BufferedReader in;

private PrintWriter out;

public Server()

try

ss=new ServerSocket(10000);

while(true)

socket = ss.accept();

String RemoteIP = socket.getInetAddress().getHostAddress();

String RemotePort = ":"+socket.getLocalPort();

System.out.println("A client come in!IP:"+RemoteIP+RemotePort);

in = new BufferedReader(new

InputStreamReader(socket.getInputStream()));

String line = in.readLine();

System.out.println("Cleint send is :" + line);

out = new PrintWriter(socket.getOutputStream(),true);

out.println("Your Message Received!");

out.close();

in.close();

socket.close();

}catch (IOException e)

out.println("wrong");

new Server();

};

Client端程式:

public class Client

Socket socket;

BufferedReader in;

PrintWriter out;

public Client()

System.out.println("Try to Connect to 127.0.0.1:10000");

socket = new Socket("127.0.0.1",10000);

System.out.println("The Server Connected!");

System.out.println("Please enter some Character:");

BufferedReader line = new BufferedReader(new

InputStreamReader(System.in));

out.println(line.readLine());

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

System.out.println(in.readLine());

}catch(IOException e)

out.println("Wrong");

new Client();

6、用JAVA實作一種排序,JAVA類實作序列化的方法(二種)? 如在COLLECTION架構中,實作比較要實作什麼樣的接口?

答:用插入法進行排序代碼如下

import java.util.*;

class InsertSort

ArrayList al;

public InsertSort(int num,int mod)

al = new ArrayList(num);

Random rand = new Random();

System.out.println("The ArrayList Sort Before:");

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

al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));

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

public void SortIt()

Integer tempInt;

int MaxSize=1;

for(int i=1;i<al.size();i++)

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

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

al.add(MaxSize,tempInt);

MaxSize++;

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

} else {

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

if

(((Integer)al.get(j)).intValue()>=tempInt.intValue())

al.add(j,tempInt);

break;

System.out.println("The ArrayList Sort After:");

for(int i=0;i<al.size();i++)

InsertSort is = new InsertSort(10,100);

is.SortIt();

JAVA類實作序例化的方法是實作java.io.Serializable接口

Collection架構中實作比較要實作Comparable 接口和 Comparator 接口

7、程式設計:編寫一個截取字元串的函數,輸入為一個字元串和位元組數,輸出為按位元組截取的字元串。 但是要保證漢字不被截半個,如"我ABC"4,應該截為"我AB",輸入"我ABC漢DEF",6,應該輸出為"我ABC"而不是"我ABC+漢的半個"。

答:代碼如下:

class SplitString

String SplitStr;

int SplitByte;

public SplitString(String str,int bytes)

SplitStr=str;

SplitByte=bytes;

System.out.println("The String is:′"+SplitStr+"′;SplitBytes="+SplitByte);

public void SplitIt()

int loopCount;

loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split

Byte+1);

System.out.println("Will Split into "+loopCount);

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

if (i==loopCount){

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

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

SplitString ss = new SplitString("test中dd文dsaf中男大3443n中國43中國人

0ewldfls=103",4);

ss.SplitIt();

8、JAVA多線程程式設計。 用JAVA寫一個多線程程式,如寫四個線程,二個加1,二個對一個變量減一,輸出。

希望大家補上,謝謝

9、STRING與STRINGBUFFER的差別。

答:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字元串中的内容經常進行操作,特别是内容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法

Jsp方面

1、jsp有哪些内置對象?作用分别是什麼?

答:JSP共有以下9種基本内置元件(可與ASP的6種内部元件相對應):

 request 使用者端請求,此請求會包含來自GET/POST請求的參數

response 網頁傳回使用者端的回應

pageContext 網頁的屬性是在這裡管理

session 與請求有關的會話期

application servlet 正在執行的内容

out 用來傳送回應的輸出

config servlet的構架部件

page JSP網頁本身

exception 針對錯誤網頁,未捕捉的例外

2、jsp有哪些動作?作用分别是什麼?

答:JSP共有以下6種基本動作

jsp:include:在頁面被請求的時候引入一個檔案。

jsp:useBean:尋找或者執行個體化一個JavaBean。

jsp:setProperty:設定JavaBean的屬性。

jsp:getProperty:輸出某個JavaBean的屬性。

jsp:forward:把請求轉到一個新的頁面。

jsp:plugin:根據浏覽器類型為Java插件生成OBJECT或EMBED标記

3、JSP中動态INCLUDE與靜态INCLUDE的差別?

答:動态INCLUDE用jsp:include動作實作

<jsp:include page="included.jsp" flush="true" />它總是會檢查所含檔案中的變化,适合用于包含動态頁面,并且可以帶參數

靜态INCLUDE用include僞碼實作,定不會檢查所含檔案的變化,适用于包含靜态頁面

<%@ include file="included.htm" %>

4、兩種跳轉方式分别是什麼?有什麼差別?

答:有兩種,分别為:

<jsp:include page="included.jsp" flush="true">

<jsp:forward page= "nextpage.jsp"/>

前者頁面不會轉向include所指的頁面,隻是顯示該頁的結果,首頁面還是原來的頁面。執行完後還會回來,相當于函數調用。并且可以帶參數.後者完全轉向新頁面,不會再回來。相當于go to 語句。

Servlet方面

1、說一說Servlet的生命周期?

答:servlet有良好的生存期的定義,包括加載和執行個體化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。

2、Servlet版本間(忘了問的是哪兩個版本了)的不同?

3、JAVA SERVLET API中forward() 與redirect()的差別?

答:前者僅是容器中控制權的轉向,在用戶端浏覽器位址欄中不會顯示出轉向後的位址;後者則是完全的跳轉,浏覽器将會得到跳轉的位址,并重新發送請求連結。這樣,從浏覽器的位址欄中可以看到跳轉後的連結位址。是以,前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,并且,這樣也有助于隐藏實際的連結。在有些情況下,比如,需要跳轉到一個其它伺服器上的資源,則必須使用sendRedirect()方法。

4、Servlet的基本架構

public class ServletName extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response) throws

ServletException, IOException {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws

Jdbc、Jdo方面

1、可能會讓你寫一段Jdbc連Oracle的程式,并實作資料查詢.

答:程式如下:

package hello.ant;

import java.sql.*;

public class jdbc

String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String theUser="admin";

String thePw="manager";

Connection c=null;

Statement conn;

ResultSet rs=null;

public jdbc()

try{

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

c = DriverManager.getConnection(dbUrl,theUser,thePw);

conn=c.createStatement();

}catch(Exception e){

e.printStackTrace();

public boolean executeUpdate(String sql)

conn.executeUpdate(sql);

return true;

catch (SQLException e)

return false;

public ResultSet executeQuery(String sql)

rs=null;

rs=conn.executeQuery(sql);

return rs;

public void close()

conn.close();

c.close();

catch (Exception e)

ResultSet rs;

jdbc conn = new jdbc();

rs=conn.executeQuery("select * from test");

while (rs.next())

System.out.println(rs.getString("id"));

System.out.println(rs.getString("name"));

}catch(Exception e)

2、Class.forName的作用?為什麼要用?

答:調用該通路傳回一個以字元串指定類名的類的對象。

3、Jdo是什麼?

答:JDO是Java對象持久化的新的規範,為java data object的簡稱,也是一個用于存取某種資料倉庫中的對象的标準化API。JDO提供了透明的對象存儲,是以對開發人員來說,存儲資料對象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經轉移到JDO産品提供商身上,使開發人員解脫出來,進而集中時間和精力在業務邏輯上。另外,JDO很靈活,因為它可以在任何資料底層上運作。JDBC隻是面向關系資料庫(RDBMS)JDO更通用,提供到任何資料底層的存儲功能,比如關系資料庫、檔案、XML以及對象資料庫(ODBMS)等等,使得應用可移植性更強。

4、在ORACLE大資料量下的分頁解決方法。一般用截取ID方法,還有是三層嵌套方法。

答:一種分頁方法

<%

int i=1;

int numPages=14;

String pages = request.getParameter("page") ;

int currentPage = 1;

currentPage=(pages==null)?(1):{Integer.parseInt(pages)}

sql = "select count(*) from tables";

ResultSet rs = DBLink.executeQuery(sql) ;

while(rs.next()) i = rs.getInt(1) ;

int intPageCount=1;

intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1);

int nextPage ;

int upPage;

nextPage = currentPage+1;

if (nextPage>=intPageCount) nextPage=intPageCount;

upPage = currentPage-1;

if (upPage<=1) upPage=1;

rs.close();

sql="select * from tables";

rs=DBLink.executeQuery(sql);

i=0;

while((i<numPages*(currentPage-1))&&rs.next()){i++;}

%>

//輸出内容

//輸出翻頁連接配接

合計:<%=currentPage%>/<%=intPageCount%><a href="List.jsp?page=1">第一頁</a><a

href="List.jsp?page=<%=upPage%>">上一頁</a>

for(int j=1;j<=intPageCount;j++){

if(currentPage!=j){

<a href="list.jsp?page=<%=j%>">[<%=j%>]</a>

}else{

out.println(j);

<a href="List.jsp?page=<%=nextPage%>">下一頁</a><a href="List.jsp?page=<%=intPageCount%>">最後頁

</a>

Xml方面

1、xml有哪些解析技術?差別是什麼?

答:有DOM,SAX,STAX等

DOM:處理大型檔案時其性能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構占用的記憶體較多,而且DOM必須在解析檔案之前把整個文檔裝入記憶體,适合對XML的随機通路SAX:不現于DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML檔案,不需要一次全部裝載整個檔案。當遇到像檔案開頭,文檔結束,或者标簽開頭與标簽結束時,它會觸發一個事件,使用者通過在其回調事件中寫入處理代碼來處理XML檔案,适合對XML的順序通路

STAX:Streaming API for XML (StAX)

2、你在項目中用到了xml技術的哪些方面?如何實作的?

答:用到了資料存貯,資訊配置兩方面。在做資料交換平台時,将不能資料源的資料組裝成XML檔案,然後将XML檔案壓縮打包加密後通過網絡傳送給接收者,接收解密與解壓縮後再同XML檔案中還原相關資訊進行處理。在做軟體配置時,利用XML可以很友善的進行,軟體的各種配置參數都存貯在XML檔案中。

3、用jdom解析xml檔案時如何解決中文問題?如何解析?

答:看如下代碼,用編碼方式加以解決

public class DOMTest

private String inFile = "c:\people.xml";

private String outFile = "c:\people.xml";

public static void main(String args[])

new DOMTest();

public DOMTest()

javax.xml.parsers.DocumentBuilder builder =

javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();

org.w3c.dom.Document doc = builder.newDocument();

org.w3c.dom.Element root = doc.createElement("老師");

org.w3c.dom.Element wang = doc.createElement("王");

org.w3c.dom.Element liu = doc.createElement("劉");

wang.appendChild(doc.createTextNode("我是王老師"));

root.appendChild(wang);

doc.appendChild(root);

javax.xml.transform.Transformer transformer =

javax.xml.transform.TransformerFactory.newInstance().newTransformer();

transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "gb2312");

transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");

transformer.transform(new javax.xml.transform.dom.DOMSource(doc),

new

javax.xml.transform.stream.StreamResult(outFile));

System.out.println (e.getMessage());

4、程式設計用JAVA解析XML的方式.

答:用SAX方式解析XML,XML檔案如下:

<?xml version="1.0" encoding="gb2312"?>

<person>

<name>王小明</name>

<college>資訊學院</college>

<telephone>6258113</telephone>

<notes>男,1955年生,博士,95年調入海南大學</notes>

</person>

事件回調類SAXHandler.java

import java.util.Hashtable;

import org.xml.sax.*;

public class SAXHandler extends HandlerBase

private Hashtable table = new Hashtable();

private String currentElement = null;

private String currentValue = null;

public void setTable(Hashtable table)

this.table = table;

public Hashtable getTable()

return table;

public void startElement(String tag, AttributeList attrs)

throws SAXException

currentElement = tag;

public void characters(char[] ch, int start, int length)

currentValue = new String(ch, start, length);

public void endElement(String name) throws SAXException

if (currentElement.equals(name))

table.put(currentElement, currentValue);

JSP内容顯示源碼,SaxXml.jsp:

<HTML>

<HEAD>

<TITLE>剖析XML檔案people.xml</TITLE>

</HEAD>

<BODY>

<%@ page errorPage="ErrPage.jsp"

contentType="text/html;charset=GB2312" %>

<%@ page import="java.io.*" %>

<%@ page import="java.util.Hashtable" %>

<%@ page import="org.w3c.dom.*" %>

<%@ page import="org.xml.sax.*" %>

<%@ page import="javax.xml.parsers.SAXParserFactory" %>

<%@ page import="javax.xml.parsers.SAXParser" %>

<%@ page import="SAXHandler" %>

File file = new File("c:\people.xml");

FileReader reader = new FileReader(file);

Parser parser;

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser sp = spf.newSAXParser();

SAXHandler handler = new SAXHandler();

sp.parse(new InputSource(reader), handler);

Hashtable hashTable = handler.getTable();

out.println("<TABLE BORDER=2><CAPTION>教師資訊表</CAPTION>");

out.println("<TR><TD>姓名</TD>" + "<TD>" +

(String)hashTable.get(new String("name")) + "</TD></TR>");

out.println("<TR><TD>學院</TD>" + "<TD>" +

(String)hashTable.get(new String("college"))+"</TD></TR>");

out.println("<TR><TD>電話</TD>" + "<TD>" +

(String)hashTable.get(new String("telephone")) + "</TD></TR>");

out.println("<TR><TD>備注</TD>" + "<TD>" +

(String)hashTable.get(new String("notes")) + "</TD></TR>");

out.println("</TABLE>");

</BODY>

</HTML>

繼續閱讀