Time of Update: 2018-12-07
前言學習 Java 程式設計,同樣需要方便易用的開發工具。Java 的開發工具很多,而且各有優缺點,初學者往往不知道有哪些常用的開發工具,或者由於面臨的選擇比較多而產生困惑。要建立 Java 開發環境,離不開 Sun 的 Java2 SDK。這個軟體包提供了 Java 編譯器、Java 解譯器,但沒有提供 Java 編輯器,因此需要使用者自己選擇一個方便易用的編輯器或整合開發工具。Eclipse 是一個開源的、可擴充的整合式開發環境(IDE),它不僅可用於 Java
Time of Update: 2018-12-07
Lua將其所有的全域變數儲存在一個常規的table中,這個table被稱為“環境”。它被儲存在全域變數_G中。 1. 全域變數聲明: Lua中的全域變數不需要聲明就可以使用。儘管很方便,但是一旦出現筆誤就會造成難以發現的錯誤。我們可以通過給_G表加元表的方式來保護全域變數的讀取和設定,這樣就能降低這種筆誤問題的發生幾率了。見如下範例程式碼: 1 --該table用於儲存所有已經聲明過的全域變數名 2 local declaredNames = {} 3 local mt =
Time of Update: 2018-12-07
Time of Update: 2018-12-07
時間過的真是很快,來部落格園已經整整一年了,不知道為什麼,感覺這一年過的非常充實,也許是因為這一年的項目都比較緊張的原因吧。但是這些對於我這樣一個在開發一線奮鬥10幾年的老兵而言,確實是已經司空見慣了。那這又是為什麼呢?正好趁著項目處於交付期,事情相對較少,能夠有更多的時間靜下來思考和總結一下。和往年相比,最大的變化主要來自於兩點,一是自己之前開發的服務容器架構在功能上已經日臻完善,然而隨著在實際項目中的應用,也逐漸暴露出一些問題,這主要體現在一些Bugs的修複,介面易用性的最佳化,
Time of Update: 2018-12-07
在開始後面的內容之前,還是需要先提前聲明一下,這並不是一篇吐槽的部落格,而僅僅是將自己的感觸和經驗分享出來。當然大家更不要認為是炫耀,畢竟已經工作了十幾年,確實是因為依舊保持著一顆熱愛編程的心,所以直到現在依然奮戰在軟體開發的一線。好了,還是讓我們儘快言歸正傳吧。
Time of Update: 2018-12-07
Nagle演算法的立意是良好的,避免網路中充塞小封包,提高網路的利用率。但是當Nagle演算法遇到delayed ACK悲劇就發生了。Delayed ACK的本意也是為了提高TCP效能,跟應答資料捎帶上ACK,同時避免糊塗視窗綜合症,也可以一個ack確認多個段來節省開銷。
Time of Update: 2018-12-07
前言socket選項主要是由setsockopt和getsockopt函數完成的,這裡主要是記錄我自己常用的一些socket選項。函數原型int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen);int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t
Time of Update: 2018-12-07
之前已經發了三篇有關Protocol Buffer的技術部落格,其中第一篇介紹了Protocol Buffer的語言規範,而後兩篇則分別基於C++和Java給出了一些相對比較實用而又簡單的樣本。由於近期工作壓力很大,因此對於是否繼續寫本篇部落格也確實讓我糾結了幾天。但每每想到善終如始則無敗事這句話時,最終的決定還是既然開始了,就要盡自己最大的努力去做,而不要留有絲毫的遺憾。
Time of Update: 2018-12-07
擁塞避免演算法是一種處理丟失分組的方法。該演算法假定由於分組受到損壞引起的丟失是非常少的(遠小於1%),因此分組丟失就意味著在源主機和目的主機之間的某處網路上發生了擁塞。有兩種分組丟失的指示:發生逾時和接收到重複的確認。如果使用逾時作為擁塞指示,則需要使用一個好的RTT演算法。擁塞避免演算法和慢啟動演算法是兩個目的不同、獨立的演算法。但是當擁塞發生時,我們希望降低分組進入網路的傳輸速率,於是可以調用慢啟動來作到這一點。在實際中這兩個演算法通常在一起實現。擁塞避免演算法和慢啟動演算法需要對每個串連
Time of Update: 2018-12-07
首先 dfs.replication這個參數是個client參數,即node level參數。需要在每台datanode上設定。其實預設為3個副本已經夠用了,設定太多也沒什麼用。一個檔案,上傳到hdfs上時指定的是幾個副本就是幾個。以後你修改了副本數,對已經上傳了的檔案也不會起作用。可以再上傳檔案的同時指定建立的副本數hadoop dfs -D dfs.replication=1 -put 70M logs/2可以通過命令來更改已經上傳的檔案的副本數:hadoop fs -setrep -R 3
Time of Update: 2018-12-07
慢啟動定義慢啟動,是傳輸控制通訊協定使用的一種阻塞控制機制。慢啟動也叫做指數增長期。慢啟動是指每次TCP接收視窗收到確認時都會增長。增加的大小就是已確認段的數目。這種情況一直保持到要麼沒有收到一些段,要麼視窗大小到達預先定義的閾值。如果發生丟失事件,TCP就認為這是網路阻塞,就會採取措施減輕網路擁擠。一旦發生丟失事件或者到達閾值,TCP就會進入線性增長階段。這時,每經過一個RTT視窗增長一個段。慢啟動解析 發送方一開始便向網路發送多個報文段,直至達到接收方通告的視窗大小為止。當發送方和接收方處於
Time of Update: 2018-12-07
引言C/C++下記憶體管理是讓幾乎每一個程式員頭疼的問題,分配足夠的記憶體、追蹤記憶體的分配、在不需要的時候釋放記憶體——這個任務相當複雜。而直接使用系統調用malloc/free、new/delete進行記憶體配置和釋放,有以下弊端:調用malloc/new,系統需要根據“最先匹配”、“最優匹配”或其他演算法在記憶體空閑塊表中尋找一塊空閑記憶體,調用free/delete,系統可能需要合并空閑記憶體塊,這些會產生額外開銷頻繁使用時會產生大量記憶體片段,從而降低程式運行效率容易造成記憶體流失記憶
Time of Update: 2018-12-07
NameNode在啟動的時候首先進入安全模式,如果 datanode 丟失的block達到一定的比例(1-dfs.safemode.threshold.pct),則系統會一直處於安全模式狀態即唯讀狀態。dfs.safemode.threshold.pct(預設值0.999f)表示HDFS啟動的時候,如果DataNode上報的block個數達到了元 資料
Time of Update: 2018-12-07
《記憶體池的實現(一)》中,介紹了使用記憶體池的原因,設計記憶體池應該考慮的問題,最後給出一個簡單的記憶體池實現例子。使用上一篇文章中介紹的記憶體池實現方案,要在一定的限定條件下,下面我們來看更通用的記憶體池實現——Apache伺服器的記憶體池實現。Apache伺服器的開發人員將代碼中可移植的部分整理出來,編輯成Apache可移植運行庫(Apacheportable
Time of Update: 2018-12-07
什麼是糊塗視窗綜合症當發送端應用進程產生資料很慢、或接收端應用進程處理接收緩衝區資料很慢,或二者兼而有之;就會使應用進程間傳送的報文段很小,特別是有效載荷很小。 極端情況下,有效載荷可能只有1個位元組;而傳輸開銷有40位元組(20位元組的IP頭+20位元組的TCP頭)
Time of Update: 2018-12-07
引言TCP通過讓接收方指明希望從發送方接收的資料位元組數(即視窗大小)來進行流量控制。如果視窗大小為 0會發生什麼情況呢?這將有效地阻止發送方傳送資料,直到視窗變為非0為止。TCP不對ACK報文段進行確認, TCP只確認那些包含有資料的ACK報文段。如果一個確認丟失了,則雙方就有可能因為等待對方而使串連終止:接收方等待接收資料(因為它已經向發送方通告了一個非 0的視窗),而發送方在等待允許它繼續發送資料的視窗更新。為防止這種死結情況的發生,發送方使用一個堅持定時器 (persist timer)
Time of Update: 2018-12-07
為什麼寫部落格?如果你也是一名博主,閱讀下文前不妨再思考下這個問題。下文翻譯自Gabriel Weinberg的博文《Why I
Time of Update: 2018-12-07
擁塞避免演算法的修改建議1 9 9 0年提出 [Jacobson 1990b]。在介紹修改之前,我們認識到在收到一個失序的報文段時,
Time of Update: 2018-12-07
引言TCP提供可靠的運輸層。它使用的方法之一就是確認從另一端收到的資料。但資料和確認都有可能會丟失。TCP通過在發送時設定一個定時器來解決這種問題。如果當定時器溢出時還沒有收到確認,它就重傳該資料。對任何實現而言,關鍵之處就在於逾時和重傳的策略,即怎樣決定逾時間隔和如何確定重傳的頻率。逾時與重傳的簡單例子首先觀察TCP所使用的重傳機制,我們將建立一個串連,發送一些分組來證明一切正常,然後拔掉電纜,發送更多的資料,再觀察TCP的行為。表示的是tcpdump的輸出結果(已經去掉了bsdi設定的服務類
Time of Update: 2018-12-07
Hadoop資源回收筒trash,預設是關閉的。 習慣了window的同學,建議最好還是把它提前開開,否則誤操作的時候,就欲哭無淚了1.修改conf/core-site.xml,增加<property> <name>fs.trash.interval</name> <value>1440</value> <description>Number of minutes between trash checkpoints. If