原创 Linux:netstat指令

netstat netstat命令是一個監控TCP/IP網絡的非常有用的工具,它可以顯示路由表、實際的網絡連接以及每一個網絡接口設備的狀態信息。 選項 -a或--all:顯示所有連線中的Socket; -A<網絡類型>或--<網

原创 網絡基礎:TCP協議-粘包問題

面向字節流 創建一個socket的,不僅僅只是申請一個文件描述符,並且還開闢一片發送緩衝區及接收緩衝區。在調用write進行寫數據時,先寫入發送緩衝區當中,如果數據較大,那麼TCP進行分包發送。如果數據較小,那麼就現在發送緩衝區

原创 數據結構之堆的基本操作

在實現堆的操作之前,先來明白什麼是堆? 堆中某個節點的值總是不大於或不小於其父節點的值 堆總是一棵完全二叉樹。 要說到完全二叉樹,直觀的判斷就是,層序遍歷一棵樹,如果樹的某個節點沒有右子樹或者是沒有子樹,那麼從這個節點後面的所

原创 數據結構之哈希搜索結構(一)

什麼是哈希搜索結構 順序搜索以及二叉搜索樹中,元素存儲位置和元素各關鍵碼之間沒有對應的關係,因此在查找一個元素的時候,必須要經過關鍵碼的多次比較。所以這樣的搜索效率取決於搜索過程中元素的比較次數。 而我們理想的搜索方法就是不用

原创 網絡基礎:TCP協議-如何保證傳輸的高性能

TCP高性能的保證 TCP傳輸相比於UDP傳輸,其更具有可靠性,安全性。但是傳輸效率與速度都比UDP要稍遜一籌。不過TCP協議自身是保證其效率及性能的。 TCP協議保證高性能的方式有: 滑動窗口 快速重傳 延遲應答 捎帶應答

原创 nginx常見的負載均衡策略

nginx常見的負載均衡策略 1. 輪詢 nginx 默認的負載均衡策略就是輪詢的方式,即每個請求按照時間的順序逐一分配到不同的後臺服務器,如果後臺服務器掛掉,自動剔除。 upstream backserver { server

原创 ES踩坑記錄:index屬性值上限

最近,在工作中遇到一個 bug,纔給 es 嘗試插入 data 時,發生異常,死活插入不進去。 異常信息如下: 其實可以一眼看出,大概意思就是 index 內的屬性值限制是 1000,現在已經超過 1000 了,那麼該如何修改呢

原创 Redis學習歷程(二)

Redis字典 Redis 的字典底層使用哈希表作爲實現,一個哈希表內有多個節點,每個節點就是字典中的鍵值對。 首先,先看看哈希表的定義。 typedef struct dictht { // 哈希表數組 dic

原创 Redis學習歷程(一)

字符串 Redis裏使用的字符串又叫做簡易動態字符串,其實這裏它這裏的設計與 C++ 的 string 類有異曲同工之妙。 SDS 先看看 SDS 的定義。 struct sdshdr { // 記錄 buf 數組中已使用

原创 數據結構之布隆過濾器的實現

布隆過濾器 布隆過濾器(Bloom Filter)是1970年由布隆提出的。它實際上是一個很長的二進制向量和一系列隨機映射函數。布隆過濾器可以用於檢索一個元素是否在一個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的算法,缺

原创 數據結構之哈希搜索結構(二)

上篇博客我們以閉散列解決哈希衝突的方式實現了哈希搜索結構。閉散列在實際操作時需要考慮一個問題就是如果插入時發現超過了負載因子,那麼這個時候就不能插入了,需要擴容。擴容時,則需要創建更大的空間,並且由於空間變大,導致的可放個數變多,

原创 基於TCP協議:實現簡單的多線程多進程服務器

爲什麼要多線程多進程服務器? 相比於UDP來說,由於UDP是不需要連接的,可直接通信。所以基於UDP協議的服務器,並不需要考慮到多客戶端同時訪問服務器時接受數據的問題。而TCP協議是需要連接的,在一個客戶端連接上服務器後,這個時候

原创 數據結構之二叉搜索樹的基本操作

二叉搜索樹 二叉查找樹(Binary Search Tree),(又:二叉搜索樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右

原创 網絡基礎:初識網絡

現在的生活中處處都是網絡,網絡拉近人與人之間的距離。而每個計算機都是獨立的,如何實現每個獨立的計算機之間的通信,這就是網絡所要解決的問題。 要說到獨立計算機之間的通信就要提到局域網、域域網、廣域網這三個覆蓋範圍不同的網絡。

原创 數據結構之位圖基本操作的實現

位圖 說到位圖,我們應該都不陌生。在學習信號的時候我們知道,信號有遞達表,阻塞表。而這些表都是基於位圖實現的。所謂位圖,就是將每個比特位都當做一種特殊的意義,其值0與1的變化代表不同的含義。使用位圖最大的優點就是節省空間。 位圖的