某知名資訊運營商PHP工程師面試筆試真題13_第1頁
某知名資訊運營商PHP工程師面試筆試真題13_第2頁
某知名資訊運營商PHP工程師面試筆試真題13_第3頁
某知名資訊運營商PHP工程師面試筆試真題13_第4頁
某知名資訊運營商PHP工程師面試筆試真題13_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

某知名資訊運營商PHP工程師面試筆試真題13一、選擇題1.

在PHP面向?qū)ο笾?,以下關(guān)于__call()方法的描述中,錯誤的是______A.__call方法在調(diào)用對象中不存在的方法時會自動調(diào)用B._(江南博哥)_call方法有兩個參數(shù)C.格式如下:function__call($方法名,$參數(shù)數(shù)組){//.....}D.__call方法在使用對象報錯時會自動調(diào)用正確答案:D[解析]__call()方法用于監(jiān)視錯誤的方法調(diào)用。為了避免當調(diào)用的方法不存在時產(chǎn)生錯誤,可以使用__call()方法來避免。該方法在調(diào)用的方法不存在時會自動調(diào)用,程序仍會繼續(xù)執(zhí)行下去。方法原型如下:

function__call(string$funcfion_name,array$arguments)

{......}

其中,第一個參數(shù)$function_name會自動接收不存在的方法名,第二個參數(shù)$arguments則以數(shù)組的方式接收不存在方法的多個參數(shù)。選項A選項B選項C的說法都正確,選項D說法錯誤。

所以,本題的答案為D。

2.

在PHP面向?qū)ο笾?,有一個通用方法__toString()方法,下面關(guān)于此方法的描述或定義中,錯誤的是______A.此方法是在直接輸出對象引用時自動調(diào)用的方法B.如果對象中沒有定義此方法,那么直接使用echo輸出此對象,會報如下錯誤:

Catchablefatalerror:ObjectofclassAcouldnotbeconvertedtostringC.此方法中一定要有一個字符串作為返回值D.此方法用于輸出信息,如下:publicfunction__toString(){echo"ThisisClass....";}正確答案:D[解析]__toString()是快速獲取對象的字符串信息的便捷方式,似乎魔術(shù)方法都有一個“自動”的特性,如自動獲取、自動打印等,__toString()也不例外,它是在直接輸出對象引用時自動調(diào)用的方法。__toString()方法一定要有個返回值(return語句,所以,選項D錯誤。正確的寫法應(yīng)該是

function__toString(){

return"stringvalue";

}

所以,本題的答案為D。

3.

下列語句中,正確定義一個常量的是______A.varconstPI=3.14;B.constPI=3.14;C.publicconstPI=3.14;D.staticPI=3.14;正確答案:B[解析]const與define都可以用于定義常量,而const本身就是一個語言結(jié)構(gòu),使用const的代碼簡單易讀,而define是一個函數(shù)。而且,const在編譯時要比define快很多。

具體而言,const與define在定義常量方面,區(qū)別如下:

1)const用于類成員變量的定義,一經(jīng)定義,不可修改。define不可用于類成員變量的定義,可用于全局常量。

2)const可在類中使用,define不能。

3)const不能在條件語句中定義常量。

4)const采用一個普通的常量名稱,define可以采用表達式作為名稱。

5)const只能接受靜態(tài)的標量,而define可以采用任何表達式。

6)const定義的常量是大小寫敏感的,而define可通過第三個參數(shù)(為true表示大小寫不敏感)來指定大小寫是否敏感。

public通常用來聲明類中的方法,static是定義靜態(tài)變量或方法。靜態(tài)變量僅在局部函數(shù)域中存在且只被初始化一次,當程序執(zhí)行離開此作用域時,其值不會消失,下次調(diào)用的時候不會重新初始化,而會使用上次執(zhí)行的結(jié)果。static關(guān)鍵字在類中,描述一個成員是靜態(tài)的,被static修飾的成員是屬于類的,不屬于任何對象實例。

所以,本題的答案為B。

4.

要把microtime()的輸出轉(zhuǎn)化成一個數(shù)字值,以下方法最簡便的是______A.$time=implode('',microtime());B.$time=explode('',microtime());$time=$time[0]+$time[1];C.$time=microtime()+microtime();D.$time=array_sum(explode('',microtime()));E.以上都不對正確答案:D[解析]microtime函數(shù)返回一個由時間戳和小數(shù)兩部分組成的字符串,兩部分由空格分開。因此,explode()將字符串分割并放入數(shù)組,array_sum()把它們相加,轉(zhuǎn)換成數(shù)字。選項D正確。

所以,本題的答案為D。

5.

考慮如下E-mail:

From:JohnCoggeshall

To:JoeUser

Subject:HellofromJohn!

Date:Wed,

20Dec200420:18:47-0400

Message-ID:<1234@local.machine.example>

Hello,HOWareyou?

在頭信息里添加什么才能讓它成為一份MIME郵件?______A.MIME-VersionB.Content-DispositionC.Content-TypeD.Content-Transfer-EncodingE.Content-ID正確答案:ACD[解析]如果要從給定的文本信息中創(chuàng)建一份合法的MIME郵件,那么MIME郵件在開頭處必須有MIME-Version頭信息,而郵件的每個片段(包括“root”片段)都必須有Content-Type和content-transfer-encoding這兩個部分。而Content-Disposition和Content-ID兩個頭信息是可選的,Content-Disposition用來指出片段要如何顯示(比如顯示為附件),Content-ID是片段中的各個內(nèi)容的唯一識別符。選項A選項C選項D正確。

所以,本題的答案為ACD。

6.

如果register_globals必須要被打開,那么能防止惡意用戶危害系統(tǒng)安全的是______(雙選)A.過濾所有來自非信任源的數(shù)據(jù)B.過濾所有外部數(shù)據(jù)C.所有變量在使用前先初始化D.使用難猜變量名來防止用戶篡改數(shù)據(jù)E.以上都對正確答案:BC[解析]對于選項A,即使過濾所有來自非信任源的數(shù)據(jù),也可能造成安全問題。選項A錯誤。

對于選項B,可以通過過濾所有外部數(shù)據(jù)來防止第三方用戶的惡意注入。選項B正確。

對于選項C,如果register_globals打開,那么需要保證所有變量在使用前都已初始化,以防止用戶惡意注入。選項C正確。

對于選項D,即使變量名難猜,也可以傳入惡意信息。選項D錯誤。

所以,本題的答案為BC。

7.

MySQL字符集setnames*命令設(shè)置哪幾個系統(tǒng)變量的值?______A.character_set_clientB.character_set_systemC.character_set_resultsD.character_set_serverE.character_set_connection正確答案:ACE[解析]在MySQL中通過setnames*設(shè)定字符集時,主要設(shè)置客戶端使用的編碼字符集(character_set_client)、數(shù)據(jù)庫給客戶端返回時使用的字符集(character_set_results)、連接數(shù)據(jù)庫的字符集設(shè)置編碼類型(character_set_connection)等三個系統(tǒng)變量的值。選項A選項C選項E正確。

所以,本題的答案為ACE。

8.

以下能把字符串里存儲的二進制數(shù)據(jù)轉(zhuǎn)化成十六進制的函數(shù)是______A.encodehex()B.pack()C.hex2bin()D.bin2hex()E.printf()正確答案:BD[解析]PHP中不存在encode_hex()函數(shù)。pack()函數(shù)可以將數(shù)據(jù)裝入一個二進制字符串中,可以將字符轉(zhuǎn)化成十六進制表示。bin2hex()函數(shù)也可以將字符串轉(zhuǎn)化成十六進制。hex2bin()函數(shù)可以把ASCII字符的字符串轉(zhuǎn)換為十六進制值,并通過pack()函數(shù)轉(zhuǎn)換回來。而printf()函數(shù)可以把數(shù)字轉(zhuǎn)換成十六進制,但是不能轉(zhuǎn)換字符串為十六進制。選項B選項D正確。

所以,本題的答案為BD。

9.

訪問會話變量(Session)的方式是______A.通過$_GETB.通過$_POSTC.通過$_REQUESTD.通過全局變量E.以上都不對正確答案:E[解析]訪問會話變量是使用$_SESSION方法獲取的。而$_GET、$_POST、$_REQUEST方法都是獲取表單提交的數(shù)據(jù),全局變量也沒有辦法獲取會話變量。選項E正確。

所以,本題的答案為E。

10.

下面不是PHP中面向?qū)ο蟮臋C制的是______A.類B.屬性、方法C.單一繼承D.多繼承正確答案:D[解析]PHP面向?qū)ο蟮臋C制有類、屬性、方法,只支持單一繼承,不支持多繼承。選項D正確。

所以,本題的答案為D。

二、填空題1.

PHP中的PEAR是______。正確答案:PEAR全稱為PHP擴展與應(yīng)用庫(PHPExtensionandApplicationRepository),它是一個PHP擴展及應(yīng)用的一個代碼倉庫??梢灾苯酉螺d下來,在代碼中包含擴展開發(fā)使用。

2.

獲得當前會話ID的方法是______。正確答案:session_id()。[解析]可以通過session_id()函數(shù)獲取和設(shè)置當前會話的ID。使用session_id()時,如果當前存在會話ID,那么返回當前會話ID,如果沒有會話,那么返回空字符串("")。

3.

代碼return?=='a';在“?”中加入______函數(shù)后返回true。正確答案:chr(65)。[解析]ord()函數(shù)可以返回字符串的首個字符的ASCII值。chr()函數(shù)可以返回指定ASCII值的字符串,可以通過chr(65)轉(zhuǎn)換成字符串A(備注:字符'A'的ASCII值為65),和A比較為真返回TRUE。而65+"和"+65都不能強制轉(zhuǎn)換成字符串A,無法和A比較為真。

4.

Session會話的值存儲在______。正確答案:服務(wù)器端。[解析]Session會話的值是存儲在服務(wù)器端的,而Cookie的值存儲在客戶端。

5.

向數(shù)組開頭插入一個值可以使用______函數(shù)。正確答案:array_unshift()。

三、簡答題1.

使用Memcache需要注意哪些問題?正確答案:1)將程序、Memcache、mysql分開存放。在實際的開發(fā)過程中,因為Memcache使用過程中把數(shù)據(jù)緩存在內(nèi)存中,因此會消耗很大的內(nèi)存。所以建議把代碼、mysql數(shù)據(jù)庫和Memcache分開存放。

2)不要使用Memcache保存重要數(shù)據(jù)。因為Memcache是把數(shù)據(jù)存放在內(nèi)存中,所以服務(wù)器突然斷電或掛掉,重啟后數(shù)據(jù)就會消失,沒有辦法找回。所以建議不要使用Memcache保存重要的數(shù)據(jù)。

3)定期查看緩存的分布狀況和擊中情況。只有定期查看緩存的分布狀況和擊中情況才能更好地分析緩存的工作效率和對緩存進行優(yōu)化,發(fā)現(xiàn)緩存中可能存在的問題并及時解決。

2.

Session的運行機制是什么?正確答案:Session是一種服務(wù)器端的機制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)(也可能就是使用散列表)來保存信息。

當程序需要為某個客戶端的請求創(chuàng)建一個Session的時候,服務(wù)器首先檢查這個客戶端的請求里是否已包含了一個Session標識SessionID,如果已包含一個SessionID,則說明已經(jīng)為此客戶端創(chuàng)建Session,服務(wù)器就按照SessionID把這個Session檢索出來使用;如果客戶端請求不包含SessionID,則為此客戶端創(chuàng)建一個Session并且生成一個與此Session相關(guān)聯(lián)的SessionID,SessionID的值應(yīng)該是一個既不會重復(fù),又不容易被找到規(guī)律以仿造的字符串,這個SessionID將被在本次響應(yīng)中返回給客戶端保存。

3.

假設(shè)有5臺服務(wù)器,請大致描述一下,如何搭建一個日pv300萬左右的中型網(wǎng)站?正確答案:3臺Web服務(wù)器,2臺MySQL數(shù)據(jù)庫服務(wù)器,采樣master/slave同步的方式減輕數(shù)據(jù)庫負載,Web服務(wù)器可以結(jié)合緩存來減少負載,同時3臺Web服務(wù)器內(nèi)容一致,可以采用DNS輪詢的方式來進行負載均衡。

4.

在PHP中,模板引擎的目的是什么?正確答案:因為PHP是一種內(nèi)嵌腳本在HTML頁面中執(zhí)行的服務(wù)器端腳本語言,所以PHP開發(fā)出來的Web網(wǎng)站的模板都是混雜了許多視圖和邏輯的代碼,使得代碼的可讀性變差,前后端人員的開發(fā)不能有效分開。通過模板引擎可以有效地解決這個問題,讓網(wǎng)頁的邏輯和視圖分開,后端人員只用處理程序的輸入、邏輯,然后輸出內(nèi)容到視圖中顯示即可。所以模板引擎的目的是在Web開發(fā)中分離應(yīng)用程序的業(yè)務(wù)邏輯和表現(xiàn)邏輯,前端人員只要將開發(fā)好的頁面指定為模板,后端人員負責邏輯編寫進行數(shù)據(jù)庫交互、用戶交互部分,定義特殊的變量,當用戶打開模板時特殊的變量可以動態(tài)地改變內(nèi)容呈現(xiàn)給用戶瀏覽。

5.

MySQL數(shù)據(jù)庫存在哪些引擎?并請對常用的4種數(shù)據(jù)庫引擎做個介紹。正確答案:在MySQL中存在MyISAM、InnoDB、BDB(BerkeleyDB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB等十幾種引擎,其中用得最多的引擎是MyISAM、InnoDB。下面簡單地對常用的4個引擎做個介紹。

1)MyISAM:默認的MySQL插件式存儲引擎。如果應(yīng)用是以讀寫和插入操作為主,只有很少的更新和刪除操作,并且對事務(wù)的完整性、并發(fā)性要求不是很高,那么可選用此種存儲引擎。

2)InnoDB:用于事務(wù)處理應(yīng)用程序,支持外鍵。如果應(yīng)用對事務(wù)的完整性有比較高的要求,在并發(fā)條件下要求數(shù)據(jù)一致性,數(shù)據(jù)操作除了插入和查詢以外,還包括很多的更新、刪除操作,那么InnoDB比較合適。InnoDB存儲引擎除了有效地降低由于刪除和更新操作導(dǎo)致的鎖定,還可以確保事務(wù)的完整提交和回滾。

3)Memory:將所有的數(shù)據(jù)保存在RAM中,在需要快速定位記錄和其他類似數(shù)據(jù)的環(huán)境下,可提供極快的訪問。Memory的缺陷是對表的大小有限制,太大的表無法緩存在內(nèi)存中,其次要確保表數(shù)據(jù)可以恢復(fù),數(shù)據(jù)庫異常終止后表中的數(shù)據(jù)是可以恢復(fù)的。MEMORY表通常用于更新不太頻繁的小表,用以快速得到訪問結(jié)果。

4)Merge:用于將一系列等同的MyISAM表以邏輯方式組合在一起,并作為一個對象引用它們。MERGE表的優(yōu)點在于可以突破對單個MyISAM表大小的限制,并且將不同的表分布在多個磁盤上,可以有效地改善Merge表的訪問效率。

四、編程題1.

要求寫一段程序,實現(xiàn)把以下數(shù)組$arr1轉(zhuǎn)換成數(shù)組$arr2的功能:

$arr1=array(

'0'=>array('fid'=>1,'tid'=>1,'name'=>'Name1'),

'1'=>array('fid'=>1,'tid'=>2,'name'=>'Name2'),

'2'=>array('fid'=>1,'tid'=>5,'name'=>'Name3'),

'3'=>array('fid'=>1,'tid'=>7,'name'=>'Name4'),

'4'=>array('fid'=>3,'tid'=>9,'name'=>'Name5')

);

$arr2=array(

'0'=>array(

'0'=>array('tid'=>1,'name'=>'Name1'),

'1'=>array('tid'=>2,'name'=>'Name2'),

'2'=>array('tid'=>5,'name'=>'Name3'),

'3'=>array('tid'=>7,'name'=>'Name4')

),

'1'=>array(

'0'=>array('tid'=>9,'name'=>'Name5')

)

);正確答案:$arr1轉(zhuǎn)換成$arr2的根據(jù)是數(shù)組把$arr1里面的fid=1的“放”一個數(shù)組里,fid=3的“放”在另一個數(shù)組,可以根據(jù)fid的值對數(shù)組進行分組,然后通過array_values()函數(shù)返回排序后的數(shù)組值即可。

實現(xiàn)代碼如下:

$arr1=array(

'0'=>array('fid'=>1,'tid'=>1,'name'=>'Name1'),

'1'=>array('fid'=>1,'tid'=>2,'name'=>'Name2'),

'2'=>array('fid'=>1,'tid'=>5,'name'=>'Name3'),

'3'=>array('fid'=>1,'tid'=>7,'name'=>'Name4'),

'4'=>array('fid'=>3,'tid'=>9,'name'=>'Name5')

);

foreach($arr1as$key=>$value){

$result[$value['fid']][]=$value;

}

$arr2=array_values($result);

print_r($arr2);

程序的運行結(jié)果為Array([0]=>Array([0]=>Array([fid]=>1[tid]=>1[name]=>Name1)[1]=>Array([fid]=>1[tid]=>2[name]=>Name2)[2]=>Array([fid]=>1[tid]=>5[name]=>Name3)[3]=>Array([fid]=>1[tid]=>7[name]=>Name4))[1]=>Array([0]=>Array([fid]=>3[tid]=>9[name]=>Name5)))。

2.

寫代碼創(chuàng)建二維數(shù)組存儲10位同學(xué)的學(xué)號和本課程的成績,10組數(shù)據(jù):(“20170101”,95)(“20170102”,88)(“20170103”,47)(“20170104”,92)(“20170105”,90)(“20170106”,75)(“20170107”,85)(“20170108”,65)(“20170109”,98)(“20170110”,55)。

1)求出成績最高者顯示在網(wǎng)頁上。

2)求出不及格的學(xué)生信息顯示在網(wǎng)頁上。正確答案:根據(jù)題意創(chuàng)建一個二維數(shù)組的實現(xiàn)代碼如下:

<?php

$score=array(95,88,47,92;90,75,85;65,98,55);

for($i=1;$i<=10;$i++){

$arr["2017010".$i][]=$score[$i-1];

}

?>

1)可以使用array_search()函數(shù)和max()函數(shù)求出最高者,實現(xiàn)代碼如下:

echoarray_search(max($arr),arr);

程序的運行結(jié)果為20170109。

2)求出不合格學(xué)生的信息,可以對數(shù)組進行遍歷判斷二維數(shù)組的值是否小于60。

實現(xiàn)代碼如下:

<?php

foreach($arras$key=>$val){

if($arr[$key][0]<60){

echo$key."分數(shù)為:".$arr[$key][0]."";

}

}

?>

程序的運行結(jié)果為20170103分數(shù)為:47

201701010分數(shù)為:55。

3.

一個球從100m高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時,共經(jīng)過多少米?第10次反彈多高?正確答案:根據(jù)題目要求,設(shè)初始總高度為100m,知道每次下落反彈回的高度為上一次的一半,循環(huán)10次,每次循環(huán)都對上次反彈后的高度除以2并且累加到總高度中,從而求解出共經(jīng)過多少米和第10次的反彈高度。

實現(xiàn)代碼如下:

<?php

header("Coment-type:text/html;charset=utf-8");

$k=100;

$sum=100;

for($i=1:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論