1. 程式人生 > >PHP面試100題彙總【1-20題】

PHP面試100題彙總【1-20題】

正文內容

1,Http 和Https的區別

第一:http是超文字傳輸協議,資訊是明文傳輸,https是具有安全性的ssl加密傳輸協議

第二:http和https使用的是完全不同的連線方式,埠也不一樣,前者80 或者443

第三:http連線很簡單,是無狀態的。https協議是由ssl+http協議構建的可進行加密傳輸,身份認證的網路協議。

 

2.什麼方法來加快頁面的載入速度

1,用到伺服器資源時在開啟,不用時,立即關閉伺服器資源。

2,資料庫新增索引

3,頁面可生成靜態

4,圖片等大檔案單獨放在一個伺服器

5,能不查詢資料庫的儘量不去資料取資料,可以放在快取中。

 

3.表單中 get與post提交方法的區別?

答:get是傳送請求HTTP協議通過url引數傳遞進行接收,而post是實體資料,可以通過表單提交大量資訊.

 

4.echo ,print,print_r 的區別:

echo 是php語句,無返回值。

print,print_r是函式,有返回值。

print()    只能打印出簡單型別變數的值(如int,string)

print_r() 可以打印出複雜型別變數的值(如陣列,物件)

echo     輸出一個或者多個字串

 

5.session與cookie區別

session與cookie相同:跨頁面、不跨使用者

session與cookie不相同:

1、session可以儲存任意型別的資料,但cookie只能儲存字串

2、cookie產生在伺服器端、儲存在客戶端

session產生在伺服器端、儲存在伺服器端

 

6.魔術常量

答案:

__LINE__檔案中的當前行號。

__FILE__檔案的完整路徑和檔名。

__FUNCTION__函式名稱

__CLASS__類的名稱

__METHOD__類的方法名

 

7.資料庫中的事務是什麼?

答:事務(transaction)是作為一個單元的一組有序的資料庫操作。如果組中的所有操作都成功,則認為事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作完成,事務則提交,其修改將作用於所有其他資料庫程序。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。

 

8.1優化MYSQL資料庫的方法。

1、選擇合適的欄位的資料型別

1)能用數字不用字串

2)char、varchar、text  能用varchar不用char

3)給欄位加not null 避免在表中出現NULL關鍵字(default 值)

2、選擇合適的欄位充當主鍵

1)建議每張表必須有主鍵

2)用數字型別的欄位充當主鍵

拆分表

拆分欄位,將文章的標題與內容分開

2)拆分記錄,將今年的記錄與往年的記錄分開

給欄位合理新增索引

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 語句將新值更新到表中。

包含有 WRITE 關鍵字的 LOCK TABLE 語句可以保證在 UNLOCK TABLES 命令被執行之前,

不會有其它的訪問來對 inventory 進行插入、更新或者刪除的操作

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");

7、使用外來鍵,優化鎖定表

a.把customerinfo裡的customerid對映到orderinfo裡的customerid,

任何一條沒有合法的customerid的記錄不會寫到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',該引數保證當customerinfo表中的一條記錄刪除的話同時也會刪除order

表中的該使用者的所有記錄,注意使用外來鍵要定義事務安全型別為INNODB;

8、優化查詢語句

a用內連線代替子查詢代替子查詢,用sphinx代替like模糊查詢

 

b最好在相同欄位進行比較操作,在建立好的索引欄位上儘量減少函式操作

例子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";

快取,靜態化

選擇合適儲存引擎用Innodb增刪改,用myisam查詢

主從資料庫

負載均衡

最好拿數字型別的欄位充當where條件

最好拿相同型別的欄位進行比對(避免發生資料型別的轉換)

不要在具有索引的欄位上新增資料庫函式(索引失效)

 

8.2請簡述專案中優化sql語句執行效率的方法,從哪些方面,sql語句效能如何分析?

答:(1)選擇最有效率的表名順序

(2)WHERE子句中的連線順序

(3)SELECT子句中避免使用‘*’

(4)用Where子句替換HAVING子句

(5)通過內部函式提高SQL效率

(6)避免在索引列上使用計算。

(7)提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉。

 

9.對於大流量網站,採用什麼方法解決訪問量問題?

1,確認伺服器的硬體是否足夠支援當前的流量

2,優化資料庫的訪問

3,禁止外部的盜鏈

4,控制大檔案的下載

5,使用不同主機分流主要流量

6,使用流量分析統計軟體

 

10.一個函式,能夠遍歷一個資料夾下的所有檔案和子資料夾(20分)

function dir_recurse($dir) {
$i = 1;
if($handle = opendir($dir)) {
while(false !== ($file = readdir($handle))) {
if($file != "."&& $file != ".." ) {
if(is_dir($dir."/".$file) == true) {
$fullpath = $dir."/".$file;
dir_recurse($fullpath);
echo "$fullpath\n";
$i++;
}else {
$fullpath = $dir."/".$file;
echo "$fullpath\n";

$i++;
}
}
}
closedir($handle);
}
}

10.2寫一個函式,能夠遍歷一個資料夾下的所有檔案和子資料夾。

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;
}
}

11、能夠使HTML和PHP分離開使用的模板(1分)

答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate

 

12、使用哪些工具進行版本控制?(1分)

答:cvs,svn,vss;

 

13、如何實現字串翻轉?(3分)

英文:

strrev($a)

中文或其他文字:

中文:GB2312, 程式碼是使用GB2312編碼

<?php
function reverse($str)
{
$ret = "";
len=mb s trwidth( len=mbstrwidth(len = mb_strwidth(str,"GB2312");
for(i=0; i=0;i=0; i< len; len;len; i++)
{
arr[]=mb s ubstr( arr[]=mbsubstr(arr[] = mb_substr(str, $i, 1, "GB2312");
}
return implode("", array_reverse($arr));
}
print_r(reverse("你好"));

14.PHP的意思(送1分)

PHP是一個基於服務端來建立動態網站的指令碼語言,您可以用PHP和HTML生成網站主頁

 

15.MYSQL取得當前時間的函式是?,格式化日期的函式是(2分)

答:now(),date()

 

16.用PHP寫出顯示客戶端IP與伺服器IP的程式碼1分)

答:列印客戶端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');

列印伺服器IP:echo gethostbyname("www.bolaiwu.com")

 

17、語句include和require的區別是什麼?為避免多次包含同一檔案,可用(?)語句代替它們?

答:require->require是無條件包含也就是如果一個流程里加入require,無論條件成立與否         都會先執行require

include->include有返回值,而require沒有(可能因為如此require的速度比include快)

注意:包含檔案不存在或者語法錯誤的時候require是致命的,include不是

 

18.http請求返回狀態碼

400 請求無效

401 未授權

403 請求被禁止

404 請求資源不存在

405 請求資源被禁止

406 無法接受

407 要求代理身份驗證

500 Internal Server Error 服務端原始碼錯誤

600 源站沒有返回響應頭部,只返回實現內容

 

19,linux授權碼:

600 屬主有讀寫許可權

644 屬主有讀寫許可權,屬性組有讀許可權

700 屬主有讀寫執行許可權

755 屬主有讀寫執行許可權,屬性組有讀,執行許可權

711 屬主有讀寫執行許可權,屬性組有執行許可權

666 所有使用者都有檔案的讀寫許可權

777 所有使用者都有檔案的讀寫執行許可權

 

20.有一個網頁地址, 比如PHP開發資源網主頁:http://www.phpres.com/index.html,如何得到它的內容?($1分)

答:方法1(對於PHP5及更高版本):

$readcontents = fopen("http://www.phpres.com/index.html", "rb");
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;

方法2:

echo file_get_contents("http://www.phpres.com/index.html");