原创 Linux IO模式及 select、poll、epoll詳解

點擊打開鏈接同步IO和異步IO,阻塞IO和非阻塞IO分別是什麼,到底有什麼區別?不同的人在不同的上下文下給出的答案是不同的。所以先限定一下本文的上下文。本文討論的背景是Linux環境下的network IO。 一 概念說明在進行解釋之前,

原创 MySql索引類型

Mysql支持哪幾種索引索引是在MySql的存儲引擎層中實現的,而不是在服務器層從數據結構角度1、B+樹索引(O(log(n))):關於B+樹索引,可以參考 MySQL索引背後的數據結構及算法原理BTREE在MyISAM裏的形式和Inno

原创 劍指offer---按之字形順序打印二叉樹

題目描述請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。/* struct TreeNode { int val; struc

原创 劍指offer---樹的子結構

鑑於二叉樹的子樹及二叉樹的子結構問題,現總結如下:什麼是二叉樹的子結構及子樹?子樹的意思是包含了一個結點,就得包含這個結點下的所有節點,一棵大小爲n的二叉樹有n個子樹,就是分別以每個結點爲根的子樹。子結構的意思是包含了一個結點,可以只取左

原创 一步步分析爲什麼B+樹適合作爲索引的結構

前言本文是在講述什麼樣的數據結構適合作爲索引,以及其適合作爲索引的原因。而閱讀本文需要對B樹和B+樹結構有稍微的理解。以及需要對磁盤操作知識有稍微的瞭解。對於磁盤操作的相關知識,在文章尾部的鏈接文章中,有詳細的介紹。在MySQL中,主要有

原创 IO多路複用;epoll;select

I/O多路複用(又被稱爲“事件驅動”),首先要理解的是,操作系統爲你提供了一個功能,當你的某個socket可讀或者可寫的時候,它可以給你一個通知。這樣當配合非阻塞的socket使用時,只有當系統通知我哪個描述符可讀了,我纔去執行read操

原创 若度爲m的哈夫曼樹中,其葉結點個數爲n,則非葉結點的個數爲()

首先說明一點,我們平時一般所說的哈夫曼樹是指最優二叉樹,也叫做嚴格二叉樹(注意不是完全二叉樹),但是哈夫曼樹完全不侷限於二叉樹,也存在於多叉樹中,即度爲m的哈夫曼樹,也叫最優m叉樹,嚴格m叉樹(注意不是完全m叉樹).這題表示哈夫曼樹的節點

原创 爲什麼要使用索引?

前言  爲什麼要使用索引?影響數據庫效率的原因千千萬萬,使用索引是爲了解決哪方面的數據庫的瓶頸?如果我們到現在只知道使用索引能夠查詢更快、索引就像目錄,我們根據目錄再進行查詢就很快,等等這些東西,那我們還有很長的路要走。點一  MySQL

原创 n個元素進棧,共有多少種出棧順序?

1.基於棧的問題分析我們把n個元素的出棧個數的記爲f(n), 那麼對於1,2,3, 我們很容易得出:                                  f(1) = 1     //即 1                 

原创 劍指offer---順時針打印矩陣

題目描述輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13

原创 劍指offer---二進制中1的個數

題目描述輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。如果一個整數不爲0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變爲0,原來在1後面的所有的0都會變成1(如果最右邊的1後面還有

原创 劍指offer---合併兩個排序的鏈表

題目描述輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。/* struct ListNode { int val; struct ListNode *next; ListNode(int

原创 劍指offer---二叉樹的鏡像

題目描述操作給定的二叉樹,將其變換爲源二叉樹的鏡像。/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int

原创 劍指offer---序列化二叉樹

題目描述請實現兩個函數,分別用來序列化和反序列化二叉樹二叉樹序列化               我們以前序遍歷的順序進行序列化,對於空結點我們用一個特殊的符號‘$’來代替,則序列化後的字符串爲“1 2 4 $ $ 5 $ $ 3 6 $

原创 劍指offer---二叉搜索樹的第K大的結點

題目描述給定一顆二叉搜索樹,請找出其中的第k大的結點。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按結點數值大小順序第三個結點的值爲4。思路:二叉搜索樹的一個重要性質就是它的中序遍歷是排序的,因此這道題目只需要用中序遍歷算