有需要學習交流的友人請加入交流群的咱們一起,有問題一起交流,一起進步!前提是你是學技術的,感謝閱讀!
點此加入該群?jq.qq.com
1. php 的垃圾回識訓制
PHP 可以自動進行記憶體管理,清除不需要的物件,
PHP 使用了參考計數 (reference counting) GC 機制,
每個物件都內含一個參考計數器 refcount,每個 reference 連接到物件,計數器加 1,當 reference 離開生存空間或被設為 NULL,計數器減 1,當某個物件的參考計數器為零時,PHP 知道你將不再需要使用這個物件,釋放其所占的記憶體空間,
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 的生存時間
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 頁面重定向的方法有哪些

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、分頁、選擇選單生成)、事務處理、輸出到檔案,
6. 長連接、短連接的區別和使用
長連接:client 方與 server 方先建立連接,連接建立后不斷開,然后再進行報文發送和接收,這種方式下由于通訊連接一直存在,此種方式常用于 P2P 通信,
短連接:Client 方與 server 每進行一次報文收發交易時才進行通訊連接,交易完畢后立即斷開連接,此方式常用于一點對多點通訊,C/S 通信,
長連接與短連接的使用時機:
長連接:
短連接多用于操作頻繁,點對點的通訊,而且連接數不能太多的情況,每個 TCP 連 接的建立都需要三次握手,每個 TCP 連接的斷開要四次握手,如果每次操作都要建立連接然后再操作的話處理速度會降低,所以每次操作下次操作時直接發送資料 就可以了,不用再建立 TCP 連接,例如:資料庫的連接用長連接,如果用短連接頻繁的通信會造成 socket 錯誤,頻繁的 socket 創建也是對資源的浪 費,
短連接:
web 網站的 http 服務一般都用短連接,因為長連接對于服務器來說要耗費一定 的資源,像 web 網站這么頻繁的成千上萬甚至上億客戶端的連接用短連接更省一些資源,試想如果都用長連接,而且同時用成千上萬的用戶,每個用戶都占有一個 連接的話,可想而知服務器的壓力有多大,所以并發量大,但是每個用戶又不需頻繁操作的情況下需要短連接,
7. HTTP 協議詳解、應用
http(超文本傳輸協議)是一個基于請求與回應模式的、無狀態的、短連接、靈活、應用層的協議,常基于 TCP 的連接方式,
(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. 異構系統通訊中的通訊加密方案
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 中常用作用相似,性能差異很大的函式區分及舉例
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 超鏈接

14. 預定義變數、魔術變數、魔術方法比較,及作用舉例
預定義變數(超級全域變數)
$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 常用資料結構類
16. PHP 設計模式
工廠模式
建立一個工廠(一個函式或一個類方法)來制造新的物件
工廠模式 是一種類,它具有為您創建物件的某些方法,您可以使用工廠類創建物件,而不直接使用 new,這樣,如果您想要更改所創建的物件型別,只需更改該工廠即可,使用該工廠的所有代碼會自動更改,
單例模式
某些應用程式資源是獨占的,因為有且只有一個此型別的資源,例如,通過資料庫句柄到資料庫的連接是獨占的,您希望在應用程式中共享資料庫句柄,因為在保持連接打開或關閉時,它是一種開銷,在獲取單個頁面的程序中更是如此,
單元素模式可以滿足此要求,
PHP 中的單例模式(singleton pattern):指的是在 PHP 的應用程式的范圍內只對指定的類創建一個實體,
在 PHP 中使用單例模式的類通常擁有一個私有建構式和一個私有克隆函式,以防 止用戶通過創建物件或者克隆對其進行實體化,還有一個靜態私有成員變數 $instance 與靜態方法 getInstance,getInstance 負責對其本身實體化,然后將這個物件存盤在 $instance 靜態成員變數中,以確保只有一個實體被創建,
觀察者模式
命令鏈模式
策略模式
17. 負載均衡的 web 應用服務器設計,例如 youku
用 PHP 做負載均衡指南
思考如何應對以下問題?
在 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 的訪問次數、開發靈活的事件處理句柄、使用 <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 快取
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 ()
的檔案擁有者用戶名相同,
以下是一些和安全模式相關的配置選項

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 請求頭資訊和回應頭資訊
請求頭資訊

回應頭資訊

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 功能

28. Javascript
變數、作用域、作用域鏈.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/96347.html
標籤:PHP
上一篇:Java面試題——陣列求和統計
