Time of Update: 2018-12-07
訪問者模式(Visitor Pattern)是GoF提出的23種設計模式中的一種,屬於行為模式。據《大話設計模式》中說算是最複雜也是最難以理解的一種模式了。定義(源於GoF《Design Pattern》):表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。從定義可以看出結構對象是使用訪問者模式必備條件,而且這個結構對象必須存在遍曆自身各個對象的方法。這便類似於Java語言當中的collection概念了。涉及角色 :1.Visitor
Time of Update: 2018-12-07
從設計模式的類型上來說,簡單原廠模式是屬於建立型模式,又叫做靜態Factory 方法(Static Factory
Time of Update: 2018-12-07
awk 數組執行個體awk的數組,一種關聯陣列(Associative Arrays),下標可以是數字和字串。因無需對數組名和元素提前聲明,也無需指定元素個數 ,所以awk的數組使用非常靈活。首先介紹下幾個awk數組相關的知識點:<1>建立數組array[index] = value :數組名array,下標index以及相應的值value。<2>讀取數組值{ for (item in array) print array[item]} # 輸出的順序是隨機的{for(
Time of Update: 2018-12-07
一周的時間過的好快,感覺好像轉眼間就過去了。不過現在過的生活還是比較充實的。上班、學習、遊戲、小說、吃飯、睡覺,哈,這就是我的一天。雖然很平淡,但我個人認為還是挺有意思的。 人生不會一直有變幻,一些異常現象只是偶爾才會出現,有時開心,有時難過。但更多的就是平淡了,按部就班的過好每一天,用心去感覺每天的收穫。現在的我,漸漸的喜歡上了平淡。小說主角都是那麼牛,但我看到的是,他們同樣付出了很多。數之不盡的麻煩,親人朋友的死去,種種都不是一般人可以承受的。也許人生要活的更精彩,也需要付出很多,很多。 我
Time of Update: 2018-12-07
Swap基本原理眾所周知,現代作業系統都實現了“虛擬記憶體”這一技術,不但在功能上突破了實體記憶體的限制,使程式可以操縱大於實際實體記憶體的空間,更重要的是,“虛擬記憶體”是隔離每個進程的安全保護網,使每個進程都不受其它程式的幹擾。Swap空間的作用可簡單描述為:當系統的實體記憶體不夠用的時候,就需要將實體記憶體中的一部分空間釋放出來,以供當前啟動並執行程式使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程式,這些被釋放的空間被臨時儲存到Swap空間中,等到那些程式要運行時,再從Swap
Time of Update: 2018-12-07
1、一般來說,一個連接埠釋放後會等待兩分鐘之後才能再被使用,SO_REUSEADDR是讓連接埠釋放後立即就可以被再次使用。 SO_REUSEADDR用於對TCP通訊端處於TIME_WAIT狀態下的socket,才可以重複綁定使用。server程式總是應該在調用bind()之前設定SO_REUSEADDR通訊端選項。TCP,先調用close()的一方會進入TIME_WAIT狀態2、SO_REUSEADDR和SO_REUSEPORTSO_REUSEADDR提供如下四個功能: SO_REU
Time of Update: 2018-12-07
大概很多人聽說過黑豹樂隊,卻不知道第一任主唱是誰?現在被大家熟悉的很多黑豹經典就是出自他的筆下,他那高亢激昂的嗓音震撼了多少年輕的心扉;你可能會說,他不是王菲的前夫嗎?是的!但最好別這樣稱呼,因為王菲追他的時候王菲在娛樂圈都嘛還不是呢,那個時候的竇唯已經帶著他的搖滾在娛樂圈乃至華人界轟動已久了;更有人說,他不是前段時間得了精神病去報社門口燒車的人嗎?是的!媒體的扭曲導致了他的憤怒,這僅僅是一個正常人的舉措。是搖滾讓大家知道了竇唯,是王菲讓大家熟悉了竇唯,是燒車,讓大家瞭解了竇唯!
Time of Update: 2018-12-07
抽象原廠模式是所有形態的原廠模式中最為抽象和最具一般性的一種形態。抽象原廠模式是指當有多個抽象角色時,使用的一種原廠模式。抽象原廠模式可以向用戶端提供一個介面,使用戶端在不必指定產品的具體的情況下,建立多個產品族中的產品對象。根據LSP原則,任何接受父類型的地方,都應當能夠接受子類型。因此,實際上系統所需要的,僅僅是類型與這些抽象產品角色相同的一些執行個體,而不是這些抽象產品的執行個體。換言之,也就是這些抽象產品的具體子類的執行個體。工廠類負責建立抽象產品的具體子類的執行個體。定義為建立一組相關
Time of Update: 2018-12-07
在進行UDP編程的時候,我們最容易想到的問題就是,一次發送多少bytes好? 當然,這個沒有唯一答案,相對於不同的系統,不同的要求,其得到的答案是不一樣的,我這裡僅對像ICQ一類的發送聊天訊息的情況作分析,對於其他情況,你或許也能得到一點協助: 首先,我們知道,TCP/IP通常被認為是一個四層協議系統,包括鏈路層,網路層,運輸層,應用程式層. UDP屬於運輸層,下面我們由下至上一步一步來看:
Time of Update: 2018-12-07
time簡介time命令 用於 列印出一條命令或一個程式的執行時間time 命令以秒為單位將一條命令執行期間所用的時間、系統時間和 time 命令的執行時間列印在標準錯誤中。用法:time [ -p ] Command [ Argument ... ]舉例:想知道 列舉home檔案夾這一命令 花費的時間:time ls /home想知道 將檔案複製到某一檔案夾 花費的時間:time cp /home/***/h /home/***/Documents想知道 一個指令碼啟動並執行時間:time .
Time of Update: 2018-12-07
調試core檔案當獲得了core檔案以後,就可以利用命令gdb進行尋找,參數一是應用程式的名稱,參數二是core檔案。也可以用-c來指定core檔案。如: gdb [paremeter] app [paremeter] /app.core然後輸入bt(backtrace)或者where找到錯誤發生的位置和相應的堆棧資訊。就可知道發生錯誤時的函數調用關係,然後可以使用up或者down查看上一條和下一條具體詳細資料。這樣便能對問題進行大概定位,然後看原始碼,進行分析。此外,還可以用 f 堆棧號
Time of Update: 2018-12-07
定義將一個複雜物件的構造與它的表示分離,使同樣的構建過程可以建立不同的表示,這樣的設計模式被稱為建造者模式。實用範圍1 當建立複雜物件的演算法應該獨立於該對象的組成部分以及它們的裝配方式時。2 當構造過程必須允許被構造的對象有不同表示時。角色在這樣的設計模式中,有以下幾個角色:1 builder:為建立一個產品對象的各個組件指定抽象介面。2 ConcreteBuilder:實現Builder的介面以構造和裝配該產品的各個組件,定義並明確它所建立的表示,並
Time of Update: 2018-12-07
已經記不清楚有多久沒寫日誌了,1年,還是兩年?今天心血來潮,把以前的日誌全部刪掉,重新開放空間。這麼好的一個地方,不使用確實很浪費^_^在這裡將會刻下一個全新的我,我也有夢想了!這一次不知道能堅持多久,不管了,先寫著再說。以前喜歡的歌曲串連也全都失效了,那就都消失吧。從今天起,我要收集好多好東東,放在我這個網路之家。 恩,第一篇也就這樣了,新生活 Post
Time of Update: 2018-12-07
expr命令一般用於整數值,但也可用於字串。一般格式為:expr argument operator argument① 用空格隔開每個項;② 用 \ (反斜線) 放在 shell 特殊字元前面;③ 對包含空格和其他特殊字元的字串要用引號括起來1、用於數字$expr 10 + 10$expr 20 \* 22、用於字串(1)、計算字串長度> expr length "this is a test" //output : 14(2)、抓取字串> expr substr "this
Time of Update: 2018-12-07
讀寫鎖
Time of Update: 2018-12-07
1、偽終端這個術語暗示對於一個應用程式而言,它看上去像一個終端,但實際上應用程式被欺騙了。從核心角度看,偽終端看起來像一個雙向管道。而事實上Solaris的偽終端就是用STREAMS構建的。/dev/ptyAX -- 偽終端Pseudo Terminal的主裝置/dev/ttyAx -- 偽終端的從裝置/dev/pts/n --
Time of Update: 2018-12-07
查看記憶體使用量情況1.top“2 users”為當前登入到系統的使用者,更確切的說是登入到使用者的終端數 -- 同一個使用者同一時間對系統多個終端的串連將被視為多個使用者串連到系統,這裡的使用者數也將表現為終端的數目;“load
Time of Update: 2018-12-07
引言 一直以來都沒有寫過一篇關於概念性的文章,因為我覺得這些概念性的東西書本上都有並且說的也很詳細寫來也無用,今天突發奇想想寫 一寫,下面就和大家討論一下虛基類、虛函數與純虛函數,一看名字就讓人很容易覺得混亂。不過不要緊待看完本文後你就會理解了。本文 虛基類
Time of Update: 2018-12-07
VIRT:1、進程“需要的”虛擬記憶體大小,包括進程使用的庫、代碼、資料,以及malloc、new分配的堆空間和分配的棧空間等;2、假如進程新申請10MB的記憶體,但實際只使用了1MB,那麼它會增長10MB,而不是實際的1MB使用量。3、VIRT = SWAP + RESRES:1、進程當前使用的記憶體大小,包括使用中的malloc、new分配的堆空間和分配的棧空間,但不包括swap out量;2、包含其他進程的共用;3、如果申請10MB的記憶體,實際使用1MB,它只增長1MB,與VIRT相反;
Time of Update: 2018-12-07
1、基於概念