求職與招聘 往往少不了面試與筆試,作為一個php程式員、多多少少都會有類似的經曆……以下是本人收集並整理的PHP面試題目,希望對同行們有所協助,找到一份合適的php開發工作!(共三節)
以下是面試的題目(一)
1、用PHP列印出前一天的時間格式是2009-02-10 22:21:21(2分)
echo date('Y-m-d H:i:s', strtotime('-1 day'));
或者
$yesterday = time() - (24 * 60 * 60);
echo 'today:'.date('Y-m-d H:i:s')."n";
echo 'yesterday:'. date('Y-m-d H:i:s', $yesterday)."n";
2、echo(),print(),print_r()的區別(3分)
echo是PHP語句, print和print_r是函數,語句沒有傳回值,函數可以有傳回值(即便沒有用)
print只能列印出簡單類型變數的值(如int,string)
print_r可以列印出複雜類型變數的值(如數組,對象)
echo -- 輸出一個或者多個字串
3、能夠使HTML和PHP分離開使用的模板(1分)
smarty,Heyes Template Class等
5、使用哪些工具進資料列版本設定?(1分)
CVS和SVN,SVN號稱下一代CVS,功能強大,不過CVS是老牌,市佔率很高.我一直用SVN,題目是問用什麼工具呃,這個可能需要這麼回答:CVS Server on Apache作服務端,WinCVS作用戶端;Subversion on Apache/DAV 做服務端,TortoiseSVN做用戶端,或者Subclipse做用戶端.
6、如何?字串翻轉?(3分)
strrev()
或者
$str = "abcdefg";
function strrevv($str)
{
$len=strlen($str);
$newstr = '';
for($i=$len;$i>=0;$i--)
{
$newstr .= $str{$i};
}
return $newstr;
}
$showstr = strrevv($str);
echo $showstr."
";
---------------------------------------------------------------
7、最佳化MYSQL資料庫的方法。(4分,多寫多得)
(1).選取最適用的欄位屬性,應該盡量把欄位設定為NOT NULL,這樣在將來執行查詢的時候,資料庫不用去比較NULL值。
(2).使用串連(JOIN)來代替子查詢(Sub-Queries)
(3).使用聯合(UNION)來代替手動建立的暫存資料表
(4).盡量少使用 LIKE 關鍵字和萬用字元
(5).使用事務和外鍵
或者
(1).資料庫設計方面,這是DBA和Architect的責任,設計結構良好的資料庫,必要的時候,去正規化(英文是這個:denormalize,中文翻譯成啥我不知道),允許部分資料冗餘,避免JOIN操作,以提高查詢效率
(2).系統架構設計方面,表散列,把海量資料散列到幾個不同的表裡面.快慢表,快表只留最新資料,慢表是曆史存檔.叢集,主伺服器Read & write,從伺服器read only,或者N台伺服器,各機器互為Master
(3).(1)和(2)超越PHP Programmer的要求了,會更好,不會沒關係.檢查有沒有少加索引
(4).寫高效的SQL語句,看看有沒有寫低效的SQL語句,比如產生笛卡爾積的全串連啊,大量的Group By和order by,沒有limit等等.必要的時候,把資料庫邏輯封裝到DBMS端的預存程序裡面.緩衝查詢結果,explain每一個sql語句
(5).所得皆必須,只從資料庫取必需的資料,比如查詢某篇文章的評論數,select count(*) ... where article_id = 就可以了,不要先select * ... where article_id = 然後msql_num_rows.只傳送必須的SQL語句,比如修改文章的時候,如果使用者只修改了標題,那就update ... set title = where article_id = 不要set content = (大文本)
(6).必要的時候用不同的儲存引擎.比如InnoDB可以減少死結.HEAP可以提高一個數量級的查詢速度
8、PHP的意思(送1分)
Hypertext Preprocessor
9、MYSQL取得目前時間的函數是?,格式化日期的函數是(2分)
now(), DATE_FORMAT(date,format)
10、實現中文字串截取無亂碼的方法。(3分)
mb_substr()
---------------------------------------------------------------
11、您是否用過版本控制軟體? 如果有您用的版本控制軟體的名字是?(1分)
TortoiseSVN-1.2.6 svn-1.2.3
12、您是否用過模板引擎? 如果有您用的模板引擎的名字是?(1分)
smarty
13、請簡單闡述您最得意的開發之作(4分)
這個自己想,因為你不再是菜鳥,每個人都有不同的思路,思路也會隨之自己的知識而改變……
14、對於大流量的網站,您採用什麼樣的方法來解決訪問量問題?(4分)
首先,確認伺服器硬體是否足夠支援當前的流量
其次,最佳化資料庫訪問。
第三,禁止外部的盜鏈。
第四,控制大檔案的下載。
第五,使用不同主機分流主要流量
第六,使用流量分析統計軟體。
-----------------------------------------------------------------
15、用PHP寫出顯示用戶端IP與伺服器IP的代碼1分)
//顯示用戶端I
function get_client_ip() {#
if(getenv('HTTP_CLIENT_IP')) {
$client_ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$client_ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$client_ip = getenv('REMOTE_ADDR');
} else {
$client_ip = $HTTP_SERVER_VAR['REMOTE_ADDR'];
}
return $client_ip;
}
//伺服器IP
function get_server_ip(){
if (isset($_SERVER))
{
if($_SERVER['SERVER_ADDR']) $huoqu_ip=$_SERVER['SERVER_ADDR'];
else $huoqu_ip=$_SERVER['LOCAL_ADDR'];
}
else
{
$huoqu_ip=getenv('SERVER_ADDR');
}
return $huoqu_ip;
}
16、語句include和require的區別是什麼?為避免多次包含同一檔案,可用(?)語句代替它們? (2分)
require()和include()除了怎樣處理失敗之外在各方面都完全一樣。include()產生一個警告而require()則導致一個致命錯誤。
換句話說,如果你想在丟失檔案時停止處理頁面,用require()。include() 就不是這樣,指令碼會繼續運行。
require()無論如何都會包含檔案,而include()可以有選擇地包含.www.
代替用
include_once
require_once
17、如何修改SESSION的存留時間(1分).(沒有測試)
$savePath = "./session_save_dir/";
$lifeTime = 24 * 3600;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
18、有一個網頁地址, 比如PHPma首頁: http://www.phpma.com,如何得到它的內容?($1分)
file_get_contents($url)
19、在HTTP 1.0中,狀態代碼401的含義是(?);如果返回“找不到檔案”的提示,則可用 header 函數,其語句為(?);(2分)
未授權(Unauthorized)
Header("http/1.0 403 Forbidden");
經典面試題(PHP基礎型II)附答案來源:本站編輯 作者:phpma 時間:2009-02-13 Tag:PHP 經典面試題 (基礎型II) 附答案 點擊: 44 求職與招聘 往往少不了面試與筆試,作為一個php程式員、多多少少都會有類似的經曆……以下是本人收集並整理的PHP面試題目,希望對同行們有所協助,找到一份合適的php開發工作!(共三節)
以下是面試的題目(一), 下一篇:經典面試題(PHP基礎型III)附答案 PHP已經賦予答案:
12、在PHP中,heredoc是一種特殊的字串,它的結束標誌必須?(1分)
在大部分語言裡,雙引號是字串,單引號是字元。但是在PHP裡,字串的表現形式有3種。即:
單引號
雙引號
定界符(heredoc syntax)
看見了吧,單引號居然可以用來表示字串。那麼如果我想表示單引號怎麼辦?和大多數語言一樣,使用轉義符號吧。即反斜線"".那麼使用單引號和雙引號有什麼區別呢?我的觀點是沒有多大區別。唯一的區別就是雙引號可以應用更多的轉義符。
讓我們定界符吧。它的文法是"<<<"。用法是在其後提供一個標識符,然後在標識符後提供字串,再在字串後提供此標識符來結尾。例如:
$str = <<
Hello, this is an example for HEREDOC Syntax.
Please attention to it.
EOD;
echo $str;
?>注意,這裡的提供的標誌符是EOD,中間的是字串。
<<
結束標誌必須頂格寫,並且要有分號結束
13、談談asp,php,jsp的優缺點(1分)--(具體請自己搜尋)
14、談談對mvc的認識(1分)
MVC(Model/View/Controller)模式包括三類對象。Model是應用對象,View是它在螢幕上的表示,
Controller定義使用者介面對使用者輸入的回應程式式。
模型-視圖-控制器(MVC)是80年代Smalltalk-80出現的一種軟體設計模式,現在已經被廣泛的使用。
1)模型(Model)
模型是應用程式的主體部分。模型表示業務資料,或者商務邏輯.
2)視圖(View)
視圖是應用程式中使用者介面相關的部分,是使用者看到並與之互動的介面。
3)控制器(controller)
控制器工作就是根據使用者的輸入,控制使用者介面資料顯示和更新model對象狀態。
-------------------------------------------------------------------
15、寫出發貼數最多的十個人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)
select members.username
from members
order by posts DESC
limit 10
16. 請說明php中傳值與傳引用的區別。什麼時候傳值什麼時候傳引用?(2分)
按值傳遞:函數範圍內對值的任何改變在函數外部都會被忽略
按引用傳遞:函數範圍內對值的任何改變在函數外部也能反映出這些修改 PHPma
優缺點:按值傳遞時,php必須複製值。特別是對於大型的字串和對象來說,這將會是一個代價很大的操作。
按引用傳遞則不需要複製值,對於效能提高很有好處。
17. 在PHP中error_reporting這個函數有什麼作用? (1分)
用來配置錯誤資訊回報的等級
18. 請寫一個函數驗證電子郵件的格式是否正確 (2分)
//if the email address is valid, return true,else return false
function validateEmail($email)
{
if(eregi('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$',$email) ){
return true;
}else{
return false;
}
}
19. 簡述如何得到當前執行指令碼路徑,包括所得到參數。(2分)
echo $_SERVER['SCRIPT_FILENAME']."?".$_SERVER['QUERY_STRING'];
20.如何修改SESSION的存留時間. (1分)
setcookie()
或
session_set_cookie_params($lifeTime)
--------------------------------------------------------------------
21、JS表單彈出對話方塊函數是?獲得輸入焦點函數是? (2分)
alert(),prompt(),confirm()
focus()
22、JS的轉向函數是?怎麼引入一個外部JS檔案?(2分)
window.location.href
23、foo()和@foo()之間有什麼區別?(1分)
PHP 支援一個錯誤控制運算子:@。當將其放置在一個 PHP 運算式之前,該運算式可能產生的任何錯誤資訊都被忽略掉。
注意: @ 運算子只對錶達式有效。對新手來說一個簡單的規則就是:如果能從某處得到值,就能在它前面加上 @ 運算子。例如,可以把它放在變數,函數和include()調用,常量,等等之前。不能把它放在函數或類的定義之前,也不能用於條件結構例如 if 和 foreach 等。
24、如何聲明一個名為”myclass”的沒有方法和屬性的類? (1分)
class myclass{};
25、如何執行個體化一個名為”myclass”的對象?(1分)
$newmyclass = new myclass();
26、你如何訪問和設定一個類的屬性? (2分)
通過-〉
$newmyclass = new myclass();
$temp=$newmyclass->testvalue;
$newmyclass->testvalue="a";
27、mysql_fetch_row() 和mysql_fetch_array之間有什麼區別? (1分)
mysql_fetch_row -- 從結果集中取得一行作為枚舉數組
mysql_fetch_array -- 從結果集中取得一行作為關聯陣列,或數字數組,或二者兼有
--------------------------------------------------------------------
28、GD庫是做什麼用的? (1分)
GD庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者產生圖片。
在網站上GD庫通常用來產生縮圖或者用來對圖片加浮水印或者對網站資料產生報表。
29、指出一些在PHP輸入一段HTML代碼的辦法。(1分)
print("
");
echo "
";
30、下面哪個函數可以開啟一個檔案,以對檔案進行讀和寫操作?(1分)(c)
(a) fget() (b) file_open() (c) fopen() (d) open_file()
31、下面哪個選項沒有將 john 添加到users 數組中? (1分) (b)(c)(d)
(a) $users[] = ‘john’;
(b) array_add($users,’john’);//這個選項不敢確定,但是測試著沒有這個函數
(c) array_push($users,‘john’);
(d) $users ||= ‘john’;
32、下面的程式會輸入是否?(1分)
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
?>
否,局部變數
33、使用php寫一段簡單查詢,查出所有姓名為“張三”的內容並列印出來 (2分)
表名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($row=mysql_fetch_array($result))
{
echo $row['Name'].$row['Tel'].$row['Content'].$row['Date'];
echo "
";
}
34、如何使用下面的類,並解釋下面什麼意思?(3)
class test{
function Get_test($num){
$num=md5(md5($num)."En");
return $num;
}
}
雙重md5加密
$testObject = new test();
$encryption = $testObject->Get_test("xiaotian_ls");
經典面試題(PHP基礎型III)PHP來源:本站編輯 作者:phpma 時間:2009-02-13 Tag:經典面試題(PHP基礎型III)PHP 點擊: 31 求職與招聘 往往少不了面試與筆試,作為一個php程式員、多多少少都會有類似的經曆……以下是本人收集並整理的PHP面試題目,希望對同行們有所協助,找到一份合適的php開發工作!(共三節)
以下是經典面試題(PHP基礎型III)附答案 PHP已經賦予答案:
35、寫出 SQL語句的格式 : 插入 ,更新 ,刪除 (4分)
表名User
Name Tel Content Date
張三 13333663366 大專畢業 2006-10-11
張三 13612312331 本科畢業 2006-10-15
張四 021-55665566 中專畢業 2006-10-15
(a) 有一新記錄(小王 13254748547 高中畢業 2007-05-06)請用SQL語句新增至表中
INSERT INTO User('Name','Tel','Content','Date') VALUES('小王','13254748547','高中畢業','2007-05-06')
(b) 請用sql語句把張三的時間更新成為當前系統時間
UPDATE User SET Date=DATE_FORMAT(NOW(),'%Y-%m-%d') WHERE Name='張三'
(c) 請寫出刪除名為張四的全部記錄
DELETE FROM User WHERE Name='張四'
36、請寫出資料類型(int char varchar datetime text)的意思; 請問varchar和char有什麼區別(2分)
char 固定長度的字元,不足的長度用空格補上;varchar好象沒有這個類型,
37、MySQ自增類型(通常為表ID欄位)必需將其設為(?)欄位(1分)
38、寫出以下程式的輸出結果 (1分)
$b=201;
$c=40;
$a=$b>$c?4:5;
echo $a;
?>
答案:4
39、檢測一個變數是否有設定的函數是否?是否為空白的函數是?(2分)
isset();empty();
-----------------------------------------------------------------------------
40、取得查詢結果集總數的函數是?(1分)
mysql_fetch_array();
41、$arr = array('james', 'tom', 'symfony'); 請列印出第一個元素的值 (1分)
echo $arr['0'];
42、請將41題的數組的值用','號分隔併合並成字串輸出(1分)
$arr_im = implode(",",$arr);
print_r($arr_im);
43、$a = 'abcdef'; 請取出$a的值並列印出第一個字母(1分)
$a = 'abcdef';
echo $a;
$a_exp = substr($a,0,1);
echo "
";
echo $a_exp;
44、PHP可以和sql server/oracle等資料庫連接嗎?(1分)
當然可以
45、請寫出PHP5許可權控制修飾符(3分)
PHP5引入了訪問修飾,被放在屬性和方法聲明的前面用以控制它們的可見度。PHP5中支援以下三種不同的訪問修飾:
1、預設的是public(公用),即當你沒有為屬性和方法指定訪問修飾時就預設為public的。而這些public的項目在類內類外都可以訪問。
2、private(私人)訪問修飾,意味著被修飾的項只能在類中被訪問。如果你沒使用__get()和__set(),就最好給每個屬性都加上private修飾。也可以給方法加private修飾,例如一些只在類中才用到的函數。private修飾的項不能被繼承(更多詳細內容會在本章後續部分提到)。
3、protected(保護)修飾的項能在類及其子類中訪問。同樣更多詳細內容會在本章後續部分提到。現在暫時可以把protected看成界於public和private之間的修飾。
46、請寫出php5的建構函式和解構函式(2分)
如果你在一個類中聲明一個函數,命名為__construct,這個函數將被當成是一個建構函式並在建立一個對象執行個體時被執行. 清楚地說,__是兩個底線. 就像其它任何函數一樣,建構函式可能有參數或者預設值. 你可以定義一個類來建立一個對象並將其屬性全放在一個語句(statement)中.
你也可以定義一個名為__destruct的函數,PHP將在對象被銷毀前調用這個函數. 它稱為解構函式.
------------------------------------------------------------------------------
47、以下請用PHPMYADMIN完成--(沒有測試)
(一)建立新聞發布系統,表名為message有如下欄位 (3分)
id 文章id
title 文章標題
content 文章內容
category_id 文章分類id
hits 點擊量
(二)同樣上述新聞發布系統:表comment記錄使用者回複內容,欄位如下 (4分)
comment_id 回複id
id 文章id,關聯message表中的id
comment_content 回複內容
現通過查詢資料庫需要得到以下格式的文章標題列表,並按照回複數量排序,回複最高的排在最前面
文章id 文章標題 點擊量 回複數量
用一個SQL陳述式完成上述查詢,如果文章沒有回複則回複數量顯示為0
select message.id,message.title, message.hits sum(select count(0) from comment where message.id=comment.id) as comsums from message comment order by comsums;
(三)上述內容管理系統,表category儲存分類資訊,欄位如下 (3分)
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
使用者輸入文章時,通過選擇下拉式功能表選定文章分類
寫出如何?這個下拉式功能表
//以下使用的adodb
$cnn =& NewADOConnection('mysql');
$cnn -> Connect($db_hostspec, $db_username, $db_password, $db_database);
$cnn -> SetFetchMode(ADODB_FETCH_ASSOC);
if (!$cnn) message("無法串連資料庫 $db_database");
$sql = "SELECT * FROM `category` WHERE 1;
$rst =& $cnn -> Execute($sql);
if (!$rst) die($cnn -> ErrorMsg());
$arr_categroy = $rst -> GetArray();
$row): ?>
http://www.bkjia.com/PHPjc/477524.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/477524.htmlTechArticle求職與招聘 往往少不了面試與筆試,作為一個php程式員、多多少少都會有類似的經曆以下是本人收集並整理的PHP面試題目,希望對同行們有...