1: 有如下一段程序:
package a.b.c;
public class Test{
private static int i=0;
public int getNext(){
return i++;
}
}
package a.b.c;
public class TestB{
public static void main(String[] args){
Test test=new Test();
System.out.println(test.getNext());
Test testObject=new Test();
System.out.println(testObject.getNext());
System.out.println(test.getNext());
}
}
請問最后打印出來的是什么,為什么?
打印出來時0,1,2
private static 修飾i,就表示開辟一處內(nèi)存空間供該類的的所有對象共享,且該成員域只能在該類中訪問
i與實(shí)例無關(guān)。i用于存儲創(chuàng)建實(shí)例的個數(shù),i為類的屬性而不是實(shí)例的屬性,本題中g(shù)etNext()被調(diào)用了兩次,而且方法中執(zhí)行的是i++操作,所以結(jié)果分別是0,1,2
2: 有這么一段程序:
String a=new String("a");
String b="b";
String c=a+b;
StringBuffer strBuf=new StringBuffer();
strBuf.append("a");
strBuf.append("b");
String d=strBuf.toString();
StringBuilder strBuilder=new StringBuilder();
strBuilder.append("a");
strBuilder.append("b");
String e=strBuilder.toString();
請問以上程序片段中c、d、e的字符串的創(chuàng)建各有什么不同?
c和e創(chuàng)建過程是一樣的. 都是采用了StringBuilder
d采用了StringBuffer
3: 描敘下final, finally, finalize的區(qū)別
final—修飾符(關(guān)鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載
finally—再異常處理時提供 finally 塊來執(zhí)行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執(zhí)行,然后控制就會進(jìn)入 finally 塊(如果有的話)。
finalize—方法名。Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調(diào)用的。
4: 現(xiàn)有以下數(shù)據(jù)表結(jié)構(gòu),請按要求寫出SQL語句
購物人 商品名稱 數(shù)量
A 甲 2
B 乙 4
C 丙 1
A 丁 2
B 丙 5
查出所有購入商品為兩種或兩種以上的購物人記錄
select 購物人 as 顧客,count(商品名稱) as 商品種類數(shù) from 表 group by 購物人 having count(商品名稱)>=2
6: 描敘下TCP協(xié)議三次握手過程
在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個連接。
第一次握手:建立連接時,客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù),在上述過程中,還有一些重要的概念:
未連接隊(duì)列:在三次握手協(xié)議中,服務(wù)器維護(hù)一個未連接隊(duì)列,該隊(duì)列為每個客戶端的SYN包(syn=j)開設(shè)一個條目,該條目表明服務(wù)器已收到SYN包,并向客戶發(fā)出確認(rèn),正在等待客戶的確認(rèn)包。這些條目所標(biāo)識的連接在服務(wù)器處于Syn_RECV狀態(tài),當(dāng)服務(wù)器收到客戶的確認(rèn)包時,刪除該條目,服務(wù)器進(jìn)入ESTABLISHED狀態(tài)。
Backlog參數(shù):表示未連接隊(duì)列的最大容納數(shù)目。