- PHP算法面試題及答案 推薦度:
- PHP算法面試題目及答案 推薦度:
- php程序員面試題及答案 推薦度:
- 相關(guān)推薦
PHP面試題及答案(匯總)
PHP語(yǔ)言使用廣泛,語(yǔ)法吸收了C語(yǔ)言、Java和Perl的特點(diǎn)。本文是百分網(wǎng)小編搜索整理的關(guān)于PHP面試題及答案(匯總),供參考借鑒,希望對(duì)大家有所幫助!想了解更多相關(guān)信息請(qǐng)持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!
基礎(chǔ)題:
1.表單中 get與post提交方法的區(qū)別?
答:get是發(fā)送請(qǐng)求HTTP協(xié)議通過(guò)url參數(shù)傳遞進(jìn)行接收,而post是實(shí)體數(shù)據(jù),可以通過(guò)表單提交大量信息.
2.session與cookie的區(qū)別?
答:session:儲(chǔ)存用戶訪問(wèn)的全局唯一變量,存儲(chǔ)在服務(wù)器上的PHP指定的目錄中的(session_dir)的位置進(jìn)行的存放
cookie:用來(lái)存儲(chǔ)連續(xù)訪問(wèn)一個(gè)頁(yè)面時(shí)所使用,是存儲(chǔ)在客戶端,對(duì)于Cookie來(lái)說(shuō)是存儲(chǔ)在用戶WIN的Temp目錄中的。
兩者都可通過(guò)時(shí)間來(lái)設(shè)置時(shí)間長(zhǎng)短
3.數(shù)據(jù)庫(kù)中的事務(wù)是什么?
答:事務(wù)(transaction)是作為一個(gè)單元的一組有序的數(shù)據(jù)庫(kù)操作。如果組中的所有操作都成功,則認(rèn)為事務(wù)成功,即使只有一個(gè)操作失敗,事務(wù)也不成功。如果所有操作完成,
事務(wù)則提交,其修改將作用于所有其他數(shù)據(jù)庫(kù)進(jìn)程。如果一個(gè)操作失敗,則事務(wù)將回滾,該事務(wù)所有操作的影響都將取消。
簡(jiǎn)述題:
1、用php打印出前一天的時(shí)間格式是2006-5-10 22:21:21(2分)
答:echo date('Y-m-d H:i:s', strtotime('-1 days'));
2、echo(),print(),print_r()的區(qū)別(3分)
答:echo是PHP語(yǔ)句, print和print_r是函數(shù),語(yǔ)句沒(méi)有返回值,函數(shù)可以有返回值(即便沒(méi)有用)
print() 只能打印出簡(jiǎn)單類型變量的值(如int,string)
print_r() 可以打印出復(fù)雜類型變量的值(如數(shù)組,對(duì)象)
echo 輸出一個(gè)或者多個(gè)字符串
3、能夠使HTML和PHP分離開(kāi)使用的模板(1分)
答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate
5、使用哪些工具進(jìn)行版本控制?(1分)
答:cvs,svn,vss;
6、如何實(shí)現(xiàn)字符串翻轉(zhuǎn)?(3分)
答:echo strrev($a);
7、優(yōu)化MySQL數(shù)據(jù)庫(kù)的方法。(4分,多寫(xiě)多得)
答:
1、選取最適用的字段屬性,盡可能減少定義字段長(zhǎng)度,盡量把字段設(shè)置NOT NULL,例如'省份,性別',最好設(shè)置為ENUM
2、使用連接(JOIN)來(lái)代替子查詢:
a.刪除沒(méi)有任何訂單客戶:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)
b.提取所有沒(méi)有訂單客戶:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)
c.提高b的速度優(yōu)化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid
WHERE orderinfo.customerid IS NULL
3、使用聯(lián)合(UNION)來(lái)代替手動(dòng)創(chuàng)建的臨時(shí)表
a.創(chuàng)建臨時(shí)表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`
4、事務(wù)處理:
a.保證數(shù)據(jù)完整性,例如添加和修改同時(shí),兩者成立則都執(zhí)行,一者失敗都失敗
mysql_query("BEGIN");
mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";
mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");
mysql_query("COMMIT");
5、鎖定表,優(yōu)化事務(wù)處理:
a.我們用一個(gè) SELECT 語(yǔ)句取出初始數(shù)據(jù),通過(guò)一些計(jì)算,用 UPDATE 語(yǔ)句將新值更新到表中。
包含有 WRITE 關(guān)鍵字的 LOCK TABLE 語(yǔ)句可以保證在 UNLOCK TABLES 命令被執(zhí)行之前,
不會(huì)有其它的訪問(wèn)來(lái)對(duì) inventory 進(jìn)行插入、更新或者刪除的操作
mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");
mysql_query("SELECT customerid FROM `customerinfo` where id=".$id);
mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where customerid=".$id);
mysql_query("UNLOCK TABLES");
6、使用外鍵,優(yōu)化鎖定表
a.把customerinfo里的customerid映射到orderinfo里的customerid,
任何一條沒(méi)有合法的customerid的記錄不會(huì)寫(xiě)到orderinfo里
CREATE TABLE customerinfo
(
customerid INT NOT NULL,
PRIMARY KEY(customerid)
)TYPE = INNODB;
CREATE TABLE orderinfo
(
orderid INT NOT NULL,
customerid INT NOT NULL,
PRIMARY KEY(customerid,orderid),
FOREIGN KEY (customerid) REFERENCES customerinfo
(customerid) ON DELETE CASCADE
)TYPE = INNODB;
注意:'ON DELETE CASCADE',該參數(shù)保證當(dāng)customerinfo表中的一條記錄刪除的話同時(shí)也會(huì)刪除order
表中的該用戶的所有記錄,注意使用外鍵要定義事務(wù)安全類型為INNODB;
7、建立索引:
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[索引字段])
8、優(yōu)化查詢語(yǔ)句
a.最好在相同字段進(jìn)行比較操作,在建立好的索引字段上盡量減少函數(shù)操作
例子1:
SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)
SELECT * FROM order WHERE orderDate<"2008-01-01";(快)
例子2:
SELECT * FROM order WHERE addtime/7<24;(慢)
SELECT * FROM order WHERE addtime<24*7;(快)
例子3:
SELECT * FROM order WHERE title like "%good%";
SELECT * FROM order WHERE title>="good" and name<"good";
8、PHP的意思(送1分)
答:PHP是一個(gè)基于服務(wù)端來(lái)創(chuàng)建動(dòng)態(tài)網(wǎng)站的腳本語(yǔ)言,您可以用PHP和HTML生成網(wǎng)站主頁(yè)
9、mysql取得當(dāng)前時(shí)間的函數(shù)是?,格式化日期的函數(shù)是(2分)
答:now(),date()
10、實(shí)現(xiàn)中文字串截取無(wú)亂碼的方法。(3分)
答:function GBsubstr($string, $start, $length) {
if(strlen($string)>$length){
$str=null;
$len=$start+$length;
for($i=$start;$i<$len;$i++){
if(ord(substr($string,$i,1))>0xa0){
$str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return $str.'...';
}else{
return $string;
}
}
11、您是否用過(guò)版本控制軟件? 如果有您用的版本控制軟件的名字是?(1分)
12、您是否用過(guò)模板引擎? 如果有您用的模板引擎的名字是?(1分)
答:用過(guò),smarty
13、請(qǐng)簡(jiǎn)單闡述您最得意的開(kāi)發(fā)之作(4分)
答:信息分類
14、對(duì)于大流量的網(wǎng)站,您采用什么樣的方法來(lái)解決訪問(wèn)量問(wèn)題?(4分)
答:確認(rèn)服務(wù)器硬件是否足夠支持當(dāng)前的流量,數(shù)據(jù)庫(kù)讀寫(xiě)分離,優(yōu)化數(shù)據(jù)表,
程序功能規(guī)則,禁止外部的盜鏈,控制大文件的下載,使用不同主機(jī)分流主要流量
編程題:
13.寫(xiě)一個(gè)函數(shù),能夠遍歷一個(gè)文件夾下的所有文件和子文件夾。
答:
function my_scandir($dir)
{
$files = array();
if ( $handle = opendir($dir) ) {
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".." && $file != "." ) {
if ( is_dir($dir . "/" . $file) ) {
$files[$file] = scandir($dir . "/" . $file);
}else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
2. 在 HTML 語(yǔ)言中,頁(yè)面頭部的 meta 標(biāo)記可以用來(lái)輸出文件的編碼格式,以下是一個(gè)標(biāo)準(zhǔn)的 meta 語(yǔ)句
請(qǐng)使用 PHP 語(yǔ)言寫(xiě)一個(gè)函數(shù),把一個(gè)標(biāo)準(zhǔn) HTML 頁(yè)面中的類似 meta 標(biāo)記中的 charset 部分值改為 big5
請(qǐng)注意:
1. 需要處理完整的 html 頁(yè)面,即不光此 meta 語(yǔ)句
2. 忽略大小寫(xiě)
3. ' 和 " 在此處是可以互換的
4. 'Content-Type' 兩側(cè)的引號(hào)是可以忽略的,但 'text/html; charset=gbk' 兩側(cè)的不行
5. 注意處理多余空格
3. 寫(xiě)一個(gè)函數(shù),算出兩個(gè)文件的相對(duì)路徑
如 $a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
計(jì)算出 $b 相對(duì)于 $a 的相對(duì)路徑應(yīng)該是 ../../c/d將()添上
答:function getRelativePath($a, $b) {
$returnPath = array(dirname($b));
$arrA = explode('/', $a);
$arrB = explode('/', $returnPath[0]);
for ($n = 1, $len = count($arrB); $n < $len; $n++) {
if ($arrA[$n] != $arrB[$n]) {
break;
}
}
if ($len - $n > 0) {
$returnPath = array_merge($returnPath, array_fill(1, $len - $n, '..'));
}
$returnPath = array_merge($returnPath, array_slice($arrA, $n));
return implode('/', $returnPath);
}
echo getRelativePath($a, $b);
填空題:
1.在PHP中,當(dāng)前腳本的名稱(不包括路徑和查詢字符串)記錄在預(yù)定義變量__$_SERVER['PHP_SELF']__中;而鏈接到當(dāng)前頁(yè)面的URL記錄在預(yù)定義變量__$_SERVER['HTTP_REFERER']__
中
2.執(zhí)行程序段<?php echo 8%(-2) ?>將輸出__0__。
3.在HTTP 1.0中,狀態(tài)碼 401 的含義是____;如果返回“找不到文件”的提示,則可用 header 函數(shù),其語(yǔ)句為_(kāi)___。
4.數(shù)組函數(shù) arsort 的作用是__對(duì)數(shù)組進(jìn)行逆向排序并保持索引關(guān)系__;語(yǔ)句 error_reporting(2047)的作用是__報(bào)告所有錯(cuò)誤和警告__。
5.PEAR中的數(shù)據(jù)庫(kù)連接字符串格式是____。
6.寫(xiě)出一個(gè)正則表達(dá)式,過(guò)慮網(wǎng)頁(yè)上的所有JS/VBS腳本(即把scrīpt標(biāo)記及其內(nèi)容都去掉):preg_replace(" /<script[^>].*?>.*?</script>/si", "newinfo", $script);
7.以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語(yǔ)句____動(dòng)態(tài)裝載PHP模塊,然后再用語(yǔ)句____使得Apache把所有擴(kuò)展名為php的文件都作為PHP腳本處理。
LoadModule php5_module "c:/php/php5apache2.dll" , AddType application/x-httpd-php .php,
8.語(yǔ)句 include 和 require 都能把另外一個(gè)文件包含到當(dāng)前文件中,它們的區(qū)別是____;為了避免多次包含同一文件,可以用語(yǔ)句__require_once||include_once__來(lái)代替它們。
9.類的屬性可以序列化后保存到 session 中,從而以后可以恢復(fù)整個(gè)類,這要用到的函數(shù)是____。
10.一個(gè)函數(shù)的參數(shù)不能是對(duì)變量的引用,除非在php.ini中把__allow_call_time_pass_reference boolean__設(shè)為on.
11.SQL中LEFT JOIN的含義是__自然左外鏈接__。如果 tbl_user記錄了學(xué)生的姓名(name)和學(xué)號(hào)(ID),tbl_score記錄了學(xué)生(有的學(xué)生考試以后被開(kāi)除了,沒(méi)有其記錄)的學(xué)號(hào)(ID)
和考試成績(jī)(score)以及考試科目(subject),要想打印出各個(gè)學(xué)生姓名及對(duì)應(yīng)的的各科總成績(jī),則可以用SQL語(yǔ)句____。
12.在PHP中,heredoc是一種特殊的字符串,它的結(jié)束標(biāo)志必須____。
【PHP面試題及答案()】相關(guān)文章:
精選php面試題及答案06-01
PHP面試題及答案06-27
最新的PHP面試題及答案08-16
PHP算法面試題及答案11-04
流行的php面試題及答案09-14
PHP最新面試題及答案07-16
PHP算法面試題目及答案10-21
PHP常見(jiàn)面試題及答案10-09
PHP企業(yè)面試題附答案08-19