原创 char*做map的key使用時的問題
今天在工作中使用到map時,map中用char*字符串做key,後面通過key做find操作,發現找不到之前插入的元素。通過網上搜索,得出結論,find時,默認使用== 進行判斷,char*只是指針,如果兩個字符串值相同,
原创 RabbitMQ官網教程3——發佈訂閱
前面我們創建了工作隊列,工作隊列中每個任務只分發給一個worker。現在我們要把一個消息分發給多個消費者,這種模式就是發佈訂閱。爲解釋這種模式,我們將構建一個簡單的日誌系統,它包括兩個程序——一個提交日誌,另一個接收並打印
原创 多線程編程-條件變量
http://blog.chinaunix.net/uid-21411227-id-1826890.html 1.引言: 條件變量是一種同步機制,允許線程掛起,直到共享數據上的某些條件得到滿足。條件變量上的基本操作有:觸發條件(當條件變爲
原创 如何定位CPU佔用過高問題
程序運行後出現CPU佔用過高,一般是代碼有死循環等。top命令可以查看CPU使用情況,找到問題進程。 對CPU使用過高的進程的所有線程進行排序 ps H -e -o pid,tid,pcpu,cmd --sort=pcpu | grep
原创 linux環境下的內存泄漏檢查
Linux下的mtrace工具可以幫助我們檢查程序中是否有內存泄漏。GNU擴展函數mtrace會爲內存分配函數(malloc, realloc, memalign, free等)註冊hook,記錄malloc/free信息
原创 最長公共子串問題
程序員代碼面試指南:最長公共子串問題 動態規劃:dp[M][N]矩陣,d[i][j]表示必須以str1[i]和str2[j]爲公共子串的最後一個字符時,公共子串的長度。 1. 第一列,如果str1[i]==str2[0],則dp[i][0
原创 最長公共子序列問題
程序員代碼面試指南: 給定兩個字符串str1和str2,返回最長公共子序列,存在多個時返回任意一個即可。 動態規劃: str1長度設爲M,str2長度設爲N,構建dp[M][N]。d[i][j]表示str1
原创 RabbitMQ官網教程4——路由
前面的章節我們創建了一個簡單的日誌系統,可以把消息廣播到許多接收者。本節我們將增加一個特性——只訂閱一部分消息。比如只把錯誤日誌輸出到文件,同時把所有日誌輸出到屏幕。 綁定 前面的例子裏我們已經創建過綁定
原创 實現一個getMin功能的棧
題目:實現一個特殊的棧,在實現棧基本功能的基礎上,再實現返回棧中最小元素的操作。要求pop、push、getMin時間複雜度都是O(1),設
原创 RabbitMQ官網教程2——工作隊列
第一節中我們實現了簡單的發送接收消息。現在我們創建一個工作隊列,用於在多個worker中分配耗時任務。工作隊列是爲了避免立即執行資源密集型任務並等待其完成,有了工作隊列,就可以稍後再處理任務。我們把任務封裝成消息併發送到隊
原创 C++11 bind函數
bind標準庫函數,定義在頭文件functional中。可以將bind函數看作一個通用的函數適配器,它接受一個可調用對象,生成一個新的可調用對象來“適應”原對象的參數列表。 調用bind的一般形式爲:
原创 用兩個棧實現一個隊列的基本功能
題目:用兩個棧實現隊列的基本功能。 實現:一個棧用於接受輸入,一個用於輸出,僅當輸出棧空時,將輸入棧中的數據一次性壓入輸出棧。以下實現中,該動作在pop和front中進行。 C++實現如下: template <t
原创 memmove和memcpy函數
兩個函數都在頭文件string.h中定義,函數原型爲: void * __cdecl memcpy(void *dst, const void *src, size_t count); void * __c
原创 矩陣最短路徑和
程序員面試指南中的一個題目: 給定一個矩陣m,從左上角開始每次只能向右或向下走,最後達到右下角的位置,路徑上所有數字的累加和就是路徑和,求所有路徑中的最小路徑和。 根據動態規劃實現,構建矩陣dp,dp[i]
原创 RabbitMQ官網教程5——topic
前面的章節我們改進了日誌系統,利用direct交換機,可以選擇性的接收日誌。但是,這仍然有侷限,不能基於多個規則進行路由。在日誌系統裏,我們可能不只根據安全級別訂閱日誌,還可能想根據日誌源來訂閱。就像Unix 工具sysl