原创 海量數據——TopK問題

TopK問題是一個經典的海量數據處理問題,比如微博熱搜每隔10分鐘都會更新出排行前10的熱門搜索信息,再或者通過大數據找出一個地區最愛喫的水果等,都可以使用TopK問題來解決,其核心思想就是最小堆的引入。TopK問題分析在海量數據中找出出

原创 動態內存簡介

爲什麼要使用動態內存?通常當我們聲明一個數組時必須要指定數組的長度,但是數組的長度只有在程序運行的時候才知道,這是因爲它所需的內存空間取決於輸入數據的類型。這種方法雖然簡單,但是它的缺點也是顯而易見的,它極大的限制了程序的靈活性和健壯性。

原创 進程間通信——信號量(Semaphore)

在Linux中支持System V進程通信的手段有三種:消息隊列(Message queue)、信號量(Semaphore)、共享內存(Shared memory)。下面我們闡述一下信號量的進程間通信方式以及工作原理。 IPC的一點補充

原创 指針相關概念詳解

說起指針,這是很多人頭疼的問題,因爲它這幾個概念相當混淆,下面我們來分析一下這幾個概念:int num = 10;         //假設num的地址是0x0000004Cint *p = NULL;        //假設p的地址是0

原创 多線程編程(二)——互斥鎖與死鎖問題

二元信號量提供了一種很方便的方法來確保對共享變量的互斥訪問,即每個共享變量與一個信號量 s(初始爲1)聯繫起來,然後P(s)和V(s)操作將相應的臨界區包圍起來。互斥鎖是以提供互斥爲目的的二元信號量,二者均屬於掛起等待鎖。 互斥鎖(針對於

原创 進程間通信——共享內存(Shared Memory)

共享內存是System V版本的最後一個進程間通信方式。共享內存,顧名思義就是允許兩個不相關的進程訪問同一個邏輯內存,共享內存是兩個正在運行的進程之間共享和傳遞數據的一種非常有效的方式。不同進程之間共享的內存通常爲同一段物理內存。進程可以

原创 劍指offer——反轉鏈表

題目:定義一個函數,輸入鏈表的頭結點,反轉該鏈表並輸出反轉後鏈表的頭結點,鏈表結點結構定義如下:struct ListNode {     int val;     struct ListNode *next;     ListNode(

原创 多線程編程(一)——線程的創建、等待、分離、結合與終止

什麼是線程?在Linux kernel中是不存在線程的,或者說沒有真正意義上的線程,Linux下的線程都是用進程來模擬的,線程的實現就是多個共享數據信息的進程,我們稱之爲“輕量級進程”。多線程的引入多線程是指操作系統在單個進程內支持多個併

原创 解決大數據相關問題

在學習生活過程中,我們往往會遇到一些大數據方面的問題,那麼遇到這些看似比較簡單但數據量又非常龐大的題目時我們又該如何解決問題呢?1.給超過100G大小的log file,log中存放着IP地址,設計算法找到出現次數最多的IP地址?100G

原创 劍指offer——合併兩個排序的鏈表

題目:輸入兩個遞增排序的鏈表,合併這兩個鏈表並使新鏈表中的結點仍然是按照遞增排序的。鏈表的結點定義如下:struct ListNode { int val; ListNode* next; }; 例如輸入如圖所示的鏈表1和鏈表2,合併

原创 劍指offer——3/24

1.堆棧溢出一般是什麼原因導致的? 堆棧溢出一般是循環的遞歸調用導致的,如果使用大數據結構的局部變量,也可能導致堆棧溢出。 沒有回收垃圾資源導致的是內存泄漏直到內存耗盡。 2.什麼是中斷?中斷時CPU做什麼工作? 中斷是指在計算機執行期間

原创 進程間通信——管道(匿名與命名)

從物理上分,可以將管道分爲同主機的進程之間的通信和不同主機間的進程之間的通信。從通信方式上來分,管道又分爲匿名管道和命名管道,下面就匿名管道和命名管道的特性作以闡述。匿名管道(pipe)[含義]:管道是一個進程的數據流到另一個進程的通道,

原创 const在C語言中的用法

用const來修飾變量常量和變量的樣子完全一樣,只是常量的值不允許被修改。例如:下面這兩種聲明方式所產生的效果是一樣的const int a = 10; int const a = 10;用const來修飾指針int const *p;

原创 Linux信號處理機制(一)——信號引入

信號在最早的Unix系統中被引入,內核可用信號通知進程系統所發生的事件。在現實生活中,我們每天都在接觸信號,下課鈴聲、紅綠燈、鬧鐘等都是信號。信號的本質操作系統給進程發送信號,本質上是給進程的PCB中寫入數據,修改相應的PCB字段,進程在

原创 Linux信號處理機制(二)——阻塞信號

信號在內核中的表示信號在內核中一般有三種狀態:(1)信號遞達(Delivery):實際執行信號的處理動作稱爲信號遞達;(2)信號未決(Pending):信號從產生到遞達之間的狀態;(3)信號阻塞(Block):被阻塞的信號產生時將保持在未