原创 等概率選取問題 Random Pick

選取問題是:從元素個數爲N的集合中隨機選取K個,這裏要求是不重複的選取。等概率選取問題要求保證選取的隨機性,即集合中每個元素被選取的概率都相等。下面是兩個常見的方法。 方法一:保證了按順序選取,即把被選出的K個元素從左到右的順序依次選出。

原创 實現線程讀寫鎖的四種方法

對於某個臨界資源的訪問,讀操作和寫操作是要區別對待的。讀操作可以多個線程同時進行,寫操作必須互斥進行。 讀寫鎖:當已經被加了讀鎖時,其他的讀模式鎖請求仍然可以訪問,但是寫模式鎖不能訪問;當寫模式鎖加鎖時,其他的請求都不能訪問。 本文嘗試

原创 標準模板庫的空間配置器 STL's allocator

標準模板庫中利用空間配置器來在幕後管理內存空間。之所以叫空間配置器,是因爲可能在某種情況下,可以在內存以外的介質比如硬盤上進行分配。不過一般來講是內存,有下面兩種空間配置器。 一種是標準的空間配置器,std:allocator 一種是高級

原创 TCP連接的關閉過程

本文講述關於TCP連接關閉的系統狀態、系統調用、報文。 客戶端一般是主動關閉方,直接在程序在調用close()函數發出關閉請求(發送Fin報文)。 服務器端一般是關閉被動方,不會主動調用close()函數。 TCP連接關閉階段的狀態

原创 C++的虛函數 Virtual Function

virtual關鍵字有兩個用處。一個是最常見的: virtual關鍵字修飾類的成員函數。另一個是虛基類機制,用於多重繼承。在定義派生類時,要在基類描述前加關鍵字virtual。避免內存中父虛基類成員的重複放置。 虛函數: 定義:

原创 阿拉伯數字轉換爲漢語表達方式

漢語博大精深,本問題要寫一個函數將一個簡單的阿拉伯數字轉換爲漢語中的讀法。比如 1980,要轉換爲“一千九百八十”;198 要轉換爲“一百九十八”;19 要轉換爲“十九”等等。這屬於細節處理問題。 特殊用例: 1、注意0的出現。1080

原创 KMP算法實現strstr()函數

strstr()函數是C語言庫中的字符串匹配函數,函數搜索一個字符串在另一個字符串中的第一次出現。其在標準庫的函數原型爲 const char *

原创 學習NoSQL

    NoSQL的全稱是Not Only SQL,不僅僅是SQL,它是跟數據庫存儲有關的思想。google的bigtable和amazon的dynamo是對該思想的兩個優秀實現。 數據非關係化     上一代的數據庫都是關係型數據庫,

原创 TCP的網絡連接建立過程

套接字描述符 套接字描述符是int類型的。套接字描述符是文件描述符的一種,是UNIX系統中內核對各種類型文件的標識。 套接字地址結構體 sockaddr_in結構體 struct sockaddr_in { sho

原创 無損數據壓縮 Lossless Compression

    最近看了名爲一部《硅谷》的美劇,講述了硅谷的一個創業故事。它們公司的一個創新點就是數據壓縮。在當前大數據的背景下,數據壓縮一方面有利於數據的存儲、另一方面有利於數據的傳播。無損壓縮是要的保證信息不丟失的前提下儘可能的將數據變得更小

原创 解析XML文件

XML(Extensible Markup Language)是一種標記語言,被設計用來傳輸和存儲數據,而不是用於顯示數據。它和JSON(JavaScript Object Notation)的作用是一致的。 既然XML的作用在於傳送數

原创 命令行參數和變長參數表

程序的主函數main的參數叫做命令行參數,他們是程序在運行時的輸入數據,其參數個數是可變的。 除了main函數之外的函數,其參數個數也可以是可變的,這就是變長參數表。 棧     在進程中,程序中棧的方向都是從高地址到低地址擴展的,即棧

原创 Python編程中容易出現的10個錯誤

Python是一個解釋型、面向對象、具有動態語義的高級語言。它具有高級數據結構、動態類型綁定,支持模塊化。由於Python程序員往往並非只會這一門語言,受其他語言的影響,我們在編寫Python代碼的時候容易出現一些錯誤,本文中列出了10點

原创 估算圓周率 Estimate PI

本文介紹了一種估算圓周率的非常簡單的方法。蒙特卡洛法,這是一種基於概率統計的方法。 對於第一象限的四分之一單位圓,其面積是π/4。 對於位於第一象限的單位正方形,其面積是1。 對於一個點(x, y) ,如果x*x + y*y <= 1

原创 生產者-消費者的問題

生產者-消費者問題是最經典的操作系統同步與互斥相結合的問題。生活中的很多問題,要麼是它的變形,要麼是它的簡化。 本篇博客的實現方法是用linux版本的線程互斥鎖+線程信號量來實現該問題。 問題場景:m個生產者,n個消費者,大小爲k的緩衝區