PHP寶典面試筆試題目

PHP寶典面試筆試題目php

來自《PHP程序員面試筆試寶典》,涵蓋了近三年了各大型企業常考的PHP面試題,針對面試題提取出來各類面試知識也涵蓋在了本書。html

 

PHP題目mysql

真題68】 (    )操做符在兩個操做數中有一個(不是所有)爲 True 時返回 True程序員

參考答案:邏輯異或(xor)運算符。面試

 

【真題61行以下程序段:sql

<?php數據庫

    echo 24%(-5);編程

?>緩存

 

程序的輸出結果是(    安全

A5 B4 C-4 D19

參考答案:B

分析:在PHP中,取模運算符%的操做數在運算以前都會轉換成整數(除去小數部分)。其運算結果和被除數的符號(正負號)相同。即$a%$b的結果和$a的符號相同。本題中,24%(-5)的符號爲正,結果爲4。因此,選項B正確。

 

【真題181寫一個函數,算出兩個文件的相對路徑。例如,$a = \/a/b/c/d/e.php\;$b =  \/a/b/12/ 34/c.php\;,計算出 $b 相對於 $a 的相對路徑應該是 ../../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);

}

$a = "\/a/b/c/d/e.php\";

 

$b = "\/a/b/12/34/c.php\";

echo getRelativepath($a, $b);

 

 

【真題182如下關於PHP文件處理的說法中,正確的是    )。

Afilegetcontents()函數能用來抓取網頁數據,可是沒辦法設置超時時間

Bfile()函數既能讀取文本文件也能讀取二進制文件,可是讀取二進制文件有可能出現安全問題

C.若是表單中沒有選擇上傳的文件,則 PHP 變量的值將爲NULL

Dfsockopen()fputs()結合起來能夠發送郵件,也能夠用來抓取網頁內容下載ftp文件等

參考答案:C

分析:對於選項A,能夠經過context參數設置超時時間。因此,選項A錯誤。

對於選項Bfile()函數是能夠安全用於讀取二進制文件的。因此,選項B錯誤。

對於選項C,表單中沒有文件上傳時,PHP$_FILES變量值爲NULL。因此,選項C正確。

對於選項Dfputs()用於寫入字符串到文件中,只能用於上傳不能用於下載ftp文件。因此,選項D錯誤。

 

【真題215按要求寫出SQL實現

1建立新聞發佈系統,表名爲message,有以下字段

id 文章id

title 文章標題

content 文章內容

category_id 文章分類id

hits 點擊量

 

參考答案:

CREATE TABLE 'message'(

'id' int(10) NOT NULL auto_increment,

'title' varchar(200) default NULL,

'content' text,

'category_id' int(10) NOT NULL,

'hits' int(20),

PRIMARY KEY('id');

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

2一樣上述新聞發佈系統:表comment記錄用戶回覆內容,字段以下:

comment_id 回覆id

id 文章id,關聯message表中的id

comment_content 回覆內容

 

現經過查詢數據庫須要獲得如下格式的文章標題列表並按照回覆數量排序,回覆最高的排在最前面

文章id 文章 標題 點擊量 回覆 數量

 

用一個SQL語句完成上述查詢,若是文章沒有回覆,則回覆數量顯示爲0

參考答案:

SELECT message.id id,message.title title,IF(message.'hits' IS NULL,0,message. 'hits') hits,

IF(comment. 'id' is NULL,0,count(*)) number FROM message LEFT JOIN

comment ON message.id=comment.id GROUP BY message. 'id';

 

上述內容管理系統,表category保存分類信息,字段以下:

category_id int(4) not null auto_increment;

category_name varchar(40) not null;

 

3用戶輸入文章時,經過選擇下拉菜單選定文章分類,寫出如何實現這個下拉菜單

參考答案:

function categoryList()

{

        $result=mysql_query("select category_id,categroy_name from category")

            or die("Invalid query: " . mysql_error());

 

        print("<select name='category' value=''>/n");

        while($rowArray=mysql_fetch_array($result))

        {

       print("<optionvalue='".$rowArray['category_id']."'>".$rowArray['categroy_name']."</ option>/n");

        }

        print("</select>");

}

 

 

【真題216使用PHP寫一段簡單查詢,查出全部姓名爲張三的內容並打印出來。

表名User

Name    Tel      Content      Date

張三 13333663366 大專畢業 2006-10-11

張三 13612312331 本科畢業 2006-10-15

張四 021-55665566 中專畢業 2006-10-15

 

參考答案:根據上面的題目完成代碼:

$mysql_db=mysql_connect("local","root","pass");

@mysql_select_db("DB",$mysql_db);

 $result = mysql_query("SELECT * FROM 'user' WHERE name='張三'");

 while($rs = mysql_fetch_array($result)){

     echo $rs["tel"].$rs["content"].$rs["date"];

  }

 

 

【真題217考慮以下SQL語句哪一個選項能對返回記錄的條數進行限制?(    )(雙選)

SELECT * FROM MY_TABLE

 

A.若是可能,那麼把查詢轉換成存儲例程

B.若是程序容許,那麼給查詢指定返回記錄的範圍

C.若是可能,那麼添加 where 條件

D.若是DBMS容許,那麼把查詢轉換成視圖

參考答案:B、C

分析:有兩個方法能限制返回記錄的條數——使用 where 條件或limit關鍵字指定查詢返回的記錄的範圍。

一般狀況下,若是沒有特殊須要,那麼儘可能不要用 select *,這會浪費大量的數據緩存。

 

【真題218執行如下 SQL 語句後將發生    )。

BEGIN TRANSACTION

DELETE FROM MYTABLE WHERE ID=1

DELETE FROM OTHERTABLE

ROLLBACK TRANSACTION

 

AOTHERTABLE 中的內容將被刪除

BOTHERTABLE MYTABLE 中的內容都會被刪除

COTHERTABLE 中的內容將被刪除,MYTABLE ID 1 的內容將被刪除

D.數據庫沒有變化

參考答案:D

分析:這個查詢是一個事務,而且這個事務的最後有回滾,數據庫不會有變化。

 

 

Mysql題目

1、如何進行數據庫優化?

數據庫優化的過程可使用如下的方法進行:

1)選取最適用的字段屬性,儘量減小定義字段長度,儘可能把字段設置NOT NULL,例如'省份性別',最好設置爲ENUM

2)使用鏈接(JOIN)來代替子查詢

① 刪除沒有任何訂單客戶:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)。

提取全部沒有訂單客戶:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)。

提升b的速度優化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo. customerid=orderinfo.customerid WHERE orderinfo.customerid IS NULL。

3)使用聯合(UNION)來代替手動建立的臨時表建立臨時表:SELECT name FROM 'nametest' UNION SELECT username FROM 'nametest2'

4)事務處理保證數據完整性,例如添加和修改。同時,若是二者成立則都執行,一者失敗都失敗:

mysql_query("BEGIN");

mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";

mysql_query("SELECT * FROM 'orderinfo' where customerid=".$id");

mysql_query("COMMIT");

 

5)鎖定表優化事務處理用一個SELECT語句取出初始數據,經過一些計算,用UPDATE語句將新值更新到表中。包含有WRITE關鍵字的LOCK TABLE語句能夠保證在UNLOCK TABLES命令被執行以前,不會有其餘的訪問來對customerinfo表進行插入、更新或者刪除的操做。

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)使用外鍵,優化鎖定表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。

 

2、選擇正確的存儲引擎?

MySQL中有兩個存儲引擎:MyISAMInnoDB,每一個引擎都有利有弊。

MyISAM適合於一些須要大量查詢的應用,但其對於有大量寫操做的支持並非很好。甚至只是須要update一個字段,整個表都會被鎖起來,而其餘進程,就算是讀進程都沒法操做直到讀操做完成。另外,MyISAM 對於 SELECT COUNT(*) 這類的計算是超快無比的。

InnoDB 的趨勢會是一個很是複雜的存儲引擎,對於一些小的應用,它會比 MyISAM 還慢。可是它支持行鎖,因而在寫操做比較多的時候,會更優秀。而且,它還支持更多的高級應用,例如事務。

 

3、【真題231】 用什麼方法檢查PHP腳本的執行效率(一般是腳本執行時間)和數據庫SQL的效率(一般是數據庫query時間),並定位和分析腳本執行和數據庫查詢的瓶頸所在?

參考答案:檢查PHP腳本的執行效率的方法以下:能夠在檢查的代碼開頭記錄一個時間,而後在代碼的結尾也記錄一個時間,結尾時間減去開頭時間取這個時間的差值,從而檢查PHP的腳本執行效率,記錄時間可使用microtime()函數。

檢查數據庫SQL的效率的方法以下:能夠經過explain顯示MySQL如何使用索引來處理select語句及鏈接表,幫助選擇更好的索引和寫出更優化的查詢語句。而後啓用slow query log記錄慢查詢,經過查看SQL的執行時間和效率來定位分析腳本執行的問題和瓶頸所在。

 

4、 如下代碼的運行結果爲(    )。

<?php

    mysql_connect('localhost','root',"");

    $result = mysql_query("SELECT id,name FROM tb1");

    while($row = mysql_fetch_array($result,MySQL_ASSOC)){

        echo' ID:' .$row[0].' Name:' .$row[];

    }

?>

 

A.報錯    B.循環換行打印所有記錄      

C.無任何結果 D.只打印第一條記錄

參考答案:A

分析:由於代碼中沒有指明要操做的數據庫名,因此會報錯。

因此,本題的答案爲A

 

 

【真題222如下說法正確的是    )。

A.使用索引能加快插入數據的速度

B.良好的索引策略有助於防止跨站攻擊

C.應當根據數據庫的實際應用理設計索引

D.刪除一條記錄將致使整個表的索引被破壞

參考答案:C

分析:索引的做用主要是幫助數據庫快速查找到對應的數據,並不能加快插入數據的速度,因此,選項A錯誤。

索引不可以幫助防止跨站攻擊,因此,選項B錯誤。

建立合理的索引須要分析數據庫的實際用途並找出它的弱點。優化腳本中的冗餘查詢一樣也能提升數據庫效率。索引是佔用物理空間的,因此在實際的應用中是要合理設計使用索引的。因此,選項C正確。

索引是一種表結構,刪除一條數據也不會影響到整個表的索引,而且索引不必定是數字,也能夠是字符串。因此,選項D錯誤。

 

【真題223下列關於全文檢索技術的說法中,不正確的是    )。

ASphinx是一個基於SQL的全文檢索引擎,能夠結合MySQL作全文搜索,它能夠提供比數據庫自己更專業的搜索功能

BSolr是新一代的全文檢索組件,它比Lucene的搜索效率高不少,還能支持HTTP的訪問方式,PHP調用Solr也很方便

CMySQL中把一個字段創建FULLTEXT索引,就能夠實現全文檢索,目前MyISAMInnoDBtable都支持FULLTEXT索引

DLucene附帶的二元分詞分析器CJKAnalyzer切詞速度很快,能知足通常的全文檢索須要

參考答案:B

分析:Sphinx是一個基於SQL的全文檢索引擎,能夠結合MySQLPostgreSQL作全文搜索,它能夠提供比數據庫自己更專業的搜索功能,使得應用程序更容易實現專業化的全文檢索。

Solr是一個獨立的企業級搜索應用服務器,用戶能夠經過HTTP請求訪問,它是採用JAVA5開發,基於Lucene的全文搜索服務器,同時對其進行了擴展,提供了比Lucene更爲豐富的查詢語言,同時實現了可配置、可擴展並對查詢性能進行了優化,而且提供了一個完善的功能管理界面,是一款很是優秀的全文搜索引擎。而且SolrLucene的搜索效率高不少,可是PHP調用Solr並不方便,選項B的說法錯誤。

MySQL中的MyISAMInnoDB都是支持FULLTEXT全文索引的。全文搜索引擎能夠在不使用模板匹配操做的狀況下查找單詞或短語。

 

購買連接:京東購買

 

題目來自《PHP程序員面試筆試寶典》,裏面涵蓋了近三年了各大型企業常考的PHP面試題,針對面試題提取出來各類面試知識也涵蓋在了本書。

 

更多PHP面試筆試真題能夠瀏覽:www.shuaiqi100.com  

 

更多有趣有料的PHP面試筆試資料能夠關注:「琉憶編程庫」

或者瀏覽:www.shuaiqi100.com 獲取。

PHP程序員面試筆試寶典下載:https://pan.baidu.com/s/1-ES2ZI3z5Lhv-zTKFmJDSQ

相關文章
相關標籤/搜索