您好,登錄后才能下訂單哦!
這篇文章主要介紹“PHP程序員面試題目有哪些”,在日常操作中,相信很多人在PHP程序員面試題目有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”PHP程序員面試題目有哪些”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
1. php 的垃圾回收機(jī)制
PHP 可以自動(dòng)進(jìn)行內(nèi)存管理,清除不需要的對(duì)象。
PHP 使用了引用計(jì)數(shù) (reference counting) GC 機(jī)制。
每個(gè)對(duì)象都內(nèi)含一個(gè)引用計(jì)數(shù)器 refcount,每個(gè) reference 連接到對(duì)象,計(jì)數(shù)器加 1。當(dāng) reference 離開生存空間或被設(shè)為 NULL,計(jì)數(shù)器減 1。當(dāng)某個(gè)對(duì)象的引用計(jì)數(shù)器為零時(shí),PHP 知道你將不再需要使用這個(gè)對(duì)象,釋放其所占的內(nèi)存空間。
2. session 與 cookie 的區(qū)別和聯(lián)系
區(qū)別:
1. 存放位置:Session 保存在服務(wù)器,Cookie 保存在客戶端。
2. 存放的形式:Session 是以對(duì)象的形式保存在服務(wù)器,Cookie 以字符串的形式保存在客戶端。
3. 用途:Cookies 適合做保存用戶的個(gè)人設(shè)置,愛好等,Session 適合做客戶的身份驗(yàn)證
4. 路徑:Session 不能區(qū)分路徑,同一個(gè)用戶在訪問一個(gè)網(wǎng)站期間,所有的 Session 在任何一個(gè)地方都可以訪問到。而 Cookie 中如果設(shè)置了路徑參數(shù),那么同一個(gè)網(wǎng)站中不同路徑下的 Cookie 互相是訪問不到的。
5. 安全性:Cookie 不是很安全,別人可以分析存放在本地的 COOKIE 并進(jìn)行 COOKIE 欺騙,考慮到安全應(yīng)當(dāng)使用 session
6. 大小以及數(shù)量限制:每個(gè)域名所包含的 cookie 數(shù):IE7/8,FireFox:50 個(gè),Opera30 個(gè); Cookie 總大?。篎irefox 和 Safari 允許 cookie 多達(dá) 4097 個(gè)字節(jié),Opera 允許 cookie 多達(dá) 4096 個(gè)字 節(jié),InternetExplorer 允許 cookie 多達(dá) 4095 個(gè)字節(jié);一般認(rèn)為 Session 沒有大小和數(shù)量限制。
關(guān)系:
Session 需要借助 Cookie 才能正常工作。如果客戶端完全禁止 Cookie,Session 將失效!因?yàn)?Session 是由應(yīng)用服務(wù)器維持的一個(gè) 服務(wù)器端的存儲(chǔ)空間,用戶在連接服務(wù)器時(shí),會(huì)由服務(wù)器生成一個(gè)唯一的 SessionID, 用該 SessionID 為標(biāo)識(shí)符來存取服務(wù)器端的 Session 存儲(chǔ)空間。
而 SessionID 這一數(shù)據(jù)則是保存到客戶端,用 Cookie 保存的,用戶提交頁面時(shí),會(huì)將這一 SessionID 提交到服務(wù)器端,來存取 Session 數(shù)據(jù)。這一過程,是不用開發(fā)人員干預(yù)的。所以一旦客戶端禁用 Cookie,那么 Session 也會(huì)失效。
3. 如何修改 SESSION 的生存時(shí)間
1、設(shè)置瀏覽器保存的 sessionid 失效時(shí)間 setcookie (session_name (), session_id (), time () + $lifeTime, "/");
2、可以使用 SESSION 自帶的 session_set_cookie_params (86400); 來設(shè)置 Session 的生存期
3、通過修改 php.ini 中的 session.gc_maxlifetime 參數(shù)的值就可以改變 session 的生存時(shí)間
4. PHP 頁面重定向的方法有哪些
1 2 3 |
|
5. PDO、adoDB、PHPLib 數(shù)據(jù)庫抽象層比較
PHP 數(shù)據(jù)庫抽象層就是指,封裝了數(shù)據(jù)庫底層操作的介于 PHP 邏輯程序代碼和數(shù)據(jù)庫之間的中間件。
PDO 以 PHP 5.1 為基礎(chǔ)進(jìn)行設(shè)計(jì),它使用 C 語言做底層開發(fā),設(shè)計(jì)沿承 PHP 的特點(diǎn),以簡(jiǎn)潔易用為準(zhǔn),從嚴(yán)格意義上講,PDO 應(yīng)該歸為 PHP 5 的 SPL 庫之一,而不應(yīng)該歸于數(shù)據(jù)抽象層,因?yàn)槠浔旧砗?MySQL 和 MySQLi 擴(kuò)展庫的功能類似。PDO 是不適合用在打算或者有可能會(huì)變更數(shù)據(jù)庫的系 統(tǒng)中的。
ADODB 不管后端數(shù)據(jù)庫如何,存取數(shù)據(jù)庫的方式都是一致的;
轉(zhuǎn)移數(shù)據(jù)庫平臺(tái)時(shí),程序代碼也不必做太大的更動(dòng),事實(shí)上只需要改動(dòng)數(shù)據(jù)庫配置文 件。提供了大量的拼裝方法,目的就是針對(duì)不同的數(shù)據(jù)庫在抽象層的底層對(duì)這些語句進(jìn)行針對(duì)性的翻譯,以適應(yīng)不同的數(shù)據(jù)庫方言!
但是這個(gè)抽象層似乎體積過于龐 大了,全部文件大概有 500K 左右,如果你做一個(gè)很小的網(wǎng)站的話,用這個(gè)似乎大材小用了
PHPLib 可能是伴隨 PHP 一同成長(zhǎng)最老的數(shù)據(jù)庫抽象層(但和 ADODB 相比,它只算是一個(gè) MySQL 抽象類庫),這個(gè)抽象類使用方法相當(dāng)簡(jiǎn)單,體積小,是小型網(wǎng)站開發(fā)不錯(cuò)的選擇。
PDO 提供預(yù)處理語句查詢、錯(cuò)誤異常處理、靈活取得查詢結(jié)果(返回?cái)?shù)組、字符串、對(duì)象、回調(diào)函數(shù))、字符過濾防止 SQL 攻擊、事務(wù)處理、存儲(chǔ)過程。
ADODB 支持 緩存查詢、移動(dòng)記錄集、(HTML、分頁、選擇菜單生成)、事務(wù)處理、輸出到文件。
6. 長(zhǎng)連接、短連接的區(qū)別和使用
長(zhǎng)連接:client 方與 server 方先建立連接,連接建立后不斷開,然后再進(jìn)行報(bào)文發(fā)送和接收。這種方式下由于通訊連接一直存在。此種方式常用于 P2P 通信。
短連接:Client 方與 server 每進(jìn)行一次報(bào)文收發(fā)交易時(shí)才進(jìn)行通訊連接,交易完畢后立即斷開連接。此方式常用于一點(diǎn)對(duì)多點(diǎn)通訊。C/S 通信。
長(zhǎng)連接與短連接的使用時(shí)機(jī):
長(zhǎng)連接:
短連接多用于操作頻繁,點(diǎn)對(duì)點(diǎn)的通訊,而且連接數(shù)不能太多的情況。每個(gè) TCP 連 接的建立都需要三次握手,每個(gè) TCP 連接的斷開要四次握手。如果每次操作都要建立連接然后再操作的話處理速度會(huì)降低,所以每次操作下次操作時(shí)直接發(fā)送數(shù)據(jù) 就可以了,不用再建立 TCP 連接。例如:數(shù)據(jù)庫的連接用長(zhǎng)連接,如果用短連接頻繁的通信會(huì)造成 socket 錯(cuò)誤,頻繁的 socket 創(chuàng)建也是對(duì)資源的浪 費(fèi)。
短連接:
web 網(wǎng)站的 http 服務(wù)一般都用短連接。因?yàn)殚L(zhǎng)連接對(duì)于服務(wù)器來說要耗費(fèi)一定 的資源。像 web 網(wǎng)站這么頻繁的成千上萬甚至上億客戶端的連接用短連接更省一些資源。試想如果都用長(zhǎng)連接,而且同時(shí)用成千上萬的用戶,每個(gè)用戶都占有一個(gè) 連接的話,可想而知服務(wù)器的壓力有多大。所以并發(fā)量大,但是每個(gè)用戶又不需頻繁操作的情況下需要短連接。
7. HTTP 協(xié)議詳解、應(yīng)用
http(超文本傳輸協(xié)議)是一個(gè)基于請(qǐng)求與響應(yīng)模式的、無狀態(tài)的、短連接、靈活、應(yīng)用層的協(xié)議,?;?TCP 的連接方式。
(HTTP 響應(yīng)狀態(tài)碼)
HTTP 響應(yīng)狀態(tài)碼
狀態(tài)代碼有三位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類別,且有五種可能取值:
1xx:指示信息 -- 表示請(qǐng)求已接收,繼續(xù)處理
2xx:成功 -- 表示請(qǐng)求已被成功接收、理解、接受
3xx:重定向 -- 要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作
4xx:客戶端錯(cuò)誤 -- 請(qǐng)求有語法錯(cuò)誤或請(qǐng)求無法實(shí)現(xiàn)
5xx:服務(wù)器端錯(cuò)誤 -- 服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求
常見狀態(tài)代碼、狀態(tài)描述、說明:
200 OK // 客戶端請(qǐng)求成功
400 Bad Request // 客戶端請(qǐng)求有語法錯(cuò)誤,不能被服務(wù)器所理解
401 Unauthorized // 請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和 WWW-Authenticate 報(bào)頭域一起使用 403 Forbidden // 服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)
404 Not Found // 請(qǐng)求資源不存在,eg:輸入了錯(cuò)誤的 URL
500 Internal Server Error // 服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 Server Unavailable // 服務(wù)器超時(shí) // 可能恢復(fù)正常
304 Not Modifed // 自從上次請(qǐng)求后,請(qǐng)求的網(wǎng)頁未修改過。
// 服務(wù)器返回此響應(yīng)時(shí),不會(huì)返回網(wǎng)頁內(nèi)容。
8. 異構(gòu)系統(tǒng)通訊中的通訊加密方案
9. socket 連接步驟
Socket(套接字)概念
套接字(socket)是通信的基石,是支持 TCP/IP 協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過程中端點(diǎn)的抽象表示,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議,本地主機(jī)的 IP 地址,本地進(jìn)程的協(xié)議端口,遠(yuǎn)地主機(jī)的 IP 地址,遠(yuǎn)地進(jìn)程的協(xié)議端口。
Socket 連接過程
建立 Socket 連接至少需要一對(duì)套接字,其中一個(gè)運(yùn)行于客戶端,稱為 ClientSocket ,另一個(gè)運(yùn)行于服務(wù)器端,稱為 ServerSocket
套接字之間的連接過程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請(qǐng)求,連接確認(rèn)。
服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。
客戶端請(qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求。
連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請(qǐng)求,它就響應(yīng)客戶端
套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求。
10. TCP 協(xié)議,三次握手、四次揮手
TCP 協(xié)議 (Transmission Control Protocol) 是主機(jī)對(duì)主機(jī)層的傳輸控制協(xié)議,提供可靠的連接服務(wù),采用三次握手確認(rèn)建立一個(gè)連接,四次揮手?jǐn)嚅_連接。
位碼即 tcp 標(biāo)志位,有 6 種標(biāo)示:
SYN (synchronous 建立聯(lián)機(jī)) 同步
ACK (acknowledgement 確認(rèn))
PSH (push 傳送)
FIN (finish 結(jié)束)
RST (reset 重置)
URG (urgent 緊急)
11. php 中常用作用相似,性能差異很大的函數(shù)區(qū)分及舉例
12. posix 及 perl 兼容正則比較,及函數(shù)性能分析
POSIX 正則和 PCRE 正則最顯著的需要知道的不同點(diǎn):
1、PCRE 函數(shù)需要模式以分隔符閉合.
2、POSIX 兼容正則沒有修正符。不像 POSIX, PCRE 擴(kuò)展沒有專門用于大小寫不敏感匹配的函數(shù)。取而代之的是,支持使用 /i 模式修飾符完成同樣的工作。其他模式修飾符同樣可用于改變匹配策略.
3、POSIX 函數(shù)從最左面開始尋找最長(zhǎng)的匹配,但是 PCRE 在第一個(gè)合法匹配后停止。如果字符串 不匹
配這沒有什么區(qū)別,但是如果匹配,兩者在結(jié)果和速度上都會(huì)有差別。為了說明這個(gè)不同,考慮下面的例子 (來自 Jeffrey Friedl 的《精通正則表達(dá)式》一書). 使用模式 one (self)?(selfsufficient)? 在字符串 oneselfsufficient 上匹配,PCRE 會(huì)匹配到 oneself, 但是使用 POSIX, 結(jié)果將是整個(gè)字符串 oneselfsufficient. 兩個(gè)子串都匹配原始字符串,但是 POSIX 將 最長(zhǎng)的最為結(jié)果.
PCRE 可用的修飾符: (i,s,m)
13. 實(shí)現(xiàn) PERL 正則表達(dá)式,抓取 html 文件 a 標(biāo)簽的所有 href 超鏈接
正則:/<a\s+.?href=[\'\"](.?)[\'\" >]/is
$html = <<<HTML
HTML;
$matches = array();
preg_match_all ( "/<a\s+.?href=[\'\"](.?)[\'\">]/is", $html, $matches ); print_r ($matches [1]); // 輸出所有超鏈接
?>
14. 預(yù)定義變量、魔術(shù)變量、魔術(shù)方法比較,及作用舉例
預(yù)定義變量(超級(jí)全局變量)
$GLOBALS
$_SERVER
$_GET
$_POST
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
construct 和 destruct
__autoload
get 和 set
isset 和 unset
call 和 callStatic
__clone
__toString
sleep 和 wakeup
__invoke
LINE
FILE
DIR
CLASS
FUNCTION
METHOD
NAMESPACE
15. spl 常用數(shù)據(jù)結(jié)構(gòu)類
16. PHP 設(shè)計(jì)模式
工廠模式
建立一個(gè)工廠(一個(gè)函數(shù)或一個(gè)類方法)來制造新的對(duì)象
工廠模式 是一種類,它具有為您創(chuàng)建對(duì)象的某些方法。您可以使用工廠類創(chuàng)建對(duì)象,而不直接使用 new。這樣,如果您想要更改所創(chuàng)建的對(duì)象類型,只需更改該工廠即可。使用該工廠的所有代碼會(huì)自動(dòng)更改。
單例模式
某些應(yīng)用程序資源是獨(dú)占的,因?yàn)橛星抑挥幸粋€(gè)此類型的資源。例如,通過數(shù)據(jù)庫句柄到數(shù)據(jù)庫的連接是獨(dú)占的。您希望在應(yīng)用程序共享數(shù)據(jù)庫句柄,因?yàn)樵诒3诌B接打開或關(guān)閉時(shí),它是一種開銷,在獲取單個(gè)頁面的過程中更是如此。
單元素模式可以滿足此要求。
PHP 中的單例模式(singleton pattern):指的是在 PHP 的應(yīng)用程序的范圍內(nèi)只對(duì)指定的類創(chuàng)建一個(gè)實(shí)例。
在 PHP 中使用單例模式的類通常擁有一個(gè)私有構(gòu)造函數(shù)和一個(gè)私有克隆函數(shù),以防 止用戶通過創(chuàng)建對(duì)象或者克隆對(duì)其進(jìn)行實(shí)例化。還有一個(gè)靜態(tài)私有成員變量 $instance 與靜態(tài)方法 getInstance。getInstance 負(fù)責(zé)對(duì)其本身實(shí)例化,然后將這個(gè)對(duì)象存儲(chǔ)在 $instance 靜態(tài)成員變量中,以確保只有一個(gè)實(shí)例被創(chuàng)建。
觀察者模式
命令鏈模式
策略模式
17. 負(fù)載均衡的 web 應(yīng)用服務(wù)器設(shè)計(jì),例如 youku
用 PHP 做負(fù)載均衡指南
思考如何應(yīng)對(duì)以下問題?
在 Apache 負(fù)載均衡的情況下,做 PHP 開發(fā)如何考慮一下幾方面:
PHP 源文件在服務(wù)器、PHP 文件上傳處理、相關(guān)配置文件、Session 會(huì)話放置、日志放置
Apache 負(fù)載均衡的原則
輪詢均衡策略 (輪詢轉(zhuǎn)發(fā)請(qǐng)求)
按權(quán)重分配均衡策略 (按響應(yīng)數(shù)量轉(zhuǎn)發(fā)請(qǐng)求)
權(quán)重請(qǐng)求響應(yīng)負(fù)載均衡策略 (按響應(yīng)流量轉(zhuǎn)發(fā)請(qǐng)求)
18. 如何優(yōu)化前端性能
1) 頁面內(nèi)容的優(yōu)化
a) 降低請(qǐng)求數(shù)
合并 css、js 文件,集成 CSS 圖片
b) 減少交互通信量
壓縮技術(shù):壓縮 css、js 文件,優(yōu)化圖像,減少 cookie 體積;
合理利用緩存:使用外部 js/css 文件,緩存 ajax;
減少不必要的通信量:剔除無用腳本和樣式、推遲加載內(nèi)容、使用 GET 請(qǐng)求
c) 合理利用 “并行” 盡量避免重定向
慎用 Iframe 樣式表置于頂部 腳本放到樣式后面加載
d) 節(jié)約系統(tǒng)消耗
避免 CSS 表達(dá)式、濾鏡
2) 服務(wù)器的優(yōu)化
a) b)
c)
d)
19. yahoo 的 34 條前端優(yōu)化法則
減少 HTTP 請(qǐng)求、利用 CDN 技術(shù)、 設(shè)置頭文件過期或者靜態(tài)緩存、Gzip 壓縮、把 CSS 放頂部、 把 JS 放底部、避免 CSS 表達(dá)式、將 JS 和 CSS 外鏈、減少 DNS 查找、減小 JS 和 CSS 的體積、 避免重定向、刪除重復(fù)腳本、 配置 ETags、緩存 Ajax、盡早的釋放緩沖、
用 GET 方式進(jìn)行 AJAX 請(qǐng)求、延遲加載組件、 預(yù)加載組件、減少 DOM 元素?cái)?shù)量、跨域分離組件、
減少 iframe 數(shù)量、不要出現(xiàn) 404 頁面、減小 Cookie、 對(duì)組件使用無 Cookie 的域名、減少 DOM 的訪問次數(shù)、開發(fā)靈活的事件處理句柄、使用 <link> 而非 @import、避免過濾器的使用、優(yōu)化圖片、優(yōu)化 CSS Sprites、 不要在 HTML 中縮放圖片、縮小 favicon. ico 的大小并緩存它、保證組件在 25K 以下、將組件打包進(jìn)一個(gè)多部分的文檔中
20. 數(shù)據(jù)庫緩存的基本理論,參考 memcached
什么是 Memcached?
memcached 是高性能的分布式內(nèi)存緩存服務(wù)器。一般的使用目的是,通過緩存數(shù)據(jù)庫查詢結(jié)果,減少數(shù)據(jù)庫訪問次數(shù),以提高動(dòng)態(tài) Web 應(yīng)用的速度、提高可擴(kuò)展性。
雖然 memcached 使用了同樣的 “Key=>Value” 方式組織數(shù)據(jù),但是它和共享內(nèi)存、APC 等本地緩存有非常大的區(qū)別。Memcached 是分布式的,也就是說 它不是本地的。它基于網(wǎng)絡(luò)連接(當(dāng)然它也可以使用 localhost)方式完成服務(wù),本身它是一個(gè)獨(dú)立于應(yīng)用的程序或守護(hù)進(jìn)程(Daemon 方式)
PHP 與 Memcached
Memcached 使用 libevent 庫實(shí)現(xiàn)網(wǎng)絡(luò)連接服務(wù),理論上可以處理無限多的連接,但是它和
基于反向代理的 Web 緩存;
基于反向代理的 Web 緩存
21. PHP 安全模式
php 安全模式:safe_mode=on|off
啟用 safe_mode 指令將對(duì)在共享環(huán)境中使用 PHP 時(shí)可能有危險(xiǎn)的語言特性有所限制??梢詫?safe_mode 是指為布爾值 on 來啟用,或者設(shè)置為 off 和腳本嘗試訪問的文件的 UID,以此作為限制機(jī)制的基礎(chǔ)。如果 UID 相同,則執(zhí)行腳本;否則,腳本失敗。
當(dāng)啟用安全模式時(shí),一些限制將生效
1、 所有輸入輸出函數(shù)(例如 fopen ()、file () 和 require ())的適用會(huì)受到限制,只能用于與調(diào)用這些函數(shù)的
腳本有相同擁有者的文件
2、 如果試圖通過函數(shù) popen ()、system () 或 exec () 等執(zhí)行腳本,只有當(dāng)腳本位于 safe_mode_exec_dir
配置指令指定的目錄才可能
3、HTTP 驗(yàn)證得到進(jìn)一步加強(qiáng),因?yàn)轵?yàn)證腳本用于者的 UID 劃入驗(yàn)證領(lǐng)域范圍內(nèi)。此外,當(dāng)啟用安
全模式時(shí),不會(huì)設(shè)置 PHP_AUTH。
4、如果適用 MySQL 數(shù)據(jù)庫服務(wù)器,鏈接 MySQL 服務(wù)器所用的用戶名必須與調(diào)用 mysql_connect ()
的文件擁有者用戶名相同。
以下是一些和安全模式相關(guān)的配置選項(xiàng)
1 2 3 4 5 |
|
22. 常見的 web 攻擊方式
常見攻擊
XSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往 Web 頁面里插入惡意 html 代碼,當(dāng)用戶瀏覽該頁之時(shí),嵌入的惡意 html 代碼會(huì)被執(zhí)行,從而達(dá)到惡意用戶的特殊 目的。
XSS 屬于被動(dòng)式的攻擊,因?yàn)槠浔粍?dòng)且不好利用,所以許多人常呼略其危害性。但是隨著前端技術(shù)的不斷進(jìn)步富客戶端的應(yīng)用越來越多,這方面的問題越來 越受關(guān)注。
舉個(gè)簡(jiǎn)單例子 :
假如你現(xiàn)在是 sns 站點(diǎn)上一個(gè)用戶,發(fā)布信息的功能存在漏洞可以執(zhí)行 js 你在 此刻輸入一個(gè) 惡意腳本,那么當(dāng)前所有看到你新信息的人的瀏覽器都會(huì)執(zhí)行這個(gè)腳本彈出提示框 (很爽吧 彈出廣告 :)),如果你做一些更為激進(jìn)行為呢 后果難以想象。
CSRF (Cross Site Request Forgery),跨站點(diǎn)偽造請(qǐng)求。顧名思義就是 通過偽造連接請(qǐng)求在用戶不知情的情況下,讓用戶以自己的身份來完成攻擊者需要達(dá)到的一些目的。csrf 的攻擊不同于 xss csrf 需要被攻擊者的主動(dòng)行為觸發(fā)。這樣聽來似乎是有 “被釣魚” 的嫌疑。
多窗口瀏覽器這這方面似乎是有助紂為虐的嫌疑,因?yàn)榇蜷_的新窗口是具有當(dāng)前所有 會(huì)話的,如果是單瀏覽器窗口類似 ie6 就不會(huì)存在這樣的問題,因?yàn)槊總€(gè)窗口都是一個(gè)獨(dú)立的進(jìn)程。
舉個(gè)簡(jiǎn)單例子 : 你正在玩白社會(huì), 看到有人發(fā)了一個(gè)連接,你點(diǎn)擊過去,然后這個(gè)連接里面?zhèn)卧炝艘粋€(gè)送禮物的表單,這僅僅是一個(gè)簡(jiǎn)單的例子,問題可見一般。
cookie 劫持。通過獲取頁面的權(quán)限,在頁面中寫一個(gè)簡(jiǎn)單的到惡意站點(diǎn)的請(qǐng) 求,并攜帶用戶的 cookie 獲取 cookie 后通過 cookie 就可以直以被盜用戶的身份登錄站點(diǎn)。這就是 cookie 劫持。
舉個(gè)簡(jiǎn)單例子: 某人寫了一篇很有意思的日志,然后分享給大家,很多人都點(diǎn)擊查看并且分享了該日志,一切似乎都很正常,然而寫日志的人卻另有用心,在日志中偷偷隱藏了一個(gè) 對(duì)站外的請(qǐng)求,那么所有看過這片日志的人都會(huì)在不知情的情況下把自己的 cookie 發(fā)送給了 某人,那么他可以通過任意一個(gè)人的 cookie 來登錄這個(gè)人的賬戶。
SQL 注入攻擊
在 SQL 注入攻擊 中,用戶通過操縱表單或 GET 查詢字符串,將信息添加到數(shù)據(jù)庫查詢中。
DNS 攻擊
拒絕服務(wù)攻擊
拒絕服務(wù)攻擊即攻擊者想辦法讓目標(biāo)機(jī)器停止提供服務(wù),是黑客常用的攻擊手段之。
攻擊者進(jìn)行拒絕服務(wù)攻擊,實(shí)際上讓服務(wù)器實(shí)現(xiàn)兩種效果:一是迫使服務(wù)器的緩沖區(qū)滿,不接收新的請(qǐng)求;二是使用 IP 欺騙,迫使服務(wù)器把合法用戶的連接復(fù)位,影響合法用戶的連接
23. PHP 做好防盜鏈的基本思想 防盜鏈
什么是盜鏈?
盜鏈?zhǔn)侵阜?wù)提供商自己不提供服務(wù)的內(nèi)容,通過技術(shù)手段繞過其它有利益的最終用戶界面 (如廣告),直接在自己的網(wǎng)站上向最終用戶提供其它服務(wù)提供商的服務(wù)內(nèi)容,騙取最終用戶的瀏覽和點(diǎn)擊率。受益者不提供資源或提供很少的資源,而真正的服務(wù)提供商卻得不到任何的收益。
網(wǎng)站盜鏈會(huì)大量消耗被盜鏈網(wǎng)站的帶寬,而真正的點(diǎn)擊率也許會(huì)很小,嚴(yán)重?fù)p害了被盜鏈網(wǎng)站的利益。 如何做防盜鏈?
不定期更名文件或者目錄
限制引用頁
原理是,服務(wù)器獲取用戶提交信息的網(wǎng)站地址,然后和真正的服務(wù)端的地址相比較, 如果一致則表明是站內(nèi)提交,或者為自己信任的站點(diǎn)提交,否則視為盜鏈。實(shí)現(xiàn)時(shí)可以使用 HTTP_REFERER1 和 htaccess 文件 (需要啟用 mod_Rewrite),結(jié)合正則表達(dá)式去匹配用戶的每一個(gè)訪問請(qǐng)求。
文件偽裝
文件偽裝是目前用得最多的一種反盜鏈技術(shù),一般會(huì)結(jié)合服務(wù)器端動(dòng)態(tài)腳本 (PHP/JSP/ASP)。實(shí)際上用戶請(qǐng)求的文件地址,只是一個(gè)經(jīng)過偽裝的腳本文件,這個(gè)腳本文件會(huì)對(duì)用戶的請(qǐng)求作認(rèn)證,一般會(huì)檢查 Session,Cookie 或 HTTP_REFERER 作為判斷是否為盜鏈的依據(jù)。而真實(shí)的文件實(shí)際隱藏在用戶不能夠訪問的地方,只有用戶通過驗(yàn)證以后才會(huì)返回給用戶
加密認(rèn)證
這種反盜鏈方式,先從客戶端獲取用戶信息,然后根據(jù)這個(gè)信息和用戶請(qǐng)求的文件名 字一起加密成字符串 (Session ID) 作為身份驗(yàn)證。只有當(dāng)認(rèn)證成功以后,服務(wù)端才會(huì)把用戶需要的文件傳送給客戶。一般我們會(huì)把加密的 Session ID 作為 URL 參數(shù)的一部分傳遞給服務(wù)器,由于這個(gè) Session ID 和用戶的信息掛鉤,所以別人就算是盜取了鏈接,該 Session ID 也無法通過身份認(rèn)證,從而達(dá)到反盜鏈的目的。這種方式對(duì)于分布式盜鏈非常有效。
隨機(jī)附加碼
每次,在頁面里生成一個(gè)附加碼,并存在數(shù)據(jù)庫里,和對(duì)應(yīng)的圖片相關(guān),訪問圖片時(shí)和此附加碼對(duì)比,相同則輸出圖片,否則輸出 404 圖片
加入水印
24. HTTP 請(qǐng)求頭信息和響應(yīng)頭信息
請(qǐng)求頭信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
響應(yīng)頭信息
1 2 3 4 5 6 7 8 9 10 11 12 |
|
25. MySQL
MySQL 數(shù)據(jù)庫性能優(yōu)化
使用 mysqlreport;
正確使用索引:explain 分析查詢語句,組合索引,索引副作用(占空間、update)
開啟慢查詢?nèi)罩?、使用慢查詢分析工?mysqlsla;
索引緩存、索引代價(jià)(插入更新索引);
表鎖,行鎖,行鎖副作用(update 多時(shí)候變慢),在 select 和 update 混合的情況下,行鎖巧妙解決了讀寫互斥的問題;
開啟使用查詢緩存;
修改臨時(shí)表內(nèi)存空間;
開啟線程池;
MySQL Query 語句優(yōu)化的基本思路和原則
1、優(yōu)化需要優(yōu)化的 Query;
2、定位優(yōu)化對(duì)象的性能瓶頸;
3、明確優(yōu)化目標(biāo);
4、從 Explaing 入手;
5、多使用 Profile;
6、永遠(yuǎn)用小結(jié)果集推動(dòng)大的結(jié)果集;
7、盡可能在索引中完成排序;
8、只取自己需要的 Columns;
9、僅僅使用最有效的過濾條件;
10、盡可能避免復(fù)雜的 Join 和子查詢。
MySQL 中 MyISAM 引擎和 InnoDB 引擎的區(qū)別以及它們的性能
1:Innodb 支持事物,Myisam 不支持
2:鎖定機(jī)制不一樣,Myisam 支持表鎖定,而 Innodb 支持行鎖
3:Myisam 不支持外鍵,Innodb 能支持
4:Myisam 能在特定環(huán)境下支持全文索引,而 Innodb 不支持
5:Myisam 支持?jǐn)?shù)據(jù)壓縮,Innodb 不支持
6:在數(shù)據(jù)存儲(chǔ)上,Myisam 占用的空間少,Innodb 相對(duì)多些
7:Myisam 在批量插入和查詢方面速度上有優(yōu)勢(shì),而 Innodb 由于支持行鎖,所以在數(shù)據(jù)修改方面更勝一籌
MySQL 存儲(chǔ)引擎
MyISAM:不支持事務(wù)、表鎖和全文索引,操作速度快
InnoDB:行鎖設(shè)計(jì)、支持外鍵、支持安全事務(wù)
HEAP:數(shù)據(jù)存放在內(nèi)存中,臨時(shí)表
NDB Cluster:MySQL 的簇式數(shù)據(jù)庫引擎
CSV: 存儲(chǔ)引擎把數(shù)據(jù)以逗號(hào)分隔的格式存儲(chǔ)在文本文件中。
FEDERATED:存儲(chǔ)引擎表并不存放數(shù)據(jù),它只是指向一臺(tái)遠(yuǎn)程 MySQL 數(shù)據(jù)庫服務(wù)器上的表 Archive: 只支持 INSERT 和 SELECT 操作,壓縮后存儲(chǔ),非常適合存儲(chǔ)歸檔數(shù)據(jù)
Merge:允許將一系列等同的 MyISAM 表以邏輯方式組合在一起,并作為 1 個(gè)對(duì)象引用它們 表類型,區(qū)分表類型
優(yōu)化表設(shè)計(jì)的常用思路
負(fù)載均衡的數(shù)據(jù)庫設(shè)計(jì)
數(shù)據(jù)類型及詳細(xì)定義,區(qū)分
26. Apache
性能優(yōu)化,配置,fastCGI 等幾種工作模式
27. Ajax
用 JS 實(shí)現(xiàn) Ajax 功能
1 2 3 4 5 6 7 8 9 10 11 12 |
|
到此,關(guān)于“PHP程序員面試題目有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。