php程序員面試題


php程序員面試題(總100分/47題) 

簡述題(50分) 
1、用php打印出前一天的時間格式是2006-5-10 22:21:21(2分) 

echo date ( " Y-m-d G:i:s " , strtotime ( " -1 day " ));

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

echo()是一個php語句,所以沒有返回值,能打印簡單的數據。
print()是一個函數,有返回值,能打印簡單的數據。
print_r()是一個函數,能打印復雜的(mix)數據。
如:

<?
$value = print ' hello word<br> ' ;
echo " the value is $value <br> " ;
$arr = array ( ' name ' => ' wangking ' , ' qq ' => ' 123456 ' );
print_r ( $arr );
?>
運行結果:
hello word
the value is 1
Array ( [name] => wangking [qq] => 123456 ) ......

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

smarty模板

4、使用哪些工具進行版本控制?(1分) 

TortoiseSVN

6、如何實現字符串翻轉?(3分) 

strrev ( " Hello world! " );
7、優化mysql數據庫的方法。(4分,多寫多得) 

  (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_FORMA T(
date , format) .

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

使用mbstring擴展庫的mb_substr()截取就不會出現亂碼了
--------------------------------------------------------------- 
11、您是否用過版本控制軟件? 如果有您用的版本控制軟件的名字是?(1分) 

TortoiseSVN

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

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

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

15、用php寫出顯示客戶端ip與服務器ip的代碼(1分)

 打印客戶端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');
 打印服務器IP:echo gethostbyname("http://www.baidu.com/")
16、語句include和require的區別是什么?為避免多次包含同一文件,可用(?)語句代替它們? (2分) 

require 的使用方法如 require("MyRequireFile.php"); 。這個函數通常放在 PHP 程序的最前面,PHP 程序在執行前,就會先讀入 require 所指定引入的文件,使它變成 PHP 程序網頁的一部份。常用的函數,亦可以這個方法將它引入網頁中。

include 使用方法如 include("MyIncludeFile.php"); 。這個函數一般是放在流程控制的處理部分中。PHP 程序網頁在讀到 include 的文件時,才將它讀進來。這種方式,可以把程序執行時的流程簡單化。

為避免多次包含同一文件,可用require_once()/include_once()語句代替它們。

17、如何修改session的生存時間(1分).  、

? php
session_start ();
// 保存一天
$lifeTime = 24 * 3600 ;
setcookie ( session_name () , session_id () , time () + $lifeTime , " / " );
?

18、有一個網頁地址 http://www.phpres.com/index.html,如何得到它的內容?($1分)  

$contents = file_get_contents (“http : // www.phpres.com/index.html“);

19、在http 1.0中,狀態碼401的含義是(?);如果返回“找不到文件”的提示,則可用 header 函數,其語句為(?);(2分) 

 401表示未授權;header("HTTP/1.0 404 Not Found");[見參考手冊》函數參考》HTTP函數》header]
12、在php中,heredoc是一種特殊的字符串,它的結束標志必須?(1分)  

 
13、談談asp,php,jsp的優缺點(1分) 

 asp:簡單而易於維護,很適合小型網站應用,通過DCOM和MTS技術,ASP甚至還可以完成小規模的企業應用,但ASP的致命缺點就是不支持跨平台的系統,在大型項目開發和維護上非常困難。

PHP:語法簡單,非常易學易用,很利於快速開發各種功能不同的定制網站,PHP因為結構上的缺陷,使的PHP在復雜的大型項目上的開發和維護都比較困難。

JSP:對於網站開發來講不像PHP和ASP那樣易學易用,支持JAVA的主機也少於支持PHP的主機,這從一定程度上限制了Java技術在網站上的發展,不過在企業軟件應用上來講,MVC還是擁有相當大的優勢的,雖然其配置和部署相對其他腳本語言來說要復雜一些,但對於跨平台的中大型企業應用系統來講,基於JAVA技術的MVC架構幾乎成為唯一的選擇。
14、談談對mvc的認識(1分) 

MVC (Model-View-Controller)模式,即模型-試圖-控制器模式,其核心思想是將整個程序代碼分成相對獨立而又能協同工作的3個組成部分,具體的功能如下:

模型(Model):業務邏輯層。實現具體的業務邏輯、狀態管理的功能。

視圖(View):表示層。就是與用戶實現交互的頁面,通常實現數據的輸入和輸出功能。

控制器(Controller):控制層。起到控制整個業務流程的作用,實現View層跟Model層的協同工作。
15、寫出發貼數最多的十個人名字的sql,利用下表:members(id,username,posts,pass,email)(2分) 

SELECT username
FROM members
GROUP BY id
ORDER BY count (posts) DESC
LIMIT
0 , 10

16. 請說明php中傳值與傳引用的區別。什么時候傳值什么時候傳引用?(2分) 

按值傳遞:函數范圍內對值的任何改變在函數外部都會被忽略
按引用傳遞:函數范圍內對值的任何改變在函數外部也能反映出這些修改
優缺點:按值傳遞時,php必須復制值。特別是對於大型的字符串和對象來說,這將會是一個代價很大的操作。
按引用傳遞則不需要復制值,對於性能提高很有好處。
17. 在php中error_reporting這個函數有什么作用? (1分) 

error_reporting() 設置 PHP 的報錯級別並返回當前級別。
18. 請寫一個函數驗證電子郵件的格式是否正確 (2分) 

function checkEmail(sText) {
  
var reg =/^ ( ?: w +.? ) * w + @( ?: w +.? ) * w + $ / ;
  
var email = document . getElementById(sText) . value;
if ( ! reg . test(email))
{
alert(
" 電子郵件檢測失敗 " );
}

else
{
alert(
" 電子郵件格式正確 " );
}
}

19. 簡述如何得到當前執行腳本路徑,包括所得到參數。(2分)  

 

echo $_SERVER [ ' SCRIPT_FILENAME ' ] . " ? " . $_SERVER [ ' QUERY_STRING ' ];

20.如何修改session的生存時間. (1分) 
? php
session_start ();
// 保存一天
$lifeTime = 24 * 3600 ;
setcookie ( session_name () , session_id () , time () + $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() 從和指定的結果標識關聯的結果集中取得一行數據並作為數組返回。每個結果的列儲存在一個數組的單元中,偏移量從 0 開始。

mysql_fetch_array() 是 mysql_fetch_row() 的擴展版本。除了將數據以數字索引方式儲存在數組中之外,還可以將數據作為關聯索引儲存,用字段名作為鍵名。
-------------------------------------------------------------------- 
28、gd庫是做什么用的? (1分) 

是php處理圖形的擴展庫,GD庫提供了一系列用來處理圖片的API
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
    (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 ;
?>
//輸出10

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 );
$selectsql = " select * from user where name = \“張三\” " ;
$selectresult = @ mysql_query ( $selectsql );
if ( ! $selectresult ){
return " error " ;
}
else {
$Array = array ();
while ( $arr = @ mysql_fetch_array ( $selectresult )){
$arr [ ' time ' ] = strtotime ( $arr [ ' time ' ]);

$Array [] = $arr ;
}
@
mysql_free_result ( $result );
}
print_r ( $Array );

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

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語句新增至表中 
  (b) 請用sql語句把張三的時間更新成為當前系統時間 
  (c) 請寫出刪除名為張四的全部記錄 

INSERT INTO User ( ' Name ' , ' Tel ' , ' Content ' , ' Date ' ) VALUES ( ' 小王 ' , ' 13254748547 ' , ' 高中畢業 ' , ' 2007-05-06 ' )

UPDATE User SET Date = DATE_FORMAT(NOW(), ' %Y-%m-%d ' ) WHERE Name = ' 張三 '

DELETE FROM User WHERE Name = ' 張四 '

36、請寫出數據類型(int char varchar datetime text)的意思; 請問varchar和char有什么區別(2分) 

整形 固定長度字符型   可變長度字符型   時間型

char在保存的時候,后面(右邊)會用空格填充到指定的長度,在檢索的時候后面的空格會去

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

默認的是public(公共)      private(私有)      protected(保護)
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 

(三)上述內容管理系統,表category保存分類信息,字段如下 (3分)

category_id int(4) not null auto_increment;  
categroy_name varchar(40) not null;  
用戶輸入文章時,通過選擇下拉菜單選定文章分類  
寫出如何實現這個下拉菜單 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM