Ⅰ 怎樣資源共享呢
二樓解釋比較專業啊,呵呵,簡單點說就是把自己的資料上傳到網盤或是象網路文庫這樣的地方,供他們下載,就是分享了啊。
Ⅱ 魔獸爭霸3java問題
兄dei,這不是java,這是魔獸爭霸地圖腳本語言jass。而且這個地圖是用的YDWE編輯的,有很多函數是YDWE自己的。代碼裡面用到了哈希表
Ⅲ 什麼是P2P是下載器
P2P普及系列之一
拓撲結構是指分布式系統中各個計算單元之間的物理或邏輯的互聯關系,結點之間的拓撲結構一直是確定系統類型的重要依據。目前互聯網路中廣泛使用集中式、層次式等拓撲結構,Interne本身是世界上最大的非集中式的互聯網路,但是九十年代所建立的一些網路應用系統卻是完全的集中式的系統、很多Web應用都是運行在集中式的伺服器系統上。集中式拓撲結構系統目前面臨著過量存儲負載、Dos攻擊等一些難以解決的問題。
P2P系統一般要構造一個非集中式的拓撲結構,在構造過程中需要解決系統中所包含的大量結點如何命名、組織以及確定結點的加入/離開方式、出錯恢復等問題。
根據拓撲結構的關系可以將P2P研究分為4種形式:中心化拓撲(Centralized Topology);全分布式非結構化拓撲(Decentralized Unstructured Topology);全分布式結構化拓撲(Decentralized Structured Topology,也稱作DHT網路)和半分布式拓撲(Partially Decentralized Topology)。
其中,中心化拓撲最大的優點是維護簡單發現效率高。由於資源的發現依賴中心化的目錄系統,發現演算法靈活高效並能夠實現復雜查詢。最大的問題與傳統客戶機/伺服器結構類似,容易造成單點故障,訪問的「熱點」現象和法律等相關問題,這是第一代P2P網路採用的結構模式,經典案例就是著名的MP3共享軟體Napster。
Napster是最早出現的P2P系統之一,並在短期內迅速成長起來。Napster實質上並非是純粹的P2P系統,它通過一個中央伺服器保存所有Napster用戶上傳的音樂文件索引和存放位置的信息。當某個用戶需要某個音樂文件時,首先連接到Napster伺服器,在伺服器進行檢索,並由伺服器返回存有該文件的用戶信息;再由請求者直接連到文件的所有者傳輸文件。
Napster首先實現了文件查詢與文件傳輸的分離,有效地節省了中央伺服器的帶寬消耗,減少了系統的文件傳輸延時。這種方式最大的隱患在中央伺服器上,如果該伺服器失效,整個系統都會癱瘓。當用戶數量增加到105或者更高時,Napster的系統性能會大大下降。另一個問題在於安全性上,Napster並沒有提供有效的安全機制。
在Napster模型中,一群高性能的中央伺服器保存著網路中所有活動對等計算機共享資源的目錄信息。當需要查詢某個文件時,對等機會向一台中央伺服器發出文件查詢請求。中央伺服器進行相應的檢索和查詢後,會返回符合查詢要求的對等機地址信息列表。查詢發起對等機接收到應答後,會根據網路流量和延遲等信息進行選擇,和合適的對等機建立連接,並開始文件傳輸。
這種對等網路模型存在很多問題,主要表現為:
(1)中央伺服器的癱瘓容易導致整個網路的崩饋,可靠性和安全性較低。
(2)隨著網路規模的擴大,對中央索引伺服器進行維護和更新的費用將急劇增加,所需成本過高。
(3)中央伺服器的存在引起共享資源在版權問題上的糾紛,並因此被攻擊為非純粹意義上的P2P網路模型。對小型網路而言,集中目錄式模型在管理和控制方面佔一定優勢。但鑒於其存在的種種缺陷,該模型並不適合大型網路應用。
P2P普及系列之二
Pastry是微軟研究院提出的可擴展的分布式對象定位和路由協議,可用於構建大規模的P2P系統。在Pastry中,每個結點分配一個128位的結點標識符號(nodeID) ,所有的結點標識符形成了一個環形的nodeID空間,范圍從0到2128 - 1 ,結點加入系統時通過散列結點IP地址在128位nodeID空間中隨機分配。
在MIT,開展了多個與P2P相關的研究項目:Chord,GRID和RON。Chord項目的目標是提供一個適合於P2P環境的分布式資源發現服務,它通過使用DHT技術使得發現指定對象只需要維護O(logN)長度的路由表。
在DHT技術中,網路結點按照一定的方式分配一個唯一結點標識符(Node ID) ,資源對象通過散列運算產生一個唯一的資源標識符(Object ID) ,且該資源將存儲在結點ID與之相等或者相近的結點上。需要查找該資源時,採用同樣的方法可定位到存儲該資源的結點。因此,Chord的主要貢獻是提出了一個分布式查找協議,該協議可將指定的關鍵字(Key) 映射到對應的結點(Node) 。從演算法來看,Chord是相容散列演算法的變體。MIT GRID和RON項目則提出了在分布式廣域網中實施查找資源的系統框架。
T&T ACIRI中心的CAN(Content Addressable Networks) 項目獨特之處在於採用多維的標識符空間來實現分布式散列演算法。CAN將所有結點映射到一個n維的笛卡爾空間中,並為每個結點盡可能均勻的分配一塊區域。CAN採用的散列函數通過對(key, value) 對中的key進行散列運算,得到笛卡爾空間中的一個點,並將(key, value) 對存儲在擁有該點所在區域的結點內。CAN採用的路由演算法相當直接和簡單,知道目標點的坐標後,就將請求傳給當前結點四鄰中坐標最接近目標點的結點。CAN是一個具有良好可擴展性的系統,給定N個結點,系統維數為d,則路由路徑長度為O(n1/d) ,每結點維護的路由表信息和網路規模無關為O(d) 。
DHT類結構最大的問題是DHT的維護機制較為復雜,尤其是結點頻繁加入退出造成的網路波動(Churn)會極大增加DHT的維護代價。DHT所面臨的另外一個問題是DHT僅支持精確關鍵詞匹配查詢,無法支持內容/語義等復雜查詢。
半分布式結構(有的文獻稱作 Hybrid Structure)吸取了中心化結構和全分布式非結構化拓撲的優點,選擇性能較高(處理、存儲、帶寬等方面性能)的結點作為超級點(英文文獻中多稱作:SuperNodes, Hubs),在各個超級點上存儲了系統中其他部分結點的信息,發現演算法僅在超級點之間轉發,超級點再將查詢請求轉發給適當的葉子結點。半分布式結構也是一個層次式結構,超級點之間構成一個高速轉發層,超級點和所負責的普通結點構成若干層次。最典型的案例就是KaZaa。
KaZaa是現在全世界流行的幾款p2p軟體之一。根據CA公司統計,全球KaZaa的下載量超過2.5億次。使用KaZaa軟體進行文件傳輸消耗了互聯網40%的帶寬。之所以它如此的成功,是因為它結合了Napster和Gnutella共同的優點。從結構 上來說,它使用了Gnutella的全分布式的結構,這樣可以是系統更好的擴展,因為它無需中央索引伺服器存儲文件名,它是自動的把性能好的機器成為SuperNode,它存儲著離它最近的葉子節點的文件信息,這些SuperNode,再連通起來形成一個Overlay Network. 由於SuperNode的索引功能,使搜索效率大大提高。
P2P普及系列之三
全分布非結構化網路在重疊網路(overlay)採用了隨機圖的組織方式,結點度數服從"Power-law"[a][b]規律,從而能夠較快發現目的結點,面對網路的動態變化體現了較好的容錯能力,因此具有較好的可用性。同時可以支持復雜查詢,如帶有規則表達式的多關鍵詞查詢,模糊查詢等,最典型的案例是Gnutella。
Gnutella是一個P2P文件共享系統,它和Napster最大的區別在於Gnutella是純粹的P2P系統,沒有索引伺服器,它採用了基於完全隨機圖的洪泛(Flooding)發現和隨機轉發(Random Walker)機制。為了控制搜索消息的傳輸,通過TTL (Time To Live)的減值來實現。具體協議參照〔Gnutella協議中文版〕
在Gnutella分布式對等網路模型N中,每一個聯網計算機在功能上都是對等的,既是客戶機同時又是伺服器,所以被稱為對等機(Servent,Server+Client的組合)。
隨著聯網節點的不斷增多,網路規模不斷擴大,通過這種洪泛方式定位對等點的方法將造成網路流量急劇增加,從而導致網路中部分低帶寬節點因網路資源過載而失效。所以在初期的Gnutella網路中,存在比較嚴重的分區,斷鏈現象。也就是說,一個查詢訪問只能在網路的很小一部分進行,因此網路的可擴展性不好。所以,解決Gnutella網路的可擴展性對該網路的進一步發展至關重要。
由於沒有確定拓撲結構的支持,非結構化網路無法保證資源發現的效率。即使需要查找的目的結點存在發現也有可能失敗。由於採用TTL(Time-to-Live)、洪泛(Flooding)、隨機漫步或有選擇轉發演算法,因此直徑不可控,可擴展性較差。
因此發現的准確性和可擴展性是非結構化網路面臨的兩個重要問題。目前對此類結構的研究主要集中於改進發現演算法和復制策略以提高發現的准確率和性能。
全分布非結構化網路在重疊網路(overlay)採用了隨機圖的組織方式,結點度數服從"Power-law"[a][b]規律,從而能夠較快發現目的結點,面對網路的動態變化體現了較好的容錯能力,因此具有較好的可用性。同時可以支持復雜查詢,如帶有規則表達式的多關鍵詞查詢,模糊查詢等,最典型的案例是Gnutella。
Gnutella是一個P2P文件共享系統,它和Napster最大的區別在於Gnutella是純粹的P2P系統,沒有索引伺服器,它採用了基於完全隨機圖的洪泛(Flooding)發現和隨機轉發(Random Walker)機制。為了控制搜索消息的傳輸,通過TTL (Time To Live)的減值來實現。具體協議參照〔Gnutella協議中文版〕
在Gnutella分布式對等網路模型N中,每一個聯網計算機在功能上都是對等的,既是客戶機同時又是伺服器,所以被稱為對等機(Servent,Server+Client的組合)。
隨著聯網節點的不斷增多,網路規模不斷擴大,通過這種洪泛方式定位對等點的方法將造成網路流量急劇增加,從而導致網路中部分低帶寬節點因網路資源過載而失效。所以在初期的Gnutella網路中,存在比較嚴重的分區,斷鏈現象。也就是說,一個查詢訪問只能在網路的很小一部分進行,因此網路的可擴展性不好。所以,解決Gnutella網路的可擴展性對該網路的進一步發展至關重要。
由於沒有確定拓撲結構的支持,非結構化網路無法保證資源發現的效率。即使需要查找的目的結點存在發現也有可能失敗。由於採用TTL(Time-to-Live)、洪泛(Flooding)、隨機漫步或有選擇轉發演算法,因此直徑不可控,可擴展性較差。
因此發現的准確性和可擴展性是非結構化網路面臨的兩個重要問題。目前對此類結構的研究主要集中於改進發現演算法和復制策略以提高發現的准確率和性能。
P2P普及系列之四
半分布式結構的優點是性能、可擴展性較好,較容易管理,但對超級點依賴性大,易於受到攻擊,容錯性也受到影響。下表比較了4種結構的綜合性能,比較結果如表1-1所示。
比較標准/拓撲結構 中心化拓撲 全分布式非結構化拓撲 全分布式結構化拓撲 半分布式拓撲
可擴展性 差 差 好 中
可靠性 差 好 好 中
可維護性 最好 最好 好 中
發現演算法效率 最高 中 高 中
復雜查詢 支持 支持 不支持 支持
表1:4種結構的性能比較
P2P普及系列之五
國外開展P2P研究的學術團體主要包括P2P工作組(P2PWG) 、全球網格論壇(Global Grid Forum ,GGF) 。P2P工作組成立的主要目的是希望加速P2P計算基礎設施的建立和相應的標准化工作。P2PWG成立之後,對P2P計算中的術語進行了統一,也形成相關的草案,但是在標准化工作方面工作進展緩慢。目前P2PWG已經和GGF合並,由該論壇管理P2P計算相關的工作。GGF負責網格計算和P2P計算等相關的標准化工作。
從國外公司對P2P計算的支持力度來看,Microsoft公司、Sun公司和Intel公司投入較大。Microsoft公司成立了Pastry項目組,主要負責P2P計算技術的研究和開發工作。目前Microsoft公司已經發布了基於Pastry的軟體包SimPastry/ VisPastry。Rice大學也在Pastry的基礎之上發布了FreePastry軟體包。
在2000年8月,Intel公司宣布成立P2P工作組,正式開展P2P的研究。工作組成立以後,積極與應用開發商合作,開發P2P應用平台。2002年Intel發布了. Net基礎架構之上的Accelerator Kit (P2P加速工具包) 和P2P安全API軟體包,從而使得微軟. NET開發人員能夠迅速地建立P2P安全Web應用程序。
Sun公司以Java技術為背景,開展了JXTA項目。JXTA是基於Java的開源P2P平台,任何個人和組織均可以加入該項目。因此,該項目不僅吸引了大批P2P研究人員和開發人員,而且已經發布了基於JXTA的即時聊天軟體包。JXTA定義了一組核心業務:認證、資源發現和管理。在安全方面,JXTA加入了加密軟體包,允許使用該加密包進行數據加密,從而保證消息的隱私、可認證性和完整性。在JXTA核心之上,還定義了包括內容管理、信息搜索以及服務管理在內的各種其它可選JXTA服務。在核心服務和可選服務基礎上,用戶可以開發各種JXTA平台上的P2P應用。
P2P實際的應用主要體現在以下幾個方面:
P2P分布式存儲
P2P分布式存儲系統是一個用於對等網路的數據存儲系統,它可以提供高效率的、魯棒的和負載平衡的文件存取功能。這些研究包括:OceanStore,Farsite等。其中,基於超級點結構的半分布式P2P應用如Kazza、Edonkey、Morpheus、Bittorrent等也是屬於分布式存儲的范疇,並且用戶數量急劇增加。
計算能力的共享
加入對等網路的結點除了可以共享存儲能力之外,還可以共享CPU處理能力。目前已經有了一些基於對等網路的計算能力共享系統。比如SETI@home。目前SETI@home採用的仍然是類似於Napster的集中式目錄策略。Xenoservers向真正的對等應用又邁進了一步。這種計算能力共享系統可以用於進行基因資料庫檢索和密碼破解等需要大規模計算能力的應用。
P2P應用層組播
應用層組播,就是在應用層實現組播功能而不需要網路層的支持。這樣就可以避免出現由於網路層遲遲不能部署對組播的支持而使組播應用難以進行的情況。應用層組播需要在參加的應用結點之間實現一個可擴展的,支持容錯能力的重疊網路,而基於DHT的發現機制正好為應用層組播的實現提供了良好的基礎平台。
Internet間接訪問基礎結構(Internet Indirection Infrastructure)。
為了使Internet更好地支持組播、單播和移動等特性,Internet間接訪問基礎結構提出了基於匯聚點的通信抽象。在這一結構中,並不把分組直接發向目的結點,而是給每個分組分配一個標識符,而目的結點則根據標識符接收相應的分組。標識符實際上表示的是信息的匯聚點。目的結點把自己想接收的分組的標識符預先通過一個觸發器告訴匯聚點,當匯聚點收到分組時,將會根據觸發器把分組轉發該相應的目的結點。Internet間接訪問基礎結構實際上在Internet上構成了一個重疊網路,它需要對等網路的路由系統對它提供相應的支持。
P2P技術從出現到各個領域的應用展開,僅用了幾年的時間。從而證明了P2P技術具有非常廣闊的應用前景。
P2P普及系列之六
隨著P2P應用的蓬勃發展,作為P2P應用中核心問題的發現技術除了遵循技術本身的邏輯以外,也受到某些技術的發展趨勢、需求趨勢的深刻影響。
如上所述,DHT發現技術完全建立在確定性拓撲結構的基礎上,從而表現出對網路中路由的指導性和網路中結點與數據管理的較強控制力。但是,對確定性結構的認識又限制了發現演算法效率的提升。研究分析了目前基於DHT的發現演算法,發現衡量發現演算法的兩個重要參數度數(表示鄰居關系數、路由表的容量)和鏈路長度(發現演算法的平均路徑長度)之間存在漸進曲線的關系。
研究者採用圖論中度數(Degree)和直徑(Diameter)兩個參數研究DHT發現演算法,發現這些DHT發現演算法在度數和直徑之間存在漸進曲線關系,如下圖所示。在N個結點網路中,圖中直觀顯示出當度數為N時,發現演算法的直徑為O(1);當每個結點僅維護一個鄰居時,發現演算法的直徑為O(N)。這是度數和直徑關系的2種極端情況。同時,研究以圖論的理論分析了O(d)的度和O(d)的直徑的演算法是不可能的。
從漸進曲線關系可以看出,如果想獲得更短的路徑長度,必然導致度數的增加;而網路實際連接狀態的變化造成大度數鄰居關系的維護復雜程度增加。另外,研究者證明O(logN)甚至O(logN/loglogN)的平均路徑長度也不能滿足狀態變化劇烈的網路應用的需求。新的發現演算法受到這種折衷關系制約的根本原因在於DHT對網路拓撲結構的確定性認識。
非結構化P2P系統中發現技術一直採用洪泛轉發的方式,與DHT的啟發式發現演算法相比,可靠性差,對網路資源的消耗較大。最新的研究從提高發現演算法的可靠性和尋找隨機圖中的最短路徑兩個方面展開。也就是對重疊網路的重新認識。其中,small world特徵和冪規律證明實際網路的拓撲結構既不是非結構化系統所認識的一個完全隨機圖,也不是DHT發現演算法採用的確定性拓撲結構。
實際網路體現的冪規律分布的含義可以簡單解釋為在網路中有少數結點有較高的「度」,多數結點的「度」較低。度較高的結點同其他結點的聯系比較多,通過它找到待查信息的概率較高。
Small-world[a][b]模型的特性:網路拓撲具有高聚集度和短鏈的特性。在符合small world特性的網路模型中,可以根據結點的聚集度將結點劃分為若干簇(Cluster),在每個簇中至少存在一個度最高的結點為中心結點。大量研究證明了以Gnutella為代表的P2P網路符合small world特徵,也就是網路中存在大量高連通結點,部分結點之間存在「短鏈」現象。
因此,P2P發現演算法中如何縮短路徑長度的問題變成了如何找到這些「短鏈」的問題。尤其是在DHT發現演算法中,如何產生和找到「短鏈」是發現演算法設計的一個新的思路。small world特徵的引入會對P2P發現演算法產生重大影響。
P2P普及系列之七
有DHT演算法由於採用分布式散列函數,所以只適合於准確的查找,如果要支持目前Web上搜索引擎具有的多關鍵字查找的功能,還要引入新的方法。主要的原因在於DHT的工作方式。
基於DHT的P2P系統採用相容散列函數根據精確關鍵詞進行對象的定位與發現。散列函數總是試圖保證生成的散列值均勻隨機分布,結果兩個內容相似度很高但不完全相同的對象被生成了完全不同的散列值,存放到了完全隨機的兩個結點上。因此,DHT可以提供精確匹配查詢,但是支持語義是非常困難的。
目前在DHT基礎上開展帶有語義的資源管理技術的研究還非常少。由於DHT的精確關鍵詞映射的特性決定了無法和信息檢索等領域的研究成果結合,阻礙了基於DHT的P2P系統的大規模應用。
P2P發現技術中最重要的研究成果應該是基於small world理論的非結構化發現演算法和基於DHT的結構化發現演算法。尤其是DHT及其發現技術為資源的組織與查找提供了一種新的方法。
隨著P2P系統實際應用的發展,物理網路中影響路由的一些因素開始影響P2P發現演算法的效率。一方面,實際網路中結點之間體現出較大的差異,即異質性。由於客戶機/伺服器模式在Internet和分布式領域十幾年的應用和大量種類的電子設備的普及,如手提電腦、行動電話或PDA。這些設備在計算能力、存儲空間和電池容量上差別很大。另外,實際網路被路由器和交換機分割成不同的自治區域,體現出嚴密的層次性。
另一方面,網路波動的程度嚴重影響發現演算法的效率。網路波動(Churn、fluctuation of network)包括結點的加入、退出、失敗、遷移、並發加入過程、網路分割等。DHT的發現演算法如Chord、CAN、Koorde等都是考慮網路波動的最差情況下的設計與實現。由於每個結點的度數盡量保持最小,這樣需要響應的成員關系變化的維護可以比較小,從而可以快速恢復網路波動造成的影響。但是每個結點僅有少量路由狀態的代價是發現演算法的高延時,因為每一次查找需要聯系多個結點,在穩定的網路中這種思路是不必要的。
同時,作為一種資源組織與發現技術必然要支持復雜的查詢,如關鍵詞、內容查詢等。盡管信息檢索和數據挖掘領域提供了大量成熟的語義查詢技術,由於DHT精確關鍵詞映射的特性阻礙了DHT在復雜查詢方面的應用。
P2P普及系列之八
Internet作為當今人類社會信息化的標志,其規模正以指數速度高速增長.如今Internet的「面貌」已與其原型ARPANET大相徑庭,依其高度的復雜性,可以將其看作一個由計算機構成的「生態系統」.雖然Internet是人類親手建造的,但卻沒有人能說出這個龐然大物看上去到底是個什麼樣子,運作得如何.Internet拓撲建模研究就是探求在這個看似混亂的網路之中蘊含著哪些還不為我們所知的規律.發現Internet拓撲的內在機制是認識Internet的必然過程,是在更高層次上開發利用Internet的基礎.然而,Internet與生俱來的異構性動態性發展的非集中性以及如今龐大的規模都給拓撲建模帶來巨大挑戰.Internet拓撲建模至今仍然是一個開放性問題,在計算機網路研究中佔有重要地位.
Internet拓撲作為Internet這個自組織系統的「骨骼」,與流量協議共同構成模擬Internet的3個組成部分,即在拓撲網路中節點間執行協議,形成流量.Internet拓撲模型是建立Internet系統模型的基礎,由此而體現的拓撲建模意義也可以說就是Internet建模的意義,即作為一種工具,人們用其來對Internet進行分析預報決策或控制.Internet模型中的拓撲部分刻畫的是Internet在宏觀上的特徵,反映一種總體趨勢,所以其應用也都是在大尺度上展開的.對Internet拓撲模型的需求主要來自以下幾個方面1) 許多新應用或實驗不適合直接應用於Internet,其中一些具有危害性,如蠕蟲病毒在大規模網路上的傳播模擬;(2) 對於一些依賴於網路拓撲的協議(如多播協議),在其研發階段,當前Internet拓撲只能提供一份測試樣本,無法對協議進行全面評估,需要提供多個模擬拓撲環境來進行實驗;(3) 從國家安全形度考慮,需要在線控制網路行為,如美國國防高級研究計劃局(DARPA)的NMS(network modeling and simulation)項目。
隨機網路是由N個頂點構成的圖中,可以存在條邊,我們從中隨機連接M條邊所構成的網路。還有一種生成隨機網路的方法是,給一個概率p,對於中任何一個可能連接,我們都嘗試一遍以概率p的連接。如果我們選擇M = p,這兩種隨機網路模型就可以聯系起來。對於如此簡單的隨機網路模型,其幾何性質的研究卻不是同樣的簡單。隨機網路幾何性質的研究是由Paul,Alfréd Rényi和Béla Bollobás在五十年代到六十年代之間完成的。隨機網路在Internet的拓撲中佔有很重要的位置。
隨機網路參數
描述隨機網路有一些重要的參數。一個節點所擁有的度是該節點與其他節點相關聯的邊數,度是描述網路局部特性的基本參數。網路中並不是所有節點都具有相同的度,系統中節點度的分布情況,可以用分布函數描述,度分布函數反映了網路系統的宏觀統計特徵。理論上利用度分布可以計算出其他表徵全局特性參數的量化數值。
聚集系數是描述與第三個節點連接的一對節點被連接的概率。從連接節點的邊的意義上,若為第i個節點的度,在由k.個近鄰節點構成的子網中,實際存在的邊數E(i)與全部k.個節點完全連接時的總邊數充的比值定義為節點i的聚集系數。
Ⅳ 要成為一名專業的程序員,從零開始需要怎麼一步步來比較好,要把最底層的先學精通嗎(個人認為)求學長
前言
你是否覺得自己從學校畢業的時候只做過小玩具一樣的程序?走入職場後哪怕沒有什麼經驗也可以把以下這些課外練習走一遍(朋友的抱怨:學校課程總是從理論出發,作業項目都看不出有什麼實際作用,不如從工作中的需求出發)
建議:
不要亂買書,不要亂追新技術新名詞,基礎的東西經過很長時間積累而且還會在未來至少10年通用。
回顧一下歷史,看看歷史上時間線上技術的發展,你才能明白明天會是什麼樣。
一定要動手,例子不管多麼簡單,建議至少自己手敲一遍看看是否理解了里頭的細枝末節。
一定要學會思考,思考為什麼要這樣,而不是那樣。還要舉一反三地思考。
註:你也許會很奇怪為什麼下面的東西很偏Unix/linux,這是因為我覺得Windows下的編程可能會在未來很沒有前途,原因如下:
現在的用戶界面幾乎被兩個東西主宰了,1)Web,2)移動設備iOS或Android。Windows的圖形界面不吃香了。
越來越多的企業在用成本低性能高的Linux和各種開源技術來構架其系統,Windows的成本太高了。
微軟的東西變得太快了,很不持久,他們完全是在玩弄程序員。詳情參見《Windows編程革命史》
所以,我個人認為以後的趨勢是前端是Web+移動,後端是Linux+開源。開發這邊基本上沒Windows什麼事。
啟蒙入門
1、 學習一門腳本語言,例如python/Ruby
可以讓你擺脫對底層語言的恐懼感,腳本語言可以讓你很快開發出能用得上的小程序。實踐項目:
處理文本文件,或者csv (關鍵詞 python csv, python open, python sys) 讀一個本地文件,逐行處理(例如 word count,或者處理log)
遍歷本地文件系統 (sys, os, path),例如寫一個程序統計一個目錄下所有文件大小並按各種條件排序並保存結果
跟資料庫打交道 (python sqlite),寫一個小腳本統計資料庫里條目數量
學會用各種print之類簡單粗暴的方式進行調試
學會用Google (phrase, domain, use reader to follow tech blogs)
為什麼要學腳本語言,因為他們實在是太方便了,很多時候我們需要寫點小工具或是腳本來幫我們解決問題,你就會發現正規的編程語言太難用了。
2、 用熟一種程序員的編輯器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,學會如何配置代碼補全,外觀,外部命令等。
Source Insight (或 ctag)
使用這些東西不是為了Cool,而是這些編輯器在查看、修改代碼/配置文章/日誌會更快更有效率。
3、 熟悉Unix/Linux Shell和常見的命令行
如果你用windows,至少學會用虛擬機里的linux, vmware player是免費的,裝個Ubuntu吧
一定要少用少用圖形界面。
學會使用man來查看幫助
文件系統結構和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
學會使用一些文本操作命令 sed/awk/grep/tail/less/more …
學會使用一些管理命令 ps/top/lsof/netstat/kill/tcpmp/iptables/dd…
了解/etc目錄下的各種配置文章,學會查看/var/log下的系統日誌,以及/proc下的系統運行信息
了解正則表達式,使用正則表達式來查找文件。
對於程序員來說Unix/Linux比Windows簡單多了。(參看我四年前CSDN的博文《其實Unix很簡單》)學會使用Unix/Linux你會發現圖形界面在某些時候實在是太難用了,相當地相當地降低工作效率。
4、 學習Web基礎(HTML/CSS/JS) + 伺服器端技術 (LAMP)
未來必然是Web的世界,學習WEB基礎的最佳網站是W3School。
學習HTML基本語法
學習CSS如何選中HTML元素並應用一些基本樣式(關鍵詞:box model)
學會用 Firefox + Firebug 或 chrome 查看你覺得很炫的網頁結構,並動態修改。
學習使用Javascript操縱HTML元件。理解DOM和動態網頁(Dynamic HTML: The Definitive Reference, 3rd Edition - O'Reilly Media) 網上有免費的章節,足夠用了。或參看 DOM 。
學會用 Firefox + Firebug 或 chrome 調試Javascript代碼(設置斷點,查看變數,性能,控制台等)
在一台機器上配置Apache 或 Nginx
學習php,讓後台PHP和前台HTML進行數據交互,對伺服器相應瀏覽器請求形成初步認識。實現一個表單提交和反顯的功能。
把PHP連接本地或者遠程資料庫 MySQL(MySQL 和 SQL現學現用夠了)
跟完一個名校的網路編程課程(例如:http://www.stanford.e/~ouster/cgi-bin/cs142-fall10/index.php ) 不要覺得需要多於一學期時間,大學生是全職一學期選3-5門課,你業余時間一定可以跟上
學習一個javascript庫(例如jQuery 或 ExtJS)+ Ajax (非同步讀入一個伺服器端圖片或者資料庫內容)+JSON數據格式。
HTTP: The Definitive Guide 讀完前4章你就明白你每天上網用瀏覽器的時候發生的事情了(proxy, gateway, browsers)
做個小網站(例如:一個小的留言板,支持用戶登錄,Cookie/Session,增、刪、改、查,上傳圖片附件,分頁顯示)
買個域名,租個空間,做個自己的網站。
進階加深
1、 C語言和操作系統調用
重新學C語言,理解指針和內存模型,用C語言實現一下各種經典的演算法和數據結構。推薦《計算機程序設計藝術》、《演算法導論》和《編程珠璣》。
學習(麻省理工免費課程)計算機科學和編程導論
學習(麻省理工免費課程)C語言內存管理
學習Unix/Linux系統調用(Unix高級環境編程),,了解系統層面的東西。
用這些系統知識操作一下文件系統,用戶(實現一個可以拷貝目錄樹的小程序)
用fork/wait/waitpid寫一個多進程的程序,用pthread寫一個多線程帶同步或互斥的程序。多進程多進程購票的程序。
用signal/kill/raise/alarm/pause/sigprocmask實現一個多進程間的信號量通信的程序。
學會使用gcc和gdb來編程和調試程序(參看我的《用gdb調試程序》)
學會使用makefile來編譯程序。(參看我的《跟我一起寫makefile》)
IPC和Socket的東西可以放到高級中來實踐。
學習Windows SDK編程(Windows 程序設計 ,MFC程序設計)
寫一個窗口,了解WinMain/WinProcere,以及Windows的消息機制。
寫一些程序來操作Windows SDK中的資源文件或是各種圖形控制項,以及作圖的編程。
學習如何使用MSDN查看相關的SDK函數,各種WM_消息以及一些常式。
這本書中有很多常式,在實踐中請不要照抄,試著自己寫一個自己的常式。
不用太多於精通這些東西,因為GUI正在被Web取代,主要是了解一下Windows 圖形界面的編程。@virushuo 說:「 我覺得GUI確實不那麼熱門了,但充分理解GUI工作原理是很重要的。包括移動設備開發,如果沒有基礎知識仍然很吃力。或者說移動設備開發必須理解GUI工作,或者在win那邊學,或者在mac/iOS上學」。
2、學習Java
Java 的學習主要是看經典的Core Java 《Java 核心技術編程》和《Java編程思想》(有兩卷,我僅鏈了第一卷,足夠了,因為Java的圖形界面了解就可以了)
學習JDK,學會查閱Java API Doc Java Platform SE 6
了解一下Java這種虛擬機語言和C和Python語言在編譯和執行上的差別。從C、Java、Python思考一下「跨平台」這種技術。
學會使用IDE Eclipse,使用Eclipse 編譯,調試和開發Java程序。
建一個Tomcat的網站,嘗試一下JSP/Servlet/JDBC/MySQL的Web開發。把前面所說的那個PHP的小項目試著用JSP和Servlet實現一下。
3、Web的安全與架構
學習HTML5,網上有很多很多教程,以前酷殼也介紹過很多,我在這里就不羅列了。
學習Web開發的安全問題(參考新浪微博被攻擊的這個事,以及Ruby的這篇文章)
學習HTTP Server的rewrite機制,Nginx的反向代理機制,fast-cgi(如:PHP-FPM)
學習Web的靜態頁面緩存技術。
學習Web的非同步工作流處理,數據Cache,數據分區,負載均衡,水平擴展的構架。
實踐任務:
使用HTML5的canvas 製作一些Web動畫。
嘗試在前面開發過的那個Web應用中進行SQL注入,JS注入,以及XSS攻擊。
把前面開發過的那個Web應用改成構造在Nginx + PHP-FPM + 靜態頁面緩存的網站
4、學習關系型資料庫
你可以安裝MSSQLServer或MySQL來學習資料庫。
學習教科書里資料庫設計的那幾個範式,1NF,2NF,3NF,……
學習資料庫的存過,觸發器,視圖,建索引,游標等。
學習SQL語句,明白表連接的各種概念(參看《SQL Join的圖示》)
學習如何優化資料庫查詢(參看《MySQL的優化》)
實踐任務:設計一個論壇的資料庫,至少滿足3NF,使用SQL語句查詢本周,本月的最新文章,評論最多的文章,最活躍用戶。
5、一些開發工具
學會使用SVN或Git來管理程序版本。
學會使用JUnit來對Java進行單元測試。
學習C語言和Java語言的coding standard 或 coding guideline。(我N年前寫過一篇關C語言非常簡單的文章——《編程修養》,這樣的東西你可以上網查一下,一大堆)。
推薦閱讀《代碼大全》《重構》《代碼整潔之道》
高級深入
1、C++ / Java 和面向對象
我個人以為學好C++,Java也就是舉手之勞。但是C++的學習曲線相當的陡。不過,我覺得C++是最需要學好的語言了。參看兩篇趣文「C++學習信心圖」 和「21天學好C++」
學習(麻省理工免費課程)C++面向對象編程
讀我的 「如何學好C++」中所推薦的那些書至少兩遍以上(如果你對C++的理解能夠深入到像我所寫的《C++虛函數表解析》或是《C++對象內存存局(上)(下)》,或是《C/C++返回內部靜態成員的陷阱》那就非常不錯了)
然後反思為什麼C++要干成這樣,Java則不是?你一定要學會對比C++和Java的不同。比如,Java中的初始化,垃圾回收,介面,異常,虛函數,等等。
實踐任務:
用C++實現一個BigInt,支持128位的整形的加減乘除的操作。
用C++封裝一個數據結構的容量,比如hash table。
用C++封裝並實現一個智能指針(一定要使用模板)。
《設計模式》必需一讀,兩遍以上,思考一下,這23個模式的應用場景。主要是兩點:1)鍾愛組合而不是繼承,2)鍾愛介面而不是實現。(也推薦《深入淺出設計模式》)
實踐任務:
使用工廠模式實現一個內存池。
使用策略模式製做一個類其可以把文本文件進行左對齊,右對齊和中對齊。
使用命令模式實現一個命令行計算器,並支持undo和redo。
使用修飾模式實現一個酒店的房間價格訂價策略——旺季,服務,VIP、旅行團、等影響價格的因素。
學習STL的用法和其設計概念 - 容器,演算法,迭代器,函數子。如果可能,請讀一下其源碼。
實踐任務:嘗試使用面向對象、STL,設計模式、和WindowsSDK圖形編程的各種技能
做一個貪吃蛇或是俄羅斯方塊的游戲。支持不同的級別和難度。
做一個文件瀏覽器,可以瀏覽目錄下的文件,並可以對不同的文件有不同的操作,文本文件可以打開編輯,執行文件則執行之,mp3或avi文件可以播放,圖片文件可以展示圖片。
學習C++的一些類庫的設計,如: MFC(看看候捷老師的《深入淺出MFC》) ,Boost, ACE, CPPUnit,STL (STL可能會太難了,但是如果你能了解其中的設計模式和設計那就太好了,如果你能深入到我寫的《STL string類的寫時拷貝技術》那就非常不錯了,ACE需要很強在的系統知識,參見後面的「加強對系統的了解」)
Java是真正的面向對象的語言,Java的設計模式多得不能再多,也是用來學習面向對象的設計模式的最佳語言了(參看Java中的設計模式)。
推薦閱讀《Effective Java》 and 《Java解惑》
學習Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是學習Java的設計,如IoC等。
Java的技術也是爛多,重點學習J2EE架構以及JMS, RMI, 等消息傳遞和遠程調用的技術。
學習使用Java做Web Service (官方教程在這里)
實踐任務: 嘗試在Spring或Hibernate框架下構建一個有網路的Web Service的遠程調用程序,並可以在兩個Service中通過JMS傳遞消息。
C++和Java都不是能在短時間內能學好的,C++玩是的深,Java玩的是廣,我建議兩者選一個。我個人的學習經歷是:
深究C++(我深究C/C++了十來年了)
學習Java的各種設計模式。
2、加強系統了解
重要閱讀下面的幾本書:
《Unix編程藝術》了解Unix系統領域中的設計和開發哲學、思想文化體系、原則與經驗。你一定會有一種醍醐灌頂的感覺。
《Unix網路編程卷1,套接字》這是一本看完你就明白網路編程的書。重要注意TCP、UDP,以及多路復用的系統調用select/poll/epoll的差別。
《TCP/IP詳解 卷1:協議》- 這是一本看完後你就可以當網路黑客的書。了解乙太網的的運作原理,了解TCP/IP的協議,運作原理以及如何TCP的調優。
實踐任務:
理解什麼是阻塞(同步IO),非阻塞(非同步IO),多路復用(select, poll, epoll)的IO技術。
寫一個網路聊天程序,有聊天伺服器和多個聊天客戶端(服務端用UDP對部分或所有的的聊天客戶端進Multicast或Broadcast)。
寫一個簡易的HTTP伺服器。
《Unix網路編程卷2,進程間通信》信號量,管道,共享內存,消息等各種IPC…… 這些技術好像有點老掉牙了,不過還是值得了解。
實踐任務:
主要實踐各種IPC進程序通信的方法。
嘗試寫一個管道程序,父子進程通過管道交換數據。
嘗試寫一個共享內存的程序,兩個進程通過共享內存交換一個C的結構體數組。
學習《Windows核心編程》一書。把CreateProcess,Windows線程、線程調度、線程同步(Event, 信號量,互斥量)、非同步I/O,內存管理,DLL,這幾大塊搞精通。
實踐任務:使用CreateProcess啟動一個記事本或IE,並監控該程序的運行。把前面寫過的那個簡易的HTTP服務用線程池實現一下。寫一個DLL的鉤子程序監控指定窗口的關閉事件,或是記錄某個窗口的按鍵。
有了多線程、多進程通信,TCP/IP,套接字,C++和設計模式的基本,你可以研究一下ACE了。使用ACE重寫上述的聊天程序和HTTP伺服器(帶線程池)
實踐任務:通過以上的所有知識,嘗試
寫一個服務端給客戶端傳大文件,要求把100M的帶寬用到80%以上。(注意,磁碟I/O和網路I/O可能會很有問題,想一想怎麼解決,另外,請注意網路傳輸最大單元MTU)
了解BT下載的工作原理,用多進程的方式模擬BT下載的原理。
3、系統架構
負載均衡。HASH式的,純動態式的。(可以到Google學術里搜一些關於負載均衡的文章讀讀)
多層分布式系統 – 客戶端服務結點層、計算結點層、數據cache層,數據層。J2EE是經典的多層結構。
CDN系統 – 就近訪問,內容邊緣化。
P2P式系統,研究一下BT和電驢的演算法。比如:DHT演算法。
伺服器備份,雙機備份系統(Live-Standby和Live-Live系統),兩台機器如何通過心跳監測對方?集群主結點備份。
虛擬化技術,使用這個技術,可以把操作系統當應用程序一下切換或重新配置和部署。
學習Thrift,二進制的高性能的通訊中間件,支持數據(對象)序列化和多種類型的RPC服務。
學習Hadoop。Hadoop框架中最核心的設計就是:MapRece和HDFS。MapRece的思想是由Google的一篇論文所提及而被廣為流傳的,簡單的一句話解釋MapRece就是「任務的分解與結果的匯總」。HDFS是Hadoop分布式文件系統(Hadoop Distributed File System)的縮寫,為分布式計算存儲提供了底層支持。
了解NoSQL資料庫(有人說可能是一個過渡炒作的技術),不過因為超大規模以及高並發的純動態型網站日漸成為主流,而SNS類網站在數據存取過程中有著實時性等剛性需求,這使得目前NoSQL資料庫慢慢成了人們所關注的焦點,並大有成為取代關系型資料庫而成為未來主流數據存儲模式的趨勢。當前NoSQL資料庫很多,大部分都是開源的,其中比較知名的有:MemcacheDB、Redis、Tokyo Cabinet(升級版為Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。
Ⅳ mac上的bt下載工具
mac上的bt下載工具除了迅雷還有Folx,並且有做過測試,Folx的下載速度比迅雷快多了。
一、Folx有哪些強大的功能
Folx Mac下載管理器具有支持Retina顯示屏的現代界面,提供了獨特的系統來分類、存儲以及預覽下載文件,且有簡單好用又強大的功能:
標簽管理
使用Folx創建下載任務時,為下載任務選擇標簽,軟體將根據標簽對下載任務進行自動分類。用戶可以在下載頁面左側標簽選項中,篩選需要下載的內容。
二、專業版與免費版的區別
Folx專業版比免費版的功能更加豐富,比如支持【最多可將下載分成20個線程】、【安排下載時間】、【與音樂集成(以前的iTunes)】、【速度控制】、【直接從應用程序中搜索種子】、【影片下載】、【保存任意數量的FTP和HTTP網站密碼】等功能。
通過上述對比可以發現,Folx Pro專業版的優勢在於對下載管理和軟體的易用性。
以上,就是Mac下載工具Folx的全部內容。其他更多內容可登錄Folx中文網站進行訪問了解。
Ⅵ 程序員高級深入應該學習哪些知識
安博志遠課程設置 1、C++ / Java 和面向對象我個人以為學好C++,Java也就是舉手之勞。但是C++的學習曲線相當的陡。不過,我覺得C++是最需要學好的語言了。參看兩篇趣文「C++學習信心圖」 和「21天學好C++」學習(麻省理工免費課程)C++面向對象編程讀我的 「如何學好C++」中所推薦的那些書至少兩遍以上(如果你對C++的理解能夠深入到像我所寫的《C++虛函數表解析》或是《C++對象內存存局(上)(下)》,或是《C/C++返回內部靜態成員的陷阱》那就非常不錯了)然後反思為什麼C++要干成這樣,Java則不是?你一定要學會對比C++和Java的不同。比如,Java中的初始化,垃圾回收,介面,異常,虛函數,等等。實踐任務:用C++實現一個BigInt,支持128位的整形的加減乘除的操作。用C++封裝一個數據結構的容量,比如hash table。用C++封裝並實現一個智能指針(一定要使用模板)。《設計模式》必需一讀,兩遍以上,思考一下,這23個模式的應用場景。主要是兩點:1)鍾愛組合而不是繼承,2)鍾愛介面而不是實現。(也推薦《深入淺出設計模式》)實踐任務:使用工廠模式實現一個內存池。使用策略模式製做一個類其可以把文本文件進行左對齊,右對齊和中對齊。使用命令模式實現一個命令行計算器,並支持undo和redo。使用修飾模式實現一個酒店的房間價格訂價策略——旺季,服務,VIP、旅行團、等影響價格的因素。學習STL的用法和其設計概念 - 容器,演算法,迭代器,函數子。如果可能,請讀一下其源碼。實踐任務: 嘗試使用面向對象、STL,設計模式、和WindowsSDK圖形編程的各種技能 做一個貪吃蛇或是俄羅斯方塊的游戲。支持不同的級別和難度。做一個文件瀏覽器,可以瀏覽目錄下的文件,並可以對不同的文件有不同的操作,文本文件可以打開編輯,執行文件則執行之,mp3或avi文件可以播放,圖片文件可以展示圖片。學習C++的一些類庫的設計,如: MFC(看看候捷老師的《深入淺出MFC》),Boost, ACE, CPPUnit,STL (STL可能會太難了,但是如果你能了解其中的設計模式和設計那就太好了,如果你能深入到我寫的《STL string類的寫時拷貝技術》那就非常不錯了,ACE需要很強在的系統知識,參見後面的「加強對系統的了解」)Java是真正的面向對象的語言,Java的設計模式多得不能再多,也是用來學習面向對象的設計模式的最佳語言了(參看Java中的設計模式)。推薦閱讀《Effective Java》 and 《Java解惑》學習Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是學習Java的設計,如IoC等。Java的技術也是爛多,重點學習J2EE架構以及JMS, RMI, 等消息傳遞和遠程調用的技術。學習使用Java做Web Service (官方教程在這里)實踐任務: 嘗試在Spring或Hibernate框架下構建一個有網路的Web Service的遠程調用程序,並可以在兩個Service中通過JMS傳遞消息。C++和Java都不是能在短時間內能學好的,C++玩是的深,Java玩的是廣,我建議兩者選一個。我個人的學習經歷是:深究C++(我深究C/C++了十來年了)學習Java的各種設計模式。2、加強系統了解重要閱讀下面的幾本書:《Unix編程藝術》了解Unix系統領域中的設計和開發哲學、思想文化體系、原則與經驗。你一定會有一種醍醐灌頂的感覺。《Unix網路編程卷1,套接字》這是一本看完你就明白網路編程的書。重要注意TCP、UDP,以及多路復用的系統調用select/poll/epoll的差別。《TCP/IP詳解 卷1:協議》- 這是一本看完後你就可以當網路黑客的書。了解乙太網的的運作原理,了解TCP/IP的協議,運作原理以及如何TCP的調優。實踐任務:理解什麼是阻塞(同步IO),非阻塞(非同步IO),多路復用(select, poll, epoll)的IO技術。寫一個網路聊天程序,有聊天伺服器和多個聊天客戶端(服務端用UDP對部分或所有的的聊天客戶端進Multicast或Broadcast)。寫一個簡易的HTTP伺服器。《Unix網路編程卷2,進程間通信》信號量,管道,共享內存,消息等各種IPC…… 這些技術好像有點老掉牙了,不過還是值得了解。實踐任務:主要實踐各種IPC進程序通信的方法。嘗試寫一個管道程序,父子進程通過管道交換數據。嘗試寫一個共享內存的程序,兩個進程通過共享內存交換一個C的結構體數組。學習《Windows核心編程》一書。把CreateProcess,Windows線程、線程調度、線程同步(Event, 信號量,互斥量)、非同步I/O,內存管理,DLL,這幾大塊搞精通。實踐任務: 使用CreateProcess啟動一個記事本或IE,並監控該程序的運行。把前面寫過的那個簡易的HTTP服務用線程池實現一下。寫一個DLL的鉤子程序監控指定窗口的關閉事件,或是記錄某個窗口的按鍵。有了多線程、多進程通信,TCP/IP,套接字,C++和設計模式的基本,你可以研究一下ACE了。使用ACE重寫上述的聊天程序和HTTP伺服器(帶線程池)實踐任務: 通過以上的所有知識,嘗試 寫一個服務端給客戶端傳大文件,要求把100M的帶寬用到80%以上。(注意,磁碟I/O和網路I/O可能會很有問題,想一想怎麼解決,另外,請注意網路傳輸最大單元MTU)了解BT下載的工作原理,用多進程的方式模擬BT下載的原理。3、系統架構負載均衡。HASH式的,純動態式的。(可以到Google學術里搜一些關於負載均衡的文章讀讀)多層分布式系統 – 客戶端服務結點層、計算結點層、數據cache層,數據層。J2EE是經典的多層結構。CDN系統– 就近訪問,內容邊緣化。P2P式系統,研究一下BT和電驢的演算法。比如:DHT演算法。伺服器備份,雙機備份系統(Live-Standby和Live-Live系統),兩台機器如何通過心跳監測對方?集群主結點備份。虛擬化技術,使用這個技術,可以把操作系統當應用程序一下切換或重新配置和部署。學習Thrift,二進制的高性能的通訊中間件,支持數據(對象)序列化和多種類型的RPC服務。學習Hadoop。Hadoop框架中最核心的設計就是:MapRece和HDFS。MapRece的思想是由Google的一篇論文所提及而被廣為流傳的,簡單的一句話解釋MapRece就是「任務的分解與結果的匯總」。HDFS是Hadoop分布式文件系統(Hadoop Distributed File System)的縮寫,為分布式計算存儲提供了底層支持。了解NoSQL資料庫(有人說可能是一個過渡炒作的技術),不過因為超大規模以及高並發的純動態型網站日漸成為主流,而SNS類網站在數據存取過程中有著實時性等剛性需求,這使得目前NoSQL資料庫慢慢成了人們所關注的焦點,並大有成為取代關系型資料庫而成為未來主流數據存儲模式的趨勢。當前NoSQL資料庫很多,大部分都是開源的,其中比較知名的有:MemcacheDB、Redis、Tokyo Cabinet(升級版為Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。寫了那麼多,回顧一下,覺得自己相當的有成就感。希望大家不要嚇著,我自己這十來年也在不斷地學習,今天我也在學習中,人生本來就是一個不斷學習和練級的過程。不過,一定有漏的,也有不對的,還希望大家補充和更正。 關鍵字: 程序員高級深入
Ⅶ java編程問題
class Vehicle {
private int wheels;
private float weight;
public Vehicle() {
// TODO Auto-generated constructor stub
}
public Vehicle(int w, int wt) {
wheels = w;
weight = wt;
}
public int getWheels() {
return wheels;
}
public void setWheels(int wheels) {
this.wheels = wheels;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
public String toString() {
return "widht=" + weight + ";wheels=" + wheels;
}
}
class Car extends Vehicle {
private int loader;
public Car() {
}
public Car(int l) {
loader =l;
}
public int getLoader() {
return loader;
}
public void setLoader(int loader) {
this.loader = loader;
}
public String toString() {
return super.toString() + ";loader="+loader;
}
}
class Truck {
private int payload;
public Truck() {
}
public Truck(int pay) {
payload = pay;
}
public int getPayload() {
return payload;
}
public void setPayload(int payload) {
this.payload = payload;
}
public String toString () {
return super.toString() + ";payload=" + payload;
}
}
Ⅷ 大數據開發工程師要學習哪些課程
1.大數據工程師工作中會做什麼?
集群運維:安裝、測試、運維各種大數據組件
數據開發:細分一點的話會有ETL工程師、數據倉庫工程師等
數據系統開發:偏重Web系統開發,比如報表系統、推薦系統等
這裡面有很多內容其實是十分重合的,下面大致聊一下每一塊內容大致需要學什麼,以及側重點。
2.集群運維
數據工程師,基本上是離不開集群搭建,比如hadoop、Spark、Kafka,不要指望有專門的運維幫你搞定,新組件的引入一般都要自己來動手的。
因此這就要求數據工程師了解各種大數據的組件。
由於要自己的安裝各種開源的組件,就要求數據工程師要具備的能力: Linux 。要對Linux比較熟悉,能各種自己折騰著玩。
由於現在的大數據生態系統基本上是 JVM系的,因此在語言上,就不要猶豫了,JVM系的Java和Scala基本上跑不掉,Java基本上要學的很深,Scala就看情況了。
3. ETL
ETL在大數據領域主要體現在各種數據流的處理。這一塊一方面體現在對一些組件的了解上,比如Sqoop、Flume、Kafka、Spark、MapRece;另一方面就是編程語言的需要,Java、Shell和Sql是基本功。
4.系統開發
我們大部分的價值最後都會由系統來體現,比如報表系統和推薦系統。因此就要求有一定的系統開發能力,最常用的就是 Java Web這一套了,當然Python也是挺方便的。
需要注意的是,一般數據開發跑不掉的就是各種提數據的需求,很多是臨時和定製的需求,這種情況下, Sql就跑不掉了,老老實實學一下Sql很必要。
如何入門?
前面提到了一些數據工程師會用到的技能樹,下面給一個入門的建議,完全個人意見。
1.了解行業情況
剛開始一定要了解清楚自己和行業的情況,很多人根本就分不清招聘信息中的大數據和數據挖掘的區別就說自己要轉行,其實是很不負責的。不要總是趕熱點,反正我就是經常被鄙視做什麼大數據開發太Low,做數據就要做數據挖掘,不然永遠都是水貨。
2.選擇學習途徑
如果真是清楚自己明確地想轉數據開發了,要考慮一下自己的時間和精力,能拿出來多少時間,而且在學習的時候最好有人能多指點下,不然太容易走彎路了。
在選擇具體的學習途徑時,要慎重一點,有幾個選擇:
自學
報班
找人指點
別的不說了,報班是可以考慮的,不要全指望報個輔導班就能帶你上天,但是可以靠他幫你梳理思路。如果有專業從事這一行的人多幫幫的話,是最好的。不一定是技術好,主要是可溝通性強。
3.學習路線
學習路線,下面是一個大致的建議:
第一階段
先具備一定的Linux和Java的基礎,不一定要特別深,先能玩起來,Linux的話能自己執行各種操作,Java能寫點小程序。這些事為搭建Hadoop環境做准備。
學習Hadoop,學會搭建單機版的Hadoop,然後是分布式的Hadoop,寫一些MR的程序。
接著學學Hadoop生態系統的其它大數據組件,比如Spark、Hive、Hbase,嘗試去搭建然後跑一些官網的Demo。
Linux、Java、各種組件都有一些基礎後,要有一些項目方面的實踐,這時候找一些成功案例,比如搜搜各種視頻教程中如何搞一個推薦系統,把自己學到的用起來。
第二階段
到這里是一個基本的階段了,大致對數據開發有一些了解了。接著要有一些有意思內容可以選學。
數據倉庫體系:如何搞數據分層,數據倉庫體系該如何建設,可以有一些大致的了解。
用戶畫像和特徵工程:這一部分越早了解越好。
一些系統的實現思路:比如調度系統、元數據系統、推薦系統這些系統如何實現。
第三階段
下面要有一些細分的領域需要深入進行,看工作和興趣來選擇一些來深入進行
分布式理論:比如Gossip、DHT、Paxo這些構成了各種分布式系統的底層協議和演算法,還是要學一下的。
數據挖掘演算法:演算法是要學的,但是不一定純理論,在分布式環境中實現演算法,本身就是一個大的挑戰。
各種系統的源碼學習:比如Hadoop、Spark、Kafka的源碼,想深入搞大數據,源碼跑不掉。
Ⅸ 電腦的專業術語有哪些
這方面的術語的確太多!你選修的這個應該是硬體方面的我先給這些吧 電腦硬體英文術語完全介紹 (顯示設備篇)(僅作積累)音頻
3DPA(3DPositionalAudio,3D定位音頻)
AAC(AdvancedAudioCompression,高級音頻壓縮)
AC(AcousticEdge,聲學邊緣)
AC(AudioCodec,音頻多媒體數字信號編解碼器)
AC-3(AudioCoding3,第三代音響編碼)
AC97(AudioCodec'97,多媒體數字信號解編碼器1997年標准)
ACIRC(AdvancedCrossInterleaveReed-SolomonCode,高級交叉插入里德所羅門代碼)
ADIP(ADdressInPre-groove,地址預刻)
AFC(Amplitude-frequencycharacteristic,振幅頻率特徵)
AMC(audio/modemcodec,音頻/數據機多媒體數字信號編解碼器)
APS(AudioProctionStudio,音頻生產工作室)
APX(AllPositioneXpansion全方位擴展)
ASIO(,音頻流輸入輸出介面)
ATRAC(,可適應轉換聲學解碼,MD專用數字聲音數據壓縮系統)
AUD_EXT(AudioExtension,音頻擴展)
AUX(AuxiliaryInput,輔助輸入介面)
CBR(ConstantBitRate,固定比特率)
CS(ChannelSeparation,聲道分離)
CMSS(CreativeMultiSpeakerSurround,創新多音箱環繞)
CPRM(,記錄媒體內容保護)
DAB(digitalaudiobroadcast,數字音頻廣播)
DBBS(DynamicBassBoostSystem,動態低音增強系統)
DCC(DigitalCompactCassette,數字盒式磁帶)
DDMA(DistributedDMA,分布式DMA)
DDSS(DolbyDigitalSurroundSound,杜比數字環繞聲)
DHT(DolbyHeadphoneTechnology,杜比耳機技術)
DLS(DownloadableSoundsLevel,可下載音色)
DLS-2(DownloadableSoundsLevel2,第二代可下載音色)
DS3D(DirectSound3DStreams)
DSD(DirectStreamDigital,直接數字信號流)
DSL(DownLoadableSample,可下載的取樣音色)
DSO(DynamicSound-stageOrganizer,動態聲音層組建)
DSP(DigitalSoundFieldProcessing,數字音場處理)
DTS(DigitalTheaterSystem,數字劇院系統)
DTT(DeskTopTheater,桌面劇院)
EAX(EnvironmentalAudioExtensions,環境音效擴展技術)
EFM(EighttoFourteenMolation,8位信號轉換為14位信號)
ESP(Electronic-ShockProtection,電子抗震系統)
ExtendedStereo(擴展式立體聲)
FM(FrequencyMolation,頻率調制)
FIR(finiteimpulseresponse,有限推進響應)
FPS(FourPointSurround,創新的四點環繞揚聲器系統)
FR(FrequenceResponse,頻率響應)
FSE(FrequencyShifterEffect,頻率轉換效果)
GM(GeneralMidi,普通MIDI)
HDA(high-,高效高清楚氣動)
Hi-fi(highfidelity,高精度設備)
HPF(High-PassFilter,高通濾波器)
HRTF(HeadRelatedTransferFunction,頭部關聯傳輸功能)
I3DL2(Interactive3DLevel2,第二級互動式3D音效)
IID(InterauralIntensityDifference,兩側聲音強度差別)
IIR(infiniteimpulseresponse,無限推進響應)
InteractiveAround-Sound(互動式環繞聲)
Interactive3DAudio(互動式3D音效)
ITD(InterauralTimeDifference,兩側聲音時間延遲差別)
LFE(LowFrequencySoundChannel,低頻聲音通道)
LP(LongPlay,長時間播放)
LPF(Low-PassFilter,低通濾波器)
MC(modemcodec,數據機多媒體數字信號編解碼器)
MDLP(MiniDiscLongPlay,長時間播放迷你光碟)
MFM(Magneticfieldmolation,磁場調制)
MIDI(,樂器數字介面)
NC(NoiseCanceling,降噪)
NDA:non-DWORD-aligned,非DWORD排列
NVH(Noise、Vibration、Harshness,雜訊、振動和刺耳聲)
QEM(QsoundEnvironmentalModeling,Qsound環境建模揚聲器組)
QMSS(QSoundMultiSpeakerSystem,Qsound多音箱系統)
RawPCM:RawPulseCodeMolated(元脈碼調制)
RMA:RealMediaArchitecture(實媒體架構)
RMAA(RightMarkAudioAnalyzer,公正標識音頻分析軟體)
RTSP:RealTimeStreamingProtocol(實時流協議)
SACD(SuperAudioCD,超級音樂CD)
SCMS(SerialCopyManagementSystem,連續復制管理系統,限制數字拷貝)
SDMI(SecureDigitalMusicInitiative,安全式數字音樂)
SNR(SignaltoNoiseRatio,信噪比)
S/PDIF(Sony/PhillipsDigitalInterface,索尼/飛利普數字介面)
SP(StreamProcessor,音頻流處理器)
SPU(SoundProcessorUnit,聲音處理器)
SPX(SoundProctionExperience,聲音生成體驗)
SPX(SoundProctioneXtensions,聲音生成擴展)
SRC(SamplingRateConvertor,采樣率轉換器,把48KHz轉為MD適用的44.1KHz)
SRS:SoundRetrievalSystem(聲音修復系統)
SurroundSound(環繞立體聲)
SuperIntelligentSoundASIC(超級智能音頻集成電路)
TAD(TelephoneAnsweringDevice,電話應答設備)
TC(TimeScaling,時間縮放)
TDMA(TransparentDMA,透明DMA)
THD+N(,總諧波失真加噪音)
TOC(TableOfContents,MD內容表,包括磁碟名稱、軌數、演奏時間)
TVA(TimeVariableAmplitude,可隨時間變化的音量)
TVF(TimeVariableFilter,可隨時間變化的濾波器)
UDAC-MB(-mediabase,通用分配存取控制媒體基準)
UTOC(UserTableofContents,可錄式MD內容表)
VBR(VariableBitRate,動態比特率)
WG(WaveGuide,波導合成)
WT(WaveTable,波表合成) RAM&ROM
ABB(AdvancedBootBlock,高級啟動塊)
ABP:AddressBitPermuting,地址位序列改變
ADT(AdvancedDRAMTechnology,先進DRAM技術聯盟)
AL(AdditiveLatency,附加反應時間)
ALDC(,適應無損數據壓縮)
ATC(AccessTimefromClock,時鍾存取時間)
ATP(ActivetoPrecharge,激活到預充電)
BEDO(BurstEnhancedData-OutRAM,突發型數據增強輸出內存)
BPA(BitPackingArchitecture,位封包架構)
AFCmedia(,反鐵磁性耦合介質)
BLP(BottomLeadedPackage,底部導向封裝)
BSRAM(,突發式管道同步靜態存儲器)
CAS(ColumnAddressStrobe,列地址控制器)
CCT(ClockCycleTime,時鍾周期)
CDRAM(CacheDRAM,附加緩存型DRAM)
CL(CASLatency,CAS反應時間)
CMR(ColossalMagnetoresistive,巨磁阻抗)
CPA(ClosePageAutoprecharge,接近頁自動預充電)
CSP(ChipSizePackage,晶元尺寸封裝)
CTR(CAStoRAS,列地址到行地址延遲時間)
DB:DeepBuffer(深度緩沖)
DD(DoubleSide,雙面內存)
DDBGA(DieDimensionBallGridArray,內核密度球狀矩陣排列)
DDR(DoubleDateRate,上下行雙數據率)
DDRSDRAM(DoubleDateRate,上下行雙數據率SDRAM)
DRCG(DirectRambusClockGenerator,直接RAMBUS時鍾發生器)
DIL(al-in-line)
DIVA(DataIntensiVeArchitecture,數據加強架構)
DIMM(DualIn-lineMemoryMoles,雙重內嵌式內存模塊)
DLL(Delay-LockedLoop,延時鎖定循環電路)
DQS(Bidirectionaldatastrobe,雙向數據濾波)
DRAM(DynamicRandomAccessMemory,動態隨機存儲器)
DRDRAM(DirectRAMBUSDRAM,直接內存匯流排DRAM)
DRSL(DirectRAMBUSSignalingLevel,直接RAMBUS信號級)
DRSL(,微分RAMBUS信號級)
DSM(Distributedsharedmemory,分布式共享內存)
ECC(ErrorCheckingandCorrection,錯誤檢查修正)
ED(Executiondriven,執行驅動)
EDO(EnhancedData-OutRAM,數據增強輸出內存)
EHSDRAM(EnhancedHighSpeedDRAM,增強型超高速內存)
ELDDR(EnhancedLatencyDDR,增強反應周期DDR內存)
EMS(EnhancedMemorySystem,增強內存系統)
EMS(ExpandedMemorySpecification,擴充內存規格)
EOL(EndofLife,最終完成產品)
EPROM(erasable,programmableROM,可擦寫可編程ROM)
EPOC(ElevatedPackageOverCSP,CSP架空封裝)
EPV(ExtendedVoltageProteciton,擴展電壓保護)
ESDRAM(EnhancedSDRAM,增強型SDRAM)
ESRAM(EnhancedSRAM,增強型SRAM)
EEPROM(,電擦寫可編程只讀存儲器)
FCRAM(FastCycleRAM,快周期隨機存儲器)
Ⅹ 什麼是p2p技術下載
以下是網路資料:
點對點技術 點對點技術(peer-to-peer, 簡稱P2P)又稱對等互聯網路技術,是一種網路新技術,依賴網路中參與者的計算能力和帶寬,而不是把依賴都聚集在較少的幾台伺服器上。P2P網路通常用於通過Ad Hoc連接來連接節點。這類網路可以用於多種用途,各種檔案分享軟體已經得到了廣泛的使用。P2P技術也被使用在類似VoIP等實時媒體業務的數據通信中。
純點對點網路沒有客戶端或伺服器的概念,只有平等的同級節點,同時對網路上的其它節點充當客戶端和伺服器。這種網路設計模型不同於客戶端-伺服器模型,在客戶端-伺服器模型中通信通常來往於一個中央伺服器。
有些網路(如Napster, OpenNAP, 或IRC @find)的一些功能(比如搜索)使用客戶端-伺服器結構,而使用P2P結構來實現另外一些功能。類似Gnutella 或Freenet的網路則使用純P2P結構來實現全部的任務。
歷史
P2P 架構體現了一個互連網技術的關鍵概念,這一概念被描述在1969年4月7日第一份RFC文檔「RFC1,主機軟體」中。而最近,在不用中心索引伺服器結構實現多媒體文件交換的背景下,這個概念已經變的非常普遍了。
純P2P:
節點同時作為客戶端和伺服器端。
沒有中心伺服器。
沒有中心路由器。
雜P2P:
有一個中心伺服器保存節點的信息並對請求這些信息的要求做出響應。
節點負責發布這些信息(因為中心伺服器並不保存文件),讓中心伺服器知道它們想共享什麼文件,讓需要它的節點下載其可共享的資源。
路由終端使用地址,通過被一組索引引用來取得絕對地址。
混合P2P:
同時含有純P2P和雜P2P的特點。
P2P網路的優勢
P2P網路的一個重要的目標就是讓所有的客戶端都能提供資源,包括帶寬,存儲空間和計算能力。因此,當有節點加入且對系統請求增多,整個系統的容量也增大。這是具有一組固定伺服器的C/S結構不能實現的,這種結構中客戶端的增加意味著所有用戶更慢的數據傳輸。
P2P網路的分布特性通過在多節點上復制數據,也增加了防故障的健壯性,並且在純P2P網路中,節點不需要依靠一個中心索引伺服器來發現數據。在後一種情況下,系統也不會出現單點崩潰。
當用P2P來描述Napster 網路時,對等協議被認為是重要的,但是,實際中,Napster 網路取得的成就是對等節點(就象網路的末枝)聯合一個中心索引來實現。這可以使它能快速並且高效的定位可用的內容。對等協議只是一種通用的方法來實現這一點。
應用
點對點技術有許多應用。共享包含各種格式音頻,視頻,數據等的文件是非常普遍的,實時數據(如IP電話通信)也可以使用P2P技術來傳送。
有些網路和通信渠道,象Napster,OpenNAP,和IRC @find,一方面使用了C/S結構來處理一些任務(如搜索功能),另一方面又同時使用P2P結構來處理其他任務。而有些網路,如Gnutella 和 Freenet ,使用P2P結構來處理所有的任務,有時被認為是真正的P2P網路。盡管Gnutella 也使用了目錄伺服器來方便節點得到其它節點的網路地址。
學術性P2P網路
最近,賓夕法尼亞州立大學的開發者,聯合了麻省理工學院開放知識行動,西蒙弗雷澤大學的研究人員,還有第二代互連網P2P工作組,正在開發一個P2P網路的學術性應用。這個項目稱為LionShare,基於第二代網路技術,更詳細地說是Gnutella模型。這個網路的主要目的是讓眾多不同學術機構的用戶能夠共享學術材料。LionShare網路使用雜P2P網路類型,混合了Gnutella分散的P2P網路和傳統的C/S網路。這個程序的用戶能夠上傳文件到一個伺服器上,不管用戶是否在線,都能夠持續的共享。這個網路也允許在比正常小得多的共享社區中使用。
這個網路與當前正在使用的其他P2P網路的主要不同是LionShare網路不允許匿名用戶。這樣做的目的是防止版權材料在網路上共享,這同時也避免了法律糾紛。另一個不同是對不同組有選擇性的共享個別的文件。用戶能個別選擇哪些用戶可以接收這一個文件或者這一組文件。
學術社區需要這種技術,因為有越來越多的多媒體文件應用在課堂上。越來越多的的教授使用多媒體文件,象音頻文件,視頻文件和幻燈片。把這些文件傳給學生是件困難的任務,而這如果用LionShare這類網路則容易的多。
法律方面
在美國法律中,「Betamax判決」的判例堅持復制「技術」不是本質非法的,如果它們有實質性非侵權用途。這個網際網路廣泛使用之前的決定被應用於大部分的數據網路,包括P2P網路,因為已得到認可的文件的傳播也是可以的。這些非侵犯的使用包括發放開放源代碼軟體,公共領域文件和不在版權范圍之內的作品。其他司法部門也可用類似的方式看待這個情況。
實際上,大多數在P2P網路上共享的文件是版權流行音樂和電影,包括各種格式(MP3,MPEG,RM 等)。在多數司法范圍中,共享這些復本是非法的。這讓很多觀察者,包括多數的媒體公司和一些P2P的倡導者,批評這種網路已經對現有的發行模式造成了巨大的威脅。試圖測量實際金錢損失的研究多少有些意義不明。雖然紙面上這些網路的存在而導致的大量損失,而實際上自從這些網路建成以來,實際的收入並沒有多大的變化。不管這種威脅是否存在,美國唱片協會和美國電影協會正花費大量的錢來試著游說立法者來建立新的法律。一些版權擁有者也向公司出錢希望幫助在法律上挑戰從事非法共享他們材料的用戶。
盡管有Betamax判決,P2P網路已經成為那些藝術家和版權許可組織的代表攻擊的靶子。這裡麵包括美國唱片協會和美國電影協會等行業組織。Napster 服務由於美國唱片協會的投訴而被迫關閉。在這個案例中,Napster故意地買賣這些並沒有從版權所有者那得到許可發行的音像文件。
隨著媒體公司打擊版權侵犯的行為擴大,這些網路也迅速不斷地作了調整,讓無論從技術上還是法律上都難於撤除。這導致真正犯法的用戶成為目標,因為雖然潛在的技術是合法的,但是用侵犯版權的方式來傳播的個人對它的濫用很明顯是非法的。
匿名P2P網路允許發布材料,無論合法不合法,在各種司法范圍內都很少或不承擔法律責任。很多人表示這將導致更多的非法材料更容易傳播,甚至(有些人指出)促進恐怖主義,要求在這些領域對其進行規范。而其他人則反對說,非法使用的潛在能力不能阻止這種技術作為合法目的的使用,無罪推定必須得以應用,象其他非P2P技術的匿名服務,如電子郵件,同樣有著相似的能力。
安全方面
許多P2P網路一直受到懷有各種目的的人的持續攻擊。例子包括:
中毒攻擊(提供內容與描述不同的文件)
拒絕服務攻擊(使網路運行非常慢甚至完全崩潰)
背叛攻擊(用戶或軟體使用網路卻沒有貢獻出自己的資源)
在數據中插入病毒(如,下載或傳遞的文件可能被感染了病毒或木馬)
P2P軟體本身的木馬(如,軟體可能含有間諜軟體)
過濾(網路運營商可能會試圖禁止傳遞來自P2P網路上的數據)
身份攻擊(如,跟蹤網路上用戶並且折磨或合法地攻擊他們)
垃圾信息(如在網路上發送未請求的信息--不一定是拒絕服務攻擊)
如果精心設計P2P網路,使用加密技術,大部分的攻擊都可以避免或控制,P2P網路安全事實上與拜占庭將軍問題有密切聯系。然而,當很多的節點試著破壞它時,幾乎任何網路也都會失效,而且許多協議會因用戶少而表現得很失敗。
計算技術展望
技術上,一個純P2P應用必須貫徹只有對等協議,沒有伺服器和客戶端的概念。但這樣的純P2P應用和網路是很少的,大部分稱為P2P的網路和應用實際上包含了或者依賴一些非對等單元,如DNS。同時,真正的應用也使用了多個協議,使節點可以同時或分時做客戶端,伺服器,和對等節點。完全分散的對等網路已經使用了很多年了,象Usenet(1979年)和FidoNet(1984年)這兩個例子。
很多P2P系統使用更強的對等點(稱為超級對等點)作為伺服器,那些客戶節點以星狀方式連接到一個超級對等點上。
在1990年代末期,為了促進對等網路應用的發展,SUN公司增加了一些類到java技術中,讓開發者能開發分散的實時聊天的applet和應用,這是在即時通信流行之前。這個工作現在有JXTA工程來繼續實現。
P2P系統和應用已經吸引了計算機科學研究的大量關注,一些卓越的研究計劃包括Chord計劃, ARPANET, the PAST storage utility, P-Grid(一個自發組織的新興覆蓋性網路),和CoopNet內容分發系統。
國內外現狀
國外的P2P研究現狀
國外開展P2P研究的學術團體主要包括P2P工作組(P2PWG) 、全球網格論壇(Global Grid Forum ,GGF) 。P2P工作組成立的主要目的是希望加速P2P計算基礎設施的建立和相應的標准化工作。P2PWG成立之後,對P2P計算中的術語進行了統一,也形成相關的草案,但是在標准化工作方面工作進展緩慢。目前P2PWG已經和GGF合並,由該論壇管理P2P計算相關的工作。GGF負責網格計算和P2P計算等相關的標准化工作。
從國外公司對P2P計算的支持力度來看,Microsoft公司、Sun公司和Intel公司投入較大。Microsoft公司成立了Pastry項目組,主要負責P2P計算技術的研究和開發工作。目前Microsoft公司已經發布了基於Pastry的軟體包SimPastry/ VisPastry。Rice大學也在Pastry的基礎之上發布了FreePastry軟體包。
在2000年8月,Intel公司宣布成立P2P工作組,正式開展P2P的研究。工作組成立以後,積極與應用開發商合作,開發P2P應用平台。2002年Intel發布了. Net基礎架構之上的Accelerator Kit (P2P加速工具包) 和P2P安全API軟體包,從而使得微軟. NET開發人員能夠迅速地建立P2P安全Web應用程序。
Sun公司以Java技術為背景,開展了JXTA項目。JXTA是基於Java的開源P2P平台,任何個人和組織均可以加入該項目。因此,該項目不僅吸引了大批P2P研究人員和開發人員,而且已經發布了基於JXTA的即時聊天軟體包。JXTA定義了一組核心業務:認證、資源發現和管理。在安全方面,JXTA加入了加密軟體包,允許使用該加密包進行數據加密,從而保證消息的隱私、可認證性和完整性。在JXTA核心之上,還定義了包括內容管理、信息搜索以及服務管理在內的各種其它可選JXTA服務。在核心服務和可選服務基礎上,用戶可以開發各種JXTA平台上的P2P應用。
國內的P2P研究現狀
• 北京大學—Maze
Maze 是北京大學網路實驗室開發的一個中心控制與對等連接相融合的對等計算文件共享系統,在結構上類似Napster,對等計算搜索方法類似於Gnutella。網路上的一台計算機,不論是在內網還是外網,可以通過安裝運行Maze的客戶端軟體自由加入和退出Maze系統。每個節點可以將自己的一個或多個目錄下的文件共享給系統的其他成員,也可以分享其他成員的資源。Maze支持基於關鍵字的資源檢索,也可以通過好友關系直接獲得。
• 清華大學—Granary
Granary是清華大學自主開發的對等計算存儲服務系統。它以對象格式存儲數據。另外,Granary設計了專門的結點信息收集演算法PeerWindow的結構化覆蓋網路路由協議Tourist。
• 華中科技大學—AnySee
AnySee是華中科大設計研發的視頻直播系統。它採用了一對多的服務模式,支持部分NAT和防火牆的穿越,提高了視頻直播系統的可擴展性;同時,它利用近播原則、分域調度的思想,使用Landmark路標演算法直接建樹的方式構建應用層上的組播樹,克服了ESM等一對多模式系統由聯接圖的構造和維護帶來的負載影響。
更詳細介紹見〔中國計算機學會通訊 Page 38-51 鄭緯民等 對等計算研究概論〕
企業研發產品
• 廣州數聯軟體技術有限公司-Poco
POCO 是中國最大的 P2P用戶分享平台 , 是有安全、流量控制力的,無中心伺服器的第三代 P2P 資源交換平台 , 也是世界范圍內少有的盈利的 P2P 平台。目前已經形成了 2600 萬海量用戶,平均在線 58.5 萬,在線峰值突破 71 萬,並且全部是寬頻用戶的用戶群。 成為中國地區第一的 P2P 分享平台。[a]
• 深圳市點石軟體有限公司-OP
OP-又稱為Openext Media Desktop,一個網路娛樂內容平台,Napster的後繼者,它可以最直接的方式找到您想要的音樂、影視、軟體、游戲、圖片、書籍以及各種文檔,隨時在線共享文件容量數以億計「十萬影視、百萬音樂、千萬圖片」。OP整合了Internet Explorer、Windows Media Player、RealOne Player和ACDSee ,是國內的網路娛樂內容平台。[a]
• 基於P2P的在線電視直播-PPLive
PPLive是一款用於互聯網上大規模視頻直播的共享軟體。它使用網狀模型,有效解決了當前網路視頻點播服務的帶寬和負載有限 問題,實現用戶越多,播放越流暢的特性,整 體服務質量大大提高!(2005年的超級女聲決賽期間,這款軟體非常的火爆,同時通過它看湖南衛視的有上萬觀眾)