32道PHP面試題(附答案)

一、什麼是面向對象?主要特徵是什麼?javascript

面向對象是程序的一種設計方式,它利於提升程序的重用性,使程序結構更加清晰。主要特徵:封裝、繼承、多態。php

二、session與cookie的區別是什麼,請從協議、產生的緣由與做用說明?html

A、http無狀態協議,不能區分用戶是不是從同一個網站上來的,同一個用戶請求不一樣的頁面不能看作是同一個用戶。java

B、session存儲在服務器端,cookie保存在客戶端。session比較安全,cookie用某種手段能夠修改,不安全。session依賴於cookie進行傳遞。jquery

禁用cookie後,session不能正常使用。session的缺點:保存在服務器端,每次讀取都從服務器進行讀取,對服務器有資源消耗。session保存在服務器的文件或數據庫中,默認保存在文件中,文件路徑由php配置文件的session.save_path指定。session文件時公有的。ajax

三、HTTP狀態中30二、40三、500代碼含義?算法

302:臨時轉移成功,請求的內容已轉移到新位置sql

403:禁止訪問數據庫

500:服務器內部錯誤編程

401:表明未受權

四、請寫出數據類型(int char varchar datetime text)的意思;請問varchar和char有什麼區別?

int:整數 char:定長字符 varchar:變長字符 datetime:日期時間 text:文本型

varchar和char區別:char是固定長度的字符類型,分配多少空間,就佔用多長空間。varchar是可變長的字符類型,內容有多大就佔用多大的空間。

因爲varchar類型是可變的,因此在數據長度改變時,服務器要進行額外的操做,因此效率比char類型低。

五、myisam和innodb的基本區別?索引結構如何實現?

A、myisam類型不支持事務,表鎖,易產生碎片,要常常優化,讀寫書讀快,適合用於頻繁查詢的應用。

B、innodb類型支持事務,行鎖,有崩潰回覆能力,讀寫速度比myisam慢,適合於插入和更新操做比較多的應用,空間佔用大,不支持全文索引。

建立索引:alert table tanlename add index 索引名 (`字段名`)

六、isset()和empty()區別

isset判斷變量是否存在,能夠傳入多個變量,若其中一個變量不存在則返回假;empty判斷變量是否爲空爲假,只可傳入一個變量,若是爲空位假則返回真。

七、請說明PHP中傳值和傳引用的區別。何時傳值何時傳引用?

按值傳遞:函數範圍內對值的任何改變在函數外都會被會忽略。

按引用傳遞:函數範圍內對值的任何改變在函數外也能反映出這些修改。

優缺點:按值傳遞時,php必須複製值。特別是對於大型的字符串和對象來講,這將會是一個代價很大的操做。按引用傳遞不須要複製值,對於性能提升頗有好處。

八、在PHP中error_reporting這個函數有什麼做用?

設置PHP的報錯級別並返回當前級別。

九、說說你對緩存技術的瞭解?

緩存技術是將動態內容緩存到文件中,在必定時間內訪問動態頁面直接調用緩存文件,而沒必要從新訪問數據庫。

十、如今編程中常常採起MVC三層結構,請問MVC分別指哪三層,有什麼優勢?

MVC三層分別指:業務模型、視圖、控制區。由控制器調用模型處理數據,而後將數據映射到視圖層進行顯示。

優勢:a、能夠實現代碼的重用性,避免產生代碼冗餘;b、M和V實現代碼分離,從而使同一個程序可使用不一樣的表現形式。

十一、ajax的優點是什麼?

ajax是異步傳輸技術,能夠經過javascript實現,也能夠經過jquery框架實現,實現局部刷新,減輕了服務器的壓力,也提升了用戶體驗。

十二、在程序開發中,如何提升程序的運行效率?

A、優化sql語句,查詢語句中儘可能不使用select *,用哪一個字段查哪一個字段;少用子查詢語句可用鏈接替代;少用模糊查詢

B、數據表中建立索引

C、對程序中常常用到的數據生成緩存

1三、對於大流量的網站,您採用什麼樣的方法來解決訪問量問題?

A、有效使用緩存,增長緩存命中率

B、使用負載均衡

C、對靜態文件使用cdn進行存儲和加速

D、想法減小數據庫的使用

E、查看出現統計的瓶頸在哪裏

F、反向代理

1四、語句include和require的區別是什麼?爲避免屢次包含同一個文件,可用什麼語句替代它們?

區別:

在失敗的時候:

include產生一個warning,而require產生直接錯誤終端

require在運行前載入

include在運行時載入

代替:

require_once、include_once

1五、foo()和@foo()之間有什麼區別?

@表明全部warning忽略

1六、簡述PHP的垃圾收集機制。

php中變量存儲在變量容器zval中,zval中除了存儲了變量類型和值外,還有is_ref和refcount字段。refcount表示指向變量的元素個數,is_ref表示變量是否有別名。若是refcount爲0時,就會回收變量容器。若是一個zval的refcount減1以後大於0,他就會進入垃圾緩存區,當緩存區達到最大值後,回收算法會循環遍歷zval,判斷其是否爲垃圾,並進行釋放處理。

1七、如何實現PHP的安全最大化?怎樣避免SQL注入漏洞和XSS跨站腳本攻擊漏洞?

基本原則:不對外界展現服務器或程序設計細節(屏蔽錯誤),不相信任何用戶提交的數據(過濾用戶提交)。

1八、echo、print_r、print、var_dump區別

echo:語句結構

print:是函數,有返回值

print_r:能打印數組、對象

var_dump:能打印對象數組,而且帶數據類型

1九、寫出smarty模板的特色

速度快、編譯型、緩存技術、插件機制、強大的表現邏輯

20、PHP如何實現頁面跳轉?

方法一:php函數跳轉,缺點:header頭以前不能有輸出,跳轉後的程序繼續執行,可用exit中斷執行後面的程序。

header("location:網址");//直接跳轉

header("refresh:3;url=網址");//三秒後跳轉

方法二:利用meta

echo "";

2一、如何把一個gb2312格式的字符串轉換成utf-8格式?

iconv("GB2312","UTF-8","字符串內容")

2二、若是須要原樣輸出用戶輸入的內容,在數據入庫以前,要用哪一個函數處理?

htmlspecialchars或者htmlentities

2三、什麼是CSRF攻擊?XSS攻擊?如何防範?

CSRF:跨站請求僞造,攻擊方假裝成用戶身份發送請求從而竊取信息或者破壞系統。

講述基本原理:用戶訪問A網站登陸並生成了cookie,再訪問B網站。若是A網站存在CSRF漏洞,此時B網站給A網站請求(此時至關因而用戶訪問),A網站認爲是用戶發的請求,從而B網站就成功假裝了你的身份,所以叫跨站腳本攻擊。

CSRF防範:

A、合理規範api請求方式GET,POST

B、對POST請求加token令牌驗證,生成一個隨機碼並存入session,表單中帶上這個隨機碼,提交的時候服務器進行驗證隨機碼是否相同

XSS:跨站腳本攻擊

防範:不相信任何輸入,過濾輸入

2四、安全對一套程序來講相當重要,請說說在開發中應該注意哪些安全機制?

A、防遠程提交

B、防止SQL注入,對特殊代碼進行過濾

C、防止註冊灌水,使用驗證碼

2五、對json數據格式的理解?

json是一種輕量級的數據交換格式,json數據格式固定,能夠被多種語言用做數據的傳遞。

2六、什麼是事務?及其特性?

事務:是一系列的數據庫操做,是數據庫應用的基本邏輯單位。

事務特性:

A、原子性:即不可分割性,事務要麼所有執行,要麼就所有不執行。

B、一致性:事務的執行使得數據庫從一種狀態轉換成另外一種狀態。

C、隔離性:在事務提交以前,不容許把該事務對數據的任何改變提供給任何其餘事務。

D、持久性:事務正確提交後,其結果將永久保存在數據庫中,即便在事務提交後有了其餘故障,事務的處理結果也會獲得保存。

或者這樣理解:事務就是被綁定在一塊兒做爲一個邏輯工做單元的sql語句組,若是任何一個語句操做失敗,那麼整個操做就被失敗,之後操做就會回滾到操做以前狀態,或者是放個節點。未了確保要麼執行,要麼不執行,就可使用事務。

2七、什麼是鎖?

數據庫是一個多用戶使用的共享資源。當多個用戶併發取數據時,在數據庫中就會產生多個事務同時存取同一數據的狀況。若對併發操做不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。

加鎖是實現數據庫併發控制的一個很是重要的技術。當事務在對某個數據對象進行操做前,先向系統發出請求,對其加鎖。加鎖後事務就對該數據隊形有必定的控制,在該事務釋放鎖以前,其餘的事務不能對此數據隊形進行更新操做。

基本鎖類型:鎖包括行級鎖和表級鎖

2八、索引的做用?和它的優勢缺點是什麼?

索引就是一種特殊的查詢表,數據庫的搜索引擎能夠利用它加速對數據的檢索。它很相似與現實生活中書的目錄,不須要查詢證書內容就能夠找到想要的數據。索引能夠是惟一的,建立索引容許指定單個列或者多個列。缺點是它減慢了數據錄入的菽粟,同時也增長了數據庫的尺寸大小。

2九、如何通俗地理解三個範式?

第一範式:1NF是對屬性的原子性約束,要求屬性具備原子性,不可再分解;

第二範式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;

第三範式:3NF是對字段冗餘性的約束,即任何字段不能由其餘字段派生出來,它要求字段沒有冗餘;

30、主鍵、外鍵和索引的區別?

定義:

主鍵:惟一標識一條記錄,不能有重複的,不容許爲空;

外鍵:表的外鍵是另外一張表的主鍵,外鍵能夠有重複的,能夠是空值;

索引:該字段沒有重複值,單能夠有一個空值;

做用:

主鍵:用來保證數據完整性

外鍵:用來和其餘表創建聯繫

索引:是提升查詢排序的速度

個數:

主鍵:主鍵只能有一個

外鍵:一個表能夠有多個外鍵

索引:一個表能夠有多個惟一索引

3一、簡述private、protected、public修飾符的訪問權限

private:私有成員,在類的內部在能夠訪問;

protected:保護成員,該類的內部和繼承類中能夠訪問;

public:公共成員,徹底公開,沒有訪問限制;

3二、堆和棧的區別?

堆:是程序運行期間動態分配內存空間,你能夠根據程序的運行狀況肯定要分配的堆內存大小;

棧:是編譯期間就分配好的內存空間,所以你的代碼中必須就棧的大小有明確的定義;

相關文章
相關標籤/搜索