543
京東網上商城
華為JAVA麵試題及詳解
今晚強哥說我要多寫代碼,基礎很重要,為了長遠起見,我就開始寫一些麵試題的代碼。
第一題
package com.zzk.test; public class Test { public static void main(String[] args) { String str="1234"; changeStr(str); System.out.println(str); } public static void changeStr(String str) { str="change yes or not?"; } }
1234
不會改變
分析:
這個主要涉及到String類型變量的不變性,private final char value[];String類中保存值得成員是這樣定義的,所以在類存堆中new出一個String對象後該對象不能再改變。
主函數中的str與changestr(String str)中的str是兩個不同的引用,當調用函數時,把主函數中str引用指向的對象賦值給changestr(String str)中的str,即是changestr(String str)中str與主函數中的str指向同一個String對象,當函數中給str賦值是,由於String類型變量的不變性所以不是去改變"1234" (String str = "1234";)這個對象而是去創建另一個新的對象“welcome”(str = "welcome";),而changestr(String
str)中的str這個引用指向它,而不是主函數中的str指向它,所以會出現這樣的情況。
對於String類型變量的賦值,遵循下麵的規則,java中有String pool(我估計是由於String對象的不變性,所以java中有String pool)。
java中有兩種賦值方式,一種采用字麵值方式的賦值,String s = "aaa"; 查找String pool中是否存在“aaa”這個對象,如果不存在,則在String pool 中創建一個"aaa"對象,然後將String pool中這個對象的地址返回給s這個引用,這樣s會指向String pool 中"aaa"這個對象。如果String pool中已經有這個“aaa”對象時java虛擬機不會創建新的對象,而是將這個對象的地址直接返回。
另一種方式是String s = new String("aaa"); 首先在String pool 中查找有沒有這個對象,如果已經有了,則不再String pool中創建了,而是在堆中創建該對象,然後返回堆中該對象的地址。如果沒有,則在String pool中創建該對象,並且在堆中也創建該對象,最後返回堆中該對象的地址給s。
改變可以這樣改
package com.zzk.test; public class Test { public static void main(String[] args) { String str="1234"; str=changeStr(str); System.out.println(str); } public static String changeStr(String str) { str="change?"; return str; } }
輸出:
change?
第二題
package com.zzk.test; public class Test { static boolean foo(char c) { System.out.print(c); return true; } public static void main(String[] args) { int i=0; for(foo('A');foo('B')&&(i<2);foo('C')) { i++; foo('D'); } } }
輸出:
猜測:ABDCBDCB
對了
分析:
第三題
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; }
答案A C
當一個子類重寫父類的方法時,重寫的方法的訪問權限
必須大於等於父類的訪問權限.
在此題中父類中的方法訪問權限為protected,子類隻能是
protected或public.這時A是符合題意的.
由於選項C的形參和父類的不一樣,沒有重寫的效果,所以
在子類出現也是沒問題的.
第四題
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()
選A
內部類的實例化可以在普通方法裏,也可以在static方法裏實例化.
package com.test.a;public class Outer
{
Inner i = new Outer.Inner();
public void method()
{
new Inner();
}
public class Inner
{
}
public static void main(String[] args)
{
Outer o = new Outer();
Inner i = o.new Inner();
}
static void a()
{
Outer o = new Outer();
Inner i = o.new Inner();
}
}
第五題
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.
答案:B
請看J2EE API關於此方法的說明:
Encodes the specified URL for use in the sendRedirect method or, if encoding is not needed, returns the URL unchanged. The implementation of this method includes the logic to determine whether the session ID needs to be encoded in the URL. Because the rules for making this determination can differ from those used to decide whether to encode a normal link, this method is separated from the encodeURL method. All URLs sent to the HttpServletResponse.sendRedirect method should be run through this method. Otherwise, URL rewriting cannot be used with browsers which do not support cookies.
第六題
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"/>
此題考查的是JavaBean在jsp中的取值方式.
其中C和G效果是一樣的.
概念題
1. 描述Struts體係結構?對應各個部分的開發工作主要包括哪些?

2.
XML包括哪些解釋技術,區別是什麼?
包括:DOM(Document Object Modal)文檔對象模型,SAX(Simple API for XML)。DOM是一次性將整個文檔讀入內存操作,如果是文檔比較小,讀入內存,可以極大提高操作的速度,但如果文檔比較大,那麼這個就吃力了。所以此時SAX應用而生,它不是一次性的將整個文檔讀入內存,這對於處理大型文檔就比較就力了
3. JSP有哪些內置對象和動作?它們的作用分別是什麼?
表結構: 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';
最後更新:2017-04-02 06:52:09