php常見面試題
php面試中,面試前必須做好準(zhǔn)備,提前對面試題目有所了解,以下是小編為大家整理的php常見面試題,希望可以幫到大家。
php常見面試題一
1、表單提交get和post有何區(qū)別?
答:get的方式是把數(shù)據(jù)在地址欄中發(fā)送,get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。但理論上,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的區(qū)別?
這兩種結(jié)構(gòu)除了在如何處理失敗之外完全一樣。include() 產(chǎn)生一個警告而 require() 則導(dǎo)致一個致命錯誤。換句話說,如果你想在遇到丟失文件時停止處理頁面就用 require()。include() 就不是這樣,腳本會繼續(xù)運行。
4、echo(),print(),print_r()的區(qū)別
echo可以接多個參數(shù),print只能接一個參數(shù),它們都是PHP的語言結(jié)構(gòu),print_r是遞規(guī)打印,用來打印數(shù)組或?qū)ο?/p>
5、能夠使HTML和PHP分離開使用的模板
smarty,phplib,SmartTemplate
6、你如何理解MVC模式?
首先說一下框架,框架:就是別人把一些底層,常用操作.比如數(shù)據(jù)操作(增,刪,改,查)寫好.你來直接用.其它的功能要自己來做。
MVC:設(shè)計模式,M模型,V顯示,C控制.現(xiàn)在許多框架都是基于MVC來做的把邏輯和顯示分開.比如你要換頁面,只需要改V里面的東西并不需要再去變動程序(詳細(xì)的東西可以上網(wǎng)上!查一下)
7、如何實現(xiàn)PHP、JSP交互?
PHP提供了支持JAVA的類庫文件,或者通過HTTP協(xié)議來交互數(shù)據(jù)
8、使用哪些工具進行版本控制?
VSS,CVS,SVN
9、如何實現(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;
}
10、優(yōu)化MYSQL數(shù)據(jù)庫的方法。
1) 將where中用的比較頻繁的字段建立索引,聯(lián)合索引。
2) 保證單表數(shù)據(jù)不超過200W,適時分割表。
3) 避免使用長連接。
4) 修改my.cnf里面的各項參數(shù),比如最大連接數(shù),查詢緩存等。根據(jù)你的服務(wù)器內(nèi)存來最大化調(diào)節(jié)那些配置參數(shù)。
5) 針對需求,使用正確的表引擎,是myisam或是innodb。
php常見面試題二
1、PHP/MySQL編程
1) 某內(nèi)容管理系統(tǒng)中,表message有如下字段
id 文章id
title 文章標(biāo)題
content 文章內(nèi)容
category_id 文章分類id
hits 點擊量
創(chuàng)建上表,寫出MySQL語句
2)同樣上述內(nèi)容管理系統(tǒng):表comment記錄用戶回復(fù)內(nèi)容,字段如下
comment_id 回復(fù)id
id 文章id,關(guān)聯(lián)message表中的id
comment_content 回復(fù)內(nèi)容
現(xiàn)通過查詢數(shù)據(jù)庫需要得到以下格式的文章標(biāo)題列表,并按照回復(fù)數(shù)量排序,回復(fù)最高的排在最前面
文章id 文章標(biāo)題 點擊量 回復(fù)數(shù)量
用一個SQL語句完成上述查詢,如果文章沒有回復(fù)則回復(fù)數(shù)量顯示為0
3) 上述內(nèi)容管理系統(tǒng),表category保存分類信息,字段如下
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用戶輸入文章時,通過選擇下拉菜單選定文章分類
3、實現(xiàn)中文字串截取無亂碼的方法。
這個首先要考慮字符集的問題,UTF-8下一個漢字占3字節(jié),GBK下一個漢字占2字節(jié).可以自己寫個函數(shù)來處理,別人也寫了很多,當(dāng)然也可以開啟mbstring擴展庫,使用里面的mb_substr()等函數(shù)來截取。當(dāng)截取字符出現(xiàn)亂碼時,是因為漢字被截斷了,可以再字符串尾部連上一個chr(0)
var $empty = '';
var $null = NULL;
var $bool = FALSE;
var $notSet;
var $array = array();
4,Http 和Https的區(qū)別
第一:http是超文本傳輸協(xié)議,信息是明文傳輸,https是具有安全性的ssl加密傳輸協(xié)議
第二:http和https使用的是完全不同的連接方式,端口也不一樣,前者80 或者443 第三:http連接很簡單,是無狀態(tài)的。https協(xié)議是由ssl+http協(xié)議構(gòu)建的可進行加密傳輸,身份認(rèn)證的網(wǎng)絡(luò)協(xié)議。
5.什么方法來加快頁面的加載速度
01,用到服務(wù)器資源時在打開,不用時,立即關(guān)閉服務(wù)器資源。
02,數(shù)據(jù)庫添加索引
03,頁面可生成靜態(tài)
04,圖片等大文件單獨放在一個服務(wù)器
05,能不查詢數(shù)據(jù)庫的盡量不去數(shù)據(jù)取數(shù)據(jù),可以放在緩存中。
6.表單中 get與post提交方法的區(qū)別?
答:get是發(fā)送請求HTTP協(xié)議通過url參數(shù)傳遞進行接收,而post是實體數(shù)據(jù),可以通過表單提交大量信息.
7.echo ,print,print_r 的區(qū)別:
echo 是php語句,無返回值。
print,print_r是函數(shù),有返回值。
print() 只能打印出簡單類型變量的值(如int,string) print_r() 可以打印出復(fù)雜類型變量的值(如數(shù)組,對象) echo 輸出一個或者多個字符串
8.session與cookie區(qū)別
session與cookie相同:跨頁面、不跨用戶
session與cookie不相同:
1、session可以存儲任意類型的數(shù)據(jù),但cookie只能存儲字符串
2、cookie產(chǎn)生在服務(wù)器端、存儲在客戶端
session產(chǎn)生在服務(wù)器端、存儲在服務(wù)器端
php常見面試題三
1.用PHP寫出顯示客戶端IP與服務(wù)器IP的代碼:
echo $_SERVER['REMOTE_ADDR'] //客戶端ip
echo $_SERVER['SERVER_ADDR'] //服務(wù)器端ip
2、apache+mysql+php實現(xiàn)最大負(fù)載的方法
1) 問的太籠統(tǒng),生成靜態(tài)html頁面,squid反向代理,apache,mysql的負(fù)載均衡。
2) 可以采取數(shù)據(jù)緩存的方法,我們通常在統(tǒng)計數(shù)據(jù)的時候,需要在原始數(shù)據(jù)的基礎(chǔ)上經(jīng)過計算等一系列操作,才會得到最終的結(jié)果,如果每做一個查詢都需要這樣一系列操作,當(dāng)數(shù)據(jù)量大時,勢必會帶來很多問題。可以建立一個結(jié)果表,寫一個腳本,用crontab定時觸發(fā)腳本去原始表取數(shù)據(jù),計算,寫入到結(jié)果表,前端查詢從結(jié)果表取數(shù)據(jù),這也是比較常用的一種做法。
3) 采用分布式,多個apache,多個mysql,其實就是dns負(fù)載均衡,dns根據(jù)當(dāng)前用戶解析幾個ip的ping值,將用戶轉(zhuǎn)移到某一臺最快的服務(wù)器,或者平均分配。
4 )money不是問題的話,可以考慮F5硬件負(fù)載均衡!
5)可以使用Microsoft Windows Server系統(tǒng)的負(fù)載均衡設(shè)置
3.數(shù)據(jù)庫中的事務(wù)是什么?
答:事務(wù)(transaction)是作為一個單元的一組有序的數(shù)據(jù)庫操作。如果組中的所有操作都成功,則認(rèn)為事務(wù)成功,即使只有一個操作失敗,事務(wù)也不成功。如果所有操作完成,事務(wù)則提交,其修改將作用于所有其他數(shù)據(jù)庫進程。如果一個操作失敗,則事務(wù)將回滾,該事務(wù)所有操作的影響都將取消。
4.1優(yōu)化MYSQL數(shù)據(jù)庫的方法。
1、選擇合適的字段的數(shù)據(jù)類型
1)能用數(shù)字不用字符串
2)char、varchar、text 能用varchar不用char
3)給字段加not null 避免在表中出現(xiàn)NULL關(guān)鍵字(default 值)
2、選擇合適的字段充當(dāng)主鍵
1)建議每張表必須有主鍵
2)用數(shù)字類型的字段充當(dāng)主鍵
3、拆分表
1)拆分字段,將文章的標(biāo)題與內(nèi)容分開
2)拆分記錄,將今年的記錄與往年的記錄分開
4、給字段合理添加索引
a.格式:
(普通索引)->
創(chuàng)建:CREATE INDEX <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
創(chuàng)表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段)) (唯一索引)->
創(chuàng)建:CREATE UNIQUE <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
創(chuàng)表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段)) (主鍵)->
它是唯一索引,一般在創(chuàng)建表是建立,格式為:
CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
5、事務(wù)處理:
a.保證數(shù)據(jù)完整性,例如添加和修改同時,兩者成立則都執(zhí)行,一者失敗都失敗 mysql_query("BEGIN");
mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";
mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");
mysql_query("COMMIT");
6、鎖定表,優(yōu)化事務(wù)處理:
a.我們用一個 SELECT 語句取出初始數(shù)據(jù),通過一些計算,用 UPDATE 語句將新值更新