原创 有趣的三次握手和四次揮手問題

說到計算機網絡,那就必須要提到TCP協議,談到TCP協議,那就要提一提TCP協議裏最有名的“三次握手和四次揮手”,對於這個知識點大家肯定或多或少在大學課程裏,在面試中被問到過,所以我就想專門寫一篇博客來好好地學習和記錄一下我從中所

原创 TCP的報文詳細解讀

這張圖好像挺有名的,其實一開始我看見的時候是一臉懵逼的,但是通過翻書(大學時代最害怕的計算機網絡),查閱他人博客等等辦法,最後終於有了一個系統的瞭解,當然,這裏知識點多而雜,大家可以多看幾遍,結合上面那張圖,這張圖實際上非常清楚

原创 關於數據庫鎖的相關知識

大家以前可能都聽說或者瞭解過數據庫鎖的相關知識,爲什麼需要鎖呢,鎖又是什麼呢?下面我會詳細的給大家講一講。 數據庫鎖出現的目的:處理併發問題 併發問題是什麼? 我們都知道數據庫可能會被同時大量訪問,這時假如第一個線程訪問並修改了我

原创 排序算法(一)————冒泡排序

冒泡排序是排序算法中用法簡單,使用最廣泛的一種算法,廢話不多說,下面是其的邏輯與C語言實現: 案例: 現在有五個數:12 34 23 88 67,請使用冒泡排序將其按照從小到大排序,並求其時間複雜度。 解: 第一趟排序: 12 3

原创 排序算法(二)————插入排序

實現過程與原理: 對於給定的幾個數,先將第一個數看做有序序列,然後將第二個數插入到有序序列中,使整個序列再次有序化,再將第三個數插入到前面的有序序列中,如此往復,即爲插入排序原理。 例: 現有給定幾個數:21 39 18 16,請

原创 排序算法(五)————快速排序

快速排序是一種效率很高的排序算法,也是我們使用最多的一種排序算法。 快速排序原理: 兩個指針分別指向數組兩頭元素,將數組第一個元素保存下來,作爲基準數,兩個指針開始向中間移動,先移動數組尾部指針,直到發現所指元素比基準數小時,將這

原创 鏈表的實際運用————leetcode第21題詳解

不廢話,題如下(來自leetcode第21題): 將兩個升序鏈表合併爲一個新的升序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 示例: 輸入:1->2->4 , 1->3->4 輸出:1->1->2->3->4-

原创 有趣的羅馬數問題————從leetcode第13題說起

羅馬數問題是一道非常有意思的題,下面是題幹(來自leetcode第13題): 羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。 字符 數值 I 1 V 5 X 10 L 50 C 1

原创 C#中的數據轉換問題

首先,我們先來看一下顯式轉換和隱式轉換,其實這兩個概念是非常簡單的,看下面這兩行簡單的代碼: //隱式轉換 int b = 10;

原创 C#中的Array,ArrayList和List

Array:數組的基類,數組在內存中是一塊連續的內存地址,在數組聲明時便已經分配了地址,在C語言中,我們想要使用數組的話我們需要使用malloc函數來手動分配內存,這也造成了Array的不便,假如我們要向數組中某個位置插入一個元素

原创 排序算法(七)————堆排序

堆排序是一種利用二叉堆的性質來進行排序的算法,二叉堆本身可以使用一個數組來表示,若我們有一個無序數組,我們可以先將其通過一系列方法變成一個二叉堆,然後再進行出堆操作,實際上就是將其目前最大值或最小值輸出,這樣我們的輸出順序其實就是

原创 排序算法(六)————希爾排序

希爾排序是對直接插入排序的一種改進,我們都知道直接插入排序在元素次序規則,數量較少時效率是最高的,而希爾排序恰巧合理的利用了這兩點,對冒泡排序進行了改進,希爾排序的核心在於分組,什麼是分組呢: 如下有10個元素: 12,15,8,

原创 二叉樹的廣度搜索和深度搜索

這篇主要是記錄一下學習二叉樹的深度搜索和廣度搜索的學習過程,有問題希望大家多多指正。 首先,下圖是一顆二叉樹: 深度優先搜索(DFS): 深度優先搜索是從根節點出發,沿左子樹方向進行縱向遍歷,直到找到葉子結點爲止。然後回溯到前一

原创 SQL注入以及解決的辦法

我們以前很可能聽過一個詞語叫做SQL注入攻擊,其是威脅我們系統安全的最危險的因素之一,那麼到底什麼是SQL注入攻擊呢?這裏我會用一個最經典最簡單的例子來跟大家解釋一下: 衆所周知,我們的sql語句都是有邏輯的,例如下面這句: se

原创 數據結構基礎知識點,看完保證期末不掛科!

數據結構基礎知識 線性結構 (1)連續儲存(地址在內存中爲連續)-----數組 (2)離散儲存(地址在內存中不一定爲連續的)-----鏈表 非線性結構 (1)樹 (2)圖 基礎算法(查找排序): 折半查找 排序: (1)冒泡