原创 31.Nginx HTTP之請求頭解析函數ngx_http_parse_header_line

HTTP >= 1.0 的版本中,請求行後緊跟的就是請求頭了,Nginx使用ngx_http_parse_header_line來對請求頭進行解析。 /* 解析HTTP請求頭 * param r: 待處理的HTTP請求r *

原创 創建你的第一個Docker Services

前面我們通過創建一個Docker容器來運行我們的Web應用,已經初步瞭解了Docker的威力 通常我們的Web應用沒這麼簡單,一般至少包含一個Web服務器、一個數據庫,我們稱這二者爲該App的Services;我們希望這些Services

原创 協程之我見

在Python中我們知道關鍵字yield可以用來實現生成器,我們可以在函數A中訪問生成器函數B,待B返回一個結果後,我們可以再次訪問B,而B會延續之前的執行狀態;這2個函數就像是2個線程一樣,在宏觀上看來在並行執行;但是與線程不同的是,線

原创 4. int類型之小整數對象池

Python假設小整數的使用頻率非常高,所以使用對象池來避免小整數使用時頻繁的創建工作。在Python初始化時,就會對這個小整數對象池進行初始化工作,具體就是創建小整數對應的對象。由於內存有限,故而不可能創建很多的小整數對象,所以需要定義

原创 協程踩坑記1

今天嘗試着使用ucontext來實現一個輕量級的協程庫,結果運行測試程序時,發生了段錯誤通過gdb調試發現錯誤是Cannot access memory at address,不過這個信息對我的幫助太小然後我加入了一些調試用的輸出語句,就

原创 C內存空間分佈

如上所示即爲典型C內存空間分佈圖,從高地址向低地址進行說明:1.stack,即棧區,存放自動變量,以及函數調用時保存的信息。每當進行函數調用時,函數的實參和返回地址以及調用者的上下文環境會被存放在棧中;棧區由編譯器自動分配,從高地址向低地

原创 3. 基本數據類型之int

不論何種編程語言,int都是很常見的基本數據類型之一,其定義如下:包含一個引用計數、一個指向類型對象的指針和一個long型值/* object.h */ #ifdef Py_TRACE_REFS #define _PyObject_HE

原创 使用Go開發HTTP服務器以及Benchmark測試

由於最近在學習Docker,而Docker是採用Go語言開發的;早就耳聞Go語言的威名,因此準備藉機學習一下 在學習了Go的原生HTTP庫後,我寫了個簡單的HTTP服務器Demo,代碼如下: // demo.go package main

原创 Ubuntu16.04部署Docker

下面是在Ubuntu 16.04上部署Docker的方法: 設置軟件倉庫 1. 更新apt軟件包索引 $ sudo apt-get update2. 爲apt增加HTTPS方法, 以支持通過HTTPS訪問軟件倉庫 $ sudo apt-g

原创 2. 判斷有符號整數(長整數)加法的溢出

在CPython的源碼中,進行有符號整數的加法時,會進行溢出判斷,以決定是否使用long型來存放結果,判斷條件如下:int a, b, i; i = a + b; if ((i ^ a) < 0 && (i ^ b) < 0) p

原创 1.工廠模式

from abc import ABC, abstractmethod class Fruit(ABC): def __init__(self): self.name = None @abstract

原创 32.Nginx HTTP之ngx_http_handler函數

前面我們看到,在HTTP 0.9中處理完請求行後; 在HTTP>=1.0中處理完請求頭後,Nginx會調用ngx_http_handler函數對請求進行處理。 /* http/ngx_http_core_module.c */ /*

原创 metaclass元類

在Python中一切皆爲對象,class(類)作爲模板同樣也是對象。我們可以通過type在運行期間動態創建類,同樣我們也可以通過metaclass(元類)來控制類的創建過程。簡言之,我們可以先定義metaclass,然後使用它來創建(或者

原创 1. 將int類型轉換爲10進制字符串

在一個qq羣遇到這樣一個題目,首先int轉字符串是比較常見的題目,書寫起來並不難,但是有些臨界條件容易出錯而這個題目增加了幾個限制條件,1. 參數、返回值無法修改2. 無法使用庫函數,那我們當然無法使用itoa這樣的庫函數了3. 調用方不

原创 設計模式之六大原則

1.開閉原則(Open Close Principle) 對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。 簡言之,是爲了使程序的擴展性好,易於維護和升級。想要達到這樣的效果,我們需要使用接口