mysql面试100题及答案_PHP面试100题汇总
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苏57对外宣布要出双座版,
- 下一篇: python列出文件夹所有文件_pyth