原创 awesome compare系列

(MySQL)主鍵和唯一索引的區別 主鍵 唯一索引 不能爲空 可以爲null 主鍵是行記錄的編號,一般爲自增id,auto_increment 唯一索引,一般用來保證數據的唯一性,去重目的 主鍵是每一張表都必

原创 ubuntu下安裝HHVM

 爲了更深入的理解PHP7,安裝HHVM並學一下Hack語言。 由於HHVM的ubuntu源無法直接訪問(被牆),這裏有兩個國內的源: hiphop-php.com的源比較新,目前是3.22的版本。 wget http://

原创 MySQL5.7編譯過程記錄

編譯環境 gcc version 7.5.0 ubuntu18.04 依賴安裝 https://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.

原创 如何在本機配置多個github的sshkey

當我們想要在一臺機器上開發多個不同的github項目時,我們就需要配置多個不同的公鑰。github站點限制了一個ssh公鑰只能在一個倉庫用一次,不然就會提示Key is already in use。當我們在本機使用多個ssh公鑰

原创 B端產品的特點及開發經驗

租戶隔離 B端的產品,是以企業爲單位的。所有的數據和服務都按某個機構實體進行聚合。那麼我們如何提供一個沙箱機制? 理論上,我們向客戶提供的是無差別的服務。但是由於數據庫實例、服務器性能受到任務繁重程度不同,對資源的佔用也不同。這樣

原创 慢SQL優化

一個SQL執行時間過長,長期佔用MySQL會話連接,會耗盡連接數。這樣其他請求就無法建立連接。一個SQL返回時間過長,對用戶體驗也會造成影響。另外,慢SQL會消耗數據庫實例的資源,進一步把其他正常SQL也變成慢SQL。可能造成數

原创 關於函數參數的討論

參數的個數 沒有入參,沒有返回值 此時,函數不能跟其他代碼塊進行交互,退化成了一個指令。 void sayHello() { printf("do something\n"); } 若干個入參,沒有返回值 數據的消費者。 vo

原创 開發環境的兩種維護方式比較

分散式和集中式開發環境的利弊比較: 分散式開發環境的問題: 重複搭建開發環境(從零開始重新配置),對新人不友好; 對於跟第三方團隊(外部依賴)有遠程調用的接口,本地無法使用,因爲對方設置了IP白名單限制; 聯調複雜,內網IP發生

原创 消息消費的幾種方式

一個web請求往往要求快速得到響應,但是一個請求對應的業務可能存在一些複雜、耗時的邏輯需要執行。此時,我們可以將後置邏輯以消息的形式將耗時的業務剝離出來。 那麼消息隊列的信息該如何消費呢? 使用crontab拉取消費進程 我們可以

原创 PHP是世界上最好語言嗎?

PHP是世界上最好的語言嗎? PHP,曾是2004年的編程語言流行度排行榜的winner,而如今(2019年)將要跌出top 10,它都面臨着什麼樣的問題?從2012年起,iPhone引領的移動互聯網興起之後,後端開發新秀有:Gola

原创 教你從零開始寫一個哈希表--哈希表結構

  每一個鍵-值對(items)都會被保存在結構體中: // hash_table.h typedef struct { char* key; char* value; } ht_item;   哈希表保存了一組鍵值

原创 教你從零開始寫一個哈希表--哈希衝突

  哈希函數把一個無窮大的輸入集合映射到一個有限大小的輸出集合。不同的關鍵字可能會被映射到同一個數組下標,如此一來就導致了哈希衝突。哈希表必須實現解決衝突的方法。   我們的哈希表將使用開放地址法和再散列法。在桶索引衝突後,再散列法會

原创 教你從零開始寫一個哈希表--接口

接口 哈希函數將會實現以下的API: // hash_table.h void ht_insert(ht_hash_table* ht, const char* key, const char* value); char* ht_se

原创 教你從零開始寫一個哈希表--附錄

附錄:其他的衝突處理方案 常見的兩種哈希衝突解決方案如下: 鏈表法 開放尋址法 鏈表法   分離鏈表法中,每一個桶包含一個鏈接表。當鍵值對的鍵衝突時,鍵值對會被加入到這個列表中。它支持的方法如下: 插入:   計算關鍵字的哈希值來

原创 教你從零開始寫一個哈希表--導讀

  哈希表是一個可以提供快速實現關聯數組API的數據結構。跟“哈希表”有關的一些術語也許有些讓人產生困惑,因此我在下文列了一些摘要。   哈希表由一系列的桶組成,每一個桶保存一個鍵值對。爲了找到存放鍵值對的桶,關鍵字要傳遞給哈希函數。