PHP面試試題精選

導語:PHP需要的時候不像其他面試,HR總回問到你一些技術性的問題。下面的是本站小編爲大家整理的一些PHP面試試題。

PHP面試試題精選

  php面試題:

1、PHP的整型溢出問題是怎樣的

2、如何理解OOP

3、你對於設計模式和MVC的理解

4、HTTP協議1.0及1.1的區別,並簡單說下HTTP協議

5、簡單說下Apache中rewrite機制和PHP框架中URI路由機制

6、MySQL的索引機制,複合索引的使用原則

7、MySQL的表類型及MyISAM與InnoDB的區別

8、簡單說下快速排序算法

9、awk、sed、sort的基本使用(用實例考察的)

10、Memcached、redis的使用和理解

  PHP的整型溢出問題是怎樣的

PHP的整型數的字長和平臺有關,對於32位的操作系統,最大的整型是有二十多億,其實就是2的31次方,最小爲-2的31次方,PHP不支持無符號的整數。 如果一個數超出了integer範圍,將會被自動解釋爲float。如果執行的運算結果超出了 integer 範圍,也會返回 float。(那在java、C中的整型整型溢出會怎樣)

如何理解OOP

OOP,面向對象編程,包括三個方面,繼承性、封裝性、多態性,其中最根本的東西就是抽象。

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

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

多態性,就是類的抽象和接口,同一個類能夠處理多種類型對象的能力。

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

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

Model-View-Controller,模型、視圖、控制器,一想到MVC就會想到JAVA,因爲JAVA是一個完全面向對象的語言,MVC最早出現在smalltalk中,其核心就是要將試圖和數據模型分離,這樣不同的程序就可以有不同的展示。

模型,即程序員寫的功能、算法和數據模型,也就是我們說的系統業務邏輯層。

試圖,即前端,圖形界面。展示給用戶看的。

控制器,主要負責對請求處理和轉發。

設計模式,其實就是代碼的設計經驗的總結和歸類,設計模式最早應用與建築行業,編程的設計模式按最早的GoF所述,包括23種設計模式,主要用於面向對象的程序編程。遵循幾個設計原則:開閉原則、單一職責原則、里氏替換原則、依賴注入、接口分離、迪米特原則、優先使用組合而不是繼承等等。包括創建型模式、結構性模式、行爲模式三類。

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

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

HTTP協議主要包括,響應消息格式、請求消息格式、狀態碼知識點

  [響應消息格式]

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),6個頭部行、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。請求已成功,請求所希望的響應頭或數據體將隨此響應返回。

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

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

303 Not Modified。客戶的緩存資源是最新的, 要客戶端使用緩存。

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

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

500 Internal Server Error。

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

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

  簡單說下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處理程序. 設定你自己的路由規則。

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這樣的情況下,纔會用到剛建的複合索引。

MySQL的表類型及MyISAM與InnoDB的區別

MySQL常見的表類型(即存儲引擎)show engines包 括:MyISAM/Innodb/Memory/Merge/NDB

其中,MyISAM和Innodb是最常用的兩個表類型,各有優勢,我們可以根據需求情況選擇適合自己的表類型。

  [MyISAM]

1)每個數據庫存儲包括3個文件:(表定義)、MYD(數據文件)、MYI(索引文件)

2)數據文件或索引文件可以指向多個磁盤

3)Linux的默認引擎,win默認InnoDB

4)面向非事務類型,避免事務型額外的開銷

5)適用於select、insert密集的表

6)MyISAM默認鎖的調度機制是寫優先,可以通過LOW_PRIORITY_UPDATES設置

7)MyISAM類型的數據文件可以在不同操作系統中COPY,這點很重要,佈署的時候方便點。

[Innodb]

1)用於事務應用程序

2)適用於update、delete密集的操作。執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數即可。注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的。DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。

3)引入行級鎖和外鍵的約束

4)InnoDB不支持FULLTEXT類型的索引

簡單說下快速排序算法

基本思想:通過一趟排序將待排序列分割成兩部分,其中一部分比另一部分記錄小,再分別對這兩部分繼續快速排序,以達到有序。

算法實現:設有兩個指針low和high,初值爲low=1,high=n,設基準值爲key(通常選第一個),則首先從high位置開始向前搜索,找到第一個比key小的記錄與key交換,然後從low位置向後搜索,找到第一個比key大的記錄與基準值交換,重複直至low=high爲止。

第一趟排序結果,key之前的記錄值比key之後的記錄值小。

11 25 9 3 16 2 //選擇11爲key

2 25 9 3 16 11

2 11 9 3 16 25

2 3 9 11 16 25

awk、sed、sort的基本使用(用實例考察的)

[例]:有如下文件test,請統計每個網址出現次數,用一句shell實現。

a 20:00

b 19:30

c 14:00

d 23:00

e 20:30

f 20:30

cat test| awk -F' ' '{print $2}' |sort -n |uniq -c

Memcached、redis的使用和理解

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

下面是從百科中摘錄的介紹。具體實踐和使用後續再詳細介紹。

Memcache是一個高性能的分佈式的內存對象緩存系統,通過在內存裏維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然後從內存中讀取,從而大大提高讀取速度。

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