Time of Update: 2018-12-03
作者:一雨田(http://blog.csdn.net/dylgsy/)。本文可隨便轉貼,但請保留此資訊 設計模式究竟是什嗎?其實設計模式也就是一些寫代碼的方式,主要是針對物件導向的。設計模式通常應用在設計階段,分析階段已經對系統分層,然後也對每個層都提取了一些類。這個時候,如何組織和使用這些類就是我們的設計模式要研究的問題了。對於我們程式員來說,千言萬語抵不過一句簡單的代碼。下面讓我們看看實現一些設計模式的代碼://////////////////////////////////
Time of Update: 2018-12-03
歡迎轉載,請註明出處。[Flyweight模式] 官方描述:意圖 運用共用技術有效地支援大量細粒度的對象。適用性 1、一個應用程式使用了大量的對象。 2、完全由於使用大量的對象,造成很大的儲存開銷。 3、對象的大多數狀態都可變為外部狀態。 4、如果刪除對象的外部狀態,那麼可以用相對較少的共用對象取代很多組對象。 5、應用程式不依賴於對象標識。由於Flyweight
Time of Update: 2018-12-03
這幾天研究了一下lua,主要關注的是lua和vc之間的整合,把代碼都寫好放在VC宿主程式裡,然後在lua裡調用宿主程式的這些代碼(或者叫介面、組件,隨便你怎麼叫),希望能用指令碼來控制主程式的行為。這實際上也是一種把業務分離,用指令碼控制的架構,可能有些人把這種指令碼叫做業務引擎,工作流程等。 為什麼選擇lua?因為它是一個能和C/C++結合得很緊的指令碼語言,而我們的程式是用VC++
Time of Update: 2018-12-03
if-else,switch-case 是判斷邏輯的語句,只要我們需要分支,就可能要用到這種語句,在 C 的編程風格中,更是動則需要這種判斷語句,問題是這種判斷語句如果多了,就會毀壞代碼的可讀性和維護性,增加了代碼的“臭味”。那現在的物件導向編程時代,我們是否有些方法來代替呢?嗯,是有的,C++語言提供的多態、模版等特性就非常適合於編寫代替 if-else、switch-case 的代碼。我們舉一個簡單的例子來說明。一個事件的檢查函數 CheckEvent(int nEvent)
Time of Update: 2018-12-03
眾所皆知,完成連接埠是在WINDOWS平台下效率最高,擴充性最好的IO模型,特別針對於WINSOCK的海量串連時,更能顯示出其威力。其實建立一個完成連接埠的伺服器也很簡單,只要注意幾個函數,瞭解一下關鍵的步驟也就行了。這是篇完成連接埠入門級的文章,分為以下幾步來說明完成連接埠: 函數 常見問題以及解答 步驟 常式
Time of Update: 2018-12-03
SOCKET有兩種模式——阻塞和非阻塞。如果使用了阻塞,在某個時間點如果出現了網路問題,一邊調用recv接收不到資料的時候,那就會導致程式掛在那裡!對於這個問題有兩種解決的方法:一是保證使用的環境永遠不會出現這種情況,二是使用多線程(就算出現了阻塞的情況也就是線程掛了,主線程還是生龍活虎的)。如果使用非阻塞的SOCKET,我們需要不斷的去輪詢看recv/send函數是否成功,如果不成功,我們採取等待或者是其他的策略,這種輪詢的做法對任何程式來說都是不好的(沒效率,除非萬不得已)。試想一下,判斷什
Time of Update: 2018-12-03
1xx = 通知性應答100 正在嘗試180 正在撥打181 正被轉接182 正在排隊183 通話進展 2xx = 成功應答200 OK202 被接受:用於轉介 3xx = 轉接應答300 多項選擇301 被永久遷移302 被暫時遷移305 使用Proxy 伺服器380 替代服務 4xx = 呼叫失敗400 呼叫不當401 未經授權:只供登錄授權單位使用,Proxy 伺服器應使用Proxy 伺服器授權407402 要求付費(預訂為將來使用)403 被禁止的404 未發現:未發現使用者405
Time of Update: 2018-12-03
Chrome MessageLoop類分析(轉)Windows程式是基於訊息的,不管其封裝形式如何,最後都要包含如下代碼MSG msg;while(GetMesssage(&msg)){TranslateMessage(&msg);DispatchMessage(&msg); }大部分的工作都是在這個while迴圈裡完成。
Time of Update: 2018-12-03
多線程編程是非常複雜的,Chrome的多執行緒有很多值得借鑒的地方。這篇文章是Chromium項目中Threading的設計和說明文檔,簡單翻譯和注釋了一下,以協助理解。 簡單總結就是,不要啟動太多線程而應該使用專用的公用線程,代碼一定要搞清楚運行在哪個線程上,要有一個簡單的方式線上程之間進行通訊。 原文地址 http://dev.chromium.org/developers/design-documents/threading Chrome通過多線程來避免IO延遲阻塞而導致UI響應遲鈍。
Time of Update: 2018-12-03
選擇排序是一種以重複選擇為思想的排序演算法.其中直接選擇排序是最簡單的一種.直接選擇排序:演算法: 假設有一個A[n]的數組,首先找到最小的元素,將其儲存在A[1]中,然後找到剩下的n - 1個元素中的最小元素,放在A[2]中,重複此過程直到找到第二大的元素.代碼: #include <stdio.h>const int MAX = 10;void selectionSort(int *A)...{ int i, j, k, temp; for(i = 0;
Time of Update: 2018-12-03
要討論堆排序,首先就要簡單的討論一下堆這種資料結構. 堆排序所用到的二元堆積可以用數組表示出來,而且它可以被看作是一棵完全二叉樹.出了樹的最後一層,其它層應當是被填滿的. 每個節點除了最後一層的葉子節點,從不同的角度觀察都具備了不同的角色.假設有一個節點i,我們應當注意它產生的三個不同的角色. Parent(i) = i / 2; LeftChild(2i); RightChild(2i + 1); 堆結構應當滿足的性質是:
Time of Update: 2018-12-03
一、weka中圖形介面使用Libsvm的方法 1、在http://www.cs.iastate.edu/~yasser/wlsvm/上下載wlsvm.zip的壓縮包,解壓後將WLSVM \ lib 檔案夾下的libsvm.jar 和wlsvm.jar 兩個檔案放到weka的安裝目錄下。 2、在weka的安裝目錄下開啟runweka.ini這個檔案,把cmd_default=javaw -Xmx#maxheap# -classpath
Time of Update: 2018-12-03
如果一個排序演算法,每次只把諸項目移動一個位置,則它的平均已耗用時間至少要和n2成比例.因為在這個排序演算法啟動並執行過程當中,每個記錄平均都必須遍曆n / 3個位置,因此如果要對直接插入排序進行有效,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動. 希爾排序也是一種插入排序,它是在直接插入的基礎上改進而來的.它也可以叫做縮小增量排序.
Time of Update: 2018-12-03
描述:有一個像這樣的數字三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5從頂點開始,每個數字向下層走只能有左下和右下兩個方向,求出到達最後一行時的最大路徑之和.演算法和思路:設三角形的行數為level (level = (sqrt(1 + 8 * LENGTH) - 1) / 2),可以採用順推的方法,先求出第二行到第一行的最大路徑和,然後再依次的求出第3,4,.......n -
Time of Update: 2018-12-03
Socket在阻塞模式下的資訊收發和檔案接收概述:收發資料是網路編程的主題,在通訊端上收發資料我們可以使用send和recv,當然還有Winsock2的WSASend和WSARecv。我們這裡只討論send和recv。通訊端可以工作在阻塞態和非阻塞態,,阻塞態就是函數調用會停住,非阻塞態就是函數調用會立刻返回,待到後面的某個時間點在去取得結果。我們這裡先討論阻塞態。收發資訊就是在Socket上收發二進位流。而收發檔案實際上也就是收發資訊,只是多了開啟檔案,把檔案資料讀成二進位流傳到SOCKET
Time of Update: 2018-12-03
描述:給出n個整數(亦正亦負)組成的序列a[1],a[2],a[3],…,a[n],求該序列中a[i]+a[i+1]+…+a[j]的子段和的最大值。當最大子段和為負數時,規定此數列的最大子段和為0.演算法和思路:依據上面的描述,所求的點i最大路徑和c[i]應該為:Max{a[i], c[i - 1] +
Time of Update: 2018-12-03
王爽老師的《組合語言》是很好的一本彙編書,裡面用通俗的例子講清楚了很多讓彙編初學者一直困惑的痛點。比如寄存器分段定址、各種寄存器的作用等等。第八章是這本書的一個總結性的章節,後面也給出了一道比較綜合的題目,完成這道題是對之前學習的檢驗,所以要繼續往下學習,這道題是必須完成的。經過半天時間的編程,本人也完成了這道綜合的題目,在寫代碼的過程中,也搜尋過一些參考的代碼,但大多數網上的資料只是給出了代碼,沒有分析。所以我這裡順便給出一個分析的思路,是對自己思路的總結,也希望能幫到其他一些要完成這道題目
Time of Update: 2018-12-03
問題是這樣的,在自己的一個程式裡,需要根據接收到的命令(此命令是一個字串)來執行相應的函數。類似的情況可能有:1、SOCKET 程式:程式可能要根據對方傳來的命令來執行相應的函數。2、指令碼解析程式:在一個程式中根據讀入的命令串來執行相應的函數。3、類似WINDOWS的訊息系統,一條訊息對應一個函數。反正這種的應用很多,學會這種設計手法是非常有協助的,因為它可以幫我們輕鬆的添加新的命令。這種手法也很象MFC
Time of Update: 2018-12-03
三態門,是指邏輯門的輸出除有高、低電平兩種狀態外,還有第三種狀態——高阻狀態的門電路。高阻態相當於隔斷狀態(電阻很大,相當於開路)。 三態門都有一個EN控制使能端,來控制門電路的通斷。 可以具備這三種狀態的器件就叫做三態(門,匯流排,......). 電腦裡面用 1和0表示是,非兩種邏輯,但是,有時候,這是不夠的, 比如說,他不夠富有,但是他也不一定窮啊;她不漂亮,但也不一定醜啊,處於這兩個極端的中間,就用那個既不是+ 也不是―的中間態表示,叫做高阻態。
Time of Update: 2018-12-03
STM32中有多達8個定時器,其中TIM1和TIM8是能夠產生三對PWM互補輸出的進階定時器,常用於三相電機的驅動,它們的時鐘由APB2的輸出產生。其它6個為普通定時器,時鐘由APB1的輸出產生。是STM32參考手冊上時鐘分配圖中,有關定時器時鐘部分的:可以看出,定時器的時鐘不是直接來自APB1或APB2,而是來自於輸入為APB1或APB2的一個倍頻器,圖中的藍色部分。下面以定時器2~7的時鐘說明這個倍頻器的作用:當APB1的預分頻係數為1時,這個倍頻器不起作用,定時器的時鐘頻率等於APB1的頻