原创 大文本文件閱讀器設計

     我們項目中需要實現一個日誌查看控件,這本是一個很簡單的需求:寫一個通用的控件,將字符串綁定到RichTextBox, 如果要查看日誌,將日誌賦值給字符串即可。這個控件很簡單,在絕大多數情況下工作的都很好。但是最近經常有客戶報告說

原创 聊聊Windows程序中的"\r"和"\n"

     從學編程的第一天起,我們就接觸到了"\r"和"\n"。 "\n" 表示換行(LF, Line Feed),ASCII是0xA。 "\r"表示回車(CR, Carriage Return), ASCII是0xD。 換行是很容易理解

原创 利用mmap /dev/mem 讀寫Linux內存

使用 hexedit /dev/mem 可以顯示所有物理內存中的信息。 運用mmap將/dev/mem map出來,然後直接對其讀寫可以實現用戶空間的內核操作。 以下是我寫的一個sample #include<stdio.h> #inc

原创 關注分離

   這兩天在工作中經常會提到spearation of concern這個概念。我想在這篇博客裏講一下我對這個概念的理解。實際上關注分離並不是一個專屬於IT領域的概念。在各個領域我們都在不自覺的考慮如何將任務切割,分配。記得在我讀書的時

原创 再談關注分離, 基於版本控制的設計

    前段時間寫了一篇關於關注分離的博客。很巧的是這段時間我們需要在項目裏增加一個新特性,又提到了關注分離。背景是這樣的:我們有一個ConfigManager類,這個類的職責是讀取和寫入配置文件。當業務邏輯有配置文件讀寫要求時,直接調用

原创 linux內核hlist分析

在Linux內核中,hlist(哈希鏈表)使用非常廣泛。本文將對其數據結構和核心函數進行分析。 和hlist相關的數據結構有兩個(1)hlist_head (2)hlist_node struct hlist_head {

原创 無鎖,線程安全,延遲加載的單例實現(C#)

  單例(singleton)是非常常見,也非常有用的設計模式,當然了, 面試中也是經常會被問到的:)在幾乎所有的項目中都能看到它的身影。簡而言之,單例保證了一個自定義類型在整個程序的生命週期只被創建一次。要實現一個簡單的單例是也很容易的

原创 接口與抽象類

    接口(interface)與抽象類(abstract class)的區別是我在面試的時候幾乎必問的一個問題,可惜很少有面試者能回答得很好。大多數能說出它們的特性,比如不能實例化,是定義接口的用途等等。但是在實際工作環境中能把這兩個

原创 Linux內核spin_lock與spin_lock_irq分析

在Linux內核中何時使用spin_lock,何時使用spin_lock_irqsave很容易混淆。首先看一下代碼是如何實現的。 spin_lock的調用關係      spin_lock             |          

原创 libxml++庫 (1) 安裝及編譯

這幾天在學習libxml。 今天嘗試安裝並編譯了一下。 安裝       安裝很簡單。 兩條命令:                   (1)  sudo apt-get install libxml++2.6-dev        

原创 linux內核PID管理

        PID即進程描述符在linux kernel中的分配和管理比較複雜。 本文分析了其相關數據結構以及函數。 (代碼基於v3.0.3) 和PID相關的數據結構有 struct pid { atomic_t count; un

原创 libxml++庫 (2) Node, contentNode and Element 比較

libxml庫中Node, contentNode還有Element的概念很容易混淆。 做了好幾個sample test我纔算是區分清楚。xmlpp::Node是base class. xmlpp::contentNode和xmlpp::

原创 git 小技巧

(1)合併兩個commit並重新編輯commit description (a) git rebase -i HEAD~3 說明: 你想修改最近三次的提交說明,或者其中任意一次,你必須給git rebase -i 提供一個參數,指明

原创 利用iptables&Putty進行端口轉發

iptables -F iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth

原创 Net::Telnet庫使用

今天寫了一個通過telnet遠程控制APC電源遠程控制的腳本。調試Net::telnet庫費了點時間, 所以打算將其記錄下來。 sub operate_apc_server { my $param_ref = shift;