PHP程式員測試題及答案

來源:互聯網
上載者:User

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(2分)

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

2、echo(),print(),print_r()的區別(3分)

答:echo是PHP語句, print和print_r是函數,語句沒有傳回值,函數可以有傳回值(即便沒有用)

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

print_r()可以列印出複雜類型變數的值(如數組,對象)

echo 輸出一個或者多個字串

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

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

4、使用哪些工具進資料列版本設定?(1分)

答:cvs,svn,vss;

5、如何?字串翻轉?(3分)

答:echo strrev($a);

6、最佳化MYSQL資料庫的方法。(4分,多寫多得)

答:

   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)來代替手動建立的暫存資料表

      a.建立暫存資料表: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` where id=".$id);

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

8、PHP的意思(送1分)

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

9、MYSQL取得目前時間的函數是?,格式化日期的函數是(2分)

答:now(),date()

10、實現中文字串截取無亂碼的方法。(3分)

答: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;

}

}

12、您是否用過模板引擎? 如果有您用的模板引擎的名字是?(1分)

答:用過,smarty

13、請簡單闡述您最得意的開發之作(4分)

答:資訊分類

14、對於大流量的網站,您採用什麼樣的方法來解決訪問量問題?(4分)

答:確認伺服器硬體是否足夠支援當前的流量,資料庫讀寫分離,最佳化資料表,

程式功能規則,禁止外部的盜鏈,控制大檔案的下載,使用不同主機分流主要流量

15、用PHP寫出顯示用戶端IP與伺服器IP的代碼1分)

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

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

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

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

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

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

17、如何修改SESSION的存留時間(1分).

答:方法1:將php.ini中的session.gc_maxlifetime設定為9999重啟apache

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

$lifeTime = 小時 * 秒;

session_save_path($savePath);

session_set_cookie_params($lifeTime);

session_start();

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.