1. php的垃圾回收機制
PHP可以自動進行記憶體管理,清除不需要的物件。
PHP使用了引用計數(reference counting) GC機制。
每個物件都內含一個引用計數器refcount,每個reference連線到物件,計數器加1。當reference離開生存空間或被設為NULL,計數器減1。當某個物件的引用計數器為零時,PHP知道你將不再需要使用這個物件,釋放其所佔的記憶體空間。
參考 http://www.php.net/manual/zh/features.gc.r...
2. session與cookie的區別和聯絡
區別:
1.存放位置:Session儲存在伺服器,Cookie儲存在客戶端。
2.存放的形式:Session是以物件的形式儲存在伺服器,Cookie以字串的形式儲存在客戶端。
3.用途:Cookies適合做儲存使用者的個人設定,愛好等,Session適合做客戶的身份驗證
4.路徑:Session不能區分路徑,同一個使用者在訪問一個網站期間,所有的Session在任何一個地方都可以訪問到。而Cookie中如果設定了路徑引數,那麼同一個網站中不同路徑下的Cookie互相是訪問不到的。
5.安全性:Cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,考慮到安全應當使用session
6.大小以及數量限制:每個域名所包含的cookie 數:IE7/8,FireFox:50個, Opera30個; Cookie總大小:Firefox和Safari允許cookie多達4097個位元組,Opera允許cookie多達4096個字 節,InternetExplorer允許cookie多達4095個位元組;一般認為Session沒有大小和數量限制。
關係:
- Session需要藉助Cookie才能正常工作。如果客戶端完全禁止Cookie,Session將失效!因為Session是由應用伺服器維持的一個 伺服器端的儲存空間,使用者在連線伺服器時,會由伺服器生成一個唯一的SessionID,用該SessionID 為識別符號來存取伺服器端的Session儲存空間。而SessionID這一資料則是儲存到客戶端,用Cookie儲存的,使用者提交頁面時,會將這一 SessionID 提交到伺服器端,來存取Session資料。這一過程,是不用開發人員干預的。所以一旦客戶端禁用Cookie,那麼Session也會失效。
3. 如何修改SESSION的生存時間
-
設定瀏覽器儲存的sessionid失效時間 setcookie(session_name(), session_id(), time() + $lifeTime, "/");
-
可以使用SESSION 自帶的 session_set_cookie_params(86400); 來設定 Session 的生存期
-
通過修改php.ini中的session.gc_maxlifetime引數的值就可以改變session的生存時間
4. PHP頁面重定向的方法有哪些
-
header('Location: http://www.baidu.com/') ;
-
echo '';
3 echo '';
5. PDO、adoDB、PHPLib資料庫抽象層比較
PHP資料庫抽象層就是指,封裝了資料庫底層操作的介於PHP邏輯程式程式碼和資料庫之間的中介軟體。
PDO以PHP 5.1為基礎進行設計,它使用C語言做底層開發,設計沿承PHP的特點,以簡潔易用為準,從嚴格意義上講,PDO應該歸為PHP 5的SPL庫之一,而不應該歸於資料抽象層,因為其本身和MySQL和MySQLi擴充套件庫的功能類似。PDO是不適合用在打算或者有可能會變更資料庫的系 統中的。
ADODB不管後端資料庫如何,存取資料庫的方式都是一致的;
轉移資料庫平臺時,程式程式碼也不必做太大的更動,事實上只需要改動資料庫配置文 件。提供了大量的拼裝方法,目的就是針對不同的資料庫在抽象層的底層對這些語句進行鍼對性的翻譯,以適應不同的資料庫方言!但是這個抽象層似乎體積過於龐 大了,全部檔案大概有500K左右,如果你做一個很小的網站的話,用這個似乎大材小用了
PHPLib可能是伴隨PHP一同成長最老的資料庫抽象層(但和ADODB相比,它只算是一個MySQL抽象類庫),這個抽象類使用方法相當簡單,體積小,是小型網站開發不錯的選擇。
PDO提供預處理語句查詢、錯誤異常處理、靈活取得查詢結果(返回陣列、字串、物件、回撥函式)、字元過濾防止SQL攻擊、事務處理、儲存過程。
ADODB支援 快取查詢、移動記錄集、(HTML、分頁、選擇選單生成)、事務處理、輸出到檔案。 參考 http://apps.hi.baidu.com/share/detail/4636...
6. 長連線、短連線的區別和使用
長連線:client方與server方先建立連線,連線建立後不斷開,然後再進行報文傳送和接收。這種方式下由於通訊連線一直存在。此種方式常用於P2P通訊。
短連線:Client方與server每進行一次報文收發交易時才進行通訊連線,交易完畢後立即斷開連線。此方式常用於一點對多點通訊。C/S通訊。
長連線與短連線的使用時機:
長連線:
短連線多用於操作頻繁,點對點的通訊,而且連線數不能太多的情況。每個TCP連 接的建立都需要三次握手,每個TCP連線的斷開要四次握手。如果每次操作都要建立連線然後再操作的話處理速度會降低,所以每次操作下次操作時直接傳送資料 就可以了,不用再建立TCP連線。例如:資料庫的連線用長連線,如果用短連線頻繁的通訊會造成socket錯誤,頻繁的socket建立也是對資源的浪 費。
短連線:
web網站的http服務一般都用短連線。因為長連線對於伺服器來說要耗費一定 的資源。像web網站這麼頻繁的成千上萬甚至上億客戶端的連線用短連線更省一些資源。試想如果都用長連線,而且同時用成千上萬的使用者,每個使用者都佔有一個 連線的話,可想而知伺服器的壓力有多大。所以併發量大,但是每個使用者又不需頻繁操作的情況下需要短連線。
參考http://www.cnblogs.com/Roberts/archive/2010/12/05/1986550.html
7. HTTP協議詳解、應用
http(超文字傳輸協議)是一個基於請求與響應模式的、無狀態的、短連線、靈活、應用層的協議,常基於TCP 的連線方式。
參考 http://blog.csdn.net/gueter/article/detail... (http協議詳解)
(HTTP響應狀態碼)
HTTP響應狀態碼
狀態程式碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示資訊--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
5xx:伺服器端錯誤--伺服器未能實現合法的請求
常見狀態程式碼、狀態描述、說明:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被伺服器所理解
401 Unauthorized //請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用 403 Forbidden //伺服器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //伺服器發生不可預期的錯誤
503 Server Unavailable //伺服器超時 //可能恢復正常
304 Not Modifed //自從上次請求後,請求的網頁未修改過。
//伺服器返回此響應時,不會返回網頁內容。
8. 異構系統通訊中的通訊加密方案
參考 http://blog.csdn.net/linvo/article/details...
9. socket連線步驟
Socket(套接字)概念
套接字(socket)是通訊的基石,是支援TCP/IP協議的網路通訊的基本操作單元。它是網路通訊過程中端點的抽象表示,包含進行網路通訊必須的五種資訊:連線使用的協議,本地主機的IP地址,本地程式的協議埠,遠地主機的IP地址,遠地程式的協議埠。
Socket連線過程
建立Socket連線至少需要一對套接字,其中一個執行於客戶端,稱為ClientSocket ,另一個執行於伺服器端,稱為ServerSocket
套接字之間的連線過程可以分為三個步驟:伺服器監聽,客戶端請求,連線確認。
伺服器監聽:是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態。
客戶端請求:是指由客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連線請求。
連線確認:是指當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求,它就響應客戶端
套接字的請求,建立一個新的執行緒,把伺服器端套接字的描述發給客戶端,一旦客戶端確認了此描述,連線就建立好了。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。
10. TCP協議,三次握手、四次揮手
TCP協議(Transmission Control Protocol)是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立一個連線,四次揮手斷開連線。
位碼即tcp標誌位,有6種標示:
SYN(synchronous建立聯機) 同步
ACK(acknowledgement 確認)
PSH(push傳送)
FIN(finish結束)
RST(reset重置)
URG(urgent緊急)
11. php中常用作用相似,效能差異很大的函式區分及舉例
參考 http://apps.hi.baidu.com/share/detail/4316...
12. posix及perl相容正則比較,及函式效能分析
POSIX正則和 PCRE正則最顯著的需要知道的不同點:
-
PCRE函式需要模式以分隔符閉合.
-
POSIX相容正則沒有修正符。不像POSIX, PCRE擴充套件沒有專門用於大小寫不敏感匹配的函式. 取而
代之的是, 支援使用/i 模式修飾符完成同樣的工作. 其他模式修飾符同樣可用於改變匹配策略.
- POSIX函式從最左面開始尋找最長的匹配, 但是PCRE在第一個合法匹配後停止. 如果字串 不匹
配這沒有什麼區別, 但是如果匹配, 兩者在結果和速度上都會有差別. 為了說明這個不同, 考慮下面的例子(來自Jeffrey Friedl的《精通正規表示式》一書). 使用模式 one(self)?(selfsufficient)?在字串oneselfsufficient 上匹配, PCRE會匹配到oneself, 但是使用POSIX, 結果將是整個字串 oneselfsufficient. 兩個子串都匹配原始字串, 但是POSIX將 最長的最為結果.
PCRE可用的修飾符: (i,s,m)
13. 實現PERL正規表示式,抓取html檔案a標籤的所有href超連結
正則:/<a\s+.?href=[\'\"](.?)[\'\" >]/is
$html = <<<HTML
HTML;
$matches = array();
preg_match_all ( "/<a\s+.?href=[\'\"](.?)[\'\" >]/is", $html, $matches ); print_r($matches[1]); //輸出所有超連結
?>
14. 預定義變數、魔術變數、魔術方法比較,及作用舉例
預定義變數(超級全域性變數)
$GLOBALS
$_SERVER
$_GET
$_POST
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
魔術方法http://apps.hi.baidu.com/share/detail/17851228
construct 和destruct
__autoload
get 和set
isset 和unset
call 和callStatic
__clone
__toString
sleep 和wakeup
__invoke
魔術變數http://apps.hi.baidu.com/share/detail/17851228
LINE
FILE
DIR
CLASS
FUNCTION
METHOD
NAMESPACE
15. spl常用資料結構類
16. PHP設計模式
工廠模式
建立一個工廠(一個函式或一個類方法)來製造新的物件
工廠模式 是一種類,它具有為您建立物件的某些方法。您可以使用工廠類建立物件,而不直接使用 new。這樣,如果您想要更改所建立的物件型別,只需更改該工廠即可。使用該工廠的所有程式碼會自動更改。
單例模式
某些應用程式資源是獨佔的,因為有且只有一個此型別的資源。例如,通過資料庫控制程式碼到資料庫的連線是獨佔的。您希望在應用程式中共享資料庫控制程式碼,因為在保持連線開啟或關閉時,它是一種開銷,在獲取單個頁面的過程中更是如此。
單元素模式可以滿足此要求。
PHP中的單例模式(singleton pattern):指的是在PHP的應用程式的範圍內只對指定的類建立一個例項。
在PHP中使用單例模式的類通常擁有一個私有建構函式和一個私有克隆函式,以防 止使用者通過建立物件或者克隆對其進行例項化。還有一個靜態私有成員變數$instance 與靜態方法getInstance。getInstance 負責對其本身例項化,然後將這個物件儲存在$instance 靜態成員變數中,以確保只有一個例項被建立。
觀察者模式
命令鏈模式
策略模式
17. 負載均衡的web應用伺服器設計,例如youku
用PHP做負載均衡指南
思考如何應對以下問題? 參考http://www.examw.com/linux/all/142494/
在Apache負載均衡的情況下,做PHP開發如何考慮一下幾方面:
PHP原始檔在伺服器、PHP檔案上傳處理、相關配置檔案、Session會話放置、日誌放置
Apache負載均衡的原則:
參考http://s456123123b.blog.163.com/blog/static/5632332220101080474642/
輪詢均衡策略 (輪詢轉發請求)
按權重分配均衡策略 (按響應數量轉發請求)
權重請求響應負載均衡策略 (按響應流量轉發請求)
18. 如何優化前端效能
1) 頁面內容的優化
a) 降低請求數
合併css、js檔案,整合CSS圖片
b) 減少互動通訊量
壓縮技術:壓縮css、js檔案,優化影象,減少cookie體積;
合理利用快取:使用外部js/css檔案,快取ajax;
減少不必要的通訊量:剔除無用指令碼和樣式、推遲載入內容、使用GET請求
c) 合理利用“並行” 儘量避免重定向
慎用Iframe 樣式表置於頂部 指令碼放到樣式後面載入
d) 節約系統消耗
避免CSS表示式、濾鏡
2) 伺服器的優化
a) b)
c)
d)
19. yahoo的34條前端優化法則
減少HTTP請求、利用CDN技術、 設定標頭檔案過期或者靜態快取、Gzip壓縮、把CSS放頂部、 把JS放底部、避免CSS 表示式、將JS和CSS外鏈、減少DNS查詢、減小JS和CSS的體積、 避免重定向、刪除重複指令碼、 配置ETags、快取Ajax、儘早的釋放緩衝、
用GET方式進行AJAX請求、延遲載入元件、 預載入元件、減少DOM元素數量、跨域分離元件、
減少iframe數量、不要出現404頁面、減小Cookie、 對元件使用無Cookie的域名、減少DOM的訪問次數、開發靈活的事件處理控制程式碼、使用< link >而非@import、避免過濾器的使用、優化圖片、優化CSS Sprites、 不要在HTML中縮放圖片、縮小favicon. ico的大小並快取它、保證元件在25K以下、將元件打包進一個多部分的文件中
20. 資料庫快取的基本理論,參考memcached
什麼是Memcached?
memcached是高效能的分散式記憶體快取伺服器。一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度、提高可擴充套件性。
雖然memcached 使用了同樣的“Key=>Value”方式組織資料,但是它和共享記憶體、APC等本地快取有非常大的區別。Memcached是分散式的,也就是說 它不是本地的。它基於網路連線(當然它也可以使用localhost)方式完成服務,本身它是一個獨立於應用的程式或守護程式(Daemon方式)
PHP與Memcached
Memcached使用libevent庫實現網路連線服務,理論上可以處理無限多的連線,但是它和
基於反向代理的Web快取;
基於反向代理的Web快取
23. PHP安全模式
php安全模式:safe_mode=on|off
啟用safe_mode指令將對在共享環境中使用PHP時可能有危險的語言特性有所限制。可以將safe_mode是指為布林值on來啟用,或者設定為off和指令碼嘗試訪問的檔案的UID,以此作為限制機制的基礎。如果UID相同,則執行指令碼;否則,指令碼失敗。
當啟用安全模式時,一些限制將生效
1、 所有輸入輸出函式(例如fopen()、file()和require())的適用會受到限制,只能用於與呼叫這些函式的
指令碼有相同擁有者的檔案
2、 如果試圖通過函式popen()、system()或exec()等執行指令碼,只有當指令碼位於safe_mode_exec_dir
配置指令指定的目錄才可能
3、HTTP驗證得到進一步加強,因為驗證指令碼用於者的UID劃入驗證領域範圍內。此外,當啟用安
全模式時,不會設定PHP_AUTH。
4、如果適用MySQL資料庫伺服器,連結MySQL伺服器所用的使用者名稱必須與呼叫mysql_connect()
的檔案擁有者使用者名稱相同。
以下是一些和安全模式相關的配置選項
safe_mode_gid=on|off
safe_mode_include_dir=string
safe_mode_env_vars=string
safe_mode_exec_dir=string
safe_mode_protected_env_vars=string
24. 常見的web攻擊方式
常見攻擊
XSS (Cross Site Script) ,跨站指令碼攻擊。它指的是惡意攻擊者往Web頁面裡插入惡意html程式碼,當使用者瀏覽該頁之時,嵌入的惡意html程式碼會被執行,從而達到惡意使用者的特殊 目的。XSS屬於被動式的攻擊,因為其被動且不好利用,所以許多人常呼略其危害性。但是隨著前端技術的不斷進步富客戶端的應用越來越多,這方面的問題越來 越受關注。舉個簡單例子 : 假如你現在是sns站點上一個使用者,釋出資訊的功能存在漏洞可以執行js 你在 此刻輸入一個 惡意指令碼,那麼當前所有看到你新資訊的人的瀏覽器都會執行這個指令碼彈出提示框 (很爽吧 彈出廣告 :)),如果你做一些更為激進行為呢 後果難以想象。
CSRF(Cross Site Request Forgery),跨站點偽造請求。顧名思義就是 通過偽造連線請求在使用者不知情的情況下,讓使用者以自己的身份來完成攻擊者需要達到的一些目的。csrf 的攻擊不同於xss csrf 需要被攻擊者的主動行為觸發。這樣聽來似乎是有“被釣魚”的嫌疑。
多視窗瀏覽器這這方面似乎是有助紂為虐的嫌疑,因為開啟的新視窗是具有當前所有 會話的,如果是單瀏覽器視窗類似ie6 就不會存在這樣的問題,因為每個視窗都是一個獨立的程式。舉個簡單例子 : 你正在玩白社會, 看到有人發了一個連線,你點選過去,然後這個連線裡面偽造了一個送禮物的表單,這僅僅是一個簡單的例子,問題可見一般。
cookie劫持。通過獲取頁面的許可權,在頁面中寫一個簡單的到惡意站點的請 求,並攜帶使用者的cookie 獲取cookie後通過cookie 就可以直以被盜使用者的身份登入站點。這就是cookie 劫持。舉個簡單例子: 某人寫了一篇很有意思的日誌,然後分享給大家,很多人都點選檢視並且分享了該日誌,一切似乎都很正常,然而寫日誌的人卻另有用心,在日誌中偷偷隱藏了一個 對站外的請求,那麼所有看過這片日誌的人都會在不知情的情況下把自己的cookie 傳送給了 某人,那麼他可以通過任意一個人的cookie 來登入這個人的賬戶。
SQL隱碼攻擊
在 SQL 注入攻擊 中,使用者通過操縱表單或 GET 查詢字串,將資訊新增到資料庫查詢中。
DNS攻擊
拒絕服務攻擊
拒絕服務攻擊即攻擊者想辦法讓目標機器停止提供服務,是黑客常用的攻擊手段之。
攻擊者進行拒絕服務攻擊,實際上讓伺服器實現兩種效果:一是迫使伺服器的緩衝區滿,不接收新的請求;二是使用IP欺騙,迫使伺服器把合法使用者的連線復位,影響合法使用者的連線
25. PHP做好防盜鏈的基本思想 防盜鏈
什麼是盜鏈?
盜鏈是指服務提供商自己不提供服務的內容,通過技術手段繞過其它有利益的終端使用者介面(如廣告),直接在自己的網站上向終端使用者提供其它服務提供商的服務內容,騙取終端使用者的瀏覽和點選率。受益者不提供資源或提供很少的資源,而真正的服務提供商卻得不到任何的收益。
網站盜鏈會大量消耗被盜鏈網站的頻寬,而真正的點選率也許會很小,嚴重損害了被盜鏈網站的利益。 如何做防盜鏈?
不定期更名檔案或者目錄
限制引用頁
原理是,伺服器獲取使用者提交資訊的網站地址,然後和真正的服務端的地址相比較, 如果一致則表明是站內提交,或者為自己信任的站點提交,否則視為盜鏈。實現時可以使用HTTP_REFERER1 和htaccess 檔案(需要啟用mod_Rewrite),結合正規表示式去匹配使用者的每一個訪問請求。
檔案偽裝
檔案偽裝是目前用得最多的一種反盜鏈技術,一般會結合伺服器端動態指令碼 (PHP/JSP/ASP)。實際上使用者請求的檔案地址,只是一個經過偽裝的指令碼檔案,這個指令碼檔案會對使用者的請求作認證,一般會檢查 Session,Cookie 或HTTP_REFERER 作為判斷是否為盜鏈的依據。而真實的檔案實際隱藏在使用者不能夠訪問的地方,只有使用者通過驗證以後才會返回給使用者
加密認證
這種反盜鏈方式,先從客戶端獲取使用者資訊,然後根據這個資訊和使用者請求的檔名 字一起加密成字串(Session ID)作為身份驗證。只有當認證成功以後,服務端才會把使用者需要的檔案傳送給客戶。一般我們會把加密的Session ID 作為URL 引數的一部分傳遞給伺服器,由於這個Session ID 和使用者的資訊掛鉤,所以別人就算是盜取了連結,該Session ID 也無法通過身份認證,從而達到反盜鏈的目的。這種方式對於分散式盜鏈非常有效。
隨機附加碼
每次,在頁面裡生成一個附加碼,並存在資料庫裡,和對應的圖片相關,訪問圖片時和此附加碼對比,相同則輸出圖片,否則輸出404圖片
加入水印
26. HTTP請求頭資訊和響應頭資訊
請求頭資訊
POST /scp1.1.0/prs/new_rnaseqtask/run_go HTTP/1.1
Host: 172.30.4.102
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0
Accept: /
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://172.30.4.102/scp1.1.0/index.php/prs... Content-Length: 1819
Cookie:
ci_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22e31556053ff9407a454f6a1e146d43eb%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A12%3A%22172.16.23.42%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%3B+rv%3A6.0%29+Gecko%2F2010010%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1314955607%3B%7D664b51a01ef99bac95f3e2206e79cb00;PHPSESSID=v33mlm1437lmop1fquta675vv4;username=linjinming; tk=1314955601855 Pragma: no-cache
Cache-Control: no-cache
響應頭資訊
HTTP/1.1 200 OK
Date: Fri, 02 Sep 2011 09:27:07 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 31
Connection: close
Content-Type: text/html; charset=UTF-8
27. MySQL
MySQL資料庫效能優化
使用mysqlreport;
正確使用索引:explain分析查詢語句,組合索引,索引副作用(佔空間、update)
開啟慢查詢日誌、使用慢查詢分析工具mysqlsla;
索引快取、索引代價(插入更新索引);
表鎖,行鎖,行鎖副作用(update多時候變慢),在select和update混合的情況下,行鎖巧妙解決了讀寫互斥的問題;
開啟使用查詢快取;
修改臨時表記憶體空間;
開啟執行緒池;
MySQL Query語句優化的基本思路和原則
-
優化需要優化的Query;
-
定位優化物件的效能瓶頸;
-
明確優化目標;
-
從Explaing入手;
-
多使用Profile;
-
永遠用小結果集推動大的結果集;
-
儘可能在索引中完成排序;
-
只取自己需要的Columns;
-
僅僅使用最有效的過濾條件;
-
儘可能避免複雜的Join和子查詢。
MySQL 中MyISAM引擎和InnoDB引擎的區別以及它們的效能
1:Innodb支援事物,Myisam不支援
2:鎖定機制不一樣,Myisam支援表鎖定,而Innodb支援行鎖
3:Myisam不支援外來鍵,Innodb能支援
4:Myisam能在特定環境下支援全文索引,而Innodb不支援
5:Myisam支援資料壓縮,Innodb不支援
6:在資料儲存上,Myisam佔用的空間少,Innodb相對多些
7:Myisam在批量插入和查詢方面速度上有優勢,而Innodb由於支援行鎖,所以在資料修改方面更勝一籌
MySQL儲存引擎
MyISAM:不支援事務、表鎖和全文索引, 操作速度快
InnoDB:行鎖設計、支援外來鍵、支援安全事務
HEAP:資料存放在記憶體中,臨時表
NDB Cluster:MySQL的簇式資料庫引擎
CSV: 儲存引擎把資料以逗號分隔的格式儲存在文字檔案中。
FEDERATED:儲存引擎表並不存放資料,它只是指向一臺遠端MySQL資料庫伺服器上的表 Archive: 只支援INSERT和SELECT操作, 壓縮後儲存, 非常適合儲存歸檔資料
Merge:允許將一系列等同的MyISAM表以邏輯方式組合在一起,並作為1個物件引用它們 表型別,區分表型別
優化表設計的常用思路
負載均衡的資料庫設計
資料型別及詳細定義,區分
28. Apache
效能優化,配置,fastCGI等幾種工作模式
29. Ajax
用JS實現Ajax功能
var createXHR = function(){
}
var addURLParam = function(url, name, value){
}
var xhr = createXHR();
xhr.onreadystatechange = function(){
}
var url = 'testAjax.php';
addURLParam(url, 'name', 'linjm');
xhr.open('get',url,true);
xhr.send(NULL);
if(xhr.readyState == 4){ } if(xhr.status > 200 && xhr.status < 300 || xhr.status == 304){ } alert(xhr.responseText); url += (url.indexOf('?') == -1 ? '?' : '&'); url += encodeURIComponent(name) + '=' + encodeURIComponent(value); return url; if(window.XMLHttpRequest){ } return new XMLHttpRequest(); return new ActiveXObject('Microsoft.XMLHTTP'); throw new Error('No XMLHttpRequest available'); }else{ }else{}
30. Javascript
變數、作用域、作用域鏈
By: Laravel-China 寧澤林
MyBlog: nizer.in