編程學習網 > 程序人生 > 程序員面試技藝 > 一份萬網的PHP筆試題及答案
2014
11-11

一份萬網的PHP筆試題及答案

基礎題

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

get是發送請求HTTP協議通過url參數傳遞進行接收,而post是實體數據,可以通過表單提交大量信息。

2.session與cookie的區別?

session:儲存用戶訪問的全局唯一變量,存儲在服務器上的php指定的目錄中的(session_dir)的位置進行的存放。

cookie:用來存儲連續訪問一個頁面時所使用,是存儲在客戶端,對于Cookie來說是存儲在用戶WIN的Temp目錄中的。

兩者都可通過時間來設置時間長短。

3.數據庫中的事務是什么?

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

簡述題

1.用PHP打印出前一天的時間格式是2006-5-10 22:21:21

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

2.echo(),print(),print_r()的區別

echo是PHP語句, print和print_r是函數,語句沒有返回值,函數可以有返回值(即便沒有用);
print() 只能打印出簡單類型變量的值(如int,string);
print_r() 可以打印出復雜類型變量的值(如數組,對象);
echo 輸出一個或者多個字符串。

3.能夠使HTML和PHP分離開使用的模板

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

4、使用哪些工具進行版本控制?

cvs,svn,vss,git

5.如何實現字符串翻轉?

echo strrev($a);

6.優化MYSQL數據庫的方法

1)、選取最適用的字段屬性,盡可能減少定義字段長度,盡量把字段設置NOT NULL,例如’省份,性別’,最好設置為ENUM

2)、使用連接(JOIN)來代替子查詢:

a.刪除沒有任何訂單客戶:

DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)

b.提取所有沒有訂單客戶:

SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)

c.提高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)、事務處理:

a.保證數據完整性,例如添加和修改同時,兩者成立則都執行,一者失敗都失敗

mysql_query("BEGIN");
mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";
mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");
mysql_query("COMMIT");

5)、鎖定表,優化事務處理:

a.我們用一個 SELECT 語句取出初始數據,通過一些計算,用 UPDATE 語句將新值更新到表中。包含有 WRITE 關鍵字的 LOCK TABLE 語句可以保證在 UNLOCK TABLES 命令被執行之前,不會有其它的訪問來對 inventory 進行插入、更新或者刪除的操作

mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");
mysql_query("SELECT customerid FROM `customerinfo` wheremso-spacerun: yes"> mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where customerid=".$id);
mysql_query("UNLOCK TABLES");

6)、使用外鍵,優化鎖定表

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;

7)、建立索引:

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[索引字段])

8)、優化查詢語句

a.最好在相同字段進行比較操作,在建立好的索引字段上盡量減少函數操作
例子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";

7.PHP的意思

PHP是一個基于服務端來創建動態網站的腳本語言,您可以用PHP和HTML生成網站主頁

8.MYSQL取得當前時間的函數是?,格式化日期的函數是的什么?

now(),date()

9.實現中文字串截取無亂碼的方法

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

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取