java面試題分析
1.面試單選題
1.面試題執行下列語句後,變量i的值是?
byte i=127;
i=i+2;
誤區可能以爲是-127,實際上是編譯不通過,報錯
出現問題incompatible types required:byte,found:int
2.面試題表達式(short)10/10.2*2運算後結果是什麼類型?
誤區可能以爲是short類型,但是進行強制轉化後最大爲double類型
3.面試題觀察下面代碼解釋其結果:
第一種:整數除法
class Test
{
public static void main(String args[])
{
System.out.println(3/0);
System.out.println(3%0);
}
}
整數除法中,除數爲0,拋出一個算術異常ArithmeticException。整數取餘運算中,除數爲0,拋出一個ArithmeticException異常。
第二種:小數除法
public class test {
public static void main(String[] args) {
try {
double x=64.0;
double y=0.0;
System.out.println(x%y);
} catch (Exception e) {
System.out.println("abc");
}
}
}
小數除法中,除數爲0,輸出一個Infinity常量。小數取餘運算中,除數爲0,拋出一個NaN常量。
誤區以爲會產生abc,實際爲nan,意思爲非數值類型。
第三種:==和equal比較
class Test
{
public static void main(String args[])
{
double x = 64.0;
double y = 0.0;
System.out.println(x%y == x%y);
}
}
等於號比較的是兩個nan=nan,所以爲false
Double a = new Double(Double.NaN);
Double b = new Double(Double.NaN);
if(Double.NaN == Double.NaN)
System.out.println("True");
else
System.out.println("False");
if(a.equals(b))
System.out.println("True");
else
System.out.println("False");
等於號比較nan=nan,所以第一個是false
equal比較的是數值nan=nan,所以第二個是true
結果就是false,true
第四種:整數取餘
class Test
{
public static void main(String args[])
{
byte x = -64;
byte y = -6;
System.out.println(x/y + " " + x%y);
x = 64;
System.out.println(x/y + " " + x%y);
}
}
/ 爲除數,%取餘,且在取餘操作中,餘數的正負符號完全取決於左操作數,和作操作數的正負號一致。
所以爲10,-4 -10,4
第五種:小數取餘
class Test
{
public static void main(String args[])
{
double x = 64.5;
double y = 6.0;
System.out.println(x/y + " " + x%y);
}
}
小數取餘,用左邊的操作數連續減去右邊的操作數,直到結果小於右邊的操作數,此結果爲餘。即對商截去小數位後的運算。同時此時除法也不同於普通的除法
所以結果爲10.75,4.5
4.面試題當一個類所有構造器均爲私有的,以下那個描述是正確的?
問題1:
A不能被其他類實列化
B不能被其他類繼承
C既不能被其它類實例化,也不能被其他類繼承
D該類必須被final修飾
既不能實例化也不能繼承
問題2:
以下那個針對默認無參構造器描述是正確的:
A均是public構造器
B均無訪問修飾符
C均與所屬類訪問修飾符一致
D由編譯器決定
均是public構造器
問題3:
構造方法和普通方法有什麼區別?
與一般方法相比,構造方法的特點是:
1、構造函數的名稱總是和它的類名一致。
2、構造函數沒有返回值,即不可以爲它指定任何類型的返回值,包括void。
3、在構造函數的第一條語句中,可以調用同類的另一個構造函數或者父類的構造函數。
4、構造函數不能由編程人員顯式的直接調用。
5、構造函數的主要作用是完成對類對象的初始化。
4.面試題以下選項中關於Dom和Sax的說法錯誤的是?C
A. dom 和sax都是目前常用的xml解析技術
B.dom把xml文檔映射成一個倒掛的樹狀結構
c. 模型內存消耗小,dom解析器能提供更好的性能優勢
d. sax讀取文檔時會激活一系列事件,推給事件處理器,由事件處理器來訪問文檔。
dom內存消耗很大,性能不如sax
5. 面試題sql語句中只有滿足聯接條件的記錄才包含在查詢結果中,這種聯接爲?C
a. 左連接
b. 右鏈接
c. 內連接
d. 完全連接
INNER JOIN等價於JOIN,爲普通連接,在Visual FoxPro中稱爲內部連接,即只有滿足連接條件的記錄纔出現在查詢結果中。
LEFT JOIN爲左連接,即除滿足連接條件的記錄出現在查詢結果中外,第1個表中不滿足連接條件的記錄也出現在查詢結果中。
RIGHT JOIN爲右連接,即除滿足連接條件的記錄出現在查詢結果中外,第2個表中不滿足連接條件的記錄也出現在查詢結果中。
FULL JOIN可以稱爲全連接,即兩個表中的記錄不管是否滿足連接條件將都在目標表或查詢結果中出現,不滿足連接條件的記錄對應部分爲NULL
6. 面試題關於spring說法錯誤的是:D
a. spring是一個輕量級java ee 的框架集合
b. spring提供了“依賴注入”的實現
c. 使用spring可以實現聲明事務
d. spring提供aop方式的日誌系統
錯誤的是D,spring沒有提供aop日誌,只是支持aop而已
7.面試題寫出程序結果:
static boolean foo(char c)
{
System.out.println(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
8.面試題下列代碼執行的結果是:
public static void stringReplace(String text){
text=text.replace('j','i');
}
public static void bufferReplace(StringBuffer text){
text.append("c");
text=new StringBuffer("Hello");
text.append("world!");
}
public static void main(String[] args) {
String textString =new String("java");
StringBuffer textBuffer=new StringBuffer("java");
stringReplace(textString);
bufferReplace(textBuffer);
System.out.println(textString+textBuffer);
}
執行結果是javajavac
這是String參數傳遞,是不可變的(immutable).
而題目中第七行text = text.append (“C”),append方法會改變text中的值
而這個text與main中的textBuffer是指向同一個對象,所以對應的輸出是javac。
而裏面的新建的helloworld對象會被回收,
9.面試題給出以下代碼,說法正確的是( C)
public XXXX extendssomething1,something2
A.如果XXXX是一個接口,something1和something2取消掉,則代碼段合法
B.如果XXXX是一個類,something1和something2均是接口,則代碼段合法
C.如果XXXX、something1和something2均是接口,則代碼段合法
D.因爲Java語言不支持多重繼承,所以代碼不合法
10.面試題寫出下列面試題結果:
public class Test01 {
public static int fun(){
int result = 5;
try {
result = result/0;
return result;
} catch (Exception e) {
System.out.println("Exception");
result = -1;
return result;
}finally{
result= 10;
System.out.println("finally");
}
}
public static void main(String[] args) {
int x = fun();
System.out.println(x);
}
}
Exception
finally
-1
可能會以爲是result爲10,但是有return所以返回值爲-1
11.面試題關於集合中的equals()和hashcode規定的說法錯誤的是?D
a. 如果兩個對象相同,他們的hashcode要一致
b. 如果兩個對象hashcode值一致,equals方法不一定返回true
c. equal方法默認和==判定一致
d. java中的hashcode就是對象的內存地址
不是,hash code 只是Java 用來標識對象的,你可以形象的把它視爲對象的身份證號碼。
該方法返回對象的哈希碼,支持該方法是爲哈希表提供一些優點,例如,HashMap 提供的哈希表。
同一個對象未發生改變時多次調用hashCode()返回值必須相同,
兩個對象equals不相等,那麼兩對象的hashCode()返回最好不同(此處可用來提高哈希表性能)
兩個對象的hashCode()返回值相同,兩對象不一定相同,還需要通過equals()再次判斷
當equals方法被重寫時,通常有必要重寫 hashCode 方法
2.面試多選題
1.面試題在oracle中的一個事務可以由以下哪些情況的出現而結束(ABCD)
a. 使用commit提交
b. 使用rollback回滾
c. 執行ddl/dcl語句
d. 用戶撤銷oracle連接
以上都會出現結束還有一種情況:4、數據庫關閉(宕機)
2.面試題有關servlet的聲明週期說法正確的是?(acd)
a. servlet的生命週期由servlet實例控制
b. init()方法在創建完servlet實例後對其進行初始化,傳遞的參數爲實現servletContext接口的對象
c. service()方法響應客戶端發出的請求
d. destroy() 方法用於釋放servlet實例資源
init傳遞的參數是servletconfig用於初始化
servletContext用於傳遞數據
3.面試題擁有下列引用類型的對象在虛擬機內存足夠的情況下不會被垃圾回收機制回收?(AC)
a. 強引用
b. 弱引用
c. 軟引用
d. 虛引用
4.面試題關於文件上傳,下列說法正確的是?(AB)
a. 表單的enctype屬性取值必須是“multipart/form-data”
b. 需要用post方式提交
c. 表單的action屬性中不能使用url重寫(?arg=value&argl=value1)形式傳遞參數
d. 請求中的content-lenth包含的是請求體的總長度,而不是上傳文件的大小
d不正確是響應內容的長度
5.面試題下列select語句中,那些子句不能包含子查詢?(c ,d)
a. select
b. group by
c. where
d. order by
3.面試填空題
1.css框模型中
統一調整四周外邊距的屬性是margin
統一調整四周內邊距的屬性是padding
2.默認情況下,connection對象會在執行一條語句後自動提交
不利於事務控制,如果改變這種情況調用connection的setautocommit方法設置爲手動提交
3.java中最有效計算2*8
2<<3 左移爲乘法即2*2的三次方
4.局部變量的名字和成員變量的名字相同,若想在該方法中使用成員變量,需要使用this關鍵字
5.java集合中抽象有序集合的接口是list,無序集合的接口是set,他們的共同父接口是connection,
對於集合進行特殊操作,如排序工具 類是connections
4.面試解答題
1. 簡述jspmvc模式下重複提交問題產生的原因和解決辦法
原因:在表單提交到一個Servlet,而Servlet又通過請求轉發的方式響應了一個JSP(HTML)頁面, 此時地址欄還保留着Servlet的那個路徑,在響應頁面點擊“刷新”,這就是一個重複提交的情況。
解決辦法:javascript ,設置一個變量,只允許提交一次。 或者javascript,將提交按鈕或者image置爲disable
2.jsp中的動態引入與靜態引入的區別
JSP靜態引入就是把頁面A嵌入到頁面B中
動態引入是一個頁面引用另一個頁面
3.描述hibernate的id生成器
4.簡述spring中的編程式事務處理及聲明式事務處理
編程式事務處理就是指在業務代碼中利用Spring框架提供的一些類進行事務處理。
聲明式事務處理就是指在xml配置文件或註解的方式聲明對某個類方法進行事務處理。