日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql面试100题及答案_PHP面试100题汇总

發(fā)布時(shí)間:2025/4/5 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql面试100题及答案_PHP面试100题汇总 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

PHP面試100題匯總

1,Http 和Https的區(qū)別

第一:http是超文本傳輸協(xié)議,信息是明文傳輸,https是具有安全性的ssl加密傳輸協(xié)議

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

第三:http連接很簡單,是無狀態(tài)的。https協(xié)議是由ssl+http協(xié)議構(gòu)建的可進(jìn)行加密傳輸,身份認(rèn)證的網(wǎng)絡(luò)協(xié)議。

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

1,用到服務(wù)器資源時(shí)在打開,不用時(shí),立即關(guān)閉服務(wù)器資源。

2,數(shù)據(jù)庫添加索引

3,頁面可生成靜態(tài)

4,圖片等大文件單獨(dú)放在一個(gè)服務(wù)器

5,能不查詢數(shù)據(jù)庫的盡量不去數(shù)據(jù)取數(shù)據(jù),可以放在緩存中。

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

答:get是發(fā)送請求HTTP協(xié)議通過url參數(shù)傳遞進(jìn)行接收,而post是實(shí)體數(shù)據(jù),可以通過表單提交大量信息.

4.echo ,print,print_r?的區(qū)別:

echo?是php語句,無返回值。

print,print_r是函數(shù),有返回值。

print()??? 只能打印出簡單類型變量的值(如int,string)

print_r() 可以打印出復(fù)雜類型變量的值(如數(shù)組,對象)

echo???? 輸出一個(gè)或者多個(gè)字符串

5.session與cookie區(qū)別

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

session與cookie不相同:

1、session可以存儲(chǔ)任意類型的數(shù)據(jù),但cookie只能存儲(chǔ)字符串

2、cookie產(chǎn)生在服務(wù)器端、存儲(chǔ)在客戶端

session產(chǎn)生在服務(wù)器端、存儲(chǔ)在服務(wù)器端

6.魔術(shù)常量

答案:

__LINE__文件中的當(dāng)前行號(hào)。

__FILE__文件的完整路徑和文件名。

__FUNCTION__函數(shù)名稱

__CLASS__類的名稱

__METHOD__類的方法名

7.數(shù)據(jù)庫中的事務(wù)是什么?

答:事務(wù)(transaction)是作為一個(gè)單元的一組有序的數(shù)據(jù)庫操作。如果組中的所有操作都成功,則認(rèn)為事務(wù)成功,即使只有一個(gè)操作失敗,事務(wù)也不成功。如果所有操作完成,事務(wù)則提交,其修改將作用于所有其他數(shù)據(jù)庫進(jìn)程。如果一個(gè)操作失敗,則事務(wù)將回滾,該事務(wù)所有操作的影響都將取消。

8.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)主鍵

拆分表

拆分字段,將文章的標(biāo)題與內(nèi)容分開

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

給字段合理添加索引

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ù)完整性,例如添加和修改同時(shí),兩者成立則都執(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.我們用一個(gè) SELECT 語句取出初始數(shù)據(jù),通過一些計(jì)算,用 UPDATE 語句將新值更新到表中。

包含有 WRITE 關(guān)鍵字的 LOCK TABLE 語句可以保證在 UNLOCK TABLES 命令被執(zhí)行之前,

不會(huì)有其它的訪問來對 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");

7、使用外鍵,優(yōu)化鎖定表

a.把customerinfo里的customerid映射到orderinfo里的customerid,

任何一條沒有合法的customerid的記錄不會(huì)寫到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;

8、優(yōu)化查詢語句

a用內(nèi)連接代替子查詢代替子查詢,用sphinx代替like模糊查詢

b最好在相同字段進(jìn)行比較操作,在建立好的索引字段上盡量減少函數(shù)操作

例子1:

SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)

SELECT * FROM order WHERE orderDate

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

緩存,靜態(tài)化

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

主從數(shù)據(jù)庫

負(fù)載均衡

最好拿數(shù)字類型的字段充當(dāng)where條件

最好拿相同類型的字段進(jìn)行比對(避免發(fā)生數(shù)據(jù)類型的轉(zhuǎn)換)

不要在具有索引的字段上添加數(shù)據(jù)庫函數(shù)(索引失效)

8.2請簡述項(xiàng)目中優(yōu)化sql語句執(zhí)行效率的方法,從哪些方面,sql語句性能如何分析?

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

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

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

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

(5)通過內(nèi)部函數(shù)提高SQL效率

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

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

9.對于大流量網(wǎng)站,采用什么方法解決訪問量問題?

1,確認(rèn)服務(wù)器的硬件是否足夠支持當(dāng)前的流量

2,優(yōu)化數(shù)據(jù)庫的訪問

3,禁止外部的盜鏈

4,控制大文件的下載

5,使用不同主機(jī)分流主要流量

6,使用流量分析統(tǒng)計(jì)軟件

10.一個(gè)函數(shù),能夠遍歷一個(gè)文件夾下的所有文件和子文件夾(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寫一個(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;

}

}

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

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

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

答:cvs,svn,vss;

13、如何實(shí)現(xiàn)字符串翻轉(zhuǎn)?(3分)

英文:

strrev($a)

中文或其他文字:

中文:GB2312, 代碼是使用GB2312編碼

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是一個(gè)基于服務(wù)端來創(chuàng)建動(dòng)態(tài)網(wǎng)站的腳本語言,您可以用PHP和HTML生成網(wǎng)站主頁

15.MYSQL取得當(dāng)前時(shí)間的函數(shù)是?,格式化日期的函數(shù)是(2分)

答:now(),date()

16.用PHP寫出顯示客戶端IP與服務(wù)器IP的代碼1分)

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

打印服務(wù)器IP:echo gethostbyname("www.bolaiwu.com")

17、語句include和require的區(qū)別是什么?為避免多次包含同一文件,可用(?)語句代替它們?

答:require->require是無條件包含也就是如果一個(gè)流程里加入require,無論條件成立與否???????? 都會(huì)先執(zhí)行require

include->include有返回值,而require沒有(可能因?yàn)槿绱藃equire的速度比include快)

注意:包含文件不存在或者語法錯(cuò)誤的時(shí)候require是致命的,include不是

18.http請求返回狀態(tài)碼

400 請求無效

401 未授權(quán)

403 請求被禁止

404 請求資源不存在

405 請求資源被禁止

406 無法接受

407 要求代理身份驗(yàn)證

500 Internal Server Error 服務(wù)端源代碼錯(cuò)誤

600 源站沒有返回響應(yīng)頭部,只返回實(shí)現(xiàn)內(nèi)容

19,linux授權(quán)碼:

600 屬主有讀寫權(quán)限

644 屬主有讀寫權(quán)限,屬性組有讀權(quán)限

700 屬主有讀寫執(zhí)行權(quán)限

755 屬主有讀寫執(zhí)行權(quán)限,屬性組有讀,執(zhí)行權(quán)限

711 屬主有讀寫執(zhí)行權(quán)限,屬性組有執(zhí)行權(quán)限

666 所有用戶都有文件的讀寫權(quán)限

777 所有用戶都有文件的讀寫執(zhí)行權(quán)限

20.有一個(gè)網(wǎng)頁地址, 比如PHP開發(fā)資源網(wǎng)主頁: http://www.phpres.com/index.html,如何得到它的內(nèi)容?($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");

21.在PHP中error_reporting這個(gè)函數(shù)有什么作用? (1分)

答:設(shè)置錯(cuò)誤級(jí)別與錯(cuò)誤信息回報(bào)

22.JS表單彈出對話框函數(shù)是?獲得輸入焦點(diǎn)函數(shù)是? (2分)

答:彈出對話框: alert(),prompt(),confirm()

獲得輸入焦點(diǎn) focus()

23.foo()和@foo()之間有什么區(qū)別?(1分)

答:@foo()控制錯(cuò)誤輸出

24、mysql_fetch_row() 和mysql_fetch_array之間有什么區(qū)別? (1分)

答:mysql_fetch_row是從結(jié)果集取出1行數(shù)組,作為枚舉

mysql_fetch_array是從結(jié)果集取出一行數(shù)組作為關(guān)聯(lián)數(shù)組,或數(shù)字?jǐn)?shù)組,兩者兼得

25、GD庫是做什么用的? (1分)

答:gd庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片。

在網(wǎng)站上GD庫通常用來生成縮略圖或者用來對圖片加水印或者對網(wǎng)站數(shù)據(jù)生成報(bào)表。

26.面向?qū)ο缶幊?/p>

有兩個(gè)重要的概念:類和對象

類是具備某項(xiàng)功能的抽象模型,實(shí)際應(yīng)用中,還需要對類進(jìn)行實(shí)例化后使用。這樣就引入了對象的概念。

對象是類進(jìn)行實(shí)例化后的一個(gè)產(chǎn)物,是一個(gè)實(shí)體。

封裝 :把客觀的事物封裝成一個(gè)抽象的類。

繼承:子類繼承父類,可以使用父類的屬性和方法。可以實(shí)現(xiàn)接口,同時(shí)實(shí)現(xiàn)接口中的所有方法

多態(tài):覆蓋和重載 子類可以覆蓋父類中的方法;一個(gè)類中可以同時(shí)擁有同一個(gè)函數(shù)名的方法,但是方法的參數(shù)不同,實(shí)現(xiàn)的結(jié)果也不同。

27.php框架

熟悉YII ,Thinkphp還有l(wèi)aravel ,symfony2,cakephp

28.mysql存儲(chǔ)引擎

ISAM:? 查詢速度快、增刪改慢,支持全文索引、不支持外鍵、不支持事務(wù)

MyISAM:??? ISAM升級(jí)版

Memory:??? 數(shù)據(jù)駐留在內(nèi)存、速度快、數(shù)據(jù)管理不穩(wěn)定、斷電后數(shù)據(jù)全部丟失

InnoDB:??? 速度較慢、支持外鍵、支持事務(wù)、不支持全文索引

使用的存儲(chǔ)引擎

MyISAM:內(nèi)容管理系統(tǒng)(新聞、官網(wǎng)、電商、軟件下載、房屋、招聘...)? 可讀不可改? 大部分是瀏覽信息

InnoDB:技術(shù)型網(wǎng)站(bbs、blog、webo、oa...)

29.數(shù)據(jù)庫操作流程

$link = mysql_connect("localhost","root","root");

mysql_select_db("test",$link);

$sql ="select * from table";

$result = mysql_query($sql);

while($row =mysql_fetch_****($result) ){

$arr[]=$row;

}

$row = mysql_fetch_array($result)? 意思:$row['name'] 和$row[1] 都可以取到值

$row = mysql_fetch_row($result)) 意思:$row[1] 只有用索引取值,偏移量從0開始。

$row = mysql_fetch_assoc($result)) 意思: $row['name'] 字段名作為索引取值 抽取一條記錄轉(zhuǎn)為 關(guān)聯(lián)數(shù)組,失敗返回false

30.php 加密函數(shù)

crypt($str[,$slat]) 可以完成單向加密功能

md5()

sha1() 返回一個(gè)40位的十六進(jìn)制數(shù),

加密擴(kuò)展庫

Mcrypt() 和Mash

31、字符串“to upper case” 分別用php,shell ,js實(shí)現(xiàn)將字符串中的字符全部轉(zhuǎn)換成大寫并輸出。(5分)

Php實(shí)現(xiàn): echo strtoupper(‘to upper case’)

Shell實(shí)現(xiàn):echo "to upper case" | tr 'a-z' 'A-Z'

Js實(shí)現(xiàn):

var stmp1 = " to upper case ";

alert(stmp1.toLocaleUpperCase());//轉(zhuǎn)換成大寫

alert(stmp1.toUpperCase())//轉(zhuǎn)換成大寫

32.防止SQL注入

1)一般使用 addslashes 函數(shù)

addslashes 函數(shù)在制定的預(yù)定義字符前添加反斜杠

對字段和密碼MD5加密處理

預(yù)處理過濾處理

33、用PHP打印出前一天的時(shí)間,格式是2006-5-10 22:21:21

//echo date('Y-m-d H:i:s',time()-60*60*24

echo date("Y:m:d H:i:s",strtotime("-1 day"));

?>

34.如何實(shí)現(xiàn)字符串翻轉(zhuǎn)?

其實(shí)PHP本身就有字符串翻轉(zhuǎn)的函數(shù):strrev(),不妨試試echo strrev($str);不過

所有的這三種方法都不能解決中文字符串翻轉(zhuǎn)的問題,會(huì)出錯(cuò)的。

代碼

function reverse($var)

{

$res="";

for($i=0,$j=strlen($var);$i

{

$res=$var[$i].$res;

}

return $res;

}

$tmpvar="wofang";

$res=reverse($tmpvar);

echo $res;

?>

35.實(shí)現(xiàn)中文字串截取無亂碼的方法。

mb_substr()

36.以下哪一句不會(huì)把 John 新增到 users 陣列?

$users[] = 'john';

成功把 John 新增到陣列 users。

array_add($users,’john’);

函式 array_add() 無定義。

array_push($users,‘john’);

成功把 John 新增到陣列 users。

$users ||= 'john';

語法錯(cuò)誤。

37.sort()、assort()、和 ksort() 有什么分別?它們分別在什么情況下使用?

sort()

根據(jù)陣列中元素的值,以英文字母順序排序,索引鍵會(huì)由 0 到 n-1 重新編號(hào)。主

要是當(dāng)陣列索引鍵的值無關(guān)疼癢時(shí)用來把? 陣列排序。

assort()

PHP 沒有 assort() 函式,所以可能是 asort() 的筆誤。

asort()

與 sort() 一樣把陣列的元素按英文字母順序來排列,不同的是所有索引鍵都獲得保留,特別適合替聯(lián)想陣列排序。

ksort()

根據(jù)陣列中索引鍵的值,以英文字母順序排序,特別適合用于希望把索引鍵排序的聯(lián)想陣列。

38.以下的代碼會(huì)產(chǎn)生什么?為什么?

$num =10;

function multiply(){

$num =$num *10;

}

multiply();

echo $num;

由于函式 multiply() 沒有指定 $num 為全域變量(例如 global $num 或者

$_GLOBALS['num']),所以 $num 的值是 10。

39.些函式可以用來在現(xiàn)正執(zhí)行的腳本中插入函式庫?

對這道題目不同的理解會(huì)有不同的答案,我的第一個(gè)想法是插入 PHP 函式庫不外乎

include()、include_once()、require? ()、require_once(),但細(xì)心再想,“函式庫”也應(yīng)該包括 com 物件和 .net 函式庫,所以我們的答案也要分別包括

com_load 和 dotnet_load,下次有人提起“函式庫”的時(shí)候,別忘記這兩個(gè)函式。

40.foo()與 @foo() 有什么分別?

foo() 會(huì)執(zhí)行這個(gè)函式,任何解譯錯(cuò)誤、語法錯(cuò)誤、執(zhí)行錯(cuò)誤都會(huì)在頁面上顯示出來。

@foo() 在執(zhí)行這個(gè)函式時(shí),會(huì)隱藏所有上述的錯(cuò)誤訊息。

很多應(yīng)用程式都使用 @mysql_connect() 和 @mysql_query 來隱藏 mysql 的錯(cuò)誤訊息,我認(rèn)為這是很嚴(yán)重的失誤,因?yàn)殄e(cuò)誤? 不該被隱藏,你必須妥善處理它們,可能的話解決它們。

“===”是什么?試舉一個(gè)“==”是真但“===”是假的例子。

“===”是給既可以送回布爾值“假”,也可以送回一個(gè)不是布爾值但卻可以賦與“假”值的函式,strpos() 和 strrpos()?? 便是其中兩個(gè)例子。

問題的第二部份有點(diǎn)困難,想一個(gè)“==”是假,但是“===”是真的例子卻很容易,

相反的例子卻很少。但我終于找到以下的? 例子:

if (strpos("abc", "a") == true){??? // 這部分永不會(huì)被執(zhí)行,因?yàn)?"a" 的位

置是 0,換算成布爾值“假”}if?? (strpos("abc", "a") === true){??? // 這部份

會(huì)被執(zhí)行,因?yàn)椤?#61;==”保證函式 strpos() 的送回值不會(huì)換算成布爾值.}

42、如何修改SESSION的生存時(shí)間(1分).

答:方法1:將php.ini中的session.gc_maxlifetime設(shè)置為9999重啟apache

方法2:$savePath = "./session_save_dir/";

$lifeTime = 小時(shí) * 秒;

session_save_path($savePath);

session_set_cookie_params($lifeTime);

session_start();

方法3:setcookie() and session_set_cookie_params($lifeTime);

43、在PHP中,heredoc是一種特殊的字符串,它的結(jié)束標(biāo)志必須?(1分)

答:heredoc的語法是用"<<

個(gè)字符串

例子:

$str = <<

my name is Jiang Qihui!

SHOW;

在PHP中error_reporting這個(gè)函數(shù)有什么作用? (1分)

答:設(shè)置錯(cuò)誤級(jí)別與錯(cuò)誤信息回報(bào)

請寫一個(gè)函數(shù)驗(yàn)證電子郵件的格式是否正確 (2分)

答:function checkEmail($email)

{

$pregEmail = "/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-

9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i";

return preg_match($pregEmail,$email);

}

46、請寫出數(shù)據(jù)類型(int char varchar datetime text)的意思; 請問varchar和char

有什么區(qū)別(2分)

答:int是數(shù)字類型,char固定長度字符串,varchar實(shí)際長度字符串,datetime日期時(shí)

間型,text文本字符串

char的場地固定為創(chuàng)建表設(shè)置的長度,varchar為可變長度的字符

47、檢測一個(gè)變量是否有設(shè)置的函數(shù)是否?是否為空的函數(shù)是?(2分)

答:isset($str),empty($str);

48、取得查詢結(jié)果集總數(shù)的函數(shù)是?(1分)

答:mysql_num_rows($result);

49簡述如何得到當(dāng)前執(zhí)行腳本路徑,包括所得到參數(shù)。

echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?".$_SERVER

['QUERY_STRING'];

//echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

?>

50請舉例說明在你的開發(fā)過程中用什么方法來加快頁面的加載速度

要用到服務(wù)器資源時(shí)才打開

及時(shí)關(guān)閉服務(wù)器資源,

數(shù)據(jù)庫添加索引,

頁面可生成靜態(tài),圖片等大文件單獨(dú)服務(wù)器。

使用代碼優(yōu)化工具啦

51. 給定一個(gè)用逗號(hào)分隔一組值的字符串,以下哪個(gè)函數(shù)能在僅調(diào)用一次的情況下就

把每個(gè)獨(dú)立的值放入一個(gè)新創(chuàng)建的數(shù)組?

A.strstr()

B.不可能只調(diào)用一次就完成

C.extract()

D.explode()√

E.strtok()

52.如果用+操作符把一個(gè)字符串和一個(gè)整型數(shù)字相加,結(jié)果將怎樣?

A.解釋器輸出一個(gè)類型錯(cuò)誤

B.字符串將被轉(zhuǎn)換成數(shù)字,再與整型數(shù)字相加

C.字符串將被丟棄,只保留整型數(shù)字√

D.字符串和整型數(shù)字將連接成一個(gè)新字符串

E.整形數(shù)字將被丟棄,而保留字符串

53.以下腳本輸出什么?

$s = '12345';

$s[$s[1]] = '2';

echo $s;

?>

A.12345

B.12245√

C.22345

D.11345

54.以下腳本輸出什么?

$x = 'apple';

echo substr_replace ($x, 'x', 1, 2);

?>

A.x

B.axle√

C.axxle

D.applex

E.xapple

55. 函數(shù)______能讀取文本文件中的一行。讀取二進(jìn)制文件或者其他文件時(shí),應(yīng)當(dāng)

用______函數(shù)。

A.fgets(), fseek()

B.fread(), fgets()

C.fputs(), fgets()

D.fgets(), fread()√

E.fread(), fseek()

56.哪個(gè)函數(shù)能夠往文本文件中寫入一個(gè)字符串?

答案:fwrite()和fputs()兩個(gè)函數(shù)在這里都可以,而后者其實(shí)是前者的別名。在

PHP中,寫入二進(jìn)制數(shù)據(jù)和寫入字符串沒有區(qū)別。

57.函數(shù)______能判斷一個(gè)文件是否可寫。

答案:is_writeable

58.以下哪個(gè)選項(xiàng)能將文件指針移到開頭?

A.reset()

B.fseek(-1)

C.fseek(0, SEEK_END)

D.fseek(0, SEEK_SET)√

E.fseek(0, SEEK_CUR)

59、include的功能和require一樣,不同的是,require不能用在[?? ]

A、判斷語句或循環(huán)里,

B、連接語句里

C、聲明語句里

D、文件的開頭

E、文件的中間√

50、下面建立與MySQL Server的連接語法正確的是:[? ]

A、$link=connect("host_name","user_name","password");

B、$link=mysql_connect("host_name","user_name","password");√

C、$link=mysqlconnect("host_name","user_name","password");

D、$link=mysql_pconnect("host_name","user_name","password");√

E、$link=pconnect("host_name","user_name","password");

51.將字符串轉(zhuǎn)換成小寫

strtolower(): 該函數(shù)將傳入的字符串參數(shù)所有的字符都轉(zhuǎn)換成小寫,并以小定形式

放回這個(gè)字符串

52.將字符轉(zhuǎn)成大寫

strtoupper(): 該函數(shù)的作用同strtolower函數(shù)相反,是將傳入的字符參數(shù)的字符全

部轉(zhuǎn)換成大寫,并以大寫的形式返回這個(gè)字符串.用法同strtolowe()一 樣.

53.將字符串首字符轉(zhuǎn)換成大寫

ucfirst(): 該函數(shù)的作用是將字符串的第一個(gè)字符改成大寫,該函數(shù)返回首字符大

寫的字符串.用法同strtolowe()一樣.

54.將字符串每個(gè)單詞的首字符轉(zhuǎn)換成大寫

ucwords(): 該函數(shù)將傳入的字符串的每個(gè)單詞的首字符變成大寫.如"hello

world",經(jīng)過該函數(shù)處理后,將返回"Hello Word".用法同strtolowe()一樣.

55、NoSQL:Not Only SQL

思想:網(wǎng)站產(chǎn)生的數(shù)據(jù),一部分存儲(chǔ)數(shù)據(jù)庫、一部分存到NoSQL相關(guān)產(chǎn)品

NoSQL產(chǎn)品

1、Memcache:內(nèi)存(速度快、數(shù)據(jù)量小)、數(shù)據(jù)的過期時(shí)間

2、MongoDB:文檔數(shù)據(jù)庫

3、Redis:內(nèi)存(速度快、數(shù)據(jù)量小)、庫、沒有過期時(shí)間

什么樣的數(shù)據(jù),存儲(chǔ)在什么位置?

MySQL:穩(wěn)定的數(shù)據(jù)

NoSQL:活躍的數(shù)據(jù)

57緩存分類

1、緩存數(shù)據(jù)存儲(chǔ)位置不同

1)文件緩存

2)內(nèi)存緩存

2、緩存的數(shù)據(jù)量的不同

1)頁面緩存

2)局部緩存

3)局部不緩存

4)數(shù)據(jù)緩存(變量緩存、動(dòng)態(tài)緩存)

Memcache:內(nèi)存緩存、變量緩存

58 .LINUX命令

查看當(dāng)前目錄下所有內(nèi)容??????? ls

在當(dāng)前目錄下,新建一個(gè)文件夾? mkdir 文件夾名

刪除指定的文件夾????????????? rmdir 文件夾名?? 只能刪除空目錄

在當(dāng)前目錄下新建一個(gè)空白文件? touch 文件名

刪除當(dāng)前目錄下的一個(gè)文件????? unlink文件名

刪除文件或文件夾????????????? rm

復(fù)制文件????????????????????? cp

移動(dòng)文件或文件夾????????????? mv

文件或文件夾重命名 ??????????mv

查看完整的工作目錄??????????? pwd

切換目錄:??????????????????? cd???? cd/ 返回根目錄

文件傳輸????????????????????? ftp

查看文件內(nèi)容????????????????? cat 文件名

查看文件編碼????????????? ????file 文件名

查找文件????????????????????? find 路徑 -name 文件名

修改文件或文件夾權(quán)限

權(quán)限種類:r 4(讀)、w 2(寫)、x 1(執(zhí)行)

權(quán)限操作符:+(賦予權(quán)限)、-(收回權(quán)限)

用戶種類:a(所有人)、u(文件擁有者)、g(組用戶)、o(其他用戶)

查看權(quán)限:ls -l

-rw-r--r--? a.txt

drwxr-xr-x? hello

第1位:是文件還是文件夾(-文件、d文件夾)

第234位:u用戶的權(quán)限

第567位:g用戶的權(quán)限

最后三位:o用戶的權(quán)限

1)將最大權(quán)限賦予a.txt

chmod a+r+w+x a.txt

chmod 777 a.txt

2)設(shè)置a.txt權(quán)限,收回o用戶的wx權(quán)限

chmod o-w-x a.txt

4)設(shè)置a.txt權(quán)限:u:rw? g:r? o:r

chmod 644 a.txt

5)設(shè)置hello文件夾權(quán),給予最大權(quán)限(不影響子文件)

chmod 777 hello

6)設(shè)置hello文件夾權(quán),給予最大權(quán)限(影響子文件)

chmod -R 777 hello

59、創(chuàng)建文件exer1,設(shè)置訪問權(quán)限為rw-r--r--,現(xiàn)要增加所有用戶的執(zhí)行權(quán)限和同組用戶的寫權(quán)限,寫出操作過程的命令(10分)

touch exer1

chmod 644? exer1

增加權(quán)限

chmod a+x? exer1

chmod g+w? exer1

或者

chmod 775 exer1

60易出現(xiàn)編碼的地方

文件保存格式的編碼

Header();

Msq本身的編碼(修改ini)

Set names gbk;

Mysql_query(“set names utf8”);

Iconv()PHP的系統(tǒng)函數(shù)進(jìn)行轉(zhuǎn)碼

61.PHP工作原理

一個(gè)網(wǎng)站運(yùn)行時(shí)客戶端有無數(shù)個(gè),服務(wù)器通常只有一個(gè)(負(fù)載均衡)

開發(fā)環(huán)境的安裝2,PHP5.4,MYSQL5.3-------開源,可以跨平臺(tái)

配置文件:conf(Apache), php.ini my.ini

PHP文檔組成:HTML,css,js,jquery,PHP

PHP語法風(fēng)格:xml風(fēng)格,短風(fēng)格,ASP風(fēng)格(已過時(shí)),腳本風(fēng)格

<?php ?>注意:位置任意,同一頁面可以出現(xiàn)多次,不能嵌套,里面只能出現(xiàn)php代碼,需要轉(zhuǎn)字符串輸出

運(yùn)行在服務(wù)器端

注釋:單行注釋,多行注釋

62數(shù)據(jù)類型:

標(biāo)量類型:integer,Float,String,boolean

復(fù)合類型:Array,Object

特殊類型:Resource,Null

偽類型:mixed,number,callback(回調(diào)函數(shù))

63.PHP中被認(rèn)為是false的值:

0,???? 0.0,?????? null,?????? 空數(shù)組,??????? 空字符串,??? false

64.求兩個(gè)日期的差數(shù),例如2012-2-27 ~ 2013-05-6的日期差數(shù)

function get_days($date1, $date2){

$time1 = strtotime($date1);

$time2 = strtotime($date2);

return ($time2-$time1)/86400;

}

echo get_days("2013-05-6", "2012-2-27");

?>

65什么是MVC?

回答:MVC由Model(模型), View(視圖)和Controller(控制器)組成,PHP MVC可以更高效地管理好3個(gè)不同層的PHP代碼。

Model:數(shù)據(jù)信息存取層。

View:view層負(fù)責(zé)將應(yīng)用的數(shù)據(jù)以特定的方式展現(xiàn)在界面上。

Controller:通常控制器負(fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。

66.PHP中獲取圖像尺寸大小的方法是什么?

回答:getimagesize () 獲取圖片的尺寸

Imagesx () 獲取圖片的寬度

Imagesy () 獲取圖片的高度

67.如何在PHP中定義常量?

回答:PHP中使用Define () 來定義常量。

define (“Newconstant”, 30);

68.如何不使用submit按鈕來提交表單?

如果我們不想用submit按鈕來提交表單,我們也可以用超鏈接來提交,我們可以這樣寫代碼:

Submit Me

69.簡述論壇中無限分類的實(shí)現(xiàn)原理。

答:無限極分類,那么應(yīng)該是考察遞歸函數(shù)吧!

第一步:建立測試數(shù)據(jù)庫:

CREATE TABLE `category` (? `id` smallint(5) unsigned NOT NULL auto_increment,? `fid` smallint(5) unsigned NOT NULL default '0',? `value` varchar(50) NOT NULL default '',? PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

第二步:插入測試數(shù)據(jù):

INSERT INTO `category` ( `fid`, `value`) VALUES? (0, 'PHP點(diǎn)點(diǎn)通博客PHPDDT.COM'), (1,'a'), (1,'b'), (2,'c'), (2,'d'), (4,'e')

第三步:遞歸輸出分類:

70.試述isset()和empty()的區(qū)別

isset() 測試變量是否存在 empty() 測試變量是否為空

71.請用盡可能少的語句實(shí)現(xiàn)對輸入Email地址進(jìn)行驗(yàn)證的功能

eregi('^[_a-z0-9]+(/.[_a-z0-9-]+)*@[a-z0-9]+(/.[a-z0-9-]+)*$',$emailaddress)

72.使用PHP描述冒泡排序和快速排序算法,對象可以是一個(gè)數(shù)組

/冒泡排序(數(shù)組排序)

function bubble_sort($array)

{

$count = count($array);

if ($count <= 0) return false;

for($i=0; $i

for($j=$count-1; $j>$i; $j–){

if ($array[$j] < $array[$j-1]){

$tmp = $array[$j];

$array[$j] = $array[$j-1];

$array[$j-1] = $tmp;

}

}

}

return $array;

}

//快速排序(數(shù)組排序)

function quick_sort($array) {

if (count($array) <= 1) return $array;

$key = $array[0];

$left_arr = array();

$right_arr = array();

for ($i=1; $i

if ($array[$i] <= $key)

$left_arr[] = $array[$i];

else

$right_arr[] = $array[$i];

}

$left_arr = quick_sort($left_arr);

$right_arr = quick_sort($right_arr);

return array_merge($left_arr, array($key), $right_arr);

}

73、使用PHP描述順序查找和二分查找(也叫做折半查找)算法,順序查找必須考慮效率,對象可以是一個(gè)有序數(shù)組

//二分查找(數(shù)組里查找某個(gè)元素)

function bin_sch($array, $low, $high, $k){

if ($low <= $high){

$mid = intval(($low+$high)/2);

if ($array[$mid] == $k){

return $mid;

}elseif ($k < $array[$mid]){

return bin_sch($array, $low, $mid-1, $k);

}else{

return bin_sch($array, $mid+1, $high, $k);

}

}

return -1;

}

//順序查找(數(shù)組里查找某個(gè)元素)

function seq_sch($array, $n, $k){

$array[$n] = $k;

for($i=0; $i

if($array[$i]==$k){

break;

}

}

if ($i

return $i;

}else{

return -1;

}

}

74.寫一個(gè)二維數(shù)組排序算法函數(shù),能夠具有通用性,可以調(diào)用php內(nèi)置函數(shù)

function array_sort($arr, $keys, $order=0) {

if (!is_array($arr)) {

return false;

}

$keysvalue = array();

foreach($arr as $key => $val) {

$keysvalue[$key] = $val[$keys];

}

if($order == 0){

asort($keysvalue);

}else {

arsort($keysvalue);

}

reset($keysvalue);

foreach($keysvalue as $key => $vals) {

$keysort[$key] = $key;

}

$new_array = array();

foreach($keysort as $key => $val) {

$new_array[$key] = $arr[$val];

}

return $new_array;

}

75.utf-8轉(zhuǎn)換成gbk的函數(shù)是?

iconv("gbk",""UTF-8,"我們"); mb_convert_encoding($str, "GBK", "UTF-8")

76.Php中分割字符串成數(shù)組的函數(shù)和連接數(shù)組成字符串的函分別有哪些?

explode() split() ;implode() join()

77.說幾個(gè)你知道的設(shè)計(jì)模式?

單例模式: 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問他的全局訪問點(diǎn)例如框架中的數(shù)據(jù)庫連接

簡單工廠模式: 它具有創(chuàng)建對象的某些方法,可以使用工廠類創(chuàng)建對象,而不直接使用 new。例如初始化數(shù)據(jù)庫的時(shí)候會(huì)用到,比如MySQL,MSSQL

策略模式: 針對一組算法,將每一個(gè)算法封裝到具有共同接口的獨(dú)立的類中,例如進(jìn)入個(gè)人主頁時(shí),根據(jù)瀏覽者的不同,給予不同的顯示與操作

注冊模式: 提供了在程序中有條理的存放并管理一組全局對象 (object),例如ZF框架中的Zend_Registry::set

適配器模式: 將不同接口適配成統(tǒng)一的API接口,例如數(shù)據(jù)操作有mysql、mysqli、pdo等,可利用適配器模式統(tǒng)一接口

觀察者模式: 一個(gè)對象通過添加一個(gè)方法使本身變得可觀察。當(dāng)可觀察的對象更改時(shí),它會(huì)將消息發(fā)送到已注冊的觀察者。例如實(shí)現(xiàn)實(shí)現(xiàn)消息推送

裝飾器模式: 不修改原類代碼和繼承的情況下動(dòng)態(tài)擴(kuò)展類的功能,例如框架的每個(gè)Controller文件會(huì)提供before和after方法

迭代器模式: 提供一個(gè)方法順序訪問一個(gè)聚合對象中各個(gè)元素,在PHP中將繼承 Iterator 類

原型模式: 實(shí)現(xiàn)了一個(gè)原型接口,該接口用于創(chuàng)建當(dāng)前對象的克隆。當(dāng)直接創(chuàng)建對象的代價(jià)比較大時(shí),則采用這種模式。例如,一個(gè)對象需要在一個(gè)高代價(jià)的數(shù)據(jù)庫操作之后被創(chuàng)建。

78.echo,print(),print_r(),printf(),sprintf(),var_dump()有什么區(qū)別?

echo :是語句不是函數(shù),沒有返回值,可輸出多個(gè)變量值,不需要圓括號(hào)。不能輸出數(shù)組和對象,只能打印簡單類型(如int,string)

print :是語句不是函數(shù),有返回值 1 ,只能輸出一個(gè)變量,不需要圓括號(hào)。不能輸出數(shù)組和對象,只能打印簡單類型(如int,string)。

print_r

:是函數(shù),可以打印復(fù)合類型,例如:stirng、int、float、array、object等,輸出array時(shí)會(huì)用結(jié)構(gòu)表示,而且可以通過print_r($str,true)來使print_r不輸出而返回print_r處理后的值

printf :是函數(shù),把文字格式化以后輸出(參看C語言)

sprintf :是函數(shù),跟printf相似,但不打印,而是返回格式化后的文字,其他的與printf一樣。

var_dump :函數(shù),輸出變量的內(nèi)容、類型或字符串的內(nèi)容、類型、長度。常用來調(diào)試。

79.echo count(“abc”);輸出什么?

答案:1

寫個(gè)函數(shù)用來對二維數(shù)組排序。

答案:array_multisort() 。

81.對于大流量的網(wǎng)站,您采用什么樣的方法來解決訪問量問題?

首先,確認(rèn)服務(wù)器硬件是否足夠支持當(dāng)前的流量。

其次,優(yōu)化數(shù)據(jù)庫訪問。

第三,禁止外部的盜鏈。

第四,控制大文件的下載。

第五,使用不同主機(jī)分流主要流量

第六,使用流量分析統(tǒng)計(jì)軟件。

82.error_reporting(2047)什么作用?

答案:相當(dāng)于 error_reporting(‘E_ALL’); 輸出所有的錯(cuò)誤。

83、 簡述如何得到當(dāng)前執(zhí)行腳本路徑,包括所得到參數(shù)。

訪問http://temp.com/phpinfo.php?id=1

echo $_SERVER['SCRIPT_URL']; //得到/phpinfo.php

echo $_SERVER["SCRIPT_URI"]; //得到http://temp.com/phpinfo.php

echo $_SERVER["SCRIPT_FILENAME"]; //得到F:/www/Temp/phpinfo.php

echo $_SERVER["REQUEST_URI"]; //得到/phpinfo.php?id=1

echo $_SERVER["SCRIPT_NAME"]; //得到/phpinfo.php

參考server.php http://lesson.com/test/server.php?id=1

寫出session的運(yùn)行機(jī)制。

session創(chuàng)建時(shí),是否會(huì)在服務(wù)端記錄一個(gè)cookie?cookie里面的內(nèi)容是什么?

session機(jī)制是一種服務(wù)器端的機(jī)制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)(也可能就是使用散列表)來保存信息。

當(dāng)程序需要為某個(gè)客戶端的請求創(chuàng)建一個(gè)session的時(shí)候,服務(wù)器首先檢查這個(gè)客戶端的請求里是否已包含了一個(gè)session標(biāo)識(shí)-稱為sessionid,如果已包含一個(gè)sessionid則說明以前已經(jīng)為此客戶端創(chuàng)建過session,服務(wù)器就按照sessionid把這個(gè)session檢索出來使用(如果檢索不到,可能會(huì)新建一個(gè)),如果客戶端請求不包含sessionid,則為此客戶端創(chuàng)建一個(gè)session并且生成一個(gè)與此session相關(guān)聯(lián)的sessionid,sessionid的值應(yīng)該是一個(gè)既不會(huì)重復(fù),又不容易被找到規(guī)律以仿造的字符串,這個(gè)sessionid將被在本次響應(yīng)中返回給客戶端保存。_

保存這個(gè)sessionid的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動(dòng)的按照規(guī)則把這個(gè)標(biāo)識(shí)發(fā)給服務(wù)器。一般這個(gè)cookie的名字都是類似于SEEESIONID。r

由于cookie可以被人為的禁止,必須有其他機(jī)制以便在cookie被禁止時(shí)仍然能夠把sessionid傳遞回服務(wù)器。經(jīng)常被使用的一種技術(shù)叫做URL重寫,就是把sessionid直接附加在URL路徑的后面,附加方式也有兩種,一種是作為URL路徑的附加信息,表現(xiàn)形式為http://…../xxx;SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764比

另一種是作為查詢字符串附加在URL后面,表現(xiàn)形式為http://…../xxx?SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764參

為了在整個(gè)交互過程中始終保持狀態(tài),就必須在每個(gè)客戶端可能請求的路徑后面都包含這個(gè)SEEESIONID。

85.Cookie的原理及使用?

Cookie是網(wǎng)站保存在瀏覽器客戶端的信息,也就是說保存在訪客的機(jī)器里的變量,一般隨著HTTP頭發(fā)送到服務(wù)器端。在Cookie生效之后及失效之前,客戶每次發(fā)出頁面請求的時(shí)候(包括PHP頁面和靜態(tài)html頁面),都會(huì)把Cookie一塊發(fā)送到服務(wù)器,只要我們針對它進(jìn)行相應(yīng)的處理,就可以實(shí)現(xiàn)變量”追隨”。到

86.Form中的get和post方法,在數(shù)據(jù)傳輸過程中分別對應(yīng)了HTTP協(xié)議中的GET和POST方法。二者主要區(qū)別如下:

a、Get是用來從服務(wù)器上獲得數(shù)據(jù),而Post是用來向服務(wù)器上傳遞數(shù)據(jù)。

b、Get將表單中數(shù)據(jù)的按照variable=value的形式,添加到action所指向的URL后面,并且兩者使用”?”連接,而各個(gè)變量之間使用”&”連接;Post是將表單中的數(shù)據(jù)放在form的數(shù)據(jù)體中,按照變量和值相對應(yīng)的方式,傳遞到action所指向URL。u

c、Get是不安全的,因?yàn)樵趥鬏斶^程,數(shù)據(jù)被放在請求的URL中,而如今現(xiàn)有的很多服務(wù)器、代理服務(wù)器或者用戶代理都會(huì)將請求URL記錄到日志文件中,然后放在某個(gè)地方,這樣就可能會(huì)有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數(shù)據(jù),一些系統(tǒng)內(nèi)部消息將會(huì)一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。而

d、Get傳輸?shù)臄?shù)據(jù)量小,這主要是因?yàn)槭躑RL長度限制;而Post可以傳輸大量的數(shù)據(jù),所以在上傳文件只能使用Post(當(dāng)然還有一個(gè)原因,將在后面的提到)。

e、Get限制Form表單的數(shù)據(jù)集的值必須為ASCII字符;而Post支持整個(gè)ISO10646字符集。

f、Get是Form的默認(rèn)方法。

*.Post傳輸數(shù)據(jù)時(shí),不需要在URL中顯示出來,而Get方法要在URL中顯示。

*.Post傳輸?shù)臄?shù)據(jù)量大,可以達(dá)到2M,而Get方法由于受到URL長度的限制,只能傳遞大約1024字節(jié).

.Post顧名思義,就是為了將數(shù)據(jù)傳送到服務(wù)器段,Get就是為了從服務(wù)器段取得數(shù)據(jù).而Get之所以也能傳送數(shù)據(jù),只是用來設(shè)計(jì)告訴服務(wù)器,你到底需要什么樣的數(shù)據(jù).Post的信息作為http請求的內(nèi)容,而Get是在Http頭部傳輸?shù)摹L?/p>

87.PHP5中魔術(shù)方法函數(shù)有哪幾個(gè),請舉例說明各自的用法

__sleep

__wakeup

__toString

__set_state

__construct,

__destruct

__call,

__get,

__set,

__isset,

__unset

__clone

__autoload

isset()和empty()的區(qū)別

兩者都是測試變量用的。但是isset()是 測試變量是否被賦值 ,而empty()是測試 一個(gè)已經(jīng)被賦值的變量是否為空

。如果一個(gè)變量沒被賦值就引用在php里是被允許的,但會(huì)有notice提示。如果一個(gè)變量被賦空值,$foo=””或者$foo=0或者$foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是說賦空值不會(huì)注銷一個(gè)變量。要注銷一個(gè)變量,可以用d

unset($foo)或者$foo=NULL。

89.以下哪一句不會(huì)把John新增到users陣列?

$users[] = ‘john’;

成功把 John 新增到陣列 users。

array_add($users,’john’);

函式 array_add() 無定義。

array_push($users,‘john’);

成功把 John 新增到陣列 users。

$users ||= ‘john’;

語法錯(cuò)誤。

90.以下哪一個(gè)函式可以把瀏覽器轉(zhuǎn)向到另一個(gè)頁面?

redir()這不是一個(gè) PHP 函式,會(huì)引致執(zhí)行錯(cuò)誤。

header()這個(gè)是正確答案,header() 用來插入卷頭資料,可以用來使瀏覽器轉(zhuǎn)向到另一個(gè)頁面,例如:

header(“Location: http://www.phpmst.com/”);

location()這不是一個(gè) PHP 函式,會(huì)引致執(zhí)行錯(cuò)誤。

redirect()這不是一個(gè) PHP 函式,會(huì)引致執(zhí)行錯(cuò)誤。

91.PHP中的非靜態(tài)方法可以通過靜態(tài)調(diào)用嗎,反之呢?

其實(shí)問題是問沒有通過static定義的方法,能否通過”對象名::方法名“這樣的形式來調(diào)用。答案是會(huì)產(chǎn)生一個(gè)strict錯(cuò)誤,但在會(huì)繼續(xù)執(zhí)行代碼。

反之,能否通過“對象名->方法名“的形式來調(diào)用static定義的方法?答案是不能,會(huì)出錯(cuò)并中斷程序執(zhí)行。

92.使用utf-8編碼,以下代碼輸出結(jié)果是什么?strlen函數(shù)是計(jì)算字符串的字節(jié)數(shù)還是字符數(shù)?

$str = “您好hello”;

答案:echo strlen($str);

11 strlen() 函數(shù)返回字符串的長度。

93..什么是時(shí)間戳?時(shí)間戳能代表的最小年份和最大年份是多少?

答案:(格林威治時(shí)間 1970 年 1 月 1 日 00:00:00)到當(dāng)前時(shí)間的秒數(shù)。

有效的時(shí)間戳典型范圍是格林威治時(shí)間 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07。(此范圍符合

32 位有符號(hào)整數(shù)的最小值和最大值)。

不過在 PHP 5.1 之前此范圍在某些系統(tǒng)(如 Windows)中限制為從 1970 年 1 月 1 日到 2038 年 1 月 19 日。

MyISAM與innoDB存儲(chǔ)引擎有何差別?

答案:A、兩者在文件構(gòu)成上有區(qū)別;

B、InnoDB支持事務(wù)處理,MyISAM不支持;

C、對無WHERE子句的COUNT(*)操作的不同:MyISAM中保存了該值,直接讀取,InnoDB需要作全表掃描;

D、鎖的區(qū)別:InnoDB支持表級(jí)鎖和行級(jí)鎖,MyISAM只支持表級(jí)鎖;

E、索引會(huì)緩存數(shù)據(jù),而MYISAM不會(huì);

F、INNODB不區(qū)分char和varchar;

G、INNODB支持hash索引,而MYISAM不支持;

H、InnoDB不支持FULLTEXT類型的索引;

I、InnoDB 中不保存表的具體行數(shù),也就是說,執(zhí)行select count(*) from

table時(shí),InnoDB要掃描一遍整個(gè)表來計(jì)算有多少行,但是MyISAM只要簡單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(*)語句包含

where條件時(shí),兩種表的操作是一樣的;

J、對于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引;

K、DELETE FROM table時(shí),InnoDB不會(huì)重新建立表,而是一行一行的刪除;

L、LOAD TABLE FROM

MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導(dǎo)入數(shù)據(jù)后再改成InnoDB表,但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用。

95..如何記錄php程序錯(cuò)誤至系統(tǒng)日志?

答案:將PHP的log_errors開啟即可,默認(rèn)是記錄到WEB服務(wù)器的日志文件里,比如Apache的error.log文件。

當(dāng)然也可以記錄錯(cuò)誤日志到指定的文件中。

代碼如下:

# vim /etc/php.inidisplay_errors = Off

log_errors = On

error_log = /var/log/php-error.log

另外也可以設(shè)定error_log = syslog,使這些錯(cuò)誤信息記錄到操作系統(tǒng)的日志里。

display_errors = Off //不顯示錯(cuò)誤

error_reporting 設(shè)定錯(cuò)誤訊息回報(bào)的等級(jí)

96.用最少的代碼寫一個(gè)求3值最大值的函數(shù).

答案: function($a,$b,$c){

return $a>$b? ($a>$c? $a : $c) : ($b>$c? $b : $c );

}

97.在PHP中,heredoc是一種特殊的字符串,它的結(jié)束標(biāo)志必須?(1分)

答:heredoc的語法是用”<<

例子:

$str = <<

my name is Jiang Qihui!

SHOW;

98.字符串函數(shù)

chr — 通過ASCII碼值返回指定的字符

ord — 通過指定的字符返回ASCII碼值

explode — 使用一個(gè)字符串分割另一個(gè)字符串

implode — 將一個(gè)一維數(shù)組的值轉(zhuǎn)化為字符串

join — 別名implode

htmlspecialchars — 把預(yù)定義的字符轉(zhuǎn)換為HTML實(shí)體(比如說大于小于)

nl2br — 在字符串所有新行之前插入HTML換行標(biāo)記

strip_tags — 從字符串中去除 HTML 和 PHP 標(biāo)記

lcfirst — 使一個(gè)字符串的第一個(gè)字符小寫

ucfirst — 將字符串的首字母轉(zhuǎn)換為大寫

ucwords — 將字符串中每個(gè)單詞的首字母轉(zhuǎn)換為大寫

md5 — 加密,返回32位的字符串

sha1 — 加密,返回40位的字符串

number_format — 以千位分隔符方式格式化一個(gè)數(shù)字

trim — 去除字符串首尾處的空白字符(或者其他字符)

ltrim — 刪除字符串開頭的空白字符(或其他字符)

rtrim — 刪除字符串末端的空白字符(或者其他字符)

chop — rtrim 的別名

str_replace — 子字符串替換

str_ireplace — str_replace的忽略大小寫版本

str_pad — 使用另一個(gè)字符串填充字符串為指定長度

str_repeat — 重復(fù)一個(gè)字符串

str_shuffle — 隨機(jī)打亂一個(gè)字符串

str_split — 將字符串轉(zhuǎn)換為數(shù)組

strstr — 查找字符串的首次出現(xiàn)

strchr — 別名 strstr

stristr — strstr 函數(shù)的忽略大小寫版本

strrchr — 查找指定字符在字符串中的最后一次出現(xiàn)

strpos — 查找字符串首次出現(xiàn)的位置

stripos — 查找字符串首次出現(xiàn)的位置(不區(qū)分大小寫)

strripos — 計(jì)算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置(不區(qū)分大小寫)

strrpos — 計(jì)算指定字符串在目標(biāo)字符串中最后一次出現(xiàn)的位置

strlen — 獲取字符串長度

strrev — 反轉(zhuǎn)字符串

strtolower — 將字符串轉(zhuǎn)化為小寫

strtoupper — 將字符串轉(zhuǎn)化為大寫

substr — 截取字符串

99.數(shù)組函數(shù)

答案:

array_shift — 將數(shù)組開頭的單元移出數(shù)組

array_pop — 將數(shù)組最后一個(gè)單元彈出(出棧)

array_unshift — 在數(shù)組開頭插入一個(gè)或多個(gè)單元

array_push — 將一個(gè)或多個(gè)單元壓入數(shù)組的末尾(入棧)

array_keys — 返回?cái)?shù)組中部分的或所有的鍵名

array_values — 返回?cái)?shù)組中所有的值

in_array — 檢查數(shù)組中是否存在某個(gè)值

array_key_exists — 檢查給定的鍵名或索引是否存在于數(shù)組中

key_exists — 別名 array_key_exists

array_rand — 從數(shù)組中隨機(jī)取出一個(gè)或多個(gè)單元

array_reverse — 返回一個(gè)單元順序相反的數(shù)組

array_unique — 移除數(shù)組中重復(fù)的值

array_merge — 合并一個(gè)或多個(gè)數(shù)組

count — 計(jì)算數(shù)組中的單元數(shù)目或?qū)ο笾械膶傩詡€(gè)數(shù)

sizeof — count 的別名

array_sum — 計(jì)算數(shù)組中所有值的和

array_flip — 交換數(shù)組中的鍵和值

array_count_values — 統(tǒng)計(jì)數(shù)組中所有的值出現(xiàn)的次數(shù)

shuffle — 將數(shù)組打亂

reset — 將數(shù)組的內(nèi)部指針指向第一個(gè)單元

prev — 將數(shù)組的內(nèi)部指針倒回一位

current — 返回?cái)?shù)組中的當(dāng)前單元

pos — current 的別名

each — 返回?cái)?shù)組中當(dāng)前的鍵/值對并將數(shù)組指針向前移動(dòng)一步

next — 將數(shù)組中的內(nèi)部指針向前移動(dòng)一位

end — 將數(shù)組的內(nèi)部指針指向最后一個(gè)單元

sort — 對數(shù)組排序

rsort — 對數(shù)組逆向排序

asort — 對數(shù)組進(jìn)行排序并保持索引關(guān)系

arsort — 對數(shù)組進(jìn)行逆向排序并保持索引關(guān)系

ksort — 對數(shù)組按照鍵名排序

krsort — 對數(shù)組按照鍵名逆向排序

compact — 建立一個(gè)數(shù)組,包括變量名和它們的值

range — 快速創(chuàng)建數(shù)組

單例模式,創(chuàng)建mysqli數(shù)據(jù)庫鏈接的單例對象

class Db

{

private static $instance;

public $handle;

private function __construct($host, $username, $password, $dbname)

{

$this->handle = NULL;

$this->getcon($host, $username, $password, $dbname);

}

public static function getBb()

{

self::$instance = new Db();

return self::$instance;

}

private function getcon($host, $username, $password, $dbname)

{

if($this->handle!=NULL){

return true;

}

$this->handle = mysqli_connect($host, $username, $password,

$dbname);

}

}

總結(jié)

以上是生活随笔為你收集整理的mysql面试100题及答案_PHP面试100题汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。