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