




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
某知名手機制造商PHP工程師面試筆試真題19一、選擇題1.
以下關于設計模式的說法中,錯誤的是______A.觀察者模式中,觀察者可以改變被觀察者的狀態,再由被觀察者通知所有觀察者依據被觀察者的狀態進行(江南博哥)B.MVC模型的基本工作原理是基于觀察者模式,實現是基于命令模式C.設計模式的核心原則是“開.閉”原則,即對擴展開放,對修改關閉D.創立型模式的根本意圖是要把對象的創建和使用分離的責任進行分離,從而降低系統的耦合度正確答案:A[解析]觀察者只能觀察到被觀察者狀態的變化,而不能改變被觀察者的狀態。
所以,本題的答案為A。
2.
有如下代碼:
$String="Thisisatest.";
echoereg_replace("is"."was",$String)."<br>";
echoereg_replace("()is","\\1was",$String)."<br>";
echoereg_replace("(()is)","\\2was",$String)."<br>";
程序的輸出結果為______A.Thiswasatest.Thisisatest.Thiswasatest.B.Thisisatest.Thisisatest.Thiswasatest.C.Thisisatest.Thisisatest.Thisisatest.D.Thiswasatest.Thisisatest.Thisisatest.E.Thiswasatest.Thiswasatest.Thiswasatest.正確答案:E[解析]ereg_replace()函數可以對符合正則條件的字符串替換,因為第一個是將is替換成was,所以,選項B選項C錯誤。第二句匹配的是“()is”規則,“()”表示的是匹配符合規則的字符串,而“\\1”表示的是和子匹配一樣的內容,那么會被替換成“Thiswasatest.”第三個輸出中,“(()is)”匹配符合括號內規則的字符串,“\\2was”表示和第二個子匹配()is的內容一樣,會替換輸出為Thiswasatest.。選項E正確。
所以,本題的答案為E。
3.
在PHP面向對象中,下面關于final修飾符的描述中,錯誤的是______A.使用final標識的類不能被繼承B.在類中使用final標識的成員方法,在子類中不能被覆蓋C.不能使用final標識成員屬性D.使用final標識的成員屬性,不能在子類中再次定義正確答案:D[解析]因為final只能修飾類與方法,不能修飾類的屬性。選項D正確。
所以,本題的答案為D。
4.
某些時候需要在PHP腳本中使用第三方功能,來實現一些PHP不能完成的任務(比如調用壓縮軟件壓縮某種PHP不支持其格式的文件)。當在PHP腳本中執行系統命令時,以下選項中,能確保沒有命令注入的是______(雙選)A.總是要給在exec()中執行的命令加'B.總是使用shell_exec()函數,它能夠在執行前對命令進行安全檢查C.使用escapeshellcmd()數轉義命令中的特殊字符D.在執行命令前,先用ini_set()打開safe_modeE.用escapeshellarg()數在執行前轉義命令參數正確答案:CE[解析]在PHP中執行變量參與的系統命令時,是沒有辦法保證任何一個函數是絕對安全的,可以使用escapeshellcmd()函數和escapeshellarg()函數轉義命令中的特殊字符或命令參數,再傳遞給shell,這樣可以保證字符和命令參數的安全。選項C選項E正確。
所以,本題的答案為CE。
5.
以下程序的輸出結果是______
<?php
$x='apple';
echosubstr_replace($x,'x',1,2);
?>A.xB.axleC.axxleD.applexE.Xapple正確答案:B[解析]substr_replace()函數用于把字符串的一部分替換為另一部分,語法為substr_replace(檢查的字符串,需要插入的字符串,何處開始替換(可選),替換多少個字符(可選))。所以substr_replace($x,'x',1,2)的意思是,從索引位置等于1的$x字符串位置開始,把$x中的2個字符串替換為一個字符串x,可以得到axle。選項B正確。
所以,本題的答案為B。
6.
安裝Web服務器程序后,在地址欄中輸入______,可以訪問站點默認文檔。A.在局域網中直接輸入服務器的IP地址B.在局域網中直接輸入服務器所在計算機的名稱C.如果是在服務器所在的計算機上,那么直接輸入D.以上全都是對的正確答案:D[解析]要訪問到服務器的程序,可以根據服務器的IP地址直接訪問,也可以通過服務器的計算機名稱進行遠程訪問,或者直接在服務器的計算機中輸入也可以訪問,因為是本地服務器的路徑。選項A選項B選項C的描述都是對的,故選項D正確。
所以,本題的答案為D。
7.
假設需要編寫一個腳本,用來通過任意一個流讀取文本數據,并用另一個ROT13編碼的流寫回。編碼必須在用第二個流寫回時進行。以下最合適的方法是______A.把編碼后的數據存在臨時變量中,把這個變量寫入流B.用流過濾器即時編碼C.創建一個ROT13查詢表,然后一個字符一個字符地即時寫入D.ROT13無法即時編碼E.以上都不對正確答案:B[解析]PHP中的流過濾器可以應用在任何流上,并且能對數據流同時進行多個操作。可以給一個流同時添加ROT13過濾器和base64過濾器,來合并成base64/ROT13編碼。選項B正確。
所以,本題的答案為B。
8.
gethostbynamel函數的作用是______A.返回某個主機名的IPB.返回某個主機名的所有IP列表C.以長整型數的形式返回某個主機的IPD.以長整型數的形式返回某個主機的所有IP列表E.以上都不對正確答案:B[解析]gethostbynamel()函數的作用是根據主機名獲取該主機名的所有IP列表。選項B正確。
所以,本題的答案為B。
9.
寬帶的1Mbit/s理論上的下載速度是______A.128kbit/sB.256kbit/sC.1024kbit/sD.512kbit/s正確答案:A[解析]因為下載速度是以Byte做單位,1B=8bit,所以1Mbit/s的理論上下載速度是1Mbit/s=1024kbit/s。所以可得1*1024/8bit/s=128kbit/s。
所以,本題的答案為A。
10.
下列代碼的輸出結果是______
<?php
$qpt='Eattolive,butnotlivetoeat';
echopreg_match("/∧to/",$qpt);
?>A.0B.1C.toD.Null正確答案:A[解析]preg_match()函數主要用于正則表達式的匹配,如果匹配成功,則返回1,如果匹配失敗,則返回0。
需要注意的是,只要preg_match()匹配成功一次后就會停止匹配,如果想要實現全部結果的匹配,則需使用preg_match_all()函數來實現。
對于本題而言,正則表達式“/^to/”,最前面的/和最后面的/表示正則表達式的開始和結束。“^to”表示這個正則表達式只能匹配以“to”開頭的字符串。由于題目中的字符串不是以to開頭的,因此匹配失敗。選項A正確。
所以,本題的答案為A。
二、填空題1.
______函數能返回腳本里任意行中調用的函數的名稱。該函數同時還經常被用在調試中,用來判斷錯誤是如何發生的。正確答案:debug_backtrace()。[解析]debug_backtrace()的作用:返回在特定位置調用過的函數名組成的數組,經常被用于調試。
2.
面向對象的主要特征有______、______、______、______。正確答案:抽象、繼承、封裝、多態。[解析]1)抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
2)繼承:繼承是一種聯結類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實例變量,并且子類可以修改或增加新的方法使之更適合特殊的需要。
3)封裝:封裝是指將客觀事物抽象成類,每個類對自身的數據和方法實行保護。類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的信息進行隱藏。
4)多態:多態是指允許不同類的對象對同一消息做出響應。多態包括參數化多態和包含多態。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好地解決了應用程序函數同名問題。
3.
打開php.ini中的safe_mode,會影響的函數有______、______、______、______、______、______。正確答案:fopen()、mkdir()、rmdir()、set_time_limit()、mysql_connect()、mail()。[解析]PHP的safa_mode提供了一個基本安全的共享環境,在一個有多個用戶賬戶存在的PHP開發的Web服務器上。當安全模式打開的時候,部分函數將被完全地禁止,而還有部分函數的功能將會受到限制。下面重點給出其中的一部分:
1)fopen()、mkdir()、rmdir()檢查被操作的目錄是否與正在執行的腳本有相同的UID。
2)創建新文件(只能在屬于當前用戶的目錄下創建文件)。
3)dl()函數在安全模式下被禁用。
4)set_time_limit()在安全模式下不起作用。
5)mysql服務器所用的用戶名必須與調用mysql_connect()的文件的擁有者用戶名相同。
6)mail()在安全模式下,第5個參數被屏蔽。
4.
session的運行機制是______。正確答案:服務器使用一種類似于散列表的結構(也可能就是使用散列表)來保存信息。[解析]Session是一種服務器端的機制,服務器使用一種類似于散列表的結構(也可能就是使用散列表)來保存信息。
當程序需要為某個客戶端的請求創建一個Session的時候,服務器首先檢查這個客戶端的請求里是否已包含了一個Session標識SessionID,如果已包含一個SessionID,則說明已經為此客戶端創建Session,服務器就按照SessionID把這個Session檢索出來使用,如果客戶端請求不包含SessionID,那么為此客戶端創建一個Session并且生成一個與此Session相關聯的SessionID,SessionID的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個SessionID將被在本次響應中返回給客戶端保存。
5.
MySQL的事務是______。正確答案:事務是作為一個單元的一組有序的數據庫操作。如果組中的所有操作都成功,.則認為事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作完成,事務則提交,那么其修改將作用于所有其他數據庫進程。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。
三、簡答題1.
mysql_fetch_row()和mysql_fetch_array()有什么區別?正確答案:mysql_fetch_row()把數據庫的一列存儲在一個以零為基數的陣列中,第一欄在陣列的索引0,第二欄在索引1,如此類推。mysql_fetch_assoc()把數據庫的一列存儲在一個關聯陣列中,陣列的索引就是欄位名稱,例如,數據庫查詢送回“first_name”“last_name”“email”三個欄位,陣列的索引便是“first_name”“last_name”和“email”。mysql_fetch_array()可以同時送回mysql_fetch_row()和mysql_fetch_assoc()的值。
2.
詳細描述PHP處理Web上傳文件的流程。如何限制上傳文件的大小不能超過某個數值?正確答案:首先用戶在瀏覽器端選擇上傳的文件,提交后,通過post方式上傳到Apache服務器由PHP引擎處理,判斷文件是否能夠上傳到PHP配置文件中指定的臨時目錄,之后獲取文件后綴名判斷文件是否是允許上傳的文件格式,沒有問題后再通過$_FILES["file"]["size"]得到上傳文件的數值大小,判斷其是否小于設置的值,如果沒問題,則按照隨機數+時間的方式生成文件的名字+后綴。最后將文件從臨時目錄轉移至Apache服務器目錄。
也可以在PHP配置文件通過file_upload_max設置其值限制上傳文件大小。
3.
Memcache對item的過期時間有什么限制?正確答案:Memcache的item過期時間最長可以為30天,Memcache把傳入的過期時間解釋成時間點后,當到了這個時間點,Memcache就把item設置為失效狀態。當使用Memcache存儲數據時,設置一個值為永久時間或一段時間,如果Memcache分配的內存使用完畢,則首先會替換掉已失效的數據,其次是最近少使用的數據。
4.
什么是函數返回值?正確答案:在PHP中,函數可以返回一個值或多個值,返回值是通過return語句來實現的。return語句會使程序在return處停止,并返回指定的變量。最常用的就是函數返回一個值情況,而且這種情況比較簡單,因此,這里重點介紹返回多個值的情況。
如果一個函數需要返回多個值,那么可以通過以下兩種方式實現。
1)返回數組:通過返回一個數組可以達到返回多個值的目的。
示例代碼如下:
<?php
functionresults($string)
{
$result=array();
$result[]=strtoupper($string);
//把所有字符轉換為大寫
$result[]=strtolower($string);
//把所有字符轉換為小寫
$result[]=ucwords($string);
//把所有單詞的首字母換成大寫
return$result;
}
$multi_result=results('helloworld');
print_r($multi_result);
?>
程序的運行結果為
Array
(
[0]=>HELLOWORLD
[1]=>helloworld
[2]=>HelloWorld
)
2)引用:可以給函數傳遞引用參數,此時在函數內部對引用變量值的修改對實參也可見。通過這種方法也可以實現把函數內部對引用變量的值的修改返回給調用者,從而實現了返回多個值的目的,示例代碼如下:
<?php
functiontest(&$a,&$b)
{
$a*=10;
$b*=10;
return$a+$b;
}
$a=10;
$b=12;
$c=test($a,$b);
//注意這里沒有&了
//顯示修改后的值
echo$a;
//輸出100通過引用返回
echo$b;
//輸出120通過引用返回
echo$c;
//輸出220通過函數返回
?>
5.
觸發器分為事前觸發和事后觸發,二者有什么區別?語句級觸發和行級觸發有什么區別?正確答案:事前觸發發生在事件發生之前驗證一些條件或進行一些準備工作;事后觸發發生在事件發生之后,做收尾工作,保證事務的完整性。而事前觸發可以獲得之前和新的字段值。語句級觸發器可以在語句執行之前或之后執行,而行級觸發在觸發器所影響的每一行觸發一次。
四、編程題1.
假設有一條繩子,上面有紅、白、藍三種顏色的旗子,起初繩子上的旗子顏色并沒有順序,現在希望將之分類,并排列為藍、白、紅的順序,要如何移動才能讓次數最少?注意只能在繩子上進行這個動作,而且一次只能調換兩個旗子。示意圖如下圖所示。
正確答案:在一條繩子上移動,也就意味著在程序中只能使用一個陣列,不能使用輔助存儲。問題的解法很簡單,從繩子開頭進行,遇到藍色往前移,遇到白色留在中間,遇到紅色往后移。如果要讓移動次數最少,那么還需要一些技巧。
算法的主要思路為用三個下標b、w、r分別指向不同的旗子。其中b指向的從0開始連續排列的藍色旗子的最后面的第一個非藍色旗子,r指向的從最后一個序號開始連續排列的紅色旗子的第一非紅色旗子。例如,bbrwbbrr,那么b指向的就是序號為2的紅色旗子,r指向的就是序號為倒數第3的藍色旗子。
w作為可移動的指針來指引旗子的移動,當w指向的旗子是白色旗子的時候,w繼續向前移動;當w指向的旗子是藍色的時候,就需要把b所指的旗子和w所指的藍色旗子交互;同理當w指的旗子是紅色的時候,就需要w所指的紅色旗子和r所指的旗子交換。
實現代碼如下:
<?php
header("Content-type:text/html;charset=utf-8");
define("BLUE",'b');
define("WHITE",'w');
define("RED",'r');
functionSWAP($x,$y,&$color){
$temp=$color[$x];
$color[$x]=$color[$y];
$color[$y]=$temp;
}
$color=array('r','b','r','w','r','r','w','b','b','r');
$wFlag=0;
$bFlag=0;
$rFlag=count($color)-1;
echo"棋子開始的排序:";
for($i=0;$i<count($color);$i++)
echo$color[$i];
echo"<br>";
while($wFlag<=$rFlag){
if($color[$wFlag]==WHITE)
$wFlag++;
elseif($color[$wFlag]==BLUE){
SWAP($bFlag,$wFlag,$color);
$bFlag++;
$wFlag++;
}
else{
while($wFlag<$rFlag&&$color[$rFlag]==RED)
$rFlag--;
SWAP($rFlag,$wFlag,$color);
$rFlag--;
}
}
echo"排序后的棋子:";
for($i=0;$i<count($color);$i++)
echo$color[$i];
echo"<br>";
?>
程序的運行結果為
棋子開始的排序:rbrwrrwbbr
排序后的棋子:bbbwwrrrrr
2.
請用PHP編程,實現一個簡單的異常類。正確答案:<?php
classMyExceptionextendsException{
publicfunctionerrmsg(){
$msg="exceptionoccur";
return$msg;
}
}
functionGetNum($num)
{
if($num>10)
{
thrownewMyException("Exceptionocur");
}
returntrue;
}
try{
GetNum(100);
echo"thisisendline"."\n";
}catch(MyException$e){
echo"Exceptionmsg:".$e->errmsg();
}
?>
程序的運行結果為
Exceptionmsg:Exceptionocur
上述代碼拋出了一個異常,通過自定義的異常類來捕獲。主要步驟如下:
1)自定義的異常類繼承了超類Exception,這樣就具有了超類的屬性和方法。
2)創建異常函數errmsg(),返回錯誤信息。
3)傳遞不合法的變量,執行try代碼塊,拋出異常。
4)catch代碼塊捕獲異常,并顯示錯誤信息。
3.
請用PHP編程實現連接本地的redis操作,并對變量a進行賦值和取值,并刪除變量a。正確答案:<?php
$Redis=newRedis();
$Redis->connect('',6378);
//連接redis
$res=$Redis->set('a',"bbbb");
//對a賦值
$a=$Redis->get('a');
//對a取值
$res=$Redis->delete('a');
//刪除a
?>
4.
一個數組里,除了三個數是唯一出現的,其余的數都出現偶數次,找出這三個數中的任意一個。比如數組序列為[1,2,4,5,6,4,2],只有1,5,6這三個數字是唯一出現的,數字2與4均出現了偶數次(2次),只需要輸出數字1,5,6中的任意一個就行。正確答案:根據題目描述可以得到如下幾個有用的信息:
1)數組中元素個數一定是奇數個。
2)由于只有三個數字出現過一次,顯然這三個數字不相同,因此,這三個數對應的二進制數也不可能完全相同。
由此可知,必定能找到二進制數中的某一個bit來區分這三個數(這一個bit的取值或者為0,或者為1),當通過這一個bit的值對數組進行分組的時候,這三個數一定可以被分到兩個子數組中,并且其中一個子數組中分配了兩個數字,而另一個子數組分配了一個數字,而其他出現兩次的數字肯定是成對出現在子數組中的。此時只需要重點關注哪個子數組中分配了這三個數中的其中一個,就可以很容易地找出這個數字了。當數組被分成兩個子數組時,這一個bit的值為1的數被分到一個子數組subArray1,這一個bit的值為0的數被分到另外一個子數組subArray0。
1)如果subArray1中元素個數為奇數個,那么對subArray1中的所有數字進行異或操作;由于a^a=0,a^0=a,出現兩次的數字通過異或操作得到的結果為0,然后與只出現一次的數字執行異或操作,得到的結果就是只出現一次的數字。
2)如果subArray0中元素個數為奇數個,那么對subArray0中所有元素進行異或操作得到的結果就是其中一個只出現一次的數字。
為了實現上面的思路,必須先找到能區分這三個數字的bit位,根據以上的分析給出本算法的實現思路:
以32位平臺為例,一個int類型的數字占用32位空間,從右向左使用每一位對數組進行分組,分組的過程中,計算這個bit值為0的數字異或的結果result0,出現的次數count0;這個bit值為1的所有數字異或的結果result1,出現的次數count1。
如果count0是奇數且result1!=0,那么說明這三個數中的其中一個被分配到這一bit為0的子數組中,因此,這個子數組中所有數字異或的值result0一定是出現一次的數字。(如果result1==0,說明這一個bit不能用來區分這三個數字,此時這三個數字都被分配到子數組subArray0中,因此,result1!=0就可以確定這一個bit可以被用來區分這三個數字的。)
同理,如果count1是奇數且result0!=0,那么result1就是其中一個出現1次的數。
以[6,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年專業咖啡廳餐飲管理合同
- 二零二五年度辦公樓智能化改造施工合同
- 二零二五年度通信基站安裝工程合同范本
- 二零二五版茶葉電商平臺廣告投放合同
- 二零二五年度旅游度假村產權互換運營合同范本
- 二零二五年房地產清潔保養及綠化管理合同補充
- 二零二五年度智慧社區建設補充合同
- 2025版網絡安全風險評估報告制作合同
- 2025版智能交通信號系統安裝勞務承包合同
- 二零二五年度環保包裝袋加工與市場推廣合同
- 高中完形填空課件
- 護士長崗位面試問題及答案
- 無人機培訓課件
- 國際壓力性損傷潰瘍預防和治療臨床指南(2025年版)解讀
- 2024陜西延長石油物流集團有限公司社會招聘筆試參考題庫附帶答案詳解
- 關于成立特種設備安全管理機構的通知(模板)
- GA 254-2022警服內穿襯衣
- GB/T 15972.4-1998光纖總規范第4部分:傳輸特性和光學特性試驗方法
- 講課兒童肺功能詳解課件
- 沙迪克操作手冊
- 小學升初中入學測試寧外入學試卷2
評論
0/150
提交評論