原创 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的數據結構。跟“哈希表”有關的一些術語也許有些讓人產生困惑,因此我在下文列了一些摘要。 哈希表由一系列的桶組成,每一個桶保存一個鍵值對。爲了找到存放鍵值對的桶,關鍵字要傳遞給哈希函數。