php常用面試題及答案
在尋找php工作的親們,面試是我們進入企業重中之重的第一道門,那么php面試題的有哪些?下面小編給大家整理的面試題以及答案,希望給大家面試的時候做準備!
1、談對mvc的認識?
答:由模型(Model),視圖(View),控制器(Controller)完成的應用程序
由模型發出要實現的功能到控制器,控制器接收組織功能傳遞給視圖;
2、寫出發貼數最多的十個人名字的SQL,利用下表:members(id,username,posts,pass,email)
答:SELECT * FROM `members` ORDER BY posts DESC limit 0,10;
3、GD庫是做什么用的?
答:gd庫提供了一系列用來處理圖片的功能,使用GD庫可以處理圖片,或者生成圖片。
在網站上GD庫通常用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。
4、請寫出數據類型(int char varchar datetime text)的意思; 請問varchar和char有什么別?
答:int是數字類型,char固定長度字符串,varchar實際長度字符串,datetime日期時間型,text文本字符串
char的場地固定為創建表設置的長度,varchar為可變長度的字符
5、以下程序的輸出結果?
$b=201;
$c=40;
$a=$b>$c?4:5;
echo $a;
?>
答:4
6、檢測一個變量是否有設置的函數是?是否為空的函數是?
答:isset($str),empty($str);
7、得查詢結果集總數的函數是?
答:mysql_num_rows($result);
8、$arr = array(‘james’, ‘tom’, ‘symfony’); 請打印出第一個元素的值?
答:echo $arr[0];
9、===”是什么?試舉一個“==”是真但“===”是假的例子。
“===”是既可以返回布爾值“假”,也可以返回一個不是布爾值但卻可以賦與“假”值的函式,strpos() 和 strrpos() 便是其中兩個例子。
if (strpos("abc", "a") == true){ // 這部分永不會被執行,因為 "a" 的位置是 0,換算成布爾值“假”}if (strpos("abc", "a") === true){ // 這部份會被執行,因為“===”保證函式 strpos() 的送回值不會換算成布爾值.}
10、以下程序的輸出結果
$str=“cd”;
$$str=“hotdog”;
$$str.=“ok”;
echo $cd;
?>
答案:hotdogok
11、給你三個數,寫程序求出其最大值。
$var1=1;
$var2=7;
$var3=8;
$max=$var1>$var2?$var1:$var2;
$max=$max>$var3?$max:$var3;
echo $max;
12、將一個選擇2號選項的ip為127.0.0.1的用戶在當前時間的投票記錄到數據庫的SQL
答:insert into poll (ip,time,iid) values('127.0.0.1',now(),2);
13、個函數驗證電子郵件的格式是否正確 ?
答:function checkEmail($email)
{
$pregEmail = "/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i";
return preg_match($pregEmail,$email);
}
14、表 menu(mainmenu,submenu,url),請用遞歸法寫出一樹形菜單,將所有的menu列出來
function GenerateMenu($id=0,$str="")
{
$result=mysql_query("select mainmenu,url,submenu from menu where mainmenu=$id");
while($row=mysql_fetch_array($result))
{
echo $str.$row["url"]."
";
GenerateMenu($row["submenu"],$str."--");
}
mysql_free_result($result);
}
$link=mysql_connect("localhost","root","");
mysql_select_db("phpinterview");
GenerateMenu();
mysql_close($link)
?>
15、PHP可以和sql server/oracle等數據庫連接嗎?
答:可以
16、寫出PHP5權限控制修飾符?
答:public(公共),private(私用),protected(繼承)
17、請寫出php5的構造函數和析構函數?
答: 構造函數:官方稱自定義函數
析構函數:垃圾回收函數(__destruct)
18、表單中 get與post提交方法的區別?
答:get是發送請求HTTP協議通過url參數傳遞進行接收,而post是實體數據,可以通過表單提交大量信息.
19、session與cookie的區別?
答:session:儲存用戶訪問的全局唯一變量,存儲在服務器上的php指定的目錄中的(session_dir)的位置進行的存放
cookie:用來存儲連續訪問一個頁面時所使用,是存儲在客戶端,對于Cookie來說是存儲在用戶WIN的Temp目錄中的。
兩者都可通過時間來設置時間長短
20、用PHP打印出前一天的時間格式是2010-7-3 12:28:21?
答:echo date(‘Y-m-d H:i:s’, strtotime(‘-1 days’));
21、e2ho(),print(),print_r()的區別?
答:echo是PHP語句, print和print_r是函數,語句沒有返回值,函數可以有返回值(即便沒有用)
print() 只能打印出簡單類型變量的值(如int,string)
print_r() 可以打印出復雜類型變量的值(如數組,對象)
echo 輸出一個或者多個字符串
22、能夠使HTML和PHP分離開使用的模板?
答:Smarty, TinyButStrong,XTemplate, Savant,Template Lite, Dwoo, phemplate
23、哪些工具進行版本控制?
答:cvs,svn,vss;
24、如何實現字符串翻轉?
答:echo strrev($a); //strrev — 顛倒字符串
25、優化查詢語句?
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";
26、對于大流量的網站,您采用什么樣的方法來解決訪問量問題?
答:確認服務器硬件是否足夠支持當前的流量,數據庫讀寫分離,優化數據表,
程序功能規則,禁止外部的盜鏈,控制大文件的下載,使用不同主機分流主要流量
27、如何修改SESSION的生存時間?.
答:方法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);
28、有一個網頁地址, 比如PHP開發資源網主頁: http://www.php100.com/,如何得到它的內容?
答:方法1(對于PHP5及更高版本):
$readcontents = fopen(“http://www.php100.com/”, “rb”);
$contents = stream_get_contents($readcontents);// stream_get_contents 取得字符串賦值給$contents
fclose($readcontents);
echo $contents;
方法2:
echo file_get_contents(“http://www.php100.com/”);
// file_get_contents() 函數把整個文件讀入一個字符串中。
29、在HTTP 1.0中,狀態碼401的含義是(?);如果返回“找不到文件”的提示,則可用 header 函數,其語句為?
答:狀態401代表未被授權,header(“Location:www.xxx.php”);
30、在PHP中,heredoc是一種特殊的字符串,它的結束標志必須?
答:heredoc的語法是用”<<<"加上自己定義成對的標簽,在標簽范圍內的文字視為一個字串
例子:
$str = <<
my name is Jiang Qihui!
SHOW;
31、foo()和@foo()之間有什么區別?
答:@foo()控制錯誤輸出
32、如何聲明一個名為”myclass”的沒有方法和屬性的類?
答:class myclass{ }
33、如何實例化一個名為”myclass”的對象?
答:new myclass()
34、你如何訪問和設置一個類的屬性?
答:$object = new myclass();
$newstr = $object->test;
$object->test = “info”;
35、mysql_fetch_row() 和mysql_fetch_array之間有什么區別?
答:mysql_fetch_row是從結果集取出1行數組,作為枚舉
mysql_fetch_array是從結果集取出一行數組作為關聯數組,或數字數組,兩者兼得
36、下面哪個函數可以打開一個文件,以對文件進行讀和寫操作?
(a) fget() (b) file_open() (c) fopen() (d) open_file()
答:c
37、下面的程序會輸入是否?
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
?>
否,局部變量
38、JS表單彈出對話框函數是?獲得輸入焦點函數是?
答:彈出對話框: alert(),prompt(),confirm()
獲得輸入焦點 focus()
39、JS的轉向函數是?怎么引入一個外部JS文件?
答:window.location.href;
40、$a = ‘abcdef’; 請取出$a的.值并打印出第一個字母?
答:echo $a{0} 或 echo substr($a,0,1)
41、如何使用下面的類,并解釋下面什么意思?
class test{
function Get_test($num){
$num=md5(md5($num).”En”);
return $num;
} }
雙重md5加密
$testObject = new test();
$encryption = $testObject->Get_test(“xiaotian_ls”);
42、請舉例說明在你的開發過程中用什么方法來加快頁面的加載速
答:要用到服務器資源時才打開,及時關閉服務器資源,數據庫添加索引,頁面可生成靜態,圖片等大文件單獨服務器。使用代碼優化工具啦
43、寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把script標記及其內容都去掉):
$script="以下內容不顯示:alert(‘cc’);";
echo preg_replace("/].*?>.*?/si", "替換內容", $script);
?>
44、以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句____動態裝載PHP模塊,然后再用語句____使得Apache把所有擴展名為php的文件都作為PHP腳本處理。
答:LoadModule
php5_module
"c:/php/php5apache2.dll";AddType application/x-httpd-php .php
45、sort()、asort()、和 ksort() 有什么分別?它們分別在什么情況下使用?
sort()
根據陣列中元素的值,以英文字母順序排序,索引鍵會由 0 到 n-1 重新編號。主要是當陣列索引鍵的值無關疼癢時用來把陣列排序。
asort()
與 sort() 一樣把陣列的元素按英文字母順序來排列,不同的是所有索引鍵都獲得保留,特別適合替聯想陣列排序。
ksort()
根據陣列中索引鍵的值,以英文字母順序排序,特別適合用于希望把索引鍵排序的聯想陣列。
46、用PHP寫出顯示客戶端IP與服務器IP的代碼?
答:打印客戶端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');//getenv取得開發環境變量
打印服務器IP:echo gethostbyname("www.bolaiwu.com") // gethostbyname取得IP地址函數
47、語句include和require的區別是什么?為避免多次包含同一文件,可用(?)語句代替它們?
答:require->require是無條件包含也就是如果一個流程里加入require,無論條件成立與否都會先執行require
include->include有返回值,而require沒有(可能因為如此require的速度比include快)
注意:包含文件不存在或者語法錯誤的時候require是致命的,include不是
48、PHP的意思?
答:PHP是一個基于服務端來創建動態網站的腳本語言,您可以用PHP和HTML生成網站主頁
49、談談asp,php,jsp的優缺點?
答:ASP全名Active Server Pages,是一個WEB服務器端的開發環境, 利用它可以產生和運行動態的、交互的、高性能的WEB服務應用程序。ASP采用腳本語言VB Script(Java script)作為自己的開發語言。
PHP是一種跨平臺的服務器端的嵌入式腳本語言. 它大量地借用C,Java和Perl語言的語法, 并耦合PHP自己的特性,使WEB開發者能夠快速地寫出動態生成頁面.它支持目前絕大多數數據庫。還有一點,PHP是完全免費的,不用花錢,你可以從PHP官方站點(http://www.php.net)自由下載。而且你可以不受限制地獲得源碼,甚至可以從中加進你自己需要的特色。
JSP 是Sun公司推出的新一代站點開發語言,他完全解決了目前ASP,PHP的一個通病--腳本級執行(據說PHP4 也已經在Zend 的支持下,實現編譯運行).Sun 公司借助自己在Java 上的不凡造詣,將Java 從Java 應用程序 和 Java Applet 之外,又有新的碩果,就是Jsp--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能強大的站點程序。
三者都提供在 HTML 代碼中混合某種程序代碼、由語言引擎解釋執行程序代碼的能力。但JSP代碼被編譯成 Servlet 并由 Java 虛擬機解釋執行,這種編譯操作僅在對 JSP 頁面的第一次請求時發生。在 ASP 、PHP、JSP 環境下,HTML 代碼主要負責描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。普通的 HTML 頁面只依賴于 Web 服務器,而 ASP 、PHP、JSP 頁面需要附加的語言引擎分析和執行程序代碼。程序代碼的執行結果被重新嵌入到 HTML 代碼中,然后一起發送給瀏覽器。 ASP 、PHP、 JSP三者都是面向 Web 服務器的技術,客戶端瀏覽器不需要任何附加的軟件支持。
50、 優化MYSQL數據庫的方法
(1).選取最適用的字段屬性,應該盡量把字段設置為NOT NULL,這樣在將來執行查詢的時候,數據庫不用去比較NULL值。
(2).使用連接(JOIN)來代替子查詢(Sub-Queries)
(3).盡量少使用 LIKE 關鍵字和通配符
【php常用面試題及答案】相關文章:
常用php面試題及答案06-19
PHP面試題與答案01-16
最新關于精選php面試題及答案12-31
騰訊php面試題02-11
PHP面試題匯總01-27
11個提問頻率最高的PHP面試題以及答案02-14
2017基礎php面試題06-07
優秀php高級工程師面試題及答案06-19
百度php面試題02-11