php常見面試題及答案
PHP面試者在面試前的準備很重要,以下是小編幫你們整理的php常見面試題及答案,一起來學習啦。
php常見面試題及答案(一)
1、表單提交get和post有何區別?
答:get的方式是把數據在地址欄中發送,get傳送的數據量較小,不能大于2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
2、用PHP打印出前一天的時間格式是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的區別?
這兩種結構除了在如何處理失敗之外完全一樣。include() 產生一個警告而 require() 則導致一個致命錯誤。換句話說,如果你想在遇到丟失文件時停止處理頁面就用 require()。include() 就不是這樣,腳本會繼續運行。
4、echo(),print(),print_r()的區別
echo可以接多個參數,print只能接一個參數,它們都是PHP的語言結構,print_r是遞規打印,用來打印數組或對象
5、能夠使HTML和PHP分離開使用的模板smarty,phplib,SmartTemplate 6你如何理解MVC模式?
首先說一下框架,框架:就是別人把一些底層,常用操作.比如數據操作(增,刪,改,查)寫好.你來直接用.其它的功能要自己來做。
MVC:設計模式,M模型,V顯示,C控制.現在許多框架都是基于MVC來做的把邏輯和顯示分開.比如你要換頁面,只需要改V里面的東西并不需要再去變動程序(詳細的東西可以上網上查一下)
6、apache+mysql+php實現最大負載的方法
1) 問的太籠統,生成靜態html頁面,squid反向代理,apache,mysql的負載均衡。
2) 可以采取數據緩存的方法,我們通常在統計數據的時候,需要在原始數據的基礎上經過計算等一系列操作,才會得到最終的結果,如果每做一個查詢都需要這樣一系列操作,當數據量大時,勢必會帶來很多問題。可以建立一個結果表,寫一個腳本,用crontab定時觸發腳本去原始表取數據,計算,寫入到結果表,前端查詢從結果表取數據,這也是比較常用的一種做法。
3) 采用分布式,多個apache,多個mysql,其實就是dns負載均衡,dns根據當前用戶解析幾個ip的ping值,將用戶轉移到某一臺最快的服務器,或者平均分配。
4 )money不是問題的話,可以考慮F5硬件負載均衡!
5)可以使用Microsoft Windows Server系統的負載均衡設置
php常見面試題及答案(二)
1、如何實現PHP、JSP交互?
PHP提供了支持JAVA的類庫文件,或者通過HTTP協議來交互數據
2、使用哪些工具進行版本控制?
VSS,CVS,SVN
3、如何實現字符串翻轉?
不考慮中英文混合,不是最優算法,不用php庫函數翻轉字符串:
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;
}
4、優化MYSQL數據庫的方法。
1) 將where中用的比較頻繁的字段建立索引,聯合索引。
2) 保證單表數據不超過200W,適時分割表。
3) 避免使用長連接。
4) 修改my.cnf里面的各項參數,比如最大連接數,查詢緩存等。根據你的服務器內存來最大化調節那些配置參數。
5) 針對需求,使用正確的表引擎,是myisam或是innodb。
5.用PHP寫出顯示客戶端IP與服務器IP的代碼:
echo $_SERVER['REMOTE_ADDR'] //客戶端ip
echo $_SERVER['SERVER_ADDR'] //服務器端ip
php常見面試題及答案(三)
1、用PHP打印出前一天的時間格式是2006-5-10 22:21:21
2、echo(),print(),print_r()的區別
3、能夠使HTML和PHP分離開使用的模板
4、如何實現PHP、JSP交互?
5、使用哪些工具進行版本控制?
6、如何實現字符串翻轉?
7、優化MYSQL數據庫的方法。
8、談談事務處理
9、apache+mysql+php實現最大負載的方法
10、實現中文字串截取無亂碼的方法。
答案:
1.echo date('Y-m-d H:i:s', strtotime('-1 day'));
2.echo是語言結構,無返回值;print功能和echo基本相同,不同的是print是函數,有返回值;print_r是遞歸打印,用于輸出數組對象
3.so much,其實PHP本身就是一種模版引擎,我用過的是smarty,常見的還有PHPLib,FastTemplate,Savant這里有個模板引擎列表
4. 題目有點含糊不清,SOAP,XML_RPC,Socket ,CURL都可以實現這些,如果是考PHP和Java的整合,PHP內置了這種機制(如果考PHP和.NET的整合,也可以這么回答),例如$foo = new Java('java.lang.System');
5.CVS 和SVN,SVN號稱下一代CVS,功能強大,不過CVS是老牌,市占率很高.我一直用SVN,題目是問用什么工具,呃,這個可能需要這么回答:CVS Server on Apache作服務端,WinCVS作客戶端;Subversion on Apache/DAV 做服務端,TortoiseSVN做客戶端,或者Subclipse做客戶端.
6.用strrev函數唄,不準用PHP內置的就自己寫:
strrev($str)
{
$len=strlen($str);
$newstr = '';
for($i=$len;$i>=0;$i--)
{
$newstr .= $str{$i};
}
return $newstr;
}
7.高考政治題,把你知道的知識點都寫上吧.我的答案:
(1).數據庫設計方面,這是DBA和Architect的責任,設計結構良好的數據庫,必要的時候,去正規化(英文是這個:denormalize,中文翻譯成啥我不知道),允許部分數據冗余,避免JOIN操作,以提高查詢效率
(2).系統架構設計方面,表散列,把海量數據散列到幾個不同的表里面.快慢表,快表只留最新數據,慢表是歷史存檔.集群,主服務器Read & write,從服務器read only,或者N臺服務器,各機器互為Master
(3).(1)和(2)超越PHP Programmer的要求了,會更好,不會沒關系.檢查有沒有少加索引
(4).寫高效的SQL語句,看看有沒有寫低效的SQL語句,比如生成笛卡爾積的全連接啊,大量的Group By和order by,沒有limit等等.必要的時候,把數據庫邏輯封裝到DBMS端的存儲過程里面.緩存查詢結果,explain每一個sql語句
(5). 所得皆必須,只從數據庫取必需的數據,比如查詢某篇文章的評論數,select count(*) ... where article_id = ? 就可以了,不要先select * ... where article_id = ?然后msql_num_rows.只傳送必須的SQL語句,比如修改文章的時候,如果用戶只修改了標題,那就update ... set title = ? where article_id = ?不要set content = ?(大文本)
(6).必要的時候用不同的存儲引擎.比如InnoDB可以減少死鎖.HEAP可以提高一個數量級的查詢速度.
8.如同是個編程語言都會有答應Hello World的例子一樣,是本數據庫的教材都會講A給B的賬戶轉賬50美元的例子,回答這個就好了.不過據我所知,用MySQL的企業,很少用MySQL來實現事務處理.何況現在Oracle收購了InnoDB的公司.
9.參見第七題的答案,那個地方搞好了這個問題就迎刃而解了.
10.哈哈哈,我猜出題的人是不是被substr的中文處理問題煩惱很久了,是不是還用了網上流傳的用正則匹配