1.finally {}一定會執行,只有一種情況下不會執行,即調用了system.exit(),終止了虛擬機進程。
2. finally始終是在跳出方法之前被執行,常用來做一些資源清理工作,所以在return(跳出方法)前執行。
3.比較複雜點的情況是,如果return 後面有一個表達式,那麼會先執行表達式的內容,但並不會馬上跳出方法,而是執行finally塊,若finally也有return語句,整個方法會從finally的return跳出,若finally中沒有return,則會再從try{}中的return跳出。
二.數據庫索引:索引問題就是一個查找問題
一般來說,應該在這些列上創建索引:在經常需要搜索的列上,可以加快搜索的速度;在作爲主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;在經常需要根據範圍進行搜索的列上創建索引,因爲索引已經排序,其指定的範圍是連續的;在經常需要排序的列上創建索引,因爲索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。
一般來說,不應該創建索引的的這些列具有下列特點:
第一,對於那些在查詢中很少使用或者參考的列不應該創建索引。這是因爲,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。
第二,對於那些只有很少數據值的列也不應該增加索引。這是因爲,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的數據行佔了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度。
第三,對於那些定義爲text, image和bit數據類型的列不應該增加索引。這是因爲,這些列的數據量要麼相當大,要麼取值很少。
第四,當修改性能遠遠大於檢索性能時,不應該創建索引。這是因爲,修改性能和檢索性能是互相矛盾的。當增加索引時,會提高檢索性能,但是會降低修改性能。當減少索引時,會提高修改性能,降低檢索性能。因此,當修改性能遠遠大於檢索性能時,不應該創建索引。
三. 導數據:1、CREATE TABLE XXX_20130910 AS SELECT * FROM XXX;
利用原表建立一箇中間表。
2、TRUNCATE XXX;
Truncate原表。
3、INSERT INTO XXX SELECT * FROM XXX_20130910 WHERE 7天;
將7天的數據插入原表。
四.javac: .java --- > .class
所以javac工作原理就是:
1首先通過詞法分析器java源文件的字符流變成對應的token流。
2.通過語法分析器將token流組成更結構化的語法樹。
3.通過語義分析器將粗糙的語法樹變得更優化。
4.最後通過代碼生成器遍歷語法樹生成java字節碼
五.Ajax:
1.所謂異步,即通過 AJAX,JavaScript 無需等待服務器的響應,而是在等待服務器響應時執行其他腳本,當響應就緒後對響應進行處理
2.AJAX應用可以僅向服務器發送並取回必需的數據,通過在後臺與服務器進行少量數據交換,實現網頁的異步更新。避免了在網絡上發送那些沒有改變過的信息。就是能在不更新整個頁面的前提下維護數據,就是允許瀏覽器與服務器進行通信而無需刷新頁面,這使得Web應用程序能夠更爲迅捷地迴應用戶動作。
3.而Ajax用XHR對象做出的請求不會記錄在瀏覽器的歷史中。如果你的用戶習慣使用瀏覽器的“後退”按鈕在Web應用中進行導航,就可能會產生問題。
六.編程模式: 回調
1. 函數可以作爲參數傳入子函數,可以由子函數進行調用和返回。
2.調用者 A 想要調用函數 B, 但並不知道具體的 B 應該是哪一個,由 A 的調用者將 函數B 作爲參數傳入給調用者 A。 函數B 稱爲回調函數, B 函數的調用稱爲回調。
3.回調最著名的例子是靈活的對象排序。 排序函數對指定的同類型的多個對象進行排序, 但它並不知道如何去比較對象的大小,因此, 必須傳入一個比較對象的函數給它。
4.讓客戶寫希望調用的方法
5.注意異步
6. Javascript:
定義:
function A(callback) {
// other code
var params = obtain();
callback(params);
}
var callback = function(params) {
// codes to process
}
客戶端調用:
A(callback);
七.併發:
1. 爲了更好的用戶體驗。有的事情處理起來太慢,比如數據庫讀寫、遠程通信、複雜計算等等,如果在一個線程一個進程裏面來做,往往會影響用戶感受,因此需要另開一個線程或進程轉到後臺進行處理。它之所以能夠生效,仰仗的是單CPU的分時機制,或者是多CPU協同工作。在單CPU的條件下,兩個任務分成兩撥完成的總時間,是大於兩個任務輪流完成的,但是由於彼此交錯,給人的感覺更自然一些。
2.爲了加速完成某項工作。大名鼎鼎的Map/Reduce,做的就是這樣的事情,它將一個大的任務,拆分成若干個小的任務,分配個若干個進程去完成,各自收工後,再彙集在一起,更快地得到最後的結果。爲了達到這個目的,只有在多CPU的情形下才有可能,在單CPU的場合(單機單CPU…),是無法實現的。
1.先用ping或wget命令測試網絡連接性。[ping命令是網絡層協議,不涉及端口的狀態;wget是應用層協議,要涉及端口]
2.檢測端口是否衝突。[兩種思路,一種在本機上測試,主要是netstat命令;另一種利用傳輸層或以上的通信協議遠程測試,這種思路不太可靠,主要有telnet]
十.瞭解一個東西:什麼時候該用,什麼時候不該用
十一.絕對路徑和相對路徑:
1." ./ " 是同級, " ../ "是上一級, "/" 是相對於根目錄的
例如, C:\site\index.html. G:\siet\web\datas\a.html
1 如果index.html鏈接a.html href地址爲: C:\site是一樣的, \web\datas\a.html
2 如果a.html中鏈接index.html href地址爲: ../../index.html. 因爲index.html相當於a.html的上一級的上一級.
十二. Java參數傳值:基本類型傳的是值,複雜類型傳的是引用的值(方法內引用變的時候源引用參數不變,修改對象時原對象修改)
1.涵蓋:
1).各種選擇器:
2).Dom樹移動
3).對元素增刪改查
4).元素賦值
5).工具方法
6).事件操作
7).特殊效果
8)允許使用鏈式寫法
2.選擇器速度:
id選擇器和元素標籤選擇器最快,class選擇器較慢,屬性選擇器最慢
使用鏈式寫法:採用鏈式寫法時,jQuery自動緩存每一步的結果,因此比非鏈式寫法要快。根據測試,鏈式寫法比(不使用緩存的)非鏈式寫法,大約快了25%
3.事件的委託處理(Event Delegation)
javascript的事件模型,採用"冒泡"模式,也就是說,子元素的事件會逐級向上"冒泡",成爲父元素的事件。利用這一點,可以大大簡化事件的綁定。比如,有一個表格(table元素),裏面有100個格子(td元素),現在要求在每個格子上面綁定一個點擊事件(click),是否需要將命令執行100次?因此,這個事件只需要在父元素綁定1次即可,而不需要在子元素上綁定100次,從而大大提高性能。
4.少改動DOM結構
改動DOM結構開銷很大,因此不要頻繁使用.append()、.insertBefore()和.insetAfter()這樣的方法。如果要插入多個元素,就先把它們合併,然後再一次性插入。根據測試,合併插入比不合並插入,快了將近10倍。
5.選擇作用域鏈最短的方法
Javascript的變量採用鏈式作用域。讀取變量的時候,先在當前作用域尋找該變量,如果找不到,就前往上一層的作用域尋找該變量。這樣的設計,使得讀取局部變量比讀取全局變量快得多。
http://www.ruanyifeng.com/blog/2011/08/jquery_best_practices.html