相關推薦:《2019年PHP面試題大匯總(收藏)》
1. php 的垃圾回收機制
##PHP可以自動進行記憶體管理,清除不需要的物件。 PHP 使用了參考計數 (reference counting) GC 機制。 每個對像都內含一個引用計數器 refcount,每個 reference 連接到對象,計數器加 1。當 reference 離開生存空間或被設為 NULL,計數器減 1。當某個物件的參考計數器為零時,PHP 知道你將不再需要使用這個對象,釋放其所佔的記憶體空間。 參考:https://www.php.net/manual/zh/features.gc.refcounting-basics.php2. session 與cookie 的差異與連結
區別:1. 存放位置:Session 保存在伺服器,Cookie 保存在客戶端。 2. 存放的形式:Session 是以物件的形式保存在伺服器,Cookie 以字串的形式保存在客戶端。 3. 用途:Cookies 適合做保存使用者的個人設置,嗜好等,Session 適合做客戶的身份驗證4. 路徑:Session 不能區分路徑,同一個用戶在訪問一個網站期間,所有的Session 在任何一個地方都可以訪問。而 Cookie 中如果設定了路徑參數,那麼同一個網站中不同路徑下的 Cookie 互相是無法存取的。 5. 安全性:Cookie 不是很安全,別人可以分析存放在本地的COOKIE 並進行COOKIE 欺騙,考慮到安全應當使用session6. 大小以及數量限制:每個網域所包含的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 的生存時間
1、設定瀏覽器儲存的sessionid 失效時間setcookie (session_name (), session_id (), time () $ lifeTime, "/");2、可以使用SESSION 自帶的session_set_cookie_params (86400); 來設定Session 的生存期3、透過修改php.ini 中的session.gc_maxlifetime參數的值就可以改變session 的生存時間4. PHP 頁面重定向的方法有哪些
header('Location: http://www.baidu.com/') ; echo ''; 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/4636786. 長連接、短連接的區別和使用
長連接:client 方與 server 方先建立連接,連接建立後不斷開,然後再進行封包傳送和接收。這種方式下由於通訊連接一直存在。此種方式常用於 P2P 通訊。
短連接:Client 方與 server 每進行一次封包收發交易時才進行通訊連接,交易完畢後立即中斷連線。此方式常用於一點對多點通訊。 C/S 通訊。
長連線與短連線的使用時機:
長連線:
短連線多用於操作頻繁,點對點的通訊,而且連線數不能太多的情況。每個 TCP 連 接的建立都需要三次握手,每個 TCP 連線的斷開要四次握手。如果每次操作都要建立連線然後再操作的話處理速度會降低,所以每次操作下次操作時直接發送資料 就可以了,不用再建立 TCP 連線。例如:資料庫的連接用長連接,如果用短連接頻繁的通訊會造成 socket 錯誤,頻繁的 socket 創建也是對資源的浪 費。
短連線:
web 網站的 http 服務一般都會用短連線。因為長連線對於伺服器來說要耗費一定 的資源。像 web 網站這麼頻繁的成千上萬甚至上億客戶端的連線用短連線更省一些資源。試想如果都用長連接,而且同時用成千上萬的用戶,每個用戶都佔有一個 連接的話,可想而知伺服器的壓力有多大。所以並發量大,但是每個使用者又不需頻繁操作的情況下需要短連線。
7. HTTP 協定詳解、應用
http(超文本傳輸協定)是一個基於請求與回應模式的、無狀態的、短連線、靈活、應用層的協議,常基於TCP 的連接方式。
參考:https://www.php.cn/faq/437523.html (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. 異質系統通訊中的通訊加密方案
參考:https://www.php.cn/php-weizijiaocheng-437530. html
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/43169774
12. posix 及 perl 兼容正则比较,及函数性能分析
POSIX 正则和 PCRE 正则最显著的需要知道的不同点:
1、PCRE 函数需要模式以分隔符闭合.
2、POSIX 兼容正则没有修正符。不像 POSIX, PCRE 扩展没有专门用于大小写不敏感匹配的函数。取而代之的是,支持使用 /i 模式修饰符完成同样的工作。其他模式修饰符同样可用于改变匹配策略.
3、POSIX 函数从最左面开始寻找最长的匹配,但是 PCRE 在第一个合法匹配后停止。如果字符串 不匹
配这没有什么区别,但是如果匹配,两者在结果和速度上都会有差别。为了说明这个不同,考虑下面的例子 (来自 Jeffrey Friedl 的《精通正则表达式》一书). 使用模式 one (self)?(selfsufficient)? 在字符串 oneselfsufficient 上匹配,PCRE 会匹配到 oneself, 但是使用 POSIX, 结果将是整个字符串 oneselfsufficient. 两个子串都匹配原始字符串,但是 POSIX 将 最长的最为结果.
PCRE 可用的修饰符: (i,s,m)
13. 实现 PERL 正则表达式,抓取 html 文件 a 标签的所有 href 超链接
正则:/]/is
$html = <<
HTML;
$matches = array();
preg_match_all ( "/]/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 做负载均衡指南
思考如何应对以下问题?
参考:https://www.php.cn/php-weizijiaocheng-437532.html
在 Apache 负载均衡的情况下,做 PHP 开发如何考虑一下几方面:
PHP 源文件在服务器、PHP 文件上传处理、相关配置文件、Session 会话放置、日志放置
Apache 负载均衡的原则
轮询均衡策略 (轮询转发请求)
按权重分配均衡策略 (按响应数量转发请求)
权重请求响应负载均衡策略 (按响应流量转发请求)
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 的访问次数、开发灵活的事件处理句柄、使用 而非 @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 缓存
21. 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
22. 常见的 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 欺騙,迫使伺服器把合法使用者的連接復位,影響合法用戶的連接
23. PHP 做好防盜鏈的基本思想防盜鏈
#什麼是盜鏈?
盜鍊是指服務提供者本身不提供服務的內容,透過技術手段繞過其它有利益的最終用戶介面(如廣告),直接在自己的網站上向最終用戶提供其它服務提供商的服務內容,騙取最終用戶的瀏覽和點擊率。受益者不提供資源或提供很少的資源,而真正的服務提供者卻得不到任何的利益。
網站盜鏈會大量消耗被盜鏈網站的頻寬,而真正的點擊率也許會很小,嚴重損害了被盜鏈網站的利益。如何做防盜鏈?
不定期更名檔案或目錄
限制引用頁
原理是,伺服器取得使用者提交資訊的網站位址,然後和真正的服務端的位址相比較, 如果一致則表示是站內提交,或為自己信任的網站提交,否則視為盜鏈。實作時可以使用 HTTP_REFERER1 和 htaccess 檔案 (需要啟用 mod_Rewrite),結合正規表示式去符合使用者的每一個存取請求。
檔案偽裝
檔案偽裝是目前用得最多的一種反盜鏈技術,一般會結合伺服器端動態腳本 (PHP/JSP/ASP)。實際上使用者請求的文件位址,只是一個偽裝的腳本文件,這個腳本文件會對使用者的請求作認證,一般會檢查 Session,Cookie 或 HTTP_REFERER 作為判斷是否為盜鏈的依據。而真實的文件實際上隱藏在用戶不能夠訪問的地方,只有用戶通過驗證以後才會返回給用戶
加密認證
這種反盜鏈方式,先從客戶端獲取使用者訊息,然後根據這個訊息和使用者請求的檔案名字一起加密成字串(Session ID) 作為身份驗證。只有當認證成功以後,服務端才會把使用者所需的文件傳送給客戶。一般我們會把加密的Session ID 作為URL 參數的一部分傳遞給伺服器,由於這個Session ID 和用戶的資訊掛鉤,所以別人就算是盜取了鏈接,該Session ID 也無法通過身份認證,從而達到反盜鏈的目的。這種方式對於分散式盜鏈非常有效。
隨機附加碼
每次,在页面里生成一个附加码,并存在数据库里,和对应的图片相关,访问图片时和此附加码对比,相同则输出图片,否则输出 404 图片
加入水印
24. 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
25. MySQL
MySQL 数据库性能优化
使用 mysqlreport;
正确使用索引:explain 分析查询语句,组合索引,索引副作用(占空间、update)
开启慢查询日志、使用慢查询分析工具 mysqlsla;
索引缓存、索引代价(插入更新索引);
表锁,行锁,行锁副作用(update 多时候变慢),在 select 和 update 混合的情况下,行锁巧妙解决了读写互斥的问题;
开启使用查询缓存;
修改临时表内存空间;
开启线程池;
MySQL Query 语句优化的基本思路和原则
1、优化需要优化的 Query;
2、定位优化对象的性能瓶颈;
3、明确优化目标;
4、从 Explaing 入手;
5、多使用 Profile;
6、永远用小结果集推动大的结果集;
7、尽可能在索引中完成排序;
8、只取自己需要的 Columns;
9、仅仅使用最有效的过滤条件;
10、尽可能避免复杂的 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 个对象引用它们 表类型,区分表类型
优化表设计的常用思路
负载均衡的数据库设计
数据类型及详细定义,区分
26. Apache
性能优化,配置,fastCGI 等几种工作模式
27. 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{}
28. Javascript
变量、作用域、作用域链.