20155339 2016-2017-2 《Java程序設計》第十週學習總結
教材學習內容總結
計算機網絡概述
- 在計算機網絡中,如今命名IP地址的規定是IPv4協議,該協議規定每一個IP地址由4個0-255之間的數字組成,例如10.0.120.34。每一個計算機在聯網之後都擁有一個惟一的合法IP地址。
- 一個IP地址能夠對應多個域名,一個域名只能對應一個IP地址。
- DNS服務器是在實際傳輸數據之前將域名轉換爲IP地址的服務器,當用戶在瀏覽器輸入域名時,瀏覽器首先請求DNS服務器,將域名轉換爲IP地址,而後將轉換後的IP地址反饋給瀏覽器,而後再進行實際的數據傳輸。
網絡編程概述
- 網絡編程就是兩個或多個程序之間的數據交換,和普通的單機程序相比,網絡程序最大的不一樣就是須要交換數據的程序運行在不一樣的計算機上,這樣就形成了數據交換的複雜。
- 在網絡通信中,第一次主動發起通信的程序被稱做客戶端(Client)程序,簡稱客戶端,而在第一次通信中等待鏈接的程序被稱做服務器端(Server)程序,簡稱服務器。一旦通信創建,則客戶端和服務器端徹底同樣,沒有本質的區別。
- 網絡編程中常見的兩種結構:C/S結構和B/S結構。C/S結構即客戶端/服務器結構,在開發時須要分別開發客戶端和服務器端,這種結構的優點在於因爲客戶端是專門開發的,能夠根據須要實現各類效果,它的缺點在於通用性查,維護壓力大。B/S結構即瀏覽器/服務器結構,在開發時只須要開發服務器端便可,這種結構的優點在於開發的壓力比較小,不須要維護客戶端,可是覽器的限制比較大,表現力不強。
- 在實際進行數據交換時,爲了讓接收端理解該數據,計算機比較笨,什麼都不懂的,那麼就須要規定該數據的格式,這個數據的格式就是協議。
網絡通信方式
- 網絡通信的方式主要有兩種:TCP(傳輸控制協議)方式和UDP(用戶數據報協議)方式。
- 重要的數據通常使用TCP方式進行數據傳輸,而大量的非核心數據則都經過UDP方式進行傳遞,在一些程序中甚至結合使用這兩種方式進行數據的傳遞。
客戶端網絡編程步驟
- 創建網絡鏈接:在創建網絡鏈接時須要指定鏈接到的服務器的IP地址和端口號,創建完成之後,會造成一條虛擬的鏈接,後續的操做就能夠經過該鏈接實現數據交換了。
2.得到網絡鏈接:當客戶端鏈接到服務器端時,服務器端就能夠得到一個鏈接,這個鏈接包含客戶端的信息,例如客戶端IP地址等等,服務器端和客戶端也經過該鏈接進行數據交換,通常在服務器端編程中,當得到鏈接時,須要開啓專門的線程處理該鏈接,每一個鏈接都由獨立的線程實現。
3.交換數據:服務器端經過得到的鏈接進行數據交換。服務器端的數據交換步驟是首先接收客戶端發送過來的數據,而後進行邏輯處理,再把處理之後的結果數據發送給客戶端。簡單來講,就是先接收再發送,這個和客戶端的數據交換數序不一樣。
4.關閉網絡鏈接:在數據交換完成之後,關閉網絡鏈接,釋放程序佔用的端口、內存等系統資源,結束網絡編程。
Java網絡編程技術
- 一個基礎的網絡類——InetAddress類。該類的功能是表明一個IP地址,而且將IP地址和域名相關的操做方法包含在該類的內部。
TCP編程以及UDP方式的網絡編程
- 在Java語言中,數據傳輸功能由Java IO實現,也就是說只須要從鏈接中得到輸入流和輸出流便可,而後將須要發送的數據寫入鏈接對象的輸出流中,在發送完成之後從輸入流中讀取數據便可。
OutputStream os = socket1.getOutputStream(); //得到輸出流
InputStream is = socket1.getInputStream(); //得到輸入流
- 在Java API中,實現UDP方式的編程,包含客戶端網絡編程和服務器端網絡編程,主要由
DatagramSocket
與DatagramPacket
兩個類實現。
Java 密碼學算法
密碼學基礎
Java與密碼學
- Java安全體系結構總共分爲4個部分:JCA( Java Cryptography Architecture, Java加密體系結構)、JCE( Java Cryptography Extension, Java加密擴展包)、JSSE( Java Secure Sockets Extension, Java安全套接字擴展包)、JAAS( Java Authentication and Authentication Service, Java鑑別與安全服務)。
- JCA和JCE是Java平臺提供的用於安全和加密服務的兩組API。它們並不執行任何算法,它們只是鏈接應用和實際算法實現程序的一組接口。 軟件開發商能夠根據JCE接口( 又稱安全提供者接口) 將各類算法實現後,打包成一個Provider( 安全提供者) , 動態地加載到Java運行環境中。
Java對稱加密-DES算法
- 將密鑰經過對象序列化方式保存在文件中,編程思路:(1) 獲取密鑰生成器,(2) 初始化密鑰生成器,(3) 生成密鑰,(4) 經過對象序列化方式將密鑰保存在文件中。
- 將密鑰經過字節保存在文件中,編程思路:Java中全部的密鑰類都有一個
getEncoded( )
方法,經過它能夠從密鑰對象中獲取主要編碼格式,其返回值是字節數組。其主要步驟爲:(1) 獲取密鑰、(2)獲取主要編碼格式、(3) 保存密鑰編碼格式
Java非對稱加密-RSA算法
Java的KeyPairGenerator
類提供了一些方法來建立密鑰對以便用於非對稱加密,密鑰對建立好後封裝在KeyPair類型的對象中,在KeyPair類中提供了獲取公鑰和私鑰的方法。具體步驟以下:
(1) 建立密鑰對生成器,(2) 初始化密鑰生成器,(3) 生成密鑰對,(4) 獲取公鑰和私鑰。git
使用密鑰協定建立共享密鑰
- 非對稱加密解決了密鑰分發的難題,但其計算量比對稱密鑰大,所以通常並不使用非對稱加密加密大量數據。常見的作法是:主要數據經過對稱密鑰加密,而使用非對稱加密來分發對稱密鑰,這樣就將二者的優點結合了起來。
- 除了這種方式之外,還可使用密鑰協定來交換對稱密鑰。執行密鑰協定的標準算法是DH算法。1.建立DH公鑰和私鑰,2.建立共享密鑰。
Java摘要算法- MD5
- 使用Java計算指定字符串的消息摘要。
java.security包中的MessageDigest類提供了計算消息摘要的方法。
(1) 生成MessageDigest對象
MessageDigest m=MessageDigest.getInstance("MD5")
;
(2) 傳入須要計算的字符串
m.update(x.getBytes("UTF8" ))
;
(3) 計算消息摘要
byte s[ ]=m.digest( )
;
(4) 處理計算結果。
網絡
- 網絡能夠分爲:局域網和廣域網。
- 計算機網絡體系結構的通訊協議劃分爲七層,自下而上依次爲:物理層(Physics Layer)、數據鏈路層(Data Link Layer)、網絡層(Network Layer)、傳輸層(Transport Layer)、會話層(Session Layer)、表示層(Presentation Layer)、應用層(Application Layer)。其中第四層完成數據傳送服務,上面三層面向用戶。
HTTP協議
- 超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲普遍的一種網絡協議。全部的WWW文件都必須遵照這個標準。
- 一次HTTP請求包含:方法、請求頭、請求實體。
java.net.URL以及java.net.URLConnection
- URL:統一資源定位符是對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每一個文件都有一個惟一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。
- java.net.HttpURLConnection類是另一種訪問HTTP資源的方式.HttpURLConnection類具備徹底的訪問能力,能夠取代HttpGet和HttpPost類.使用HttpUrlConnection訪問HTTP資源可使用以下六步:
(1)使用java.net.URL封裝HTTP資源的url,並使用openConnection方法得到HttpUrlConnection對象
(2)設置請求方法,例如GET,POST等
(3)設置輸入輸出及其餘權限.若是要下載HTTP資源或向服務端上傳數據,須要使用以下代碼進行設置.
下載HTTP資源,須要將setDoInput方法的參數值設爲true
(4)設置http請求頭.在不少狀況下,要根據實際狀況設置一些HTTP請求頭,例以下面的代碼設置了Charset請求頭的值爲UTF-8.
(5)輸入和輸出數據.這一步是對HTTP資源的讀寫操做.也就是經過InputStream和OutputStream讀取和寫入數據.下面的代碼得到了InputStream對象和OutputStream對象.
(6)關閉輸入和輸出流.雖然關閉輸入輸出流並非必需的,在應用程序結束後,輸入輸出流會自動關閉,但顯示關閉輸入輸出流是一個好習慣.
教材學習中的問題和解決過程
- TCP與UDP的區別
- 解答:TCP和UDP是OSI模型中的運輸層中的協議。TCP提供可靠的通訊傳輸,而UDP則常被用於讓廣播和細節控制交給應用的通訊傳輸。TCP面向鏈接(如打電話要先撥號創建鏈接);UDP是無鏈接的,即發送數據以前不須要創建鏈接。
代碼調試中的問題和解決過程
本週在學習代碼的過程當中沒有遇到什麼問題。算法
![](http://static.javashuo.com/static/loading.gif)
上週考試錯題總結
目前還未公佈答案。編程
結對及互評
評分標準
- 正確使用Markdown語法(加1分):
- 不使用Markdown不加分
- 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
- 排版混亂的不加分
- 模板中的要素齊全(加1分)
- 缺乏「教材學習中的問題和解決過程」的不加分
- 缺乏「代碼調試中的問題和解決過程」的不加分
- 代碼託管不能打開的不加分
- 缺乏「結對及互評」的不能打開的不加分
- 缺乏「上週考試錯題總結」的不能加分
- 缺乏「進度條」的不能加分
- 缺乏「參考資料」的不能加分
教材學習中的問題和解決過程, 一個問題加1分數組
代碼調試中的問題和解決過程, 一個問題加1分瀏覽器
- 本週有效代碼超過300分行的(加2分)
- 其餘加分:
- 週五前發博客的加1分
- 感想,體會不假大空的加1分
- 排版精美的加一分
- 進度條中記錄學習時間與改進狀況的加1分
- 有動手寫新代碼的加1分
- 課後選擇題有驗證的加1分
- 代碼Commit Message規範的加1分
- 錯題學習深刻的加1分
- 點評認真,能指出博客和代碼中的問題的加1分
- 結對學習狀況真實可信的加1分
- 扣分:
- 有抄襲的扣至0分
- 代碼做弊的扣至0分
- 遲交做業的扣至0分
點評模板:
點評過的同窗博客和代碼
其餘(感悟、思考等,可選)
這周的學習是基於密碼學以及計算機網絡的,這兩門科目對我這周的學習起到了必定的幫助做用。網絡
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
20/20 |
1/4 |
20/20 |
|
第二週 |
145/165 |
1/5 |
12/32 |
|
第三週 |
411/576 |
1/6 |
16/48 |
|
第四周 |
1021/1597 |
1/7 |
25/73 |
|
第五週 |
1115/2712 |
1/8 |
28/103 |
|
第六週 |
1126/3838 |
1/9 |
20/123 |
|
第七週 |
574/4412 |
2/11 |
18/141 |
|
第八週 |
421/4633 |
1/10 |
15 / 156 |
|
第九周 |
1189/5822 |
2/12 |
20/161 |
|
第十週 |
833/6222 |
1/13 |
15/176 |
|
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟件工程軟件的估計爲何這麼難,軟件工程 估計方法
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
參考資料