博文谷

位置:首頁 > 教師之家 > 試題

php工程師面試題及答案

試題2.21W

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套桌椅,有同學正在上毛概課。