




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
某知名資訊運營商PHP工程師面試筆試真題13一、選擇題1.
在PHP面向對象中,以下關于__call()方法的描述中,錯誤的是______A.__call方法在調用對象中不存在的方法時會自動調用B._(江南博哥)_call方法有兩個參數C.格式如下:function__call($方法名,$參數數組){//.....}D.__call方法在使用對象報錯時會自動調用正確答案:D[解析]__call()方法用于監(jiān)視錯誤的方法調用。為了避免當調用的方法不存在時產生錯誤,可以使用__call()方法來避免。該方法在調用的方法不存在時會自動調用,程序仍會繼續(xù)執(zhí)行下去。方法原型如下:
function__call(string$funcfion_name,array$arguments)
{......}
其中,第一個參數$function_name會自動接收不存在的方法名,第二個參數$arguments則以數組的方式接收不存在方法的多個參數。選項A選項B選項C的說法都正確,選項D說法錯誤。
所以,本題的答案為D。
2.
在PHP面向對象中,有一個通用方法__toString()方法,下面關于此方法的描述或定義中,錯誤的是______A.此方法是在直接輸出對象引用時自動調用的方法B.如果對象中沒有定義此方法,那么直接使用echo輸出此對象,會報如下錯誤:
Catchablefatalerror:ObjectofclassAcouldnotbeconvertedtostringC.此方法中一定要有一個字符串作為返回值D.此方法用于輸出信息,如下:publicfunction__toString(){echo"ThisisClass....";}正確答案:D[解析]__toString()是快速獲取對象的字符串信息的便捷方式,似乎魔術方法都有一個“自動”的特性,如自動獲取、自動打印等,__toString()也不例外,它是在直接輸出對象引用時自動調用的方法。__toString()方法一定要有個返回值(return語句,所以,選項D錯誤。正確的寫法應該是
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本身就是一個語言結構,使用const的代碼簡單易讀,而define是一個函數。而且,const在編譯時要比define快很多。
具體而言,const與define在定義常量方面,區(qū)別如下:
1)const用于類成員變量的定義,一經定義,不可修改。define不可用于類成員變量的定義,可用于全局常量。
2)const可在類中使用,define不能。
3)const不能在條件語句中定義常量。
4)const采用一個普通的常量名稱,define可以采用表達式作為名稱。
5)const只能接受靜態(tài)的標量,而define可以采用任何表達式。
6)const定義的常量是大小寫敏感的,而define可通過第三個參數(為true表示大小寫不敏感)來指定大小寫是否敏感。
public通常用來聲明類中的方法,static是定義靜態(tài)變量或方法。靜態(tài)變量僅在局部函數域中存在且只被初始化一次,當程序執(zhí)行離開此作用域時,其值不會消失,下次調用的時候不會重新初始化,而會使用上次執(zhí)行的結果。static關鍵字在類中,描述一個成員是靜態(tài)的,被static修飾的成員是屬于類的,不屬于任何對象實例。
所以,本題的答案為B。
4.
要把microtime()的輸出轉化成一個數字值,以下方法最簡便的是______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函數返回一個由時間戳和小數兩部分組成的字符串,兩部分由空格分開。因此,explode()將字符串分割并放入數組,array_sum()把它們相加,轉換成數字。選項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是片段中的各個內容的唯一識別符。選項A選項C選項D正確。
所以,本題的答案為ACD。
6.
如果register_globals必須要被打開,那么能防止惡意用戶危害系統(tǒng)安全的是______(雙選)A.過濾所有來自非信任源的數據B.過濾所有外部數據C.所有變量在使用前先初始化D.使用難猜變量名來防止用戶篡改數據E.以上都對正確答案:BC[解析]對于選項A,即使過濾所有來自非信任源的數據,也可能造成安全問題。選項A錯誤。
對于選項B,可以通過過濾所有外部數據來防止第三方用戶的惡意注入。選項B正確。
對于選項C,如果register_globals打開,那么需要保證所有變量在使用前都已初始化,以防止用戶惡意注入。選項C正確。
對于選項D,即使變量名難猜,也可以傳入惡意信息。選項D錯誤。
所以,本題的答案為BC。
7.
MySQL字符集setnames*命令設置哪幾個系統(tǒng)變量的值?______A.character_set_clientB.character_set_systemC.character_set_resultsD.character_set_serverE.character_set_connection正確答案:ACE[解析]在MySQL中通過setnames*設定字符集時,主要設置客戶端使用的編碼字符集(character_set_client)、數據庫給客戶端返回時使用的字符集(character_set_results)、連接數據庫的字符集設置編碼類型(character_set_connection)等三個系統(tǒng)變量的值。選項A選項C選項E正確。
所以,本題的答案為ACE。
8.
以下能把字符串里存儲的二進制數據轉化成十六進制的函數是______A.encodehex()B.pack()C.hex2bin()D.bin2hex()E.printf()正確答案:BD[解析]PHP中不存在encode_hex()函數。pack()函數可以將數據裝入一個二進制字符串中,可以將字符轉化成十六進制表示。bin2hex()函數也可以將字符串轉化成十六進制。hex2bin()函數可以把ASCII字符的字符串轉換為十六進制值,并通過pack()函數轉換回來。而printf()函數可以把數字轉換成十六進制,但是不能轉換字符串為十六進制。選項B選項D正確。
所以,本題的答案為BD。
9.
訪問會話變量(Session)的方式是______A.通過$_GETB.通過$_POSTC.通過$_REQUESTD.通過全局變量E.以上都不對正確答案:E[解析]訪問會話變量是使用$_SESSION方法獲取的。而$_GET、$_POST、$_REQUEST方法都是獲取表單提交的數據,全局變量也沒有辦法獲取會話變量。選項E正確。
所以,本題的答案為E。
10.
下面不是PHP中面向對象的機制的是______A.類B.屬性、方法C.單一繼承D.多繼承正確答案:D[解析]PHP面向對象的機制有類、屬性、方法,只支持單一繼承,不支持多繼承。選項D正確。
所以,本題的答案為D。
二、填空題1.
PHP中的PEAR是______。正確答案:PEAR全稱為PHP擴展與應用庫(PHPExtensionandApplicationRepository),它是一個PHP擴展及應用的一個代碼倉庫??梢灾苯酉螺d下來,在代碼中包含擴展開發(fā)使用。
2.
獲得當前會話ID的方法是______。正確答案:session_id()。[解析]可以通過session_id()函數獲取和設置當前會話的ID。使用session_id()時,如果當前存在會話ID,那么返回當前會話ID,如果沒有會話,那么返回空字符串("")。
3.
代碼return?=='a';在“?”中加入______函數后返回true。正確答案:chr(65)。[解析]ord()函數可以返回字符串的首個字符的ASCII值。chr()函數可以返回指定ASCII值的字符串,可以通過chr(65)轉換成字符串A(備注:字符'A'的ASCII值為65),和A比較為真返回TRUE。而65+"和"+65都不能強制轉換成字符串A,無法和A比較為真。
4.
Session會話的值存儲在______。正確答案:服務器端。[解析]Session會話的值是存儲在服務器端的,而Cookie的值存儲在客戶端。
5.
向數組開頭插入一個值可以使用______函數。正確答案:array_unshift()。
三、簡答題1.
使用Memcache需要注意哪些問題?正確答案:1)將程序、Memcache、mysql分開存放。在實際的開發(fā)過程中,因為Memcache使用過程中把數據緩存在內存中,因此會消耗很大的內存。所以建議把代碼、mysql數據庫和Memcache分開存放。
2)不要使用Memcache保存重要數據。因為Memcache是把數據存放在內存中,所以服務器突然斷電或掛掉,重啟后數據就會消失,沒有辦法找回。所以建議不要使用Memcache保存重要的數據。
3)定期查看緩存的分布狀況和擊中情況。只有定期查看緩存的分布狀況和擊中情況才能更好地分析緩存的工作效率和對緩存進行優(yōu)化,發(fā)現緩存中可能存在的問題并及時解決。
2.
Session的運行機制是什么?正確答案:Session是一種服務器端的機制,服務器使用一種類似于散列表的結構(也可能就是使用散列表)來保存信息。
當程序需要為某個客戶端的請求創(chuàng)建一個Session的時候,服務器首先檢查這個客戶端的請求里是否已包含了一個Session標識SessionID,如果已包含一個SessionID,則說明已經為此客戶端創(chuàng)建Session,服務器就按照SessionID把這個Session檢索出來使用;如果客戶端請求不包含SessionID,則為此客戶端創(chuàng)建一個Session并且生成一個與此Session相關聯(lián)的SessionID,SessionID的值應該是一個既不會重復,又不容易被找到規(guī)律以仿造的字符串,這個SessionID將被在本次響應中返回給客戶端保存。
3.
假設有5臺服務器,請大致描述一下,如何搭建一個日pv300萬左右的中型網站?正確答案:3臺Web服務器,2臺MySQL數據庫服務器,采樣master/slave同步的方式減輕數據庫負載,Web服務器可以結合緩存來減少負載,同時3臺Web服務器內容一致,可以采用DNS輪詢的方式來進行負載均衡。
4.
在PHP中,模板引擎的目的是什么?正確答案:因為PHP是一種內嵌腳本在HTML頁面中執(zhí)行的服務器端腳本語言,所以PHP開發(fā)出來的Web網站的模板都是混雜了許多視圖和邏輯的代碼,使得代碼的可讀性變差,前后端人員的開發(fā)不能有效分開。通過模板引擎可以有效地解決這個問題,讓網頁的邏輯和視圖分開,后端人員只用處理程序的輸入、邏輯,然后輸出內容到視圖中顯示即可。所以模板引擎的目的是在Web開發(fā)中分離應用程序的業(yè)務邏輯和表現邏輯,前端人員只要將開發(fā)好的頁面指定為模板,后端人員負責邏輯編寫進行數據庫交互、用戶交互部分,定義特殊的變量,當用戶打開模板時特殊的變量可以動態(tài)地改變內容呈現給用戶瀏覽。
5.
MySQL數據庫存在哪些引擎?并請對常用的4種數據庫引擎做個介紹。正確答案:在MySQL中存在MyISAM、InnoDB、BDB(BerkeleyDB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB等十幾種引擎,其中用得最多的引擎是MyISAM、InnoDB。下面簡單地對常用的4個引擎做個介紹。
1)MyISAM:默認的MySQL插件式存儲引擎。如果應用是以讀寫和插入操作為主,只有很少的更新和刪除操作,并且對事務的完整性、并發(fā)性要求不是很高,那么可選用此種存儲引擎。
2)InnoDB:用于事務處理應用程序,支持外鍵。如果應用對事務的完整性有比較高的要求,在并發(fā)條件下要求數據一致性,數據操作除了插入和查詢以外,還包括很多的更新、刪除操作,那么InnoDB比較合適。InnoDB存儲引擎除了有效地降低由于刪除和更新操作導致的鎖定,還可以確保事務的完整提交和回滾。
3)Memory:將所有的數據保存在RAM中,在需要快速定位記錄和其他類似數據的環(huán)境下,可提供極快的訪問。Memory的缺陷是對表的大小有限制,太大的表無法緩存在內存中,其次要確保表數據可以恢復,數據庫異常終止后表中的數據是可以恢復的。MEMORY表通常用于更新不太頻繁的小表,用以快速得到訪問結果。
4)Merge:用于將一系列等同的MyISAM表以邏輯方式組合在一起,并作為一個對象引用它們。MERGE表的優(yōu)點在于可以突破對單個MyISAM表大小的限制,并且將不同的表分布在多個磁盤上,可以有效地改善Merge表的訪問效率。
四、編程題1.
要求寫一段程序,實現把以下數組$arr1轉換成數組$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轉換成$arr2的根據是數組把$arr1里面的fid=1的“放”一個數組里,fid=3的“放”在另一個數組,可以根據fid的值對數組進行分組,然后通過array_values()函數返回排序后的數組值即可。
實現代碼如下:
$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);
程序的運行結果為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)建二維數組存儲10位同學的學號和本課程的成績,10組數據:(“20170101”,95)(“20170102”,88)(“20170103”,47)(“20170104”,92)(“20170105”,90)(“20170106”,75)(“20170107”,85)(“20170108”,65)(“20170109”,98)(“20170110”,55)。
1)求出成績最高者顯示在網頁上。
2)求出不及格的學生信息顯示在網頁上。正確答案:根據題意創(chuàng)建一個二維數組的實現代碼如下:
<?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()函數和max()函數求出最高者,實現代碼如下:
echoarray_search(max($arr),arr);
程序的運行結果為20170109。
2)求出不合格學生的信息,可以對數組進行遍歷判斷二維數組的值是否小于60。
實現代碼如下:
<?php
foreach($arras$key=>$val){
if($arr[$key][0]<60){
echo$key."分數為:".$arr[$key][0]."";
}
}
?>
程序的運行結果為20170103分數為:47
201701010分數為:55。
3.
一個球從100m高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?正確答案:根據題目要求,設初始總高度為100m,知道每次下落反彈回的高度為上一次的一半,循環(huán)10次,每次循環(huán)都對上次反彈后的高度除以2并且累加到總高度中,從而求解出共經過多少米和第10次的反彈高度。
實現代碼如下:
<?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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 主管全年工作任務計劃
- 學期交流日的組織策劃計劃
- 學習障礙與個性化支持計劃
- 增強職場競爭力的計劃
- 《Unit Seven Meet My Family》(教學設計)-2024-2025學年北京版(2024)英語三年級上冊
- 胃大切的護理
- 幼兒園消防培訓知識課件
- 2025年深圳道路貨運從業(yè)資格證考試
- 肥胖護理查房
- 2025年北海貨運從業(yè)資格證考試題目庫存答案
- 小學生戲劇課件
- 《認知行為療法》課件
- 無人機駕駛培訓
- 2024年中煤電力有限公司所屬企業(yè)招聘29人筆試參考題庫附帶答案詳解
- DeepSeek介紹及其典型使用案例
- 2025年貴陽市貴安新區(qū)產業(yè)發(fā)展控股集團有限公司招聘筆試參考題庫附帶答案詳解
- 積極心理學視角下高職院校學生心理健康教育路徑研究
- 2025年內蒙古建筑職業(yè)技術學院高職單招職業(yè)適應性測試近5年??及鎱⒖碱}庫含答案解析
- 人教版五年級數學下冊全套試卷附完整答案
- 2025年春新人教版數學一年級下冊課件 第一單元 2.拼一拼
- 《煤礦職業(yè)病危害防治》培訓課件2025
評論
0/150
提交評論