原创 動態規劃(DP)之最長上升子序列問題

     C++實現動態規劃(DP)之最長上升子序列問題    問: 輸入n個正整數,求其最大上升子序列的數值 #include<iostream> using namespace std; #define max(a,b) a>b?

原创 進程間通信(IPC)的幾種方式

進程間的通信方式大體來說可分爲兩種,如圖示: 下面分別簡單介紹這8種通信方式: 無名管道( pipe ):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關係的進程間使用。進程的親緣關係通常是指父子進程

原创 大數的階層(N!)

對於大數來說,一個數的階乘是非常大的,同樣,一個int類型的整數,他的階乘就有可能會很大。 就拿50來說,他的階乘位數是65位,就已經遠遠超過了long long int類型的最大值。這時候,我們要通過字符串的方法,來進行階乘的運算。

原创 常用排序算法的複雜度總結

常用排序算法的複雜度歸納:

原创 再談虛函數

對C++ 瞭解的人都應該知道虛函數(Virtual Function)是通過一張虛函數表(Virtual Table)來實現的。簡稱爲V-Table。 在這個表中,主是要一個類的虛函數的地址表,這張表解決了繼承、覆蓋的問題,保證其容真實

原创 排序--(單向)冒泡排序

基本原理(升序):對於給定的N個數據,從第一個數據開始依次對相鄰的兩個數據進行比較,數據大於後面時,交據位置,進行一輪比較和位置交換後,最大的數將位於第N 位;再對前(N-1)個數據進行比較和位置交換;重複該過程直至比較的數據只剩

原创 進程/線程->多線程

1.基本概念: 進程:具有一定獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位。 例如,用戶運行             自己的程序,系統就創建一個進程,併爲它分配資源(包括各種表格、內存空間、磁盤空

原创 Linux開機啓動(bootstrap)流程

計算機開機是一個神祕的過程。我們只是按了開機鍵,就看到屏幕上的進度條或者一行行的輸出,直到我們到達登錄界面。然而,計算機開機又是個異常脆弱的過程,我們滿心期望的登錄界面可能並不會出現,而是一個命令行或者錯誤信息。瞭解計算機開機過程

原创 C++中的虛函數

多態是指使用相同的函數名來訪問函數不同的實現方法,即“一種接口,多種方法”,用相同的形式訪問一組通用的運算,每個運算可能對應的行爲不同。C++支持編譯時多態和運行時多態,運算符重載和函數重載就是編譯時多態,而派生類和虛函數實現運行時多態。

原创 排序——選擇排序

選擇排序-- 基本原理:(升序)對數據進行遍歷,找出最小的數與第一個數進行位置交換;接着從第二個數開始進行遍歷,從中再找出最小的數與第二個數進行位置交換;重複該過程,直至只剩下一個數爲止。 算法分析:交換移動數據次數少,每趟的比較次數相同

原创 多線程同步的4種機制

現在流行的進程線程同步互斥的控制機制,其實是由最原始最基本的4種方法實現的:   1臨界區:通過對多線程的串行化來訪問公共資源或一段代碼,速度快,適合控制數據訪問。    2互斥量:爲協調共同對一個共享資源的單獨訪問而設計的。    

原创 程序到進程

出處:http://www.cnblogs.com/vamei 計算機如何執行進程呢?這是計算機運行的核心問題。即使已經編寫好程序,但程序是死的。只有活的進程才能產出。我們已經從Linux進程基礎中瞭解了進程。現在我們看一下從程序

原创 調試

摘自:《代碼大全2》第23章 調試 Debugging   概念:調試是確定錯誤根本原因並糾正錯誤的過程。 科學的調試方法: 1. 通過可重複的試驗收集數據 2. 通過相關數據的統計構造一個假說 3. 設計一個實驗來證明或反證這個假

原创 嵌入式編程

嵌入式編程面試題彙總 C語言測試是招聘嵌入式系統程序員必須且有效的方法。 1.位制轉換 Q:求下列程序的輸出結果   A:第一個輸出是0.000000         第二個輸出是 一個大數   可參考博文:C語言中int到flo

原创 Volatile 在程序設計中的作用

編譯器優化的時候可能會出現問題,如當遇到多線程編程時,變量的值可能因爲別的線程而改變了,而該寄存器的值不會相應改變,從而造成應用程序讀取的值和實際的變量值不一致。例如,在本次線程內,當讀取一個變量時,爲提高存取速度,編譯器優化時有時會先把