PHP高級工程師面試 - 筆試題


Part1:HTTP協議

  1.狀態碼的含義

            1xx(臨時響應)

      表示臨時響應並需要請求者繼續執行操作的狀態代碼。  

    代碼   說明   

    100   (繼續) 請求者應當繼續提出請求。 服務器返回此代碼表示已收到請求的第一部分,正在等待其余部分。    

    101   (切換協議) 請求者已要求服務器切換協議,服務器已確認並准備切換。   

 

    2xx (成功)  

      表示成功處理了請求的狀態代碼。  

    代碼   說明   

    200   (成功)  服務器已成功處理了請求。 通常,這表示服務器提供了請求的網頁。   

    201   (已創建)  請求成功並且服務器創建了新的資源。   

    202   (已接受)  服務器已接受請求,但尚未處理。   

    203   (非授權信息)  服務器已成功處理了請求,但返回的信息可能來自另一來源。   

    204   (無內容)  服務器成功處理了請求,但沒有返回任何內容。   

    205   (重置內容) 服務器成功處理了請求,但沒有返回任何內容。  

    206   (部分內容)  服務器成功處理了部分 GET 請求。   

 

    3xx (重定向)   

      表示要完成請求,需要進一步操作。 通常,這些狀態代碼用來重定向。  

    代碼   說明   

    300   (多種選擇)  針對請求,服務器可執行多種操作。 服務器可根據請求者 (user agent) 選擇一項操作,或提供操作列表供請求者選擇。   

    301   (永久移動)  請求的網頁已永久移動到新位置。 服務器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。  

    302   (臨時移動)  服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求。  

    303   (查看其他位置) 請求者應當對不同的位置使用單獨的 GET 請求來檢索響應時,服務器返回此代碼。  

    304   (未修改) 自從上次請求后,請求的網頁未修改過。 服務器返回此響應時,不會返回網頁內容。   

    305   (使用代理) 請求者只能使用代理訪問請求的網頁。 如果服務器返回此響應,還表示請求者應使用代理。   

    307   (臨時重定向)  服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求。   

 

    4xx(請求錯誤)   

      這些狀態代碼表示請求可能出錯,妨礙了服務器的處理。  

    代碼   說明   

    400   (錯誤請求) 服務器不理解請求的語法。   

    401   (未授權) 請求要求身份驗證。 對於需要登錄的網頁,服務器可能返回此響應。   

    403   (禁止) 服務器拒絕請求。  

    404   (未找到) 服務器找不到請求的網頁。  

    405   (方法禁用) 禁用請求中指定的方法。   

    406   (不接受) 無法使用請求的內容特性響應請求的網頁。   

    407   (需要代理授權) 此狀態代碼與 401(未授權)類似,但指定請求者應當授權使用代理。  

    408   (請求超時)  服務器等候請求時發生超時。   

    409   (沖突)  服務器在完成請求時發生沖突。 服務器必須在響應中包含有關沖突的信息。   

    410   (已刪除)  如果請求的資源已永久刪除,服務器就會返回此響應。   

    411   (需要有效長度) 服務器不接受不含有效內容長度標頭字段的請求。   

    412   (未滿足前提條件) 服務器未滿足請求者在請求中設置的其中一個前提條件。   

    413   (請求實體過大) 服務器無法處理請求,因為請求實體過大,超出服務器的處理能力。   

    414   (請求的 URI 過長) 請求的 URI(通常為網址)過長,服務器無法處理。   

    415   (不支持的媒體類型) 請求的格式不受請求頁面的支持。   

    416   (請求范圍不符合要求) 如果頁面無法提供請求的范圍,則服務器會返回此狀態代碼。   

    417   (未滿足期望值) 服務器未滿足"期望"請求標頭字段的要求。   

 

    5xx(服務器錯誤)  

      這些狀態代碼表示服務器在嘗試處理請求時發生內部錯誤。 這些錯誤可能是服務器本身的錯誤,而不是請求出錯。  

    代碼   說明   

    500   (服務器內部錯誤)  服務器遇到錯誤,無法完成請求。   

    501   (尚未實施) 服務器不具備完成請求的功能。 例如,服務器無法識別請求方法時可能會返回此代碼。   

    502   (錯誤網關) 服務器作為網關或代理,從上游服務器收到無效響應。   

    503   (服務不可用) 服務器目前無法使用(由於超載或停機維護)。 通常,這只是暫時狀態。   

    504   (網關超時)  服務器作為網關或代理,但是沒有及時從上游服務器收到請求。   

    505   (HTTP 版本不受支持) 服務器不支持請求中所用的 HTTP 協議版本。        
View Code

Part2:php魔術方法

__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep()__wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在 PHP 中被稱為"魔術方法"(Magic methods)。在命名自己的類方法時不能使用這些方法名,除非是想使用其魔術功能。 

構造函數 

void __construct ([ mixed $args [, $... ]] )

PHP 5 允行開發者在一個類中定義一個方法作為構造函數。具有構造函數的類會在每次創建新對象時先調用此方法,所以非常適合在使用對象之前做一些初始化工作。

Note: 如果子類中定義了構造函數則不會隱式調用其父類的構造函數。要執行父類的構造函數,需要在子類的構造函數中調用 parent::__construct()。如果子類沒有定義構造函數則會如同一個普通的類方法一樣從父類繼承(假如沒有被定義為 private 的話)。

析構函數 

void __destruct ( void )

PHP 5 引入了析構函數的概念,這類似於其它面向對象的語言,如 C++。析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。

父類的析構函數不會被引擎暗中調用。要執行父類的析構函數,必須在子類的析構函數體中顯式調用 parent::__destruct()。此外也和構造函數一樣,子類如果自己沒有定義析構函數則會繼承父類的。

析構函數即使在使用 exit() 終止腳本運行時也會被調用。在析構函數中調用 exit() 將會中止其余關閉操作的運行。

Note:

析構函數在腳本關閉時調用,此時所有的 HTTP 頭信息已經發出。腳本關閉時的工作目錄有可能和在 SAPI(如 apache)中時不同。

Note:

試圖在析構函數(在腳本終止時被調用)中拋出一個異常會導致致命錯誤。

Part3:本人面試中遇到的問題(部分)

  1)問你做了什么項目,或者你做的功能模塊間的聯系

    這個問題,要結合項目講

  2)如何建立框架,或者就是你對php框架的理解

    在php開發過程中,項目的架構中:比如系統模塊的耦合性,代碼可重用性,可讀性,可維護性等一系列問題,框架顯得尤為重要。

    說白了,框架使代碼寫起來更順手,維護起來更容易,開發起來很快。

    將數據提取出來顯示到頁面上,這就涉及到另外兩方面,首先是邏輯的控制,然后是頁面的顯示。人們想了個名詞叫做MVC模式

    比如路由(利於用戶的訪問,還有利於seo優化)、模板引擎(比如smarty 用於顯示頁面)這些都是后來衍生出來的,覺得還是使用現成的比較好,畢竟那么多人維護的產品可不是吃素的。

  3)反轉字符串如何實現

    直接用函數 strrev()會出現問題(有中文的情況下回亂碼)

    下面是實現方式 

 1 <?php
 2     function getRev($str, $encoding)
 3     {
 4         $resoult = '';
 5         $strlen = mb_strlen($str, $encoding);
 6         for ($i=$strlen-1; $i>=0; $i--) { 
 7              $resoult .= mb_substr($str,$i, 1,$encoding);
 8          }
 9         return $resoult; 
10     }
11     $str = "Nihaonimeide你妹的";
12     echo getRev($str, 'utf-8');
13 ?>
View Code

  4)mysql:死鎖和事務有什么關系

  5)索引在什么情況下使用

  

  6)如何建立索引

 

  7)單進程和多進程,單線程和多線程

  8)php是單線程還是多線程

  9)購物車中的商品信息是存儲在cookie還是session中

  10)cooike的原理

  11)cookie中數據是如何存放的

  12)linux:比如有個文件夾,文件夾下有n個文件夾,n個文件夾下又有n個文件

        如何查找到某個文件中的某行內容

  13)死鎖的含義

  14)  查找某個字符串是否在另一個字符串中

  15)你是否開發過接口

  16)什么是設計模式

  17)閉包是什么


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM