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