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