(為了能讓更多人看到,再發一次舊文,望見諒)
為了更方便地管理博文中涉及的各種代碼與工具資源,現在把這些資源遷移到 Google Code 中,有興趣者可前往下載。
C++
1、《高效能 Windows Socket 服務端與用戶端組件(原始碼及測試案例下載)》
《基於 IOCP 的通用非同步 Windows Socket TCP 高效能服務端組件的設計與實現》
《通用非同步 Windows Socket TCP 用戶端組件的設計與實現》
摘要:編寫 Windows Socket TCP 用戶端其實並不困難,Windows 提供了6種 I/O 通訊模型供大家選擇。但本座看過很多用戶端程式都把 Socket 通訊和商務邏輯混在一起,剪不斷理還亂。每個程式都 Copy / Parse 類似的代碼再進行修改,實在有點情何以堪。因此本座利用一些閑暇時光寫了一個基於 IOCP 的通用非同步 Windows Socket TCP 高效能服務端組件和一個通用非同步 Windows Socket TCP 用戶端組件供各位看官參詳參詳,希望能激發下大家的靈感。
資源:請訪問項目首頁 ^_*
2、《Windows C++ 應用程式通用日誌組件(組件及測試程式下載)》
摘要:編寫一個通用的日誌組件應該著重考慮三個方面:功能、可用性和效能。下面,本座詳細說明在設計日誌組件時對這些方面問題的考慮:
-
- 功能:本日誌組件的目的是滿足大多數應用程式記錄日誌的需求 —— 把日誌輸出到檔案或發送到應用程式中,並不提供一些複雜但不常用的功能
- 可用性:本日誌組件著重考慮了可用性,盡量讓使用者用起來覺得簡便、舒心
- 效能:效能是組件是否值得使用的硬指標,本組件從設計到編碼的過程都盡量考慮到效能最佳化
資源:http://ldcsaa.googlecode.com/files/VC_Logger.zip
3、《如何養成良好的 C++ 編程習慣(一)—— 記憶體管理》
摘要:說起 C/C++ 的記憶體管理似乎令人望而生畏,滿屏的 new / delete / malloc / free,OutPut 視窗無盡的 Memory Leak 警告,程式詭異的 0X00000004 指標異常,彷彿回到那一年我們一起哭過的日子,你 Hold 得住嗎?其實,現實並沒有你想的那麼糟糕。只要你付出一點點,花一點點心思,沒錯!就一點點而已 —— 用 C++ 類封裝記憶體訪問,就會解決你大部分的煩惱,讓你受益終身。以 Windows 程式為例,主要有以下幾種記憶體管理方式:
-
- 虛擬記憶體(Virtual Memory)
- 預設堆和私人堆(Process Heap & Private Heap)
- 記憶體對應檔(File Mapping)
- 進程堆棧(Heap,其實就是用 malloc() 或 預設的 new 操作符在 Process Heap 裡一小塊一小塊地割肉 ^_^)
- 棧(Stack,記憶體由調用者或被調用者自動管理)
資源:https://ldcsaa.googlecode.com/files/high_pfm_socket_server_and_client-2.0.1.zip (原始碼在 Common/Src 目錄中)
4、《實現 Win32 程式的訊息映射宏(類似 MFC )》
摘要:對於訊息映射宏,不用多說了,用過 MFC 的人都很清楚。但目前有不少程式由於各種原因並沒有使用 MFC,所以本帖討論一下如何在 Win32 程式中實作類別似MFC的訊息映射宏。其實 Windows 的標頭檔 “WindowsX.h”(注意:不是“Windows.h”) 中提供了一些有用的宏來協助我們實現訊息映射。本座是也基於這個標頭檔實現訊息映射。
資源:https://ldcsaa.googlecode.com/files/high_pfm_socket_server_and_client-2.0.1.zip (原始碼在 Common/Src/Win32Helper.h 檔案中)
5、《用宏實現 C++ Singleton 模式》
摘要:Singleton 設計模式應用非常廣泛,實現起來也很簡單,無非是私人化若干個建構函式,“operator =” 操作符,以及提供一個靜態建立和銷毀方法。但是對每個類都寫這些雷同的代碼是本座不能容忍的,因此,本座使用宏把整個 Singleton 模式封裝起來,無論是類的定義還是類的使用的極其簡單。
資源:https://ldcsaa.googlecode.com/files/high_pfm_socket_server_and_client-2.0.1.zip (原始碼在 Common/Src/Singleton.h 檔案中)
6、《C++ 封裝私人堆(Private Heap)》
摘要:Private Heap 是 Windows 提供的一種記憶體記憶體機制,對於那些需要頻繁分配和釋放動態記憶體的應用程式來說,Private Heap 是提高應用程式效能的一大法寶,使用它能降低 new / malloc 的調用排隊競爭以及記憶體空洞。
資源:https://ldcsaa.googlecode.com/files/high_pfm_socket_server_and_client-2.0.1.zip (原始碼在 Common/Src/PrivateHeap.h 檔案中)
7、《基於 crt debug 實現的 Windows 程式記憶體流失偵查工具》
摘要:Windows 程式記憶體流失檢測是一項十分重要的工作,基於 GUI 的應用程式通常在調試結束時也有記憶體流失報告,但這個報告的資訊不全面,不能定位到產生泄漏的具體行號。其實自己實現一個記憶體流失偵查工具是一件非常簡單的事情,但看過網上寫的很多例子,普遍存在兩種問題:
-
- 要麼考慮不周全,一種環境下能用,而在另外一種環境下卻不能很好工作,或者漏洞報告的輸出方式不合理。
- 要麼過於保守,例如:完全沒有必要在 _malloc_dbg() 和 _free_dbg() 的調用前後用 CriticalSection 進行保護(跟蹤一下多線程環境下 new 和 malloc 的代碼就會明白)。
資源:https://ldcsaa.googlecode.com/files/high_pfm_socket_server_and_client-2.0.1.zip (原始碼在 Common/Src/debug/win32_crtdbg.h 檔案中)
Java
1、《Portal-Basic Java Web 應用程式開發架構 v3.0.1 正式發布(源碼、樣本及文檔)》
摘要:Portal-Basic Java Web應用開發架構(簡稱 Portal-Basic)是一套功能完備的高效能Full-Stack Web應用開發架構,內建穩定高效的MVC基礎架構和DAO架構(已內建Hibernate、MyBatis和JDBC支援),整合 Action攔截、Form Bean / Dao Bean / Spring Bean裝配、國際化、檔案上傳下載和緩衝等基礎Web應用組件,提供高度靈活的純 Jsp/Servlet API 編程模型,完美整合 Spring,支援Action Convention“零配置”,能快速開發傳統風格和RESTful風格的Web應用程式,文檔和代碼清晰完善,非常容易學習。
資源:請訪問項目首頁 ^_*
2、《用 Java 實現的日誌切割清理工具(原始碼下載)》
摘要:對於伺服器的日常維護來說,日誌清理是非常重要的事情,如果殘留日誌過多則嚴重浪費磁碟空間同時影響服務的效能。如果用手工方式進行清理,會花費太多時間,並且很多時候難以滿足實際要求。例如:如何在每個星期六淩晨3點把超過2G大的記錄檔進行切割,保留最新的100M日誌記錄?網上沒有發現能滿足本座要求的日誌切割工具,因此花了一些閑暇時間自己寫了一個。由於要在多個平台上使用,為了方便採用 Java 實現。本工具命名為 LogCutter,主要有以下特點:
-
- 支援 Linux、Mac 和 Windows 等所有常見作業系統平台
- 支援命令列互動式運行
- 支援後台非互動式運行(Linux/MAC 下使用 daemon 進程實現,Windows 用系統 Service 實現)
- 支援兩種日誌清理方式(刪除記錄檔或切割記錄檔)
- 支援對 GB18030、UTF-8、UTF-16LE、UTF-16BE 等常用記錄檔類型進行切割(不會發生切掉半個字元的情況)
- 高度可配置(程式執行循環、要刪除的記錄檔到期時間、要切割的記錄檔閥值和保留大小等均可配置
資源:http://ldcsaa.googlecode.com/files/LogCutter.zip
3、《通用 Java 檔案上傳和下載組件的設計與實現》
摘要:檔案上傳和下載是 Web 應用程式中的一個常見功能,相信各位或多或少都曾寫過這方面相關的代碼。但本座看過不少人在實現上傳或下載功能時總是不知不覺間與程式的商務邏輯糾纏在一起,因此,當其他地方要用到這些功能時則無可避免地 Copy / Pase,然後再進行修改。這樣醜陋不堪的做法導致非常容易出錯不說,更大的問題是嚴重浪費時間不斷做重複類似的工作,這是本座絕不能容忍的。哎,人生苦短啊,浪費時間在這些重複工作身上實在是不值得,何不把這些時間省出來打幾盤羅馬或者踢一場球?為此,本座利用一些閑暇之時光編寫了一個通用的檔案上傳和檔案下載組件,實現方法純粹是基於 JSP,沒有太高的技術難度,總之老少鹹宜 ^_^。現把設計的思路和實現的方法向各位娓娓道來,希望能起到拋磚引玉的效果,激發大家的創造性思維。
資源:http://code.google.com/p/portal-basic/downloads/list (作為 Portal-Basic 第一部分,代碼在 com.bruce.util.http 包中)
4、《深度剖析:Java POJO Bean 對象與 Web Form 表單的自動裝配》
摘要:時下很多 Web 架構 都實現了 Form 表單域與 Java 對象屬性的自動裝配功能,該功能確實非常有用,試想如果沒這功能則勢必到處沖積著 request.getParameter() 系列方法與類型轉換方法的調用。重複代碼量大,容易出錯,同時又不美觀,影響市容。現在的問題是,這些架構通過什麼方法實現自動裝配的?如果不用這些架構我們自己如何去實現呢?尤其對於那些純 JSP/Servlet 應用,要是擁有自動裝配功能該多好啊!本座深知各位之期盼,決定把自動裝配的原理和實現方法娓娓道來。
資源:http://code.google.com/p/portal-basic/downloads/list (作為 Portal-Basic 第一部分,代碼在 com.bruce.util 包中)
5、《Linux 安裝 MySQL / MySQL 主從備份》
資源:http://ldcsaa.googlecode.com/files/services.zip
CodeProject