php工程師面試題及答案

來源:才華庫 2.22W

PHP全稱:Hypertext Preprocessor,是一種用來開發動態網站的伺服器指令碼語言。下面是小編整理的php工程師面試題及答案,希望對大家有幫助!

php工程師面試題及答案

【1 】Memcached、redis的使用和理解

Memcached和redis 都是一個key-value的記憶體式儲存系統,通過hash表來儲存檢索結果,做到強大的快取機制。像新浪的微博、淘寶等大流量站點都必須的使用了這些東東。

Memcache是一個高效能的分散式的記憶體物件快取系統,通過在記憶體裡維護一個統一的巨大的hash表,它能夠用來儲存各種格式的資料,包括影象、視訊、檔案以及資料庫檢索的結果等。簡單的說就是將資料呼叫到記憶體中,然後從記憶體中讀取,從而大大提高讀取速度。

redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)和zset(有序集合)。

【2】你對於設計模式和MVC的理解

Model-View-Controller,模型、檢視、控制器,一想到MVC就會想到JAVA,因為JAVA是一個完全物件導向的語言,MVC最早出現在smalltalk中,其核心就是要將試圖和資料模型分離,這樣不同的程式就可以有不同的展示。

模型,即程式設計師寫的功能、演算法和資料模型,也就是我們說的系統業務邏輯層。

檢視,即前端,圖形介面。展示給使用者看的。

控制器,主要負責對請求處理、轉發和載入檢視。

設計模式,說白了就是程式碼的設計經驗的總結和歸類,設計模式最早應用於建築行業,程式設計的設計模式按最早的GoF所述,包括23種設計模式,主要用於物件導向的程式程式設計。遵循幾個設計原則:開閉原則、單一職責原則、里氏替換原則、依賴注入、介面分離、迪米特原則、優先使用組合而不是繼承等等。包括建立型模式、結構性模式、行為模式三類。

【3】HTTP協議1.0及1.1的區別,並簡單說下HTTP協議

HTTP,超文字傳輸協議。它定義了瀏覽器和伺服器的通訊規則。HTTP協議是基於TCP/IP的TCP協議上,現在全球資訊網使用的是HTTP1.1版本,其特點包括,C/S模式,請求簡單(GET/POST/HEAD),靈活(可以傳輸任何型別的資料HTML、XML、JSON、自定義等),無連線(每次連線只處理一個請求,從發出請求到收到200狀態為止斷開連線),無狀態。

對HTTP協議的考察主要包括,響應訊息格式、請求訊息格式、狀態碼等知識點。

一般一個HTTP協議包括:起始行(start line)、首部(header)、主體(body)三個部分。

[響應訊息格式]

HTTP/1.1 200 0K

Connectlon:close

Date: Thu, 13 Oct 2005 03:17:33 GMT

Server: Apache/2.0.54 (Unix)

Last—Nodified:Mon,22 Jun 1998 09;23;24 GMT

Content—Length:682l

Content—Type:text/html

這個響應訊息分為3部分:1個起始的狀態行(status line),首部、1個包含所請求物件本身的附屬體。狀態行有3個欄位:協議版本欄位、狀態碼欄位、原因短語欄位。

[請求訊息格式]

GET /somedir/ HTTP/1.1

Host:

Connection:close

User-agent:Mozilla/4.0

Accept-language:zh-cn

(額外的回車符和換行符)

該請求訊息的`第一行稱為請求行 (request line),後續各行都稱為頭部行(header)。請求行有3個欄位:方法欄位、URL欄位、HTTP版本欄位。

[狀態碼]參見

1xx 訊息

2xx 成功

3xx 重定向

4xx 請求錯誤

5xx 伺服器錯誤

[常見狀態碼]

200 OK。請求已成功,請求所希望的響應頭或資料體將隨此響應返回。

300 Multiple Choices。請求資源有多個選擇,如請求文字有法語版、英語版等等。

301 Moved Permanently。表示請求的網頁已永久轉移到新位置

302 Found。表示頁面在做臨時跳轉時返回的狀態。

304 Not Modified。客戶的快取資源是最新的, 要客戶端使用快取。

400 Bad Request。錯誤的請求。

403 Forbidden。請求被伺服器拒絕了。

404 Not Found。表示伺服器找不到請求的網頁,伺服器上不存在的網頁經常會返回的HTTP狀態碼。

500 Internal Server Error。

503 Service Unavailable。伺服器目前無法為請求提供服務,但過一段時間就可以恢復服務。

504 Gateway Timeout。與狀態嗎408類似, 但是響應來自閘道器或代理,此閘道器或代理在等待另一臺伺服器的響應時出現了超時。

505 HTTP Version not supported。 HTTP協議版本不支援。

【4】簡單說下Apache中rewrite機制和PHP框架中URI路由機制

1)URL重寫,其實就是把使用者通過瀏覽器請求的URL,到了後臺,apache根據預先配置的重寫規則將該請求指向真正的資源路徑,說白了就是打馬虎眼,把真正的路徑改頭換面後給使用者訪問,可問題是這樣做有啥用處呢。

1、SEO方面。將動態的URL靜態化,以滿足搜尋引擎的胃口。

2、訪問控制。比如,通過重寫規則後,客戶端不易判斷後臺程式型別等。

3、URL重定向。當網站更改域名或增加別名URL後,可以通過規則輕鬆的指向要訪問的URL。

_

mod_rewrite 使用基於正則表示式動態的修改傳入請求的URL。它可以將URL對映到檔案系統路徑,也可以將一個URL對映到另一個URL。它使用了沒有限制數量的規則來操縱URL,每條規則可以包括沒有限制數量的附加條件。你可以通過多種方式來檢測,如,伺服器變數、環境變數、HTTP頭、時間戳等。

mod_rewrite 操作整個URL路徑,包括path-info的部分。一個重寫規則可以被設定在或者cess中。一個重寫規則生成的路徑可以包括一個請求字串,或者內部的子程式處理,外部請求的重定向,或者穿透內部代理等。

2)PHP框架中的URI路由機制,與apache重寫類似,一般包括萬用字元和正則兩種規則。讓使用者可以重新定向(remap)URI處理程式. 設定你自己的路由規則。

【5】MySQL的索引機制,複合索引的使用原則

(深入淺出MySQL一書中對索引的使用講的比較細緻)

一般都會用書本中的目錄來介紹索引機制,包括有些書本會有專門的快速檢索附錄,就很類似於資料庫的索引。

MySQL的索引包括4類:主鍵索引(primary key)、唯一索引(unique)、常規索引(index)、全文索引(fullindex)。

Show index from table_name; –查看錶中的索引

Show status like ‘Handler_read%’ –檢視索引的使用情況

複合索引,一般遵循最左字首原則,如table_a 的 a b c 三列建複合索引

create index ind_table_a on table_a(a,b,c);

那麼,只有在條件中用到a,或者a、b,或者a、b、c這樣的情況下,才會用到剛建的複合索引。

【6】如何理解OOP

OOP,物件導向程式設計,包括三個方面,繼承性、封裝性、多型性,其中最根本的東西就是抽象。

繼承性,即擴充套件性,通過子類對已經存在的父類進行功能擴充套件。

封裝性,要求外部不能隨意存取物件的內部資料,即對該類中的具體實現做封裝,使用者不必知道內部的具體實現,只有知道它是幹什麼的,怎麼用就好了。

多型性,就是類的抽象和介面,同一個類能夠處理多種型別物件的能力。

我們在現實中,看到的任何東東都可以看做為一個物件,然後通過進一步的抽象為類,類又可以演變為很多類似的物件。舉個簡單的例子,將我們看到的一個房子抽象為一個ROOM類,包括基本的門,窗,桌子等物件,人可以進出等功能。 現在我們繼承ROOM類為Classroom,包括扇門,有大窗,有桌椅,另外只包括一個黑白和一個講臺,老師和同學可以上課。現在我們例項化這個Classroom類為Classroom_621物件,包括兩扇門,四扇大窗,30套桌椅,有同學正在上毛概課。

熱門標籤