php經(jīng)典面試題及答案
對于PHP程序員在求職中,提前了解面試題及答案很重要,那么你做好面試準(zhǔn)備了嗎?下面小編已經(jīng)為你們整理了php經(jīng)典面試題及答案,一起來看看吧。
php經(jīng)典面試題及答案一
1、如何實(shí)現(xiàn)字符串翻轉(zhuǎn)?
不考慮中英文混合,不是最優(yōu)算法,不用php庫函數(shù)翻轉(zhuǎn)字符串:
function str_to_reverse( $str ){
for($length=0;$str[$length]!=null;$length++){;}
$strlength = $length-1;
unset($length);
for($start=0,$end=$strlength;$start<$end;$start++,$end--){
$temp = $str[$start];
$str[$start] = $str[$end];
$str[$end] = $temp;
}
unset($temp,$start,$end,$strlength);
return $str;
}
2、優(yōu)化MYSQL數(shù)據(jù)庫的方法。
1) 將where中用的比較頻繁的字段建立索引,聯(lián)合索引。
2) 保證單表數(shù)據(jù)不超過200W,適時(shí)分割表。
3) 避免使用長連接。
4) 修改my.cnf里面的各項(xiàng)參數(shù),比如最大連接數(shù),查詢緩存等。根據(jù)你的服務(wù)器內(nèi)存來最大化調(diào)節(jié)那些配置參數(shù)。
5) 針對需求,使用正確的表引擎,是myisam或是innodb。
3.用PHP寫出顯示客戶端IP與服務(wù)器IP的代碼:
echo $_SERVER['REMOTE_ADDR'] //客戶端ip
echo $_SERVER['SERVER_ADDR'] //服務(wù)器端ip
4、apache+mysql+php實(shí)現(xiàn)最大負(fù)載的方法
1) 問的太籠統(tǒng),生成靜態(tài)html頁面,squid反向代理,apache,mysql的負(fù)載均衡。
2)可以采取數(shù)據(jù)緩存的方法,我們通常在統(tǒng)計(jì)數(shù)據(jù)的時(shí)候,需要在原始數(shù)據(jù)的基礎(chǔ)上經(jīng)過計(jì)算等一系列操作,才會得到最終的結(jié)果,如果每做一個(gè)查詢都需要這樣一系列操作,當(dāng)數(shù)據(jù)量大時(shí),勢必會帶來很多問題。可以建立一個(gè)結(jié)果表,寫一個(gè)腳本,用crontab定時(shí)觸發(fā)腳本去原始表取數(shù)據(jù),計(jì)算,寫入到結(jié)果表,前端查詢從結(jié)果表取數(shù)據(jù),這也是比較常用的一種做法。
3)采用分布式,多個(gè)apache,多個(gè)mysql,其實(shí)就是dns負(fù)載均衡,dns根據(jù)當(dāng)前用戶解析幾個(gè)ip的ping值,將用戶轉(zhuǎn)移到某一臺最快的服務(wù)器,或者平均分配。
4)money不是問題的話,可以考慮F5硬件負(fù)載均衡!
5)可以使用Microsoft Windows Server系統(tǒng)的負(fù)載均衡設(shè)置
php經(jīng)典面試題及答案二
1、請舉例說明在你的開發(fā)過程中用什么方法來加快頁面的加載速度
答:要用到服務(wù)器資源時(shí)才打開,及時(shí)關(guān)閉服務(wù)器資源,數(shù)據(jù)庫添加索引,頁面可生成靜態(tài),圖片等大文件單獨(dú)服務(wù)器。使用代碼優(yōu)化工具
2、.以下的代碼會產(chǎn)生什么?為什么?
$num =10;
function multiply(){
$num =$num *10;
}
multiply();
echo $num;
由于函式 multiply() 沒有指定 $num 為全域變量(例如 global $num 或者 $_GLOBALS['num']),所以 $num 的值是 10。
3. php class中static,public,private,protected的區(qū)別?
static 靜態(tài),類名可以訪問
public 表示全局,類內(nèi)部外部子類都可以訪問;
private表示私有的,只有本類內(nèi)部可以使用;
protected表示受保護(hù)的,只有本類或子類或父類中可以訪問;
4. HTTP協(xié)議中GET、POST和HEAD的區(qū)別?
HEAD: 只請求頁面的首部。
GET: 請求指定的頁面信息,并返回實(shí)體主體。
POST: 請求服務(wù)器接受所指定的文檔作為對所標(biāo)識的URI的新的從屬實(shí)體。
(1)HTTP 定義了與服務(wù)器交互的不同方法,最基本的方法是 GET 和 POST。事實(shí)上 GET 適用于多數(shù)請求,而保留 POST 僅用于更新站點(diǎn)。
(2)在FORM提交的時(shí)候,如果不指定Method,則默認(rèn)為GET請 求,F(xiàn)orm中提交的數(shù)據(jù)將會附加在url之后,以?分開與url分開。字母數(shù)字字符原樣發(fā)送,但空格轉(zhuǎn)換為"+"號,其它符號轉(zhuǎn)換為%XX,其中XX為 該符號以16進(jìn)制表示的ASCII(或ISO Latin-1)值。GET請求請?zhí)峤坏臄?shù)據(jù)放置在HTTP請求協(xié)議頭中,而POST提交的數(shù)據(jù)則放在實(shí)體數(shù)據(jù)中;
GET方式提交的數(shù)據(jù)最多只能有1024字節(jié),而POST則沒有此限制。
(3)GET 這個(gè)是瀏覽器用語向服務(wù)器請求最常用的方法。POST這個(gè)方法也是用來傳送數(shù)據(jù)的,但是與GET不同的是,使用POST的時(shí)候,數(shù)據(jù)不是附在URI后面?zhèn)鬟f的,而是要做為獨(dú)立的行來傳遞,此時(shí)還必須要發(fā)送一個(gè)Content_length標(biāo)題,以標(biāo)明數(shù)據(jù)長度,隨后一個(gè)空白行,然后就是實(shí)際傳送的數(shù)據(jù)。網(wǎng)頁的表單通常是用POST來傳送的。
php經(jīng)典面試題及答案三
1、表單提交get和post的區(qū)別?
答:get的方式是把數(shù)據(jù)在地址欄中發(fā)送,get傳送的數(shù)據(jù)量較小不能大于2KB。post傳送的數(shù)據(jù)量比較大,一般默認(rèn)為不受限制。
2、用PHP大于出前一天的時(shí)間格式2006-5-10 22:21:21
echo date("Y-m-d H:i:s",time-(3600*24)) 或者是 echo date("Y-m-d H:i:s",strtotime("-1 day"))
3、php中include和require的區(qū)別?
這兩種結(jié)構(gòu)除了在如何處理失敗之外完全一樣。include() 產(chǎn)生一個(gè)警告而 require() 則導(dǎo)致一個(gè)致命錯(cuò)誤。換句話說,如果你想在遇到丟失文件時(shí)停止處理頁面就用 require()。include() 就不是這樣,腳本會繼續(xù)運(yùn)行。
4、echo(),print(),print_r()的區(qū)別
echo可以接多個(gè)參數(shù),print只能接一個(gè)參數(shù),它們都是PHP的語言結(jié)構(gòu),print_r是遞規(guī)打印,用來打印數(shù)組或?qū)ο?/p>
5、能夠使HTML和PHP分離開使用的模板
smarty,phplib,SmartTemplate
6你如何理解MVC模式?
首先說一下框架,框架:就是別人把一些底層,常用操作.比如數(shù)據(jù)操作(增,刪,改,查)寫好.你來直接用.其它的功能要自己來做。MVC:設(shè)計(jì)模式,M模型,V顯示,C控制.現(xiàn)在許多框架都是基于MVC來做的把邏輯和顯示分開.比如你要換頁面,只需要改V里面的東西并不需要再去變動(dòng)程序!(詳細(xì)的東西可以上網(wǎng)上查一下)
7、如何實(shí)現(xiàn)PHP、JSP交互?
PHP提供了支持JAVA的類庫文件,或者通過HTTP協(xié)議來交互數(shù)據(jù)
8、使用哪些工具進(jìn)行版本控制?
VSS,CVS,SVN
看了“php經(jīng)典面試題及答案”