1. 程式人生 > >java面試題系列11

java面試題系列11

華為的JAVA面試題


QUESTION NO: 1
publicclass Test1 {

publicstaticvoid changeStr(String str){
str="welcome";
}
publicstaticvoid main(String[] args) {

String str="1234";
changeStr(str);
System.out.println(str);
}
}
//輸出結果:1234
//這裡雖然是一個靜態方法,但是裡面的變數是一個區域性變數,
//所以這裡不因為是靜態方法,就誤認為裡面的變數也是靜態變量了


QUESTION NO:2
publicclass Test2 {
staticboolean foo(char c) {
System.out.print(c);
returntrue;
}
publicstaticvoid main(String[] argv) {
int i = 0;
//for(65;88&&(i<2);67)
for (foo('A'); foo('B') && (i < 2); foo('C')) {
i++;
foo('D');
}
}
}
/*
What is the result?
A. ABDCBDCB
B. ABCDABCD
C. Compilation fails.
D. An exception is thrown at runtime.
//輸出結果是:ABDCBDCB
分析:FOR迴圈裡面講究的條件要為真,與你的判斷式是什麼沒有關係
就像這裡,雖然是列印的字母,但是卻不是false,所以可以執行
第一次進行迴圈:
foo('A')列印字母A,(注:這裡不是false條件就預設為true條件)
foo('B')列印字母B,i=0,比較(i < 2),條件為true,進行迴圈體,foo('D')列印D
foo('C')列印字母C
第二次迴圈:
foo('B')列印B,i=1,比較(i < 2)為true,進行迴圈體,foo('D')列印D
foo('C')列印字母C
第三次迴圈:
foo('B')列印字母B,i=2,比較(i < 2)為false,退出迴圈,得結果
*/

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; }
publicclass B extends A{
/**
*@paramargs


*/

//can not reduce the visibility of the inherited method from A
//即不能夠使從類A中繼續來的方法的可見性降低
//private int method1(int a, int b) { return 0; }

//This static method cannot hide the instance method from A
//靜態方法不能夠隱藏繼承於A的例項
//static protected int method1(int a, int b) { return 0; }

//返回型別與A中的該方法不一致
//public short method1(int a, int b) { return 0; }

/**
*總結:類的繼承中,如果要想過載父類的方法,必須要和父類中的返回型別、可見性等等都要操作一致
*否則,程式就會報錯。一定遵守子類要遵從於父類的原則
*而我選擇的答案居然是privateintmethod1和staticprotectedint
*我選擇第一個的錯誤理由是:因為原來為保護的,如果我這裡設為public,那麼就擴充套件了其原來的可見性
*本來原來就是對包外不可見的,現在變成對包外可見的了,所以就選擇的是private
*選擇第二個的錯誤理由是:都是保護的,這裡只是變成了靜態的而已
*/

//這裡是寫了一個過載方法,因為引數型別不一致,不會報錯
privateint method1(int a, long b) { return 0; }

//可見性可以增大,但是不能夠縮小,正確
publicint method1(int a, int b) { return 0; }

publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub

}
}

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()
答案如下:
publicclass Outer {
publicvoid someOuterMethod() {
// Line 3
new Inner();//放在這裡不出錯
}
publicclass Inner {
}

publicstaticvoid main(String[] argv) {
Outer o= new Outer();
// Line 8
//o不能夠被解釋成為一種型別,出錯
//new o.Inner();
/**
*下面兩種用法,都報下面的錯誤:
*NoenclosinginstanceoftypeOuterisaccessible.
*Mustqualifytheallocationwithanenclosinginstance
*oftypeOuter(e.g.x.newA()wherexisaninstanceofOuter)
*/
//new Outer.Inner();
//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?
(譯:那個方法是servlet用於將其session ID入在一個URL中,該URL寫入servlet的響應輸出流)
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. <%= YoshiBean.size%>
B. <%= YoshiBean.getSize()%>
C. <%= YoshiBean.getProperty("size")%>
D. <jsp:getProperty id="YoshiBean" param="size"/>
E. <jsp:getProperty name="YoshiBean" param="size"/>
F. <jsp:getProperty id="YoshiBean" property="size"/>
G. <jsp:getProperty name="YoshiBean" property="size"/>

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體系結構?對應各個部分的開發工作主要包括哪些?
Struts 是MVC的一種實現,它將 Servlet和 JSP 標記(屬於 J2EE 規範)用作實現的一部分。Struts繼承了MVC的各項特性,並根據J2EE的特點,做了相應的變化與擴充套件。Struts的體系結構與工作原理如下圖2所示:
 
  1)模型(Model)  
  在Struts的體系結構中,模型分為兩個部分:系統的內部狀態和可以改變狀態的操作(事務邏輯)。內部狀態通常由一組Actinform Bean表示。根據設計或應用程式複雜度的不同,這些Bean可以是自包含的並具有持續的狀態,或只在需要時才獲得資料(從某個資料庫)。大型應用程式通常在方法內部封裝事務邏輯(操作),這些方法可以被擁有狀態資訊的bean呼叫。比如購物車bean,它擁有使用者購買商品的資訊,可能還有checkOut()方法用來檢查使用者的信用卡,並向倉庫發定貨資訊。小型程式中,操作可能會被內嵌在Action類,它是struts框架中控制器角色的一部分。當邏輯簡單時這個方法很適合。建議使用者將事務邏輯(要做什麼)與Action類所扮演的角色(決定做什麼)分開。  
  2)檢視(View)  
  檢視主要由JSP建立,struts包含擴充套件自定義標籤庫(TagLib),可以簡化建立完全國際化使用者介面的過程。目前的標籤庫包括:Bean Tags、HTML tags、Logic Tags、Nested Tags 以及Template Tags等。
  
  3)控制器(Controller)  
  在struts中,基本的控制器元件是ActionServlet類中的例項servelt,實際使用的servlet在配置檔案中由一組對映(由ActionMapping類進行描述)進行定義。對於業務邏輯的操作則主要由Action、ActionMapping、ActionForward這幾個元件協調完成的,其中Action扮演了真正的業務邏輯的實現者,ActionMapping與ActionForward則指定了不同業務邏輯或流程的執行方向。struts-config.xml 檔案配置控制器。

2. XML包括哪些解釋技術,區別是什麼?
包括:DOM(Document Object Modal)文件物件模型,SAX(Simple API for XML)。DOM是一次性將整個文件讀入記憶體操作,如果是文件比較小,讀入記憶體,可以極大提高操作的速度,但如果文件比較大,那麼這個就吃力了。所以此時SAX應用而生,它不是一次性的將整個文件讀入記憶體,這對於處理大型文件就比較就力了

3. JSP有哪些內建物件和動作?它們的作用分別是什麼?
JSP共有以下9種基本內建元件:
request 使用者端請求,此請求會包含來自GET/POST請求的引數
response 網頁傳回使用者端的迴應
pageContext 網頁的屬性是在這裡管理
session 與請求有關的會話期
application servlet 正在執行的內容
out 用來傳送回應的輸出
config servlet的構架部件
page JSP網頁本身
exception 針對錯誤網頁,未捕捉的例外
常用的元件:request、response、out、session、application、exception


4、SQL問答題

SELECT * FROM TABLE



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 '%%' )

的檢索結果為何不同?
答:

我做了一下測試,在ACCESS裡面,用它的查詢,這樣會和在MYSQL得到不同的結果,各位不妨試試,我昨天就是在ACCESS裡用SQL查詢,得到的結果為空,就是沒有記錄;而在MYSQL裡面,條件為空的記錄不顯示,其它的都顯示。


5、SQL問答題

表結構:

1、 表名:g_cardapply
欄位(欄位名/型別/長度):
g_applyno varchar 8;//申請單號(關鍵字)
g_applydate bigint 8;//申請日期
g_state varchar 2;//申請狀態

2、 表名:g_cardapplydetail
欄位(欄位名/型別/長度):
g_applyno varchar 8;//申請單號(關鍵字)
g_name varchar 30;//申請人姓名
g_idcard varchar 18;//申請人身份證號
g_state varchar 2;//申請狀態
其中,兩個表的關聯欄位為申請單號。

題目:
1、 查詢身份證號碼為440401430103082的申請日期
Select g_cardapply.g_ applydate from g_cardapply, g_cardapplydetail where g_cardapplydetail.g_idcard=’’ and g_cardapply.g_applyno=g_cardapplydetail.g_applyno
2、 查詢同一個身份證號碼有兩條以上記錄的身份證號碼及記錄個數

3、 將身份證號碼為440401430103082的記錄在兩個表中的申請狀態均改為07
Update g_cardapply. g_state=’07’, g_cardapplydetail .g_state
4、 刪除g_cardapplydetail表中所有姓李的記錄

------------------------******測試******-----------------

create database mianshi

use mianshi;

create table g_cardapply(
g_applyno varchar(8),
g_applydate bigint,
g_state varchar(20)
)
go
create table g_cardapplydetail(
g_applyno varchar(8),
g_name varchar(30),
g_idcard varchar(18),
g_state varchar(20)
)

1、select a1.g_applydate from g_cardapply as a1 inner join g_cardapplydetail a2 on
a1.g_applyno=a2.g_applyno where a2.g_idcard="123" ;

2、select g_idcard,count(g_idcard) from g_cardapplydetail
group by g_idcard having count(g_idcard)>=2;

3、update g_cardapply set g_state=603 from g_cardapply as g_d inner join g_cardapplydetail as g_c on
g_d.g_applyno=g_c.g_applyno and g_idcard='123';更新第一個表的g_state

update g_cardapplydetail set g_state=603 where g_idcard='123';