解決 Table './dbname/tablename' is marked as crashed and should be repaired when using LOCK TABLES
問題資料庫存取發生錯誤,例如使用 mysqldump 時出現: 1mysqldump: Got error: 145: Table './dbname/tablename' is marked as crashed and should be repaired when using LOCK TABLES 原因資料表的相關檔案由於不明原因發生損壞,而無法正常存取。 解決方案可以使用以下兩種方式嘗試修復資料表: 使用 SQL 語句1REPAIR TABLE tablename 使用 myisamchk使用命令列進入資料表所在目錄,例如 1cd /var/lib/mysql/dbname 執行 1myisamchk -r tablename 執行過程中可能會遇到以下錯誤 1myisamchk: error: myisam_sort_buffer_size is too small 這是修復過程中所需記憶體空間超過預設的空間,可以利用 --sort_buffer_size 參數指派更大的記憶體,例如: 1myisamchk -r tablename --sort ...
資料結構 - 一般樹轉二元樹
簡介在樹狀結構中我們可能會使用陣列或指標來表示子節點,然而許多的陣列或指標並沒有真的利用到,造成記憶體上的浪費。透過特定的儲存方式,能夠將各種樹都轉換成二元樹,就能有效解決這個問題。轉換的規則如下: 原節點的第一個子節點轉成二元樹中的左子節點 。 原節點的下一個兄弟節點轉成二元樹中的右子節點。 從圖形的角度來看也可以這樣說: 原節點的第一個指標指向第一個子節點。 原節點的第二個指標指向下一個兄弟節點。 轉換過程以下面這張圖為例: 左上角的圖表示原來的一般樹,從圖形的角度並以節點3為例,透過規則1將節點3的第一個指標指向第一個子節點,第一個節點我們簡單取最左邊的節點,為節點 1;透過規則 2 將節點 3 的第二個指標指向下一個兄弟節點,為節點 4。 其他以此類推,接著我們可以得到左下角的圖形,與原來的規則做對應我們可以知道,第一個指標指的就是二元樹的左子節點,第二個指標就是右子節點,所以依據左右子節點的位置重新調整圖形,最後可以得到右邊的徒刑,也就是轉換成二元樹的結果。 LCRS Tree從上面的轉換結果,我們可以知道這個二元樹的左子節點代表的是原來的第一個子節點,右子節點代表下 ...
JavaScript 教學 - 變數 (Variables)
介紹 JavaScript 中的變數 (Variables) 的用法,包含宣告 (Declare)、指派 (Assign) 與變數範圍 (Scope),以及識別子 (Identifier) 的格式。 簡介變數是用來儲存資料和進行運算的基本程式功能,我們必須為變數指定一個合適的名稱,才能進一步操作,例如: 12var data = 2012;var data2 = data + 1; // 2013 宣告 (Declare)JavaScript 中使用 var 的關鍵字進行變數宣告,而未給定初始值的變數值為 undefined: 123var n;var m = 1;console.log(n); // undefined 也可以使用逗點 (,) 隔開連續宣告: 123var x, y;var flag = true, num = 0;var n, m = 1; 省略 varJavaScript 中允許省略 var 關鍵字來給定變數初始值,所有省略 var 關鍵字建立的變數皆為全域變數: 12345678function func() { var L = ' ...
資料結構 - 二元搜索樹 (Binary Search Tree)
簡介二元搜索樹 (Binary Search Tree) 是基於二元樹的一種延伸,二元搜索樹的應用範圍很廣,可以利用在搜索、排序和提供資料集合基本結構,發展其他資料結構,所以也是重要的資料結構之一。 定義定義除了繼承二元樹的定義外,二元搜索樹本身也有額外的定義,但可能會看到幾種不同的說法,而較多數人使用的定義如下: 左子樹不為空,則左子樹的所有節點的鍵值 (Key) 小於根節點的鍵值。 右子樹不為空,則右子樹的所有節點的鍵值 (Key) 大於根節點的鍵值。 左右子樹也都是二元搜索樹。 節點不會有重複的鍵值。 這個定義是樹中的節點都具有 Key-value pair 情況,有時候可能會其他變化: 沒有鍵值,而用值 (Value) 來比較。 允許重複的資料,此時會出現等於的情況,則將定義 1. 改成小於等於或者定義 2. 改成大於等於。 以下為示意圖: 實作不同類型的樹會有不同的介面,原始版本通常會實作以下介面: add: 加入資料。(或 insert) remove: 移除資料。(或 delete) containsKey: 判斷是否包含鍵值。 get: 取出資料。 無鍵值的 ...
JavaScript 教學 - 資料型態 (Data Type) - 下
介紹 JavaScript 中的資料型態 (型別),包含物件 (Object)、陣列 (Array)、未定義 (undefined)、空值 (null)、和函式 (Function)。 陣列 (Array)語法在 JavaScript 中可以使用三種方式來建立陣列: Array 物件建構,參數為初始的陣列元素,當參數只有一個且為數字型別時,表示宣告陣列的長度。 Array 函式,同上。 Array 實字,可直接建立陣列元素,無法宣告陣列長度。 一些範例如下: 123console.log(new Array(178, 169.99, '30cm', new Array(9527))); // [178, 169.99, "30cm", Array[9527]],最後一個元素為長度 9527 的陣列console.log(Array(178, 169.99, '30cm', Array(9527))); // [178, 169.99, "30cm", Array[9527]],同 ...
JavaScript 教學 - 資料型態 (Data Type) - 上
介紹 JavaScript 中的資料型態 (型別),包含布林 (Boolean)、數值 (Number) 和字串 (String),以及轉型的方法。 簡介型別的種類在 JavaScript 中有八種主要的型別: 三種基本型別: 布林 (Boolean) 數值 (Number) 字串 (String) 兩種複合的型別: 陣列 (Array) 物件 (Object) 兩種簡單型別: 空值 (null) 未定義 (undefined) 一種特殊型別: 函式 (Function) 動態型別JavaScript 是一種動態型別語言 (Dynamic typed language),可以不需要特別的宣告,例如: 12var num = 123;num = '一二三'; 不需要特別轉型。JavaScript 具有自動型態轉換的特性,在大多數的時候交由 JavaScript 自動轉型即可。 型別的判斷可以用 typeof 操作子來取得變數的型別,也可以用 typeof() 類似函式的寫法 (實際上是括號運算子,由於運算子優先序問題,建議使用這個方式): 12345 ...
資料結構 - 二元樹 (Binary Tree)
簡介二元樹 (Binary Tree) 是資料結構中樹狀結構的一種,也是常使用的一種資料結構,很多其他的樹種也是基於二元樹發展出來,所以是很重要的一種資料結構。 定義二元樹顧名思義是指每個節點都最多只能有兩個分支,所以會看起來這樣: 而比較嚴謹的定義如下: 每個節點最多有兩個子節點。 子節點有左右之分。 當然原來樹的定義也是要繼承下來。 在二元樹中也定義了一些專有名詞,解釋如下: 完滿二元樹 (Full Binary Tree)或翻譯滿二元樹,每個節點有 0 或 2 個子節點。也稱作嚴格二元樹 (Strictly Binary Tree)、正規二元樹 (Proper Binary Tree) 或 2-tree。範例如下: 大多數的中文資料對完滿二元樹的定義相當於英文的完美二元樹。 完全二元樹 (Complete Binary Tree)除了最後一階層之外的階層都必須填滿,而最後一階層的節點必須由左至右填入。範例如下: 完美二元樹 (Perfect Binary Tree)同時滿足完滿二元樹的條件,並且所有的葉節點都在同一個階層。範例如下: 在這個定義下可以得知,完美二元樹也必定是完 ...
網頁開發人員工具
開發人員工具之前的文章提到,早期開發 JavaScript 要進行 Debug 並不容易,不過現在的瀏覽器大多都已經有內建的開發人員工具,能夠讓我們方便的進行觀察 DOM 元素和 CSS 屬性等不同的功能。 這邊介紹一些常見的瀏覽器如何使用除錯模式來進行開發工作。 ChromeChrome 瀏覽器內建開發人員工具,可以從功能選單中開啟或者直接按熱鍵 F12 即可開啟,畫面如下: SafariSafari 瀏覽器雖然內建了開發人員工具,但預設是關閉的,所以要先進入選單的偏好設定,在進階的標籤下勾選 [在選單列中顯示 “開發人員” 選單]。 之後一樣可以從選單中開啟,或是按右鍵的檢視元件,或是直接按熱鍵 Ctrl + Alt + C 開啟,畫面如下: FirefoxFirefox 瀏覽器需要額外安裝 Firebug 的擴充套件,從選單的附加元件進入管理畫面,搜索 Firebug 後安裝即可使用。 除了可以從畫面社找到 Firebug 的圖示開啟之外,也可以直接使用熱鍵 F12 開啟,畫面如下: OperaOpera 有內建的開發人員工具,可以按右鍵選擇檢查元件開啟或是使用熱鍵 Ctrl + ...
資料結構 - 樹 (Tree)
簡介樹 (Tree) 是一種常見的資料結構,他是一種階層式 (Hierarchical) 的資料集合,我們就先來看看下面這棵樹: 我們觀察這棵樹之後可以發現他由某些東西組成,包含樹葉、樹枝和樹幹;同樣地,在程式世界裡有著類似的對應,樹的最開始會有一個根節點,就像樹的樹根一樣,所有的資料都是由這裡開始發展,接著會有一些其他的節點,有些節點可能在最末端,稱之為葉節點,就像樹的樹葉一樣,其他的節點則像樹的樹枝一樣。 不過在程式世界裡面,我們習慣把根節點放在最上面,而在我們生活中其實也很常使用,像是組織圖: 上圖的區長為根節點,最下面的各單位則為葉節點。 定義在數學的圖論和資料結構所提到的樹其實有些差異,在這裡先說明兩者的不同,數學中對樹的定義這裡簡化如下: 圖中任兩點存在一條路經相通,但不存在環 (Cycle)。 不過在資料結構裡面所說的樹,指的是數學裡的有根樹 (Rooted tree),定義如下: 有一個特殊節點為根節點的樹。 在資料結構中的實作會有父節點和子節點的分別,所以可以進一步的定義: 樹存在一個為根節點,根節點沒有父節點 (不可以有迴圈)。 每個節點只有一個父節點 ( ...
JavaScript 教學 - 基本語法 (Syntax)
介紹 JavaScript 中的基本語法與使用方式,包含執行 JavaScript、在 HTML中 嵌入 JavaScript、註解與其他特性。 如何執行 JavaScriptJavaScript 最常使用在網頁上,所以基本上所有瀏覽器都可以用來執行 JavaScript 程式,我們簡單的建立一個網頁,例如 hello.html,如下: 12345678910111213<!DOCTYPE html><html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta charset="utf-8"> <title>Hello World!</title> <script> document.write('Hello world!'); </script> ...