求職與招聘 往往少不了面試與筆試,作為一個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."<br>";
---------------------------------------------------------------
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)
看見了吧,單引號居然可以用來表示字符串。那麼如果我想表示單引號怎麼辦?和大多數語言一樣,使用轉義符號吧。即反斜線"".那麼使用單引號和雙引號有什麼區別呢?我的觀點是沒有多大區別。唯一的區別就是雙引號可以應用更多的轉義符。
讓我們定界符吧。它的語法是"<<<"。用法是在其後提供一個標識符,然後在標識符後提供字符串,再在字符串後提供此標識符來結尾。例如:
<?php
$str = <<<EOD
Hello, this is an example for HEREDOC Syntax.
Please attention to it.
EOD;
echo $str;
?>注意,這裡的提供的標志符是EOD,中間的是字符串。
<<<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
<script type="text/javascript" src="prototype.js"></script>
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("<br/>");
echo "<br/>";
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分)
<?php
$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 "<br>";
}
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 "<br>";
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();
<select>
<?php foreach ($arr_categroy as $i => $row): ?>
<option value="<?php echo $i;?> "><?php echo $row;?></option>
<?php endforeach; ?>
</select>