php面試題及答案
PHP面試者在面試前的準(zhǔn)備很重要,以下是小編幫你們整理的php面試題及答案,一起來學(xué)習(xí)啦。
php面試題及答案(一)
1. echo count(“abcd”);輸出多少?
int count(mixed var)
返回單元數(shù)目,通常是一個(gè)array,任何其他類型都只有一個(gè)單元,有一個(gè)例外, 如果var是null結(jié)果是0
2.
$a=$b=$c=0;
$a=$b && $c;
運(yùn)行以上代碼后$a $b $c 分別是?
$a=false
$c=0
$b=0
3. PHP打印出前一天的時(shí)間,格式是-12-29 22:21:21
echo date('Y-m-d H:i:s',strtotime('-1 day'));
strtotime 將任何英文文本的日期時(shí)間解析成時(shí)間戳
4. 請(qǐng)用php的heredoc語法格式輸出:hello world!
echo <<
hello world!
EOT;
5. $string = "abcdefg",那么$string{4}的值是?
$string{4}=e
因?yàn)镻HP是弱類型語言,可以將字符串“視為數(shù)組”,當(dāng)做字符集合看待,字符串中的字符可以在字符串之后用花括號(hào)指定所要字符從零開始的偏移量來訪問和修改。
6. 簡(jiǎn)述echo(),print(),print_r()的區(qū)別。
echo,print是PHP語言結(jié)構(gòu), print_r是函數(shù),語言結(jié)構(gòu)沒有返回值,函數(shù)可以有返回值(即便沒有用)
print只能打印出簡(jiǎn)單類型變量的值(如int,string)
print_r可以打印出復(fù)雜類型變量的值(如數(shù)組,對(duì)象)
php面試題及答案(二)
1.用PHP寫出顯示客戶端IP與服務(wù)器IP的代碼。
客戶端: $_SERVER[REMOTE_ADDR]
服務(wù)器: $_SERVER[SERVER_ADDR]
2、用正則表達(dá)式判斷$a是否是一個(gè)以半角逗號(hào)分隔的多個(gè)手機(jī)號(hào)碼組成的字符串,是輸出yes
$phone = '13725439919,18588421409,18817006902';
$pattern = '/^(1[34568]\d{9},)+(1[34568]\d{9})?$/';
if(preg_match_all($pattern,$phone,$out)){
echo 'yes';
}else{
echo 'no';
}
echo '
';
print_r($out);
3、解釋MVC,介紹幾種目前比較流行的MVC框架
由模型(model),視圖(view),控制器(controller)完成的應(yīng)用程序
MVC模式的目的就是實(shí)現(xiàn)Web系統(tǒng)的功能分工,它強(qiáng)制性地把應(yīng)用程序的輸入、處理和輸出分開,可以各自處理自己的任務(wù),是一種分層的概念。Model層實(shí)現(xiàn)系統(tǒng)中的業(yè)務(wù)邏輯,View層用于與用戶的交互,Controller層是Model和View之間溝通的橋梁。
Symfony:是為開發(fā)大型web準(zhǔn)備的,學(xué)習(xí)曲線比較長(zhǎng)。
Laravel:簡(jiǎn)潔、優(yōu)雅。
php面試題及答案(三)
一、描述一下大流量高并發(fā)網(wǎng)站的解決方案
1) LVS或nginx負(fù)載均衡器,通過負(fù)載均衡把壓力分擔(dān)到多臺(tái)服務(wù)器.
2) squid緩存或nginx web cache緩存
3) web 服務(wù)器選型(nginx代替apache)
4) 頁面靜態(tài)化(smarty或框架),數(shù)據(jù)緩存(memcache Redis)
5) memcache
6) sql語句一定要注意索引使用
7) 主從數(shù)據(jù)庫
8) 分庫分表或分區(qū)
主要從以下幾個(gè)方面回答:
1、硬件
1) 垂直拓展:買更好的服務(wù)器。一般不建議這么做,因?yàn)閱蝹€(gè)服務(wù)器都有上限
2) 水平拓展:多買幾臺(tái)服務(wù)器,利用負(fù)載均衡器(LVS、F5),將壓力分擔(dān)到不同服務(wù)器上。
2、 數(shù)據(jù)庫
a) 數(shù)據(jù)庫優(yōu)化 : 1、分表和分區(qū) 2、主從數(shù)據(jù)庫
b) 數(shù)據(jù)庫的選型 :可以考慮將apache換成nginx
c) SQl語句優(yōu)化
3、 緩存
a) 數(shù)據(jù)緩存 :使用memcache
B) 頁面靜態(tài)化 :框架的頁面靜態(tài)化、smarty
C) 使用CDN
參考答案:
1、硬件
購買更好的服務(wù)器,這種是縱向擴(kuò)展,但是不太推薦。購買更多的服務(wù)器,利用LVS或者F5搭建服務(wù)器集群。從而提高整個(gè)網(wǎng)站的計(jì)算速度。
2、web服務(wù)器
由于Apache的并發(fā)處理能力有限,所以可以考慮使用Nginx。
3、數(shù)據(jù)庫
Mysql要結(jié)合NoSQL使用,由于單個(gè)數(shù)據(jù)庫能力有限,所以要搭建主從數(shù)據(jù)庫。
4、緩存
a) 為了減小數(shù)據(jù)庫的壓力,考慮使用Memcache或Redis做緩存。 b) 把網(wǎng)站的絕大多數(shù)頁面進(jìn)行頁面靜態(tài)化。(phpcms)
c) 把靜態(tài)資源放到CDN上。
5、禁止外部的盜鏈
6、控制大文件的下載
二、如何防SQL注入
//表單盡量用post提交,核心用戶驗(yàn)證都走post,避開get
1、 表單盡量用post,表單判斷控制走get,因?yàn)間et比post速度快
2、 $_SERVER[HTTP_REFERER]判斷提交者的源頭,只能本站提交。
3、 使用addslashes轉(zhuǎn)義用戶提交的數(shù)據(jù)
4、 服務(wù)器本身的安全
5、 數(shù)據(jù)庫使用PDO,因?yàn)镻DO有預(yù)處理
三、如何實(shí)現(xiàn)多臺(tái)web服務(wù)器共享session數(shù)據(jù)
1、改變session的域 ,比如域名是www.baidu.com
域就應(yīng)該是.baidu.com
2、使用數(shù)據(jù)庫或者memcache存儲(chǔ)session數(shù)據(jù)