笔试总结
一,HTTP狀態(tài)碼常用的有哪些?
2開頭的表示成功,主要是200,204,3開頭的是重定向,主要是301,302,4開頭的表示是客戶端錯(cuò)誤,主要是403,404,5開頭表示服務(wù)器錯(cuò)誤,主要是500,503
一、200狀態(tài)碼:
成功2××: 成功處理了請(qǐng)求的狀態(tài)碼。
1、200 :服務(wù)器已成功處理了請(qǐng)求并提供了請(qǐng)求的網(wǎng)頁,服務(wù)器成功返回網(wǎng)頁。
2、204: 服務(wù)器成功處理了請(qǐng)求,但沒有返回任何內(nèi)容。
二、300狀態(tài)碼:
重定向3×× :每次請(qǐng)求中使用重定向不要超過 5 次。
1、301: 請(qǐng)求的網(wǎng)頁已永久移動(dòng)到新位置。當(dāng)URLs發(fā)生變化時(shí),使用301代碼。搜索引擎索引中保存新的URL。
2、302: 請(qǐng)求的網(wǎng)頁臨時(shí)移動(dòng)到新位置。搜索引擎索引中保存原來的URL。
三、400狀態(tài)碼:
客戶端錯(cuò)誤4×× :表示請(qǐng)求可能出錯(cuò),妨礙了服務(wù)器的處理。
1、403: 服務(wù)器拒絕請(qǐng)求。
2、404: 請(qǐng)求頁面不存在,服務(wù)器找不到請(qǐng)求的網(wǎng)頁。服務(wù)器上不存在的網(wǎng)頁經(jīng)常會(huì)返回此代碼。
四、500狀態(tài)碼:
服務(wù)器錯(cuò)誤5×× :表示服務(wù)器在處理請(qǐng)求時(shí)發(fā)生內(nèi)部錯(cuò)誤。這些錯(cuò)誤可能是服務(wù)器本身的錯(cuò)誤,而不是請(qǐng)求出錯(cuò)。
1、500 :服務(wù)器內(nèi)部遇到錯(cuò)誤,無法完成請(qǐng)求。
2、503: 服務(wù)器目前無法使用(由于超載或停機(jī)維護(hù))。
狀態(tài)參考:http://www.chaoji.com/features/httpstatus.aspx
http://tool.oschina.net/commons?type=5
二,細(xì)寫TCP/IP模型和OSI模型,以及兩種模型的參、層次映射
TCP/IP模型4層結(jié)構(gòu):應(yīng)用層,傳輸層,網(wǎng)際層,網(wǎng)絡(luò)接口層
應(yīng)用層:負(fù)責(zé)實(shí)現(xiàn)一切與應(yīng)用程序相關(guān)的功能,對(duì)應(yīng)OSI參考模型的上三層,應(yīng)用層,表示層,會(huì)話層。
協(xié)議:FTP(文件傳輸協(xié)議)
? ? ? ? ? ?HTTP(超文本傳輸協(xié)議)
? ? ? ? ? ?DNS(域名服務(wù)器協(xié)議)
? ? ? ? ? ?SMTP(簡單郵件傳輸協(xié)議)
傳輸層:負(fù)責(zé)提供可靠的傳輸服務(wù),它提供了節(jié)點(diǎn)間的數(shù)據(jù)傳送服務(wù),對(duì)應(yīng)OSI參考模型的第四層,傳輸層
協(xié)議:TCP(控制傳輸協(xié)議)
? ? ? ? ? ?UDP(用戶數(shù)據(jù)報(bào)協(xié)議)
網(wǎng)際層:負(fù)責(zé)網(wǎng)絡(luò)間的尋址、數(shù)據(jù)傳輸,對(duì)應(yīng)OSI參考模型的第三層,網(wǎng)絡(luò)層
協(xié)議:IP(網(wǎng)際協(xié)議)
? ? ? ? ? ?ICMP(網(wǎng)際控制消息協(xié)議)
? ? ? ? ? ARP(地址解析協(xié)議)
? ? ? ? ? RARP(反向地址解析協(xié)議)
網(wǎng)絡(luò)接口層:負(fù)責(zé)實(shí)際數(shù)據(jù)的傳輸,對(duì)應(yīng)OSI參考模型的下兩層,數(shù)據(jù)鏈路層和物理層
協(xié)議:PPP(點(diǎn)對(duì)點(diǎn)協(xié)議)
OSI模型的7層結(jié)構(gòu):應(yīng)用層,表示層,會(huì)話層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層
應(yīng)用層:提供應(yīng)用程序訪問OSI環(huán)境的手段,有:HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
表示層:這一層根據(jù)不同的應(yīng)用目的將數(shù)據(jù)處理為不同的格式,表現(xiàn)出來就是我們看到的各種各樣的文件擴(kuò)展名。 數(shù)據(jù)的壓縮、解壓,加密、解密都發(fā)生在這一層
會(huì)話層:負(fù)責(zé)建立、維護(hù)、控制會(huì)話,區(qū)分不同的會(huì)話,以及提供單工(Simplex)、半雙工(Half duplex)、全雙工(Full duplex)三種通信模式的服務(wù)。我們平時(shí)所知的NFS,RPC,Windows等都工作在這一層
傳輸層:負(fù)責(zé)分割、組合數(shù)據(jù),實(shí)現(xiàn)端到端的邏輯連接,TCP,UDP
網(wǎng)絡(luò)層:負(fù)責(zé)管理網(wǎng)絡(luò)地址,定位設(shè)備,決定路由。我們所熟知的IP地址和路由器就是工作在這一層。上層的數(shù)據(jù)段在這一層被分割,封裝后叫做包(Packet),包有兩種,一種叫做用戶數(shù)據(jù)包(Data packets),是上層傳下來的用戶數(shù)據(jù);另一種叫路由更新包(Route update packets),是直接由路由器發(fā)出來的,用來和其他路由器進(jìn)行路由信息的交換。
數(shù)據(jù)鏈路層:負(fù)責(zé)準(zhǔn)備物理傳輸,CRC校驗(yàn),錯(cuò)誤通知,網(wǎng)絡(luò)拓?fù)?#xff0c;流控等。我們所熟知的MAC地址和交換機(jī)都工作在這一層。上層傳下來的包在這一層被分割封裝后叫做幀(Frame)
物理層:就是實(shí)實(shí)在在的物理鏈路,負(fù)責(zé)將數(shù)據(jù)以比特流的方式發(fā)送、接收
三,Socket編程,分別寫出客戶端和服務(wù)器端代碼
客戶端:
import java.io.*;import java.net.*;public class TalkClient {public static void main(String args[]) {try{Socket socket=new Socket("127.0.0.1",10000);//向本機(jī)的10000端口發(fā)出客戶請(qǐng)求BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));//由系統(tǒng)標(biāo)準(zhǔn)輸入設(shè)備構(gòu)造BufferedReader對(duì)象PrintWriter os=new PrintWriter(socket.getOutputStream());//由Socket對(duì)象得到輸出流,并構(gòu)造PrintWriter對(duì)象BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));//由Socket對(duì)象得到輸入流,并構(gòu)造相應(yīng)的BufferedReader對(duì)象String readline;readline=sin.readLine(); //從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字符串while(!readline.equals("bye")){//若從標(biāo)準(zhǔn)輸入讀入的字符串為 "bye"則停止循環(huán)os.println(readline);//將從系統(tǒng)標(biāo)準(zhǔn)輸入讀入的字符串輸出到Serveros.flush();//刷新輸出流,使Server馬上收到該字符串System.out.println("Client:"+readline);//在系統(tǒng)標(biāo)準(zhǔn)輸出上打印讀入的字符串System.out.println("Server:"+is.readLine());//從Server讀入一字符串,并打印到標(biāo)準(zhǔn)輸出上readline=sin.readLine(); //從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字符串} //繼續(xù)循環(huán)os.close(); //關(guān)閉Socket輸出流is.close(); //關(guān)閉Socket輸入流socket.close(); //關(guān)閉Socket}catch(Exception e) {System.out.println("Error"+e); //出錯(cuò),則打印出錯(cuò)信息}} }服務(wù)器端:
import java.io.*;import java.net.*;import java.applet.Applet;public class TalkServer{public static void main(String args[]) {try{ServerSocket server=null;try{server=new ServerSocket(4700);//創(chuàng)建一個(gè)ServerSocket在端口4700監(jiān)聽客戶請(qǐng)求}catch(Exception e) {System.out.println("can not listen to:"+e); //出錯(cuò),打印出錯(cuò)信息}Socket socket=null;try{socket=server.accept();//使用accept()阻塞等待客戶請(qǐng)求,有客戶//請(qǐng)求到來則產(chǎn)生一個(gè)Socket對(duì)象,并繼續(xù)執(zhí)行}catch(Exception e) {System.out.println("Error."+e);//出錯(cuò),打印出錯(cuò)信息}String line;BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));//由Socket對(duì)象得到輸入流,并構(gòu)造相應(yīng)的BufferedReader對(duì)象PrintWriter os=newPrintWriter(socket.getOutputStream());//由Socket對(duì)象得到輸出流,并構(gòu)造PrintWriter對(duì)象BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));//由系統(tǒng)標(biāo)準(zhǔn)輸入設(shè)備構(gòu)造BufferedReader對(duì)象System.out.println("Client:"+is.readLine());//在標(biāo)準(zhǔn)輸出上打印從客戶端讀入的字符串line=sin.readLine();//從標(biāo)準(zhǔn)輸入讀入一字符串while(!line.equals("bye")){//如果該字符串為 "bye",則停止循環(huán)os.println(line);//向客戶端輸出該字符串os.flush();//刷新輸出流,使Client馬上收到該字符串System.out.println("Server:"+line);//在系統(tǒng)標(biāo)準(zhǔn)輸出上打印讀入的字符串System.out.println("Client:"+is.readLine());//從Client讀入一字符串,并打印到標(biāo)準(zhǔn)輸出上line=sin.readLine();//從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字符串} //繼續(xù)循環(huán)os.close(); //關(guān)閉Socket輸出流is.close(); //關(guān)閉Socket輸入流socket.close(); //關(guān)閉Socketserver.close(); //關(guān)閉ServerSocket}catch(Exception e){System.out.println("Error:"+e);//出錯(cuò),打印出錯(cuò)信息}}}
四,堆和棧的區(qū)別
堆:
1,存儲(chǔ)的都是對(duì)象,每個(gè)對(duì)象都包含一個(gè)對(duì)應(yīng)的class信息
2,JVM只有一個(gè)堆被所有的線程共享,堆中不存放基本類型和對(duì)象引用,只存放對(duì)象本身
棧:
1,每個(gè)線程都包含一個(gè)棧,棧中只保存基礎(chǔ)數(shù)據(jù)和對(duì)象的引用。
2,每個(gè)棧中的數(shù)據(jù)都是私有的,其他棧不能方法
3,分為三個(gè)部分:基本變量區(qū),執(zhí)行上下文,操作指令區(qū)
總結(jié)
- 上一篇: 用结点实现链表LinkedList,用数
- 下一篇: Java的Executor框架和线程池实