當前位置:才華齋>設計>網頁設計>

PHP程式設計師面試常見問題

網頁設計 閱讀(1.07W)

PHP是將程式嵌入到HTML文件中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化程式碼執行,使程式碼執行更快。下面yjbys小編為大家分享PHP程式設計師面試常見問題,希望對大家面試有幫助!

PHP程式設計師面試常見問題

  1. Include 與 require的區別,require和require_once的效率哪個高?

Php在遇到include時就解釋一次,如果頁面中出現10次include,php就解釋10次,而php遇到require時只解釋一次,即使頁面出現多次require也只解釋一次,因此require的執行表率比include高。

Php使用require包含檔案時將被包含的檔案當成當前檔案的一個組成部分,如果被包含的檔案中有語法錯誤或者被包含的檔案不存在,則php指令碼將不再執行,並提示錯誤。

Php使用include包含檔案時相當於指定了這個檔案的路徑,當被包含的檔案有語法錯誤或者被包含的檔案不存在時給出警告,不影響本身指令碼的執行。

Include在包含檔案時可以判斷檔案是否包含,而require則不管任何情況都包含進來。

Require的效率比require_once的效率更高,因為require_once在包含檔案時要進行判斷檔案是否已經被包含。

  2. Cookie和session的區別,禁止了cookie後session能正常使用嗎?session的缺點是什麼?session在伺服器端是存在哪裡的?是共有的還是私有的?

COOKIE儲存在客戶端,使用者通過手段可以進行修改,不安全,單個cookie允許的最大值是3k。而SESSION儲存在伺服器端,相對比較安全,大小沒有限制。禁用了cookie之session不能正常使用。

Session的缺點:儲存在伺服器端,每次讀取都從伺服器進行讀取,對伺服器有資源消耗。

Session儲存在伺服器端的檔案或資料庫中,預設儲存在檔案中,檔案路徑由php配置檔案的_path指定。

Session檔案是公有的。

  3. 怎麼防止sql注入?

1、過濾掉一些常見的資料庫操作關鍵字:select,insert,update,delete,and,*等

或者通過系統函式:addslashes(需要被過濾的內容)來進行過濾。

2、在PHP配置檔案中

Register_globals=off;設定為關閉狀態 //作用將註冊全域性變數關閉。

比如:接收POST表單的值使用$_POST['user'],如果將register_globals=on;直接使用$user可以接收表單的值。

3、SQL語句書寫的時候儘量不要省略小引號(tab鍵上面那個)和單引號

4、提高資料庫命名技巧,對於一些重要的欄位根據程式的特點命名,取不易被猜到的

5、對於常用的方法加以封裝,避免直接暴漏SQL語句

6、開啟PHP安全模式

Safe_mode=on;

7、開啟magic_quotes_gpc來防止SQL注入

Magic_quotes_gpc=off;預設是關閉的,它開啟後將自動把使用者提交的sql語句的查詢進行轉換,把'轉為',這對防止sql注入有重大作用。

因此開啟:magic_quotes_gpc=on;

8、控制錯誤資訊

關閉錯誤提示資訊,將錯誤資訊寫到系統日誌。

9、使用mysqli或pdo預處理。

  4. 資料庫索引有幾類,分別是什麼?什麼時候該用索引

普通索引、主鍵索引、唯一索引

並非所有的資料庫都以相同的方式使用索引,作為通用規則,只有當經常查詢列中的資料時才需要在表上建立索引。

  5. 引用傳值和非引用傳值的區別,什麼時候該用引用傳值?什麼時候該用非引用傳值?

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

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

按值傳遞時,php必須複製值,如果操作的是大型的物件和字串,這將是一個代價很大的操作。按引用傳遞不需要複製值,因此對效能的提高有好處。

當需要在函式內改變源變數的值時用引用傳遞,如果不想改變原變數的值用傳值。

  6. 寫幾個魔術方法並說明作用?

__call()當呼叫不存在的方法時會自動呼叫的'方法

__autoload()在例項化一個尚未被定義的類是會自動呼叫次方法來載入類檔案

__set()當給未定義的變數賦值時會自動呼叫的方法

__get()當獲取未定義變數的值時會自動呼叫的方法

__construct()構造方法,例項化類時自動呼叫的方法

__destroy()銷燬物件時自動呼叫的方法

__unset()當對一個未定義變數呼叫unset()時自動呼叫的方法

__isset()當對一個未定義變數呼叫isset()方法時自動呼叫的方法

__clone()克隆一個物件

__tostring()當輸出一個物件時自動呼叫的方法

  7. $_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE的意思是什麼?

它們都是PHP預定義變數。

$_REQUEST用來獲取post或get方式提交的值

$_POST用來獲取post方式提交的值

$_GET用來獲取get方式提交的值

$_COOKIE用來獲取cookie儲存的值

$_SESSION用來獲取session儲存的值

$_FILE用來獲取上傳檔案表單的值

  8. 陣列中下標最好是什麼型別的,為什麼?

陣列的下標最好是數字型別的,數字型別的處理速度快。

  9. ++i和i++哪一個效率高,為什麼?

++i效率比i++的效率更高,因為++i少了一個返回i的過程。

  c_quotes_gpc()、magic_quotes_runtime()的意思是什麼?

Magic_quotes_gpc()是php配置檔案中的,如果設定為on則會自動POST,GET,COOKIE中的字串進行轉義,在'之前加

Magic_quotes_runtime()是php中的函式,如果引數為true則會資料庫中取出來的單引號、雙引號、反斜線自動加上反斜槓進行轉義。

  ()、print()、print_r()的區別?

Echo() 是PHP語法,可以輸出多個值,不能輸出陣列。

Print() 是php的語言結構,可以輸出單個簡單型別的變數值。

Print_r() 是php函式,可以打印出複雜型別變數的值,如陣列,物件。

  12.談談你對Mvc的認識

MVC是一種設計模式,強制使輸入、處理、輸出分開,MVC的三個核心部分:M模型,V檢視,C控制器。

檢視就是使用者看到並與之互動的介面。

模型就是程式的資料業務規則。

控制器接收使用者的陣列呼叫模型和檢視去完成使用者需求。

使用MVC的優點:低耦合、高重用性、較低的生命週期成本、快速開發部署、可維護性、可擴充套件性,有利於軟體工程化管理。

MVC的缺點:沒有明確的定義,完全理解並不容易。小型專案不適合用MVC。

  13.框架中什麼是單一入口和多入口,單一入口的優缺點

多入口就是通過訪問不同的檔案來完成使用者請求。

單一入口只web程式所有的請求都指向一個指令碼檔案的。

單一入口更容易控制權限,方便對http請求可以進行安全性檢查。

缺點:URL看起來不那麼美觀,特別是對搜尋引擎來說不友好。

  14.列印一個用‘.’連結的字串時候,還可以用什麼代替‘.’連結效率更高些?

可以用,代替.,效率更高。

  15.提示型別200、404、502是什麼意思?

200是請求成功,404是檔案未找到,502是伺服器內部錯誤。

  16.編寫一個自定義函式提取這段路徑的的字尾名。

“Www/hello/

Function geturltype($url){

$info=parse_url($url);

Return end(explode('.',$info['path']));

}

  17.你對Memcach的理解,優點有哪些?

Memcache是一種快取技術,在一定的時間內將動態網頁經過解析之後儲存到檔案,下次訪問時動態網頁就直接呼叫這個檔案,而不必在重新訪問資料庫。使用memcache做快取的好處是:提高網站的訪問速度,減輕高併發時伺服器的壓力。

Memcache的優點:穩定、配置簡單、多機分散式儲存、速度快