當前位置:首頁 » 網頁前端 » web閱讀協議的代碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

web閱讀協議的代碼

發布時間: 2022-08-26 03:43:10

『壹』 關於java web開發的小問題

那個只是web前端的技術吧,跟JAVA有什麼關系?

比如用 JavaScript腳本彈出層效果(彈出層只是 div+css而已)

你在 源代碼中,怎麼能找得到?

『貳』 IIS伺服器為客戶提供Web瀏覽器服務所使用的協議是

1、IIS伺服器為客戶提供Web瀏覽器服務所使用的協議是:HTTP:超文本傳輸協議(Hypertext Transfer Protocol)
2、相信iis的安裝以及配置和網站搭建就不用贅述了吧

多素材網站模板
為您解答
望採納

『叄』 如何閱讀源代碼

」, 除了閱讀代碼以外, 沒有更好的方法. 7.在尋找bug時, 請從問題的表現形式到問題的根源來分析代碼. 不要沿著不相關的路徑(誤入歧途). 8.我們要充分利用調試器|編譯器給出的警告或輸出的符號代碼|系統調用跟蹤器|資料庫結構化查詢語言的日誌機制|包轉儲工具和Windows的消息偵查程序, 定出的bug的位置. 9.對於那些大型且組織良好的系統, 您只需要最低限度地了解它的全部功能, 就能夠對它做出修改. 10.當向系統中增加新功能時, 首先的任務就是找到實現類似特性的代碼, 將它作為待實現功能的模板. 11.從特性的功能描述到代碼的實現, 可以按照字元串消息, 或使用關鍵詞來搜索代碼. 12.在移植代碼或修改介面時, 您可以通過編譯器直接定位出問題涉及的范圍, 從而減少代碼閱讀的工作量. 13.進行重構時, 您從一個能夠正常工作的系統開始做起, 希望確保結束時系統能夠正常工作. 一套恰當的測試用例(test case)可以幫助您滿足此項約束. 14.閱讀代碼尋找重構機會時, 先從系統的構架開始, 然後逐步細化, 能夠獲得最大的效益. 15.代碼的可重用性是一個很誘人, 但難以理解與分離, 可以試著尋找粒度更大一些的包, 甚至其他代碼. 16.在復查軟體系統時, 要注意, 系統是由很多部分組成的, 不僅僅只是執行語句. 還要注意分析以下內容: 文件和目錄結構|生成和配置過程|用戶界面和系統的文檔. 18.可以將軟體復查作為一個學習|講授|援之以手和接受幫助的機會. ++++++++++++++++++++ 第二章: 基本編程元素 ++++++++++++++++++++ 19.第一次分析一個程序時, main是一個好的起始點. 20.層疊if-else if-…-else序列可以看作是由互斥選擇項組成的選擇結構. 21.有時, 要想了解程序在某一方面的功能, 運行它可能比閱讀源代碼更為恰當. 22.在分析重要的程序時, 最好首先識別出重要的組成部分. 23.了解局部的命名約定, 利用它們來猜測變數和函數的功能用途. 24.當基於猜測修改代碼時, 您應該設計能夠驗證最初假設的過程. 這個過程可能包括用編譯器進行檢查|引入斷言|或者執行適當的測試用例. 25.理解了代碼的某一部分, 可能幫助你理解餘下的代碼. 26.解決困難的代碼要從容易的部分入手. 27.要養成遇到庫元素就去閱讀相關文檔的習慣; 這將會增強您閱讀和編寫代碼的能力. 28.代碼閱讀有許多可選擇的策略: 自底向上和自頂向下的分析|應用試探法和檢查注釋和外部文檔, 應該依據問題的需要嘗試所有這些方法. 29.for (i=0; i 30.涉及兩項不等測試(其中一項包括相等條件)的比較表達式可以看作是區間成員測試. 31.我們經常可以將表達式應用在樣本數據上, 藉以了解它的含義. 32.使用De Morgan法則簡化復雜的邏輯表達式. 33.在閱讀邏輯乘表達式時, 問題可以認為正在分析的表達式以左的表達式均為true; 在閱讀邏輯和表達式時, 類似地, 可以認為正在分析的表達式以左的表達式均為false. 34.重新組織您控制的代碼, 使之更為易讀. 35.將使用條件運行符? :的表達式理解為if代碼. 36.不需要為了效率, 犧牲代碼的易讀性. 37.高效的演算法和特殊的優化確實有可能使得代碼更為復雜, 從而更難理解, 但這並不意味著使代碼更為緊湊和不易讀會提高它的效率. 38.創造性的代碼布局可以用來提高代碼的易讀性. 39.我們可以使用空格|臨時變數和括弧提高表達式的易讀性. 40.在閱讀您所控制的代碼時, 要養成添加註釋的習慣. 41.我們可以用好的縮進以及對變數名稱的明智選擇, 提高編寫欠佳的程序的易讀性. 42.用diff程序分析程序的修訂歷史時, 如果這段歷史跨越了整體重新縮排, 常常可以通過指定-w選項, 讓diff忽略空白差異, 避免由於更改了縮進層次而引入的噪音. 43.do循環的循環體至少執行一次. 44.執行算術運算時, 當b=2n-1時, 可以將a&b理解為a%(b+1). 45.將a<<n理解為a*k, k=2n. 46.將a>>n理解為a/k, k=2n. 47.每次只分析一個控制結構, 將它的內容看作是一個黑盒. 48.將每個控制結構的控製表達式看作是它所包含代碼的斷言. 49.return, goto, break和continue語句, 還有異常, 都會影響結構化的執行流程. 由於這些語句一般都會終止或重新開始正在進行的循環,因此要單獨推理它們的行為. 50.用復雜循環的變式和不變式, 對循環進行推理. 51.使用保持含義不變的變換重新安排代碼, 簡化代碼的推理工作. +++++++++++++++++++ 第三章: 高級C數據類型 +++++++++++++++++++ 52.了解特定語言構造所服務的功能之後, 就能夠更好地理解使用它們的代碼. 53.識別並歸類使用指針的理由. 54.在C程序中, 指針一般用來構造鏈式數據結構|動態分配的數據結構|實現引用調用|訪問和迭代數據元素|傳遞數組參數|引用函數|作為其他 值的別名|代表字元串|以及直接訪問系統內存. 55.以引用傳遞的參數可以用來返回函數的結果, 或者避免參數復制帶來的開銷. 56.指向數組元素地址的指針, 可以訪問位於特定索引位置的元素. 57.指向數組元素的指針和相應的數組索引, 作用在二者上的運算具有相同的語義. 58.使用全局或static局部變數的函數大多數情況都不可重入(reentrant). 59.字元指針不同於字元數組. 60.識別和歸類應用結構或共用體的每種理由. 61.C語言中的結構將多個數據元素集合在一起, 使得它們可以作為一個整體來使用, 用來從函數中返回多個數據元素|構造鏈式數據結構|映射數據在硬體設備|網路鏈接和存儲介質上的組織方式|實現抽象數據類型|以及以面向對象的方式編程. 62.共用體在C程序中主要用於優化存儲空間的利用|實現多態|以及訪問數據不同的內部表達方式. 63.一個指針, 在初始化為指向N個元素的存儲空間之後, 就可以作為N個元素的數組來使用. 64.動態分配的內在塊可以電焊工地釋放, 或在程序結束時釋放, 或由垃圾回收器來完成回收; 在棧上分配的內存塊當分配它的函數退出後釋放. 65.C程序使用typedef聲明促進抽象, 並增強代碼的易讀性, 從而防範可移植性問題, 並模擬C++和Java的類聲明行為. 66.可以將typedef聲明理解成變數定義: 變數的名稱就是類型的名稱; 變數的類型就是與該名稱對應的類型. +++++++++++++++ 第四章: C數據結構 +++++++++++++++ 67.根據底層的抽象數據類型理解顯式的數據結構操作. 68.C語言中, 一般使用內建的數組類型實現向量, 不再對底層實現進行抽象. 69.N個元素的數組可以被序列for (i=0; i 70.表達式sizeof(x)總會得到用memset或memcpy處理數組x(不是指針)所需的正確位元組數. 71.區間一般用區間內的第一個元素和區間後的第一個元素來表示. 72.不對稱區間中元素的數目等於高位邊界與低位邊界的差. 73.當不對稱區間的高位邊界等於低位邊界時, 區間為空. 74.不對稱區間中的低位邊界代表區間的第一個元素; 高位邊界代表區間外的第一個元素. 75.結構的數組常常表示由記錄和欄位組成的表. 76.指向結構的指針常常表示訪問底層記錄和欄位的游標. 77.動態分配的矩陣一般存儲為指向數組列的指針或指向元素指針的指針; 這兩種類型都可以按照二維數組進行訪問. 78.以數組形式存儲的動態分配矩陣, 用自定義訪問函數定位它們的元素. 79.抽象數據類型為底層實現元素的使用(或誤用)方式提供一種信心的量度. 80.數組用從0開始的順序整數為鍵, 組織查找表. 81.數組經常用來對控制結構進行高效編碼, 簡化程序的邏輯. 82.通過在數組中每個位置存儲一個數據元素和一個函數指針(指向處理數據元素的函數), 可以將代碼與數據關聯起來. 83.數組可以通過存儲供程序內的抽象機(abstract machine)或虛擬機(virtual machine)使用的數據或代碼, 控製程序的運作. 84.可以將表達式sizeof(x) / sizeof(x[0])理解為數組x中元素的個數. 85.如果結構中含有指向結構自身|名為next的元素, 一般說來, 該結構定義的是單向鏈表的結點. 86.指向鏈表結點的持久性(如全局|靜態或在堆上分配)指針常常表示鏈表的頭部. 87.包含指向自身的next和prev指針的結構可能是雙向鏈表的結點. 88.理解復雜數據結構的指針操作可以將數據元素畫為方框|指針畫為箭頭. 89.遞歸數據結構經常用遞歸演算法來處理. 90.重要的數據結構操作演算法一般用函數參數或模板參數來參數化. 91.圖的結點常常順序地存儲在數組中, 鏈接到鏈表中, 或通過圖的邊鏈接起來. 92.圖中的邊一般不是隱式地通過指針, 就是顯式地作為獨立的結構來表示. 93.圖的邊經常存儲為動態分配的數組或鏈表, 在這兩種情況下, 邊都錨定在圖的結點上. 94.在無向圖中, 表達數據時應該將所有的結點看作是等同的, 類似地, 進行處理任務的代碼也不應該基於它們的方向來區分邊. 95.在非連通圖中, 執行遍歷代碼應該能夠接通孤立的子圖. 96.處理包含迴路的圖時, 遍歷代碼應該避免在處理圖的迴路進入循環. 97.復雜的圖結構中, 可能隱藏著其他類型的獨立結構. +++++++++++++++++ 第五章: 高級控制流程 +++++++++++++++++ 98.採用遞歸定義的演算法和數據結構經常用遞歸的函數定義來實現. 99.推理遞歸函數時, 要從基準落伍測試開始, 並認證每次遞歸調用如何逐漸接近非遞歸基準範例代碼. 100.簡單的語言常常使用一系列遵循該語言語法結構的函數進行語法分析. 101.推理互遞歸函數時, 要基於底層概念的遞歸定義. 102.尾遞歸調用等同於一個回到函數開始處的循環. 103.將throws子句從方法的定義中移除, 然後運行Java編譯器對類的源代碼進行編譯, 就可以容易地找到那些可能隱式地生成異常的方法. 104.在多處理器計算機上運行的代碼常常圍繞進程或線程進行組織. 105.工作群並行模型用於在多個處理器間分配工作, 或者創建一個任務池, 然後將大量需要處理標准化的工作進行分配. 106.基於線程的管理者/工人並行模型一般將耗時的或阻塞的操作分配給工人子任務, 從而維護中心任務的響應性. 107.基於進程的管理者/工人並行模型一般用來重用現有的程序, 或用定義良好的介面組織和分離粗粒度的系統模塊. 108.基於流水線的並行處理中, 每個任務都接收到一些輸入, 對它們進行一些處理, 並將生成的輸出傳遞給下一個任務, 進行不同的處理. 109.競爭條件很難捉摸, 相關的代碼常常會將競爭條件擴散到多個函數或模塊; 因而, 很難隔離由於競爭條件導致的問題. 110.對於出現在信號處理器中的數據結構操作代碼和庫調用要保持高度警惕. 111.在閱讀包含宏的代碼時, 要注意, 宏既非函數, 也非語句. 112.do…while(0)塊中的宏等同於控制塊中的語句. 113.宏可以訪問在它的使用點可見的所有局部變數. 114.宏調用可改變參數的值 115.基於宏的標記拼接能夠創建新的標記符. +++++++++++++++++ 第六章: 應對大型項目 +++++++++++++++++ 116.我們可以通過瀏覽項目的源代碼樹—包含項目源代碼的層次目錄結構, 來分析一個項目的組織方式. 源碼樹常常能夠反映出項目在構架和軟體過程上的結構. 117.應用程序的源代碼樹經常是該應用程序的部署結構的鏡像. 118.不要被龐大的源代碼集合嚇倒; 它們一般比小型的專門項目組織得更出色. 119.當您首次接觸一個大型項目時, 要花一些時間來熟悉項目的目錄樹結構. 120.項目的源代碼遠不只是編譯後可以獲得可執行程序的計算機語言指令; 一個項目的源碼樹一般還包括規格說明|最終用戶和開發人員文檔|測試腳本|多媒體資源|編譯工具|例子|本地化文件|修訂歷史|安裝過程和許可信息. 121.大型項目的編譯過程一般聲明性地藉助依賴關系來說明. 依賴關系由工具程序, 如make及其派生程序, 轉換成具體的編譯行動. 122.大型項目中, 製作文件常常由配置步驟動態地生成; 在分析製作文件之前, 需要先執行項目特定的配置. 123.檢查大型編譯過程的各個步驟時, 可以使用make程序的-n開關進行預演. 124.修訂控制系統提供從儲存庫中獲取源代碼最新版本的方式. 125.可以使用相關的命令, 顯示可執行文件中的修訂標識關鍵字, 從而將可執行文件與它的源代碼匹配起來. 126.使用修訂日誌中出現的bug跟蹤系統內的編號, 可以在bug跟蹤系統的資料庫中找到有關的問題的說明. 127.可以使用修訂控制系統的版本儲存庫, 找出特定的變更是如何實現的. 128.定製編譯工具用在軟體開發過程的許多方面, 包括配置|編譯過程管理|代碼的生成|測試和文檔編制. 129.程序的調試輸出可以幫助我們理解程序控制流程和數據元素的關鍵部分. 130.跟蹤語句所在的地點一般也是演算法運行的重要部分. 131.可以用斷言來檢驗演算法運作的步驟|函數接收的參數|程序的控制流程|底層硬體的屬性和測試用例的結果. 132.可以使用對演算法進行檢驗的斷言來證實您對演算法運作的理解, 或將它作為推理的起點. 133.對函數參數和結果的斷言經常記錄了函數的前置條件和後置條件. 134.我們可以將測試整個函數的斷言作為每個給定函數的規格說明. 135.測試用例可以部分地代替函數規格說明. 136.可以使用測試用例的輸入數據對源代碼序列進行預演. +++++++++++++++++++ 第七章: 編碼規范和約定 +++++++++++++++++++ 137.了解了給定代碼庫所遵循的文件組織方式後, 就能更有效率地瀏覽它的源代碼. 138.閱讀代碼時, 首先要確保您的編輯器或優美列印程序的tab設置, 與代碼遵循的風格規范一致. 139.可以使用代碼塊的縮進, 快速地掌握代碼的總體結構. 140.對編排不一致的代碼, 應該立即給予足夠的警惕. 141.分析代碼時, 對標記為XXX, FIXME和TODO的代碼序列要格外注意: 錯誤可能就潛伏在其中. 142.常量使用大寫字母命名, 單詞用下劃線分隔. 143.在遵循Java編碼規范的程序中, 包名(package name)總是從一個頂級的域名開始(例如, org, com), 類名和介面名由大寫字母開始, 方法和變數名由小寫字母開始. 144.用戶界面控制項名稱之前的匈牙利記法的前綴類型標記可以幫助我們確定它的作用. 145.不同的編程規范對可移植構造的構成有不同的主張. 146.在審查代碼的可移植性, 或以某種給定的編碼規范作為指南時, 要注意了解規范對可移植性需求的界定與限制. 147.如果GUI功能都使用相應的編程結構來實現, 則通過代碼審查可以輕易地驗證給定用戶界面的規格說明是否被正確地採用. 148.了解項目編譯過程的組織方式與自動化方式之後, 我們就能夠快速地閱讀與理解對應的編譯規則. 149.當檢查系統的發布過程時, 常常可以將相應發行格式的需求作為基準. ++++++++++++ 第八章: 文檔 ++++++++++++ 150.閱讀代碼時, 應該盡可能地利用任何能夠得到的文檔. 151.閱讀一小時代碼所得到的信息只不過相當於閱讀一分鍾文檔. 152.使用系統的規格說明文檔, 了解所閱讀代碼的運行環境. 153.軟體需求規格說明是閱讀和評估代碼的基準. 154.可以將系統的設計規格說明作為認知代碼結構的路線圖, 閱讀具體代碼的指引. 155.測試規格說明文檔為我們提供可以用來對代碼進行預演的數據. 156.在接觸一個未知系統時, 功能性的描述和用戶指南可以提供重要的背景信息,從而更好地理解閱讀的代碼所處的上下文. 157.從用戶參考手冊中, 我們可以快速地獲取, 應用程序在外觀與邏輯上的背景知識, 從管理員手冊中可以得知代碼的介面|文件格式和錯誤消息的詳細信息. 158.利用文檔可以快捷地獲取系統的概況, 了解提供特定特性的代碼. 159.文檔經常能夠反映和提示出系統的底層結構. 160.文檔有助於理解復雜的演算法和數據結構. 161.演算法的文字描述能夠使不透明(晦澀, 難以理解)的代碼變得可以理解. 162.文檔常常能夠闡明源代碼中標識符的含義. 163.文檔能夠提供非功能性需求背後的理論基礎. 164.文檔還會說明內部編程介面. 165.由於文檔很少像實際的程序代碼那樣進行測試, 並受人關注, 所以它常常可能存在錯誤|不完整或過時. 166.文檔也提供測試用例, 以及實際應用的例子. 167.文檔常常還會包括已知的實現問題或bug. 168.環境中已知的缺點一般都會記錄在源代碼中. 169.文檔的變更能夠標出那些故障點. 170.對同一段源代碼重復或互相沖突的更改, 常常表示存在根本性的設計缺陷, 從而使得維護人員需要用一系列的修補程序來修復. 171.相似的修復應用到源代碼的不同部分, 常常表示一種易犯的錯誤或疏忽, 它們同樣可能會在其他地方存在. 172.文檔常常會提供不恰當的信息, 誤導我們對源代碼的理解. 173.要警惕那些未歸檔的特性: 將每個實例歸類為合理|疏忽或有害, 相應地決定是否應該修復代碼或文檔. 174.有時, 文檔在描述系統時, 並非按照已完成的實現, 而是系統應該的樣子或將來的實現. 175.在源代碼文檔中, 單詞gork的意思一般是指」理解」. 176.如果未知的或特殊用法的單詞阻礙了對代碼的理解, 可以試著在文檔的術語表(如果存在的話)|New Hacker』s Dictionary[Ray96]|或在Web搜索引擎中查找它們. 177.總是要以批判的態度來看待文檔, 注意非傳統的來源, 比如注釋|標准|出版物|測試用例|郵件列表|新聞組|修訂日誌|問題跟蹤資料庫|營銷材料|源代碼本身. 178.總是要以批判的態度來看待文檔; 由於文檔永遠不會執行, 對文檔的測試和正式復查也很少達到對代碼的同樣水平, 所以文檔常常會誤導讀者, 或者完全錯誤. 179.對於那些有缺陷的代碼, 我們可以從中推斷出它的真實意圖. 180.在閱讀大型系統的文檔時, 首先要熟悉文檔的總體結構和約定. 181.在對付體積龐大的文檔時, 可以使用工具, 或將文本輸出到高品質輸出設備上, 比如激光列印機, 來提高閱讀的效率. ++++++++++++++ 第九章: 系統構架 ++++++++++++++ 182.一個系統可以(在重大的系統中也確實如此)同時出多種不同的構架類型. 以不同的方式檢查同一系統|分析系統的不同部分|或使用不同級別的分解, 都有可能發現不同的構架類型. 183.協同式的應用程序, 或者需要協同訪問共享信息或資源的半自治進程, 一般會採用集中式儲存庫構架. 184.黑板系統使用集中式的儲存庫, 存儲非結構化的鍵/值對, 作為大量不同代碼元件之間的通信集線器. 185.當處理過程可以建模|設計和實現成一系列的數據變換時, 常常會使用數據流(或管道—過濾器)構架. 186.在批量進行自動數據處理的環境中, 經常會採用數據流構架, 在對數據工具提供大量支持的平台上尤其如此. 187.數據流構架的一個明顯徵兆是: 程序中使用臨時文件或流水線(pipeline)在不同進程間進行通信. 188.使用圖示來建模面向對象構架中類的關系. 189.可以將源代碼輸入到建模工具中, 逆向推導出系統的構架. 190.擁有大量同級子系統的系統, 常常按照分層構架進行組織. 191.分層構架一般通過堆疊擁有標准化介面的軟體組件來實現. 192.系統中每個層可以將下面的層看作抽象實體, 並且(只要該層滿足它的需求說明)不關心上面的層如何使用它. 193.層的介面既可以是支持特定概念的互補函數族, 也可以是一系列支持同一抽象介面不同底層實現的可互換函數. 194.用C語言實現的系統, 常常用函數指針的數組, 表達層介面的多路復用操作. 195.用面向對象的語言實現的系統, 使用虛方法調用直接表達對層介面的多嘴復用操作. 196.系統可以使用不同的|獨特的層次分解模型跨各種坐標軸進行組織. 197.使用程序切片技術, 可以將程序中的數據和控制之間依賴關系集中到一起. 198.在並發系統中, 一個單獨的系統組件起到集中式管理器的作用, 負責啟動|停止和協調其他系統進程和任務的執行. 199.許多現實的系統都會博採眾家之長. 當處理此類系統時, 不要徒勞地尋找無所不包的構架圖; 應該將不同構架風格作為獨立但相關的實體 來進行定位|識別並了解. 200.狀態變遷圖常常有助於理清狀態機的動作. 201.在處理大量的代碼時, 了解將代碼分解成單獨單元的機制極為重要. 202.大多數情況下, 模塊的物理邊界是單個文件|組織到一個目錄中的多個文件或擁有統一前綴的文件的集合. 203.C中的模塊, 由提供模塊公開介面的頭文件和提供對應實現的源文件組成. 204.對象的構造函數經常用來分配與對象相關的資源, 並初始化對象的狀態. 函數一般用來釋放對象在生命期中佔用的資源. 205.對象方法經常使用類欄位來存儲控制所有方法運作的數據(比如查找表或字典)或維護類運作的狀態信息(例如, 賦給每個對象一個標識符的 計數器). 206.在設計良好的類中, 所有的欄位都應在聲明為private, 並用公開的訪問方法提供對它們的訪問. 207.在遇到friend聲明時, 要停下來分析一下, 看看繞過類封裝在設計上的理由. 208.可以有節制地用運算符增強特定類的可用性, 但用運算符重載, 將類實現為擁有內建算術類型相關的全部功能的類實體, 是不恰當的. 209.泛型實現不是在編譯期間通過宏替換或語言所支持的功能(比如C++模板和Ada的泛型包)來實現, 就是在運行期間通過使用數據元素的指針和函數的指針|或對象的多態性實現. 210.抽象數據類型經常用來封裝常用的數據組織方案(比如樹|列表或棧), 或者對用戶隱藏數據類型的實現細節. 211.使用庫的目的多種多樣: 重用源代碼或目標代碼, 組織模塊集合, 組織和優化編譯過程, 或是用來實現應用程序各種特性的按需載入. 212.大型的|分布式的系統經常實現為許多互相協作的進程. 213.對於基於文本的數據儲存庫, 可以通過瀏覽存儲在其中的數據, 破譯出它的結構. 214.可以通過查詢數據字典中的表, 或使用資料庫專有的SQL命令, 比如show table, 來分析關系型資料庫的模式. 215.識別出重用的構架元素後, 可以查找其最初的描述, 了解正確地使用這種構架的方式, 以及可能出現的誤用. 216.要詳細分析建立在某種框架之上的應用程序, 行動的最佳路線就是從研究框架自身開始. 217.在閱讀向導生成的代碼時, 不要期望太高, 否則您會感到失望. 218.學習幾個基本的設計模式之後, 您會發現, 您查看代碼構架的方式會發生改變: 您的視野和詞彙將會擴展到能夠識別和描述許多通用的形式. 219.頻繁使用的一些模式, 但並不顯式地指出它們的名稱, 這是由於構架性設計的重用經常先於模式的形成. 220.請試著按照底層模式來理解構架, 即使代碼中並沒有明確地提及模式. 221.大多數解釋器都遵循類似的處理構架, 圍繞一個狀態機進行構建, 狀態機的操作依賴於解釋器的當前狀態|程序指令和程序狀態. 222.多數情況下, 參考構架只是為應用程序域指定一種概念性的結構, 具體的實現並非必須遵照這種結構. +++++++++++++++++ 第十章: 代碼閱讀工具 +++++++++++++++++ 223.詞彙工具可以高效地在一個大代碼文件中或者跨多個文件查找某種模式. 224.使用程序編輯器和正則表達式查找命令, 瀏覽龐大的源代碼文件. 225.以只讀方式瀏覽源代碼文件. 226.使用正則表達式 ^function name 可以找出函數的定義. 227.使用正則表達式的字元類, 可以查找名稱遵循特定模式的變數. 228.使用正則表達式的否定字元類, 可以避免非積極匹配. 229.使用正則表達式 symbol-1. *symbol-2, 可以查找出現在同一行的符號. 230.使用編輯器的 tags 功能, 可以快速地找出實體的定義. 231.可以用特定的 tag 創建工具, 增加編輯器的瀏覽功能. 232.使用編輯器的大綱視圖, 可以獲得源代碼結構的鳥瞰圖. 233.使用您的編輯器來檢測源代碼中圓括弧|方括弧和花括弧的匹配. 234.使用 grep 跨多個文件查找代碼模式. 235.使用 grep 定位符號的聲明|定義和應用. 236.當您不能精確地表述要查找的內容時, 請使用關鍵單詞的詞干對程序的源代碼進行查找. 237.用 grep 過濾其他工具生成的輸出, 分離出您要查找的項. 238.將 grep 的輸出輸送到其他工具, 使復雜處理任務自動化. 239.通過對 grep 的輸出進行流編輯, 重用代碼查找的結果. 240.通過選取與噪音模式不匹配的輸出行(grep-v), 過濾虛假的 grep 輸出. 241.使用 fgrep 在源代碼中查找字元串列表. 242.查找注釋, 或標識符大小寫不敏感的語言編寫的代碼時, 要使用大小寫不敏感的模式匹配(grep -i). 243.使用 grep –n 命令行開關, 可以創建與給定正則表達式匹配的文件和行號的檢查表. 244.可以使用 diff 比較文件或程序不同版本之間的差別. 245.在運行 diff 命令時, 可以使用 diff –b, 使文件比較演算法忽略結尾的空格, 用–w 忽略所有空白區域的差異, 用–i 使文件比較對大小寫不敏感. 246.不要對創建自己的代碼閱讀工具心存畏懼. 247.在構建自己的代碼閱讀工具時: 要充分利用現代快速原型語言所提供的能力; 從簡單開始, 根據需要逐漸改進; 使用利用代碼詞彙結構的各種試探法; 要允許一些輸出噪音或寂靜(無關輸出或缺失輸出); 使用其他工具對輸入進行預處理, 或者對輸出進行後期處理. 248.要使編譯器成為您的: 指定恰當級別的編譯器警告, 並小心地評估生成的結果. 249.使用C預處理器理清那些濫用預處理器特性的程序. 250.要徹底地了解編譯器如何處理特定的代碼塊, 需要查看生成的符號(匯編)代碼. 251.通過分析相應目標文件中的符號, 可以清晰地了解源文件的輸入和輸出. 252.使用源代碼瀏覽器瀏覽大型的代碼集合以及對象類型. 253.要抵制住按照您的編碼規范對外部代碼進行美化的誘惑; 不必要的編排更改會創建不同的代碼, 並妨礙工作的組織. 254.優美列印程序和編輯器語法著色可以使得程序的源代碼為易讀. 255.cdecl 程序可以將難以理解的C和C++類型聲明轉換成純英語(反之亦然). 256.實際運行程序, 往往可以更深刻地理解程序的動作. 257.系統調用|事件和數據包跟蹤程序可以增進對程序動作的理解. 258.執行剖析器可以找出需要著重優化的代碼, 驗證輸入數據的覆蓋性, 以及分析演算法的動作. 259.通過檢查從未執行的代碼行, 可以找出測試覆蓋的弱點, 並據此修正測試數據. 260.要探究程序動態動作時的每個細節, 需要在調試器中運作它. 261.將您覺得難以理解的代碼列印到紙上. 262.可以繪制圖示來描繪代碼的動作. 263.可以試著向別人介紹您在閱讀的代碼, 這樣做

『肆』 web伺服器用vi編寫實現消息的簡單請求應答

如何用Java實現Web伺服器 一、HTTP協議的作用原理

WWW是以Internet作為傳輸媒介的一個應用系統,WWW網上最基本的傳輸單位是Web網頁。WWW的工作基於客戶機/伺服器計算模型,由Web 瀏覽器(客戶機)和Web伺服器(伺服器)構成,兩者之間採用超文本傳送協議(HTTP)進行通信。HTTP協議是基於TCP/IP協議之上的協議,是Web瀏覽器和Web伺服器之間的應用層協議,是通用的、無狀態的、面向對象的協議。HTTP協議的作用原理包括四個步驟:

(1) 連接:Web瀏覽器與Web伺服器建立連接,打開一個稱為socket(套接字)的虛擬文件,此文件的建立標志著連接建立成功。

(2) 請求:Web瀏覽器通過socket向Web伺服器提交請求。HTTP的請求一般是GET或POST命令(POST用於FORM參數的傳遞)。GET命令的格式為:

GET 路徑/文件名 HTTP/1.0

文件名指出所訪問的文件,HTTP/1.0指出Web瀏覽器使用的HTTP版本。

(3) 應答:Web瀏覽器提交請求後,通過HTTP協議傳送給Web伺服器。Web伺服器接到後,進行事務處理,處理結果又通過HTTP傳回給Web瀏覽器,從而在Web瀏覽器上顯示出所請求的頁面。

『伍』 web瀏覽器中通過什麼網路協議訪問某新聞站點的主頁

HTTP:超文本傳輸協議(Hypertext Transfer Protocol)

『陸』 什麼是web2.0

什麼是Web2.0

Web2.0是以Flickr、43Things.com等網站為代表,以Blog、TAG、SNS、RSS、wiki等社會軟體的應用為核心,依據六度分隔、xml、ajax等新理論和技術實現的互聯網新一代模式。」

Blog——博客/網志:Blog的全名應該是Web log,後來縮寫為Blog。Blog是一個易於使用的網站,您可以在其中迅速發布想法、與他人交流以及從事其他活動。所有這一切都是免費的。

RSS——站點摘要:RSS是站點用來和其他站點之間共享內容的一種簡易方式(也叫聚合內容)的技術。最初源自瀏覽器「新聞頻道」的技術,現在通常被用於新聞和其他按順序排列的網站,例如Blog。

WIKI——網路全書:Wiki--一種多人協作的寫作工具。Wiki站點可以有多人(甚至任何訪問者)維護,每個人都可以發表自己的意見,或者對共同的主題進行擴展或者探討。

Wiki指一種超文本系統。這種超文本系統支持面向社群的協作式寫作,同時也包括一組支持這種寫作的輔助工具。

網摘:「網摘」又名「網頁書簽」,起源於一家叫做Del.icio.us的美國網站自2003年開始提供的一項叫做「社會化書簽」(Social Bookmarks)的網路服務,網友們稱之為「美味書簽」(Delicious在英文中的意思就是「美味的;有趣的」)。

SNS——社會網路:Social Network Sofwaret,社會性網路軟體,依據六度理論,以認識朋友的朋友為基礎,擴展自己的人脈。

P2P ——對等聯網:P2P是peer-to-peer的縮寫,peer在英語里有「(地位、能力等)同等者」、「同事」和「夥伴」等意義。這樣一來,P2P也就可以理解為「夥伴對夥伴」、「點對點」的意思,或稱為對等聯網。目前人們認為其在加強網路上人的交流、文件交換、分布計算等方面大有前途。

IM——即時通訊:即時通訊(Instant Messenger,簡稱IM)軟體可以說是目前我國上網用戶使用率最高的軟體。聊天一直是網民們上網的主要活動之一,網上聊天的主要工具已經從初期的聊天室、論壇變為以MSN、QQ為代表的即時通訊軟體。

RSS 為Really Simple Syndication(簡易供稿)的縮寫,是某一站點用來和其它站點之間共享內容的一種簡易方式,也叫聚合內容。網路用戶可以在客戶端藉助於支持RSS 的新聞聚合工具軟體(例如SharpReader NewzCrawler、FeedDemon RSSReader),在不打開網站內容頁面的情況下閱讀支持RSS輸出的網站內容。可見,網站提供RSS輸出,有利於讓用戶發現網站內容的更新。在高速高質高效成為主流呼聲的互聯網時代,RSS無疑推動了網上信息的傳播,提出了另一種看世界的方式。

RSS,原意是把網站內容如標題、鏈接、部分內文甚至全文轉換為可延伸標示語言(XML:eXtensible Markup Language)的格式,以向其它網站供稿,使用者可以用一般的瀏覽器觀看,也可以用特殊的「閱讀器」軟體來閱讀。

-----------------------------------------------------------------------------------------------

歷史很重要。對一個技術的學習也應當從歷史出發,通過其在時間形成歷史的流變,得以知曉現狀,甚至能夠預知未來。

那Web1.0是什麼呢?

他們說,記得靜態HTML的WWW時代么?

(那個時代的WWW應用、人們的Web體驗、對社會的影響如何?)

那麼動態HTML和靜態HTML下的Web相比,是多少版本?1.5?對了,他們是真這么叫的。

(在效果和影響上,與1.0相比,擴展和加深多少?)

要呈現的數據存儲在資料庫中,通過Web服務端的程序,應用戶的請求,取出數據,加上事先設計的模板,動態的生成Html代碼,發送到用戶的瀏覽器那裡。

他是1.0系列,應為用戶在瀏覽器中所見和Web1.0一樣,它有0.5的升級,因為數據不是事先製作並發布,而是動態生成,和用戶的需要交互生成。

那好,再加0.5,到Web2.0,變化是在哪裡呢?

(看到了正在崛起的和改變的,會繼續朝著什麼方向改變互聯網和社會呢?)

更新:關於各個版本的差別,看看亞馬遜的例子。

事情沒有那麼幸運,Web2.0並不是一個具體的事物,而是一個階段,是促成這個階段的各種技術和相關的產品服務的一個稱呼。所以,我們無法說,Web2.0是什麼,但是可以說,那些是Web2.0。

WikiPedia的Web2.0條目下列出了這些條件:

*CSS和語義相關的XHTML標記

*AJAX技術

*SyndicationofdatainRSS/ATOM

*AggregationofRSS/ATOMdata

*簡潔而有意義的URLs

*支持發布為weblog

*RESTian(preferred)或者XMLWebserviceAPIs

*一些社會性網路元素

必須具備的要素有:

*網站應該能夠讓用戶把數據在網站系統內外倒騰。

*用戶在網站系統內擁有自己的數據

*完全基於Web,所有的功能都能透過瀏覽器完成。

(以上內容引用自英文版維基網路)

雖然這只是一家之言,不過,對於其中談到的幾個要素,大家還是公認的。

-基於RSS/ATOM/RDF/FOAF等XML數據的同步、聚合和遷移。

數據不再和頁面和網站混粘在一起,它獨立了,它跟著用戶走。這是Web2.0的很重要特徵。這也是為什麼Blog是Web2.0的代表的原因。在網志上,常主角的是相互獨立的一則則的網志。

獨立,然後有物理表現。現在,就能讓他們活躍起來。透過對XML數據的處理,這些內容能被自由的組合,被各種應用程序,不論是Web程序還是桌面程序等呈現和處理。

當然,最重要的是背後的人。

-社會性因素。

內容跟著人走,內容又能夠被用戶自由的組合,也就是說,用戶能夠自由的藉助內容媒介,創建起一個個的社群,發生各種社會性的(網路)行為。

此外還有標簽以及建立在開放標簽系統之上的Folksonomy。

-第三個公認的因素是開放API,

這個技術性稍強些,得另花時間研習,可以先看看例子:amazon、flickr、googlemap等。

從Web應用的產品/服務生產者角度來說,該如何創建Web2.0的產品呢?

重要的是要抓住這么幾點,一個是微內容(這里有定義),一個是用戶個體。除了這兩個最基本的之外,還可以考慮社群內的分享以及提供API。

(cnbruce收藏的一些API內容:http://www.cnbruce.com/blog/showlog.asp?cat_id=34&log_id=709 )

微內容:英文是microcontent。用戶所生產的任何數據都算是微內容,比如一則網志,評論,圖片,收藏的書簽,喜好的音樂列表、想要做的事情,想要去的地方、新的朋友等等。這些微內容,充斥著我們的生活、工作和學習,它的數量、重要性,還有我們對它的依賴,並不亞於那些道貌岸然、西裝革履的正統文章、論文、書籍。

對微內容的重新發現和利用,是互聯網所開創的平等、民主、自由風氣的自然衍生,也是互聯網相關技術消減信息管理成本之後的一個成果。

我們每天都生產眾多的微內容,也消費著同樣多的微內容。對於Web2.0來說,如何幫助用戶管理、維護、存儲、分享、轉移微內容,就成了關鍵。

用戶個體。對於Web1.0的典型產品/服務來說,用戶沒有具體的面貌、個性,它只是一個模糊的群體的代名詞而已。但是對於Web2.0的產品和服務來說,用戶是個實實在在的人。Web2.0所服務的,是具體的人,而不是一個如同幽靈般的概念。並且,這個人的具體性,會因為服務本身而不斷地充實起來。

如何為這個具體的個體服務,是Web2.0設計的起點。

因此,一類可以被稱作Web2.0的產品/服務將是這樣:

服務於用戶個體的微內容的收集、創建、發布、管理、分享、合作、維護等的平台。

其他的呢?恐怕就設計到好些人提到的,微內容的XML表現;微內容的聚合;微內容的遷移;社會性關系的維護;界面的易用性等等。

以及是否就是開源、參與、個人價值、草根、合作等等?

Web2.0是許多方面起頭並進又相互牽連的一個新的階段的到來。因此,不同的人,有著不同的看法。那麼,對於Web開發人員來說,Web2.0意味著什麼呢?

他們說Web2.0階段,Web是一個平台,或者說,Web正在變得可編程,可以執行的Web應用。野心家們設想這個它的終極目標是WebOS。

Web1.0時候,Web只是一個針對人的閱讀的發布平台,Web由一個個的超文本鏈接而成。現在的趨勢發生了變化,Web不僅僅是Html文檔的天下,它成了交互的場所。

Web2.0Conference網站的橫幅引用JeffBezos的話說「Web1.0ismakingtheinternetforpeople,web2.」。

具體來講,他們說Web成為一個開發環境,藉助Web服務提供的編程介面,網站成了軟體構件。

這些,就是WebService的目標吧,信息孤島通過這些WebService的對話,能夠被自由構建成適合不同應用的建築來。

一些例子:del.icio.us、flickr、a9、amazon、yahoo、google、msn等提供的編程介面衍生出的各種應用。

為什麼要開放APIs,這涉及到集市中的商業方面的技術策略。當然,還有更深層的原因,那是什麼呢?

這種交互不僅體現在不同的網站服務之間,同時還體現在用戶和Web之間在瀏覽器上的交互。這也是為什麼在美味書簽的收藏中Web2.0和AJAX如此相關的一個原因。

在Web頁面上使用桌面程序有的那些便利,真的是很享受的事情。這恐怕也是Web可編程的一個方面,Web頁面不再是標記和內容混合那樣的簡單,它就是一個可以編程的地方(是這樣理解吧?)

有人反對說,AJAX的使用對搜索引擎不友好,只有Web1.0的站長才關心這個事情吧,在Web2.0時候,站長應該關心的是用戶參與的便利、用戶的自由度,至於搜索,有RSS/ATOM/RDF等,更本用不著操心,Google不是已經順應這個趨勢,讓大家主動提交了么?

可編程的第三個方面,是否在於Web應用和桌面應用之間的無縫連接趨勢的出現?類似這里說的「從工具上,是由互聯網瀏覽器向各類瀏覽器、rss閱讀器等內容發展」

編程的一個重要目的是對數據的操作,因此,對於網站來說,除了WebService介面之外,最近為簡便方式就是將內容以RSS/RDF/ATOM格式,或者有意義的XHTML格式輸出,同時實現內容和表現的分離。

[Web2.0是個歷史學的概念,而非是個技術性的概念,它是對Web發展歷史斷代的成果。對這個概念的梳理,能幫助我更好的把握互聯網正在發生的技術與文化。]

---------------------------------------------------------------
中文網志圈談論的Web2.0內容摘要:

-「Web2.0 是用來研究現象、發現規律的東西,不是用來招商引資、搭台唱戲的東西。當越來越多的互聯網應用採取與用戶互動的方式,越來越多的內容是由用戶產生,越來越多的用戶參與到互聯網創造的過程中的時候,其實它代表了一種新的思潮。在這種思潮之下,一些新的技術開始出現,一些古老技術重新煥發了生機。隨便你怎麼表述這樣一種現象,但現象本身是實實在在存在的,不管是叫它Web2.0,還是社會化互聯網。」[Keso:老冒給Web2.0澆了一桶冷水]

-「我覺得最有價值的一個是,web應用的數據格式開始逐漸出現了交換「標准」...這些標准...更加容易被機器自動化處理...能幫助人更好地過濾和定製化信息。其次,更多的服務將以webservice的形式來提供,...這使得web服務可以被互相集成,從而誕生更多新的服務...人的重要性被提高了。過去web更多注重在信息提供,而現在的越來越多的應用更加關注人,也就是所謂「社會性」。此外web的可用性改進正在被越來越重視...」[老冒:朝 web2.0潑點冷水]

-「我認為Webx.x是人們為了區別不同時代Web的發展而使用的,而這些概念也是經過歸納出來的結果。抓住對方向,如Wikipedia中所提到的朝向互動及社會網路的方向發展,不論應用何種技術,只要能達到目的都是很好的。甚至作為一般的使用者,都可以不去理會Webx.x的討論,因為我們都已經在使用這些技術或網站了。」[圖書館觀點:Web2.0]

-「RSS逐漸成為在線內容提供服務的標准發行平台。Blog以及user-generated內容的興起。MyYahoo提供的RSS整合型服務。同時提出了值得密切關注的一些發展中領域,其中包括搜索技術,個性化,User-Generated內容(包括blog,評論,圖像和聲音),音樂,短視頻和Accessibility(易訪問性)」[Owen:MaryMeeker新作-關於DigitalWorld的發展報告的摘取]

-「我們談論的Web2.0帶給我們的是一種可讀寫的網路,這種可讀寫的網路表現於用戶是一種雙通道的交流模式,也就是說網頁與用戶之間的互動關系由傳統的「Push」模式演變成雙向交流的 「Two-WayCommunication」的模式。而對於Web服務的開發者來說,Web2.0帶來的理念是服務的親和力,可操作性,用戶體驗以及可用性。」[Owen:BaCKpACK-體驗可讀寫的Web服務]

-「web2.0是一種可以被分發的信息概述,web文檔被格式化成了web數據。我們不會再看到不同舊地信息,現在我們所注意到是一種聚合、再混合內容的工具。」[songzhen:也說Web2.0的翻譯]

-「從這些應用中可以看到:如果基於傳統的HTML,同樣的功能實現將變得非常復雜和不穩定,數據的再生產和交換成本是很高的。所以:RSS這個標准最終要的貢獻就是使得互聯網的大部分網站變得可編程:類似的例子還有Blog中的:TrackBackPing等機制,這些機制都是依賴XML/RPC實現的。當初為Lucene設計一個RSS/XML的介面也是為了這個初衷,它使得全文檢索服務可以輕松的嵌入到各種應用中,通過關鍵詞將各種內容之間實現更豐富的關聯(WellReferenced)。」[車東:RSS,簡單協議使得互聯網可編程]

-「聚合的可能性以及如何更好地聚合(通常來說,更好的聚合應該基於個人知識管理和人際關系管理)很顯然應該成為新一代或者說web2.0架構的核心之一。還有,你會重新發現,恰好是分散帶動了聚合,聚合促進了分散,通過聚合的思維,互聯網的網路狀變得越來越豐富和密集,web2.0就變得越來越有趣味,它將web1.0時代的碩大節點即門戶網站不斷消解,去努力創造一個更加和諧的自然網路圖譜。」[Horse:rss,聚合的無數可能]

-「新的web2.0網站都依賴於用戶參與、用戶主導、用戶建設」。[Horse:Web2.0這個詞]

-Keso:Web1.0與Web2.0的區別

-「表面上看,Bloglines取代了門戶,成為一個新的中心,但這里有一個重大的區別。門戶是只讀的,它帶有某種鎖定的性質。你可以離開門戶,但你無法帶走門戶的內容。Bloglines則完全不同,你覺得它好用,就會繼續使用,有一天你不再喜歡Bloglines,你完全可以導出你的OPML,到另一個 RSS訂閱網站,或者乾脆用客戶端軟體瀏覽同樣的內容。所以,像Bloglines這樣的網站,是可寫的,你可以導入,也可以導出。就像你對信息擁有選擇權,對服務提供商也同樣擁有選擇權,沒有人可以鎖定你,主動權在你自己手上。」[Keso:再說信息選擇權]

-「Flickr、 del.icio.us、Bloglines等Web2.0服務,通過開放API獲得了很多有趣、有用的想法,並藉助外部的力量,讓用戶獲得了更好的體驗。更多大公司也加入到開放API的潮流中,Google、Yahoo!、Amazon、Skype。Google桌面搜索今年3月才開放API,很快就產生了大量的創造,大大擴充了可搜索的文件格式。」[Keso:開放API]

-「歸納:web1.0天天談門戶,web2.0談個人化; web1.0談內容,web2.0談應用;web1.0商業模式,web2.0談服務;web1.0談密閉、大而全,web2.0大家談開放、談聯合; web1.0網站中心化,web2.0談個人中心化;web1.0一對一,web2.0談社會性網路;web1.0不知道你是狗,web2.0你去年夏天幹了什麼我一清二楚甚至想要干什麼呢。。。」[van_wuchanghua:發現了N.HOOLYWOOD,我還知道你今年夏天要干什麼]

-「我認為Web2.0有下面幾個方面的特性:個性化的傳播方式.讀與寫並存的表達方式.社會化的聯合方式.標准化的創作方式.便捷化的體驗方式.高密度的媒體方式.」[飛戈:Web2.0與未來的網路]

-「用 RAILS寫的網站帶有典型的讀寫網路的特徵:RAILS創建的三個架構中的ACTIVERECORD這個模塊中,如果你讀讀它最重要的基類 ActiveRecord::Base,你會發現有CREAT,EDIT,SAVE,DESTROY這些方法已經天然包含在內了,這讓實現一個資料庫的 CRUDS行為變得如此簡單。由於這些類的方法直接和網頁的名稱映射到一起,這使得網頁本身就像一個可以編緝的資料庫的數據項。」 [Blogdriver:RUBYONRAILS,wEB2.0世界新生的創造力]

-「Greasemonkey一定名列前茅。這個通過UserScript就能修改任何網頁輸出效果的插件極大的提高了用戶閱讀的自主性,一推出就引起了轟動,同時也引來了不少爭議。」[Webleon:platypus,完全可寫的互聯網]

-「Web1.0 到Web2.0的轉變,具體的說,從模式上是單純的「讀」向「寫」、「共同建設」發展;從基本構成單元上,是由「網頁」向「發表/記錄的信息」發展;從工具上,是由互聯網瀏覽器向各類瀏覽器、rss閱讀器等內容發展;運行機制上,由「ClientServer」向「WebServices」轉變;作者由程序員等專業人士向全部普通用戶發展;應用上由初級的「滑稽」的應用向全面大量應用發展。」[Don:Web2.0概念闡釋]

Web2.0階段的一個重要特徵是開放,和Web初期的開放有很大不同,有以下幾種突出的表現:

內容方面。

- 內容的創作共用授權。它的廣譜和可選擇性,讓它具有了足夠的生命力。CC先是在網志圈中廣泛採用,後來許多商業公司也紛紛採用CC方式(比如BBC);先是文本世界採用,後來逐漸推廣到了多媒體世界,比如音頻、視頻、Flash動畫等等。一場自由的文化(freeculture)運動在各個方面悄然鋪開。

- 內容來源方面的開放。和早期的Web階段相比,由於使用相關設備的成本降低,利用相關技術的門檻減低,人們可以自由生產並發布各種內容,比如文本信息,比如語音記錄,比如視頻錄制等。信息的生產和傳播不再僅僅是商業資本或者技術精英的特權。在Web的新階段,原來在商業、技術與大眾之間的信息生產和傳播的落差被削平。消除信息壟斷和去中心化已經成為可能。不僅如此,信息的生產和消費的模式也發生了變化,從原來的生產/消費的對立,變成了參與式的信息集市。

Web主體方面。

- 商業網站也漸漸採取了開放的、參與的模式。除了內容上的CC授權出現之外。原來並不外露的內容,也隨著blog、podcasting等的興盛而對外開放。一些網站還在技術層面開放,比如開放源代碼,比如開放APIs(編程介面),讓自己成為一個平台,讓用戶可以參與衍生產品的創造,用戶本身也是產品的生產者。不僅是內容、技術層面,在鼓勵用戶的參與上,也有相應的開放出現,比如一些新聞網站的RSS源的輸出、引用通告(trackback)功能的採納、blogthis便利的提供,無一不是讓用戶參與到內容生產、傳播的各個環節。

-個人信息層面的開放。有開放,才有交流,才有社會行為和形態產生。個人內容的開放是與一類Web2.0服務的興起有關。它涵蓋了內容(文本、聲音、影像、視頻)、關系、行為等等。
http://..com/q?word=%CA%B2%C3%B4%CA%C7web2.0+&ct=17&pn=0&tn=ikaslist&rn=10

『柒』 web service 協議

沒寫過web service的東西,是不是提供一種以XML為傳輸介質的服務?
下面是網上摘抄的
--------------------------------
1 Web Service的傳輸協議概述

Web Service的傳輸協議概述在ASP.NET 中,XML Web Service支持3種協議來與用戶交流數據。這3種協議分別是:
1.HTTP-GET
2.HTTP-POST
3.SOAP
在這3種協議中,HTTP(Hypertext Transfer Protocol)已經是眾所周知的協議了,它是XML Web Service數據傳輸的標准,其中包括使用SOAP傳輸數據。HTTP將SOAP消息壓縮,然後以HTTP傳輸協議的形式進行網路傳輸。然而在XML Web Service下使用HTTP-GET和HTTP-POST的時候,事實上是指有關單獨使用HTTP調用XML Web Service中的方法的能力,而不使用SOAP。
在HTTP中,GET和POST並不是一種協議,它們是可以用來與Web Service交互的幾種方法中的其中兩種。然而,這二種方法的傳送參數和數據的能力使它們變成了一種簡單的,非常適合用來調用XML Web Service的工具。
SOAP是XML Web Service最常用到的連接協議。與HTTP相比,SOAP顯的更為復雜,但卻擁有更強的接受能力。SOAP是一種以XML為基礎的協議,它提供一種將數據打包(Packaging)和編碼(Encoding)的方法,以用於網路的數據傳輸。任意一個用戶都可以使用SOAP協議與任何一個XML Web Service進行通信,甚至於這個XML Web Service不是建立在.NET 平台上的,比如說Java的,都可以利用SOAP來進行數據傳輸。因此可見,SOAP也是Language Independent(語言獨立性)。
2
HTTP-GET和HTTP-POSTHTTP-GET 和 HTTP-POST 是使用 HTTP(超文本傳輸協議)謂詞以及與之關聯的請求語義將參數作為名稱/值對編碼和傳遞的標准協議。每個協議都由一系列 HTTP 請求頭組成,這些頭與一些其他信息一起定義客戶端向伺服器請求的內容,而在成功時,伺服器將用一系列 HTTP 響應頭和所請求的數據響應。
HTTP-GET的處理特徵如下:
l
將數據添加到URL。
l
利用一個問號(「?」)代表URL地址的結尾與數據的開端。
l
每一個數據的元素以 名稱/值的形式出現。
l
利用一個分號(「;」)來區分多個數據元素。
HTTP-POST的處理特徵如下:
l
將數據包括在HTTP主體中。
l
同樣的,數據的元素以名稱/值的形式出現。
l
但是每一個數據元素分別佔用主體的一行。
3
SOAP協議SOAP(Simple Object Access Protocol)簡單對象訪問協議,它是輕型協議,用於分散的、分布式計算環境中交換信息。SOAP有助於以獨立於平台的方式訪問對象、服務和伺服器。它藉助於XML,提供了HTTP所需的擴展。
SOAP協議規范由4個主要的部分組成。
第一部分:SOAP封裝(Envelop)定義了一個描述消息的內容多少、誰發送、誰應當接受並且處理以及如何處理它們的框架。
第二部分:SOAP編碼規則(Encoding Rules)定義了可選數據編碼規則,用於表示應用程序定義的數據類型和直接圖表,以及一個用於序列化非語法數據模型統一標准。
第三部分:SOAP RPC表示(RPC Representation)定義一個遠程調用風格(請求/響應)信息交換的模式。
第四部分:SOAP綁定(Binding)定義了SOAP和HTTP之間的綁定和使用底層協議的交換。
SOAP協議可以簡單地理解為:SOAP=RPC+HTTP+XML,即採用HTTP作為通信協議,RPC作為一致性的調用途徑,XML作為數據傳送的格式,從而允許服務提供者和服務客戶經過防火牆在Internet上進行通信交互。

『捌』 Web前端工程師要掌握的JavaScript代碼片段(二)

今天小編要跟大家分享的文章是關於Web前端工程師要掌握的JavaScript代碼片段(二)。正在從事Web前端工作的小夥伴們來和小編一起看一看吧,希望本篇文章能夠對正在從事Web前端工作的小夥伴們有所幫助。

25、用range初始化數組


使用Array(end-start)創建所需長度的數組,使用map()來填充范圍中的所需值,可以省略start使用默認值0。


constinitializeArrayRange=(end,start=0)=>


Array.apply(null,Array(end-start)).map((v,i)=>i+start);


//initializeArrayRange(5)->[0,1,2,3,4]


26、用值初始化數組


使用Array(n)創建所需長度的數組,fill(v)以填充所需的值,可以忽略value使用默認值0。


constinitializeArray=(n,value=0)=>Array(n).fill(value);


//initializeArray(5,2)->[2,2,2,2,2]


27、列表的最後


返回arr.slice(-1)[0]


constlast=arr=>arr.slice(-1)[0];


//last([1,2,3])->3


28、測試功能所花費的時間


使用performance.now()獲取函數的開始和結束時間,console.log()所花費的時間。第一個參數是函數名,隨後的參數傳遞給函數。


consttimeTaken=callback=>{


console.time('timeTaken');


constr=callback();


console.timeEnd('timeTaken');


returnr;


};


//timeTaken(()=>Math.pow(2,10))->1024


//(logged):timeTaken:0.02099609375ms


29、來自鍵值對的對象


使用Array.rece()來創建和組合鍵值對。


constobjectFromPairs=arr=>arr.rece((a,v)=>(a[v[0]]=v[1],
a),{});


//objectFromPairs([['a',1],['b',2]])->{a:1,b:2}


30、管道


使用Array.rece()通過函數傳遞值。


constpipe=(...funcs)=>arg=>funcs.rece((acc,func)=>
func(acc),arg);


//pipe(btoa,x=>x.toUpperCase())("Test")->"VGVZDA=="


31、Powerset


使用rece()與map()結合來遍歷元素,並將其組合成包含所有組合的數組。


constpowerset=arr=>


arr.rece((a,v)=>a.concat(a.map(r=>[v].concat(r))),[[]]);


//powerset([1,2])->[[],[1],[2],[2,1]]


32、范圍內的隨機整數


使用Math.random()生成一個隨機數並將其映射到所需的范圍,使用Math.floor()使其成為一個整數。


constrandomIntegerInRange=(min,max)=>Math.floor(Math.random()*
(max-min+1))+min;


//randomIntegerInRange(0,5)->2


33、范圍內的隨機數


使用Math.random()生成一個隨機值,使用乘法將其映射到所需的范圍。


constrandomInRange=(min,max)=>Math.random()*(max-min)+
min;


//randomInRange(2,10)->6.063285087005


34、隨機化數組的順序


使用sort()重新排序元素,利用Math.random()來隨機排序。


constshuffle=arr=>arr.sort(()=>Math.random()-0.5);


//shuffle([1,2,3])->[2,3,1]


35、重定向到URL


使用window.location.href或window.location.replace()重定向到url。傳遞第二個參數來模擬鏈接點擊(true
-default)或HTTP重定向(false)。


constredirect=(url,asLink=true)=>


asLink?window.location.href=url:window.location.replace(url);


//redirect('https://google.com')


36、反轉一個字元串


使用數組解構和Array.reverse()來顛倒字元串中的字元順序。合並字元以使用join('')獲取字元串。


constreverseString=str=>[...str].reverse().join('');


//reverseString('foobar')->'raboof'


37、RGB到十六進制


使用按位左移運算符(<<)和toString(16),然後padStart(6,「0」)將給定的RGB參數轉換為十六進制字元串以獲得6位十六進制值。


constrgbToHex=(r,g,b)=>((r<<16)+(g<<8)+
b).toString(16).padStart(6,Ɔ');


//rgbToHex(255,165,1)->'ffa501'


38、滾動到頂部


使用document.documentElement.scrollTop或document.body.scrollTop獲取到頂部的距離。


從頂部滾動一小部分距離。


使用window.requestAnimationFrame()來滾動。


constscrollToTop=_=>{


constc=document.documentElement.scrollTop||
document.body.scrollTop;


if(c>0){


window.requestAnimationFrame(scrollToTop);


window.scrollTo(0,c-c/8);


}


};


//scrollToTop()


39、隨機數組值


使用Array.map()和Math.random()創建一個隨機值的數組。使用Array.sort()根據隨機值對原始數組的元素進行排序。


40、數組之間的相似性


使用filter()移除不是values的一部分值,使用includes()確定。


constsimilarity=(arr,values)=>arr.filter(v=>
values.includes(v));


//similarity([1,2,3],[1,2,4])->[1,2]


41、按字元串排序(按字母順序排列)


使用split('')分割字元串,sort()使用localeCompare(),使用join('')重新組合。


constsortCharactersInString=str=>


str.split('').sort((a,b)=>a.localeCompare(b)).join('');


//sortCharactersInString('cabbage')->'aabbceg'


42、數組總和


使用rece()將每個值添加到累加器,初始化值為0。


constsum=arr=>arr.rece((acc,val)=>acc+val,0);


//sum([1,2,3,4])->10


43、交換兩個變數的值


使用數組解構來交換兩個變數之間的值。


[varA,varB]=[varB,varA];


//[x,y]=[y,x]


44、列表的tail


返回arr.slice(1)


consttail=arr=>arr.length>1?arr.slice(1):arr;


//tail([1,2,3])->[2,3]


//tail([1])->[1]


45、數組唯一值


使用ES6Set和...rest操作符去掉所有重復值。


constunique=arr=>[...newSet(arr)];


//unique([1,2,2,3,4,4,5])->[1,2,3,4,5]


46、URL參數


使用match()與適當的正則表達式來獲得所有鍵值對,適當的map()
。使用Object.assign()和spread運算符(...)將所有鍵值對組合到一個對象中,將location.search作為參數傳遞給當前url。


constgetUrlParameters=url=>


url.match(/([^?=&]+)(=([^&]*))/g).rece(


(a,v)=>(a[v.slice(0,v.indexOf('='))]=v.slice(v.indexOf('=')+1),
a),{}


);


//getUrlParameters('#/page?name=Adam&surname=Smith')
->{name:'Adam',surname:'Smith'}


47、UUID生成器


使用cryptoAPI生成符合RFC4122版本4的UUID。


constuuid=_=>


([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,c=>


(c^crypto.getRandomValues(newUint8Array(1))[0]&15>>c/
4).toString(16)


);


//uuid()->񡊞fcfe-5721-4632-bede-6000885be57d'


48、驗證數字


使用!isNaN和parseFloat()來檢查參數是否是一個數字,使用isFinite()來檢查數字是否是有限的。


constvalidateNumber=n=>!isNaN(parseFloat(n))&&isFinite(n)
&&Number(n)==n;


//validateNumber(ཆ')->true


以上就是小編今天為大家分享的關於Web前端工程師要掌握的JavaScript代碼片段(二)的文章,希望本篇文章能夠對正在從事Web前端工作的小夥伴們有所幫助。想要了解更多Web前端相關知識,記得關注北大青鳥Web培訓官網。


作者:Chalarangelo


譯者:IT168