php高級面試題及答案
PHP高級面試題如果你有做好準備,面試中你就會輕松應對了,以下是小編幫你們整理的php高級面試題及答案,一起來學習啦。
php高級面試題及答案(一)
1.nginx使用哪種網絡協議?
nginx是應用層 我覺得從下往上的話 傳輸層用的是tcp/ip 應用層用的是http fastcgi負責調度進程
2. 沒有輸出結果, 可能是什么原因, 簡述的解決此問題的過程(提示: 語法沒有問題)
可能服務器上面沒有開啟短標簽short_open_tag =設置為Off,,php.ini開啟短標簽控制參數: short_open_tag = On
3. 簡述下面程序的輸出結果, 簡要說明為什么, 如何解決這類問題?
$tmp = 0 == "a"? 1: 2;
echo $tmp;
?>
結果 1 int和string類型強制轉換造成的,0==="a"
0 == 0 肯定是true啊
PHP是弱類型。。
$tmp = 0 === "a"? 1: 2;
echo $tmp; 這樣就是2
4. 已知一個字符串如下: $str = "1109063 milo 1";
用一行代碼將該字符串里面的1109063賦值給$uid, milo賦值給$user, 1賦值給$type
空格如下
list($uid, $user, $type) = explode(" ", $str);
\t如下
list($uid, $user, $type) = explode("\t", $str);
list($uid, $user, $type) = sscanf($str, "%d %s %d");
$n = sscanf($auth, "%d\t%s %s", $id, $first, $last);
5. 分別列出如下類型的有符號和無符號范圍 TINYINT SMALLINT MEDIUMINT INT
TINYINT-2^7 - 2^7-10 ~ 2^8-1
SMALLINT-2^15 - 2^15-1 0 ~ 2^16-1
MEDIUMINT-2^23 - 2^23-1 0 ~ 2^24-1
INT-2^31 - 2^31-1 0 ~ 2^32-1
6. 將下面的數組用一行拼裝成一個字符串i am milo! day day up!
$arr = array(
'I', 'AM', 'MILO!', 'DAY', 'DAY', 'UP!'
);
?>
$str = strtolower(implode(" ",$arr));
php高級面試題及答案(二)
1. echo count(“abcd”);輸出多少?
int count(mixed var)
返回單元數目,通常是一個array,任何其他類型都只有一個單元,有一個例外, 如果var是null結果是0
2.
$a=$b=$c=0;
$a=$b && $c;
運行以上代碼后$a $b $c 分別是?
$a=false
$c=0
$b=0
2. PHP打印出前一天的時間,格式是-12-29 22:21:21
echo date('Y-m-d H:i:s',strtotime('-1 day'));
strtotime 將任何英文文本的日期時間解析成時間戳
4. 請用php的heredoc語法格式輸出:hello world!
echo <<
hello world!
EOT;
5. $string = "abcdefg",那么$string{4}的值是?
$string{4}=e
因為PHP是弱類型語言,可以將字符串“視為數組”,當做字符集合看待,字符串中的字符可以在字符串之后用花括號指定所要字符從零開始的偏移量來訪問和修改。
6. 簡述echo(),print(),print_r()的區(qū)別。
echo,print是PHP語言結構, print_r是函數,語言結構沒有返回值,函數可以有返回值(即便沒有用)
print只能打印出簡單類型變量的值(如int,string)
print_r可以打印出復雜類型變量的值(如數組,對象)
7.用PHP寫出顯示客戶端IP與服務器IP的代碼。
客戶端: $_SERVER[REMOTE_ADDR]
服務器: $_SERVER[SERVER_ADDR]
php高級面試題及答案(三)
1. 調用如下函數獲取函數并獲取count的值
function get_list($cnd = array(), &$count = false)
{
// 偽代碼 處理$cnd 并賦值datas
$datas = 'i am call back';
$count && $count = rand(1, 10000);
return $datas;
}
?>
$count=1;
$data = get_list($cnd,&$count);
echo $count;
2. 幾種方式去取代session機制, 簡單描述各自的優(yōu)劣
mysql、memcache、cookie保持一種唯一狀態(tài)標識碼
3. 下列HTTP狀態(tài)碼出現的可能原因, 如何處理
200, 301, 404, 502, 503
200
請求已成功,請求所希望的響應頭或數據體將隨此響應返回。
301
被請求的資源已永久移動到新位置,并且將來任何對此資源的引用都應該使用本響應返回的若干個 URI 之一。如果可能,擁有鏈接編輯功能的客戶端應當自動把請求的地址修改為從服務器反饋回來的地址。除非額外指定,否則這個響應也是可緩存的。 新的永久性的 URI 應當在響應的 Location 域中返回。除非這是一個 HEAD 請求,否則響應的實體中應當包含指向新的 URI 的超鏈接及簡短說明。 如果這不是一個 GET 或者 HEAD 請求,因此瀏覽器禁止
自動進行重定向,除非得到用戶的確認,因為請求的條件可能因此發(fā)生變化。 注意:對于某些使用 HTTP/1.0 協議的瀏覽器,當它們發(fā)送的 POST 請求得到了一個301響應的話,接下來的重定向請求將會變成 GET 方式。
404
請求失敗,請求所希望得到的資源未被在服務器上發(fā)現。沒有信息能夠告訴用戶這個狀況到底是暫時的還是永久的。假如服務器知道情況的話,應當使用410狀 態(tài)碼來告知舊資源因為某些內部的配置機制問題,已經永久的不可用,而且沒有任何可以跳轉的地址。404這個狀態(tài)碼被廣泛應用于當服務器不想揭示到底為何請 求被拒絕或者沒有其他適合的響應可用的情況下。
502
作為網關或者代理工作的服務器嘗試執(zhí)行請求時,從上游服務器接收到無效的響應。
503
由于臨時的服務器維護或者過載,服務器當前無法處理請求。這個狀況是臨時的,并且將在一段時間以后恢復。如果能夠預計延遲時間,那么響應中可以包含一個 Retry-After 頭用以標明這個延遲時間。如果沒有給出這個 Retry-After 信息,那么客戶端應當以處理500響應的方式處理它。 注意:503狀態(tài)碼的存在并不意味著服務器在過載的時候必須使用它。某些服務器只不過是希望拒絕客戶端的連接。
200 OK 一切正常,對GET和POST請求的應答文檔跟在后面。
301 Moved Permanently 客戶請求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL
404 Not Found 無法找到指定位置的資源。這也是一個常用的應答。
502 Bad Gateway 服務器作為網關或者代理時,為了完成請求訪問下一個服務器,但該服務器返回了非法的應答。
503 Service Unavailable 服務器由于維護或者負載過重未能應答。例如,Servlet可能在數據庫連接池已滿的情況下返回503。服務器返回503時可以提供一個Retry-After頭。