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 總大?。篎irefox 和 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 超鏈接
正則:/?href=[\'\"](.?)[\'\" >]/is
$html = <<<HTML
HTML;
$matches = array();
preg_match_all ( "/?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
變量、作用域、作用域鏈
很多人在剛接觸這個行業的時候或者是在遇到瓶頸期的時候,總會遇到一些問題,比如學了一段時間感覺沒有方向感,不知道該從那里入手去學習,對此我整理了一些資料,需要的可以免費分享給大家(點擊此處加入php高級交流群一起學習交流,11年架構師帶你解讀年薪50萬面試通關秘籍。)
如果喜歡我的文章,想與一群資深開發者一起交流學習的話,獲取更多相關大廠面試咨詢和指導,歡迎加入我的學習交流群677079770