某知名出行打車服務商PHP工程師面試筆試真題18_第1頁
某知名出行打車服務商PHP工程師面試筆試真題18_第2頁
某知名出行打車服務商PHP工程師面試筆試真題18_第3頁
某知名出行打車服務商PHP工程師面試筆試真題18_第4頁
某知名出行打車服務商PHP工程師面試筆試真題18_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

某知名出行打車服務商PHP工程師面試筆試真題18一、選擇題1.

如果等式12*25=311成立,那么使用的是______進制運算。A.七B.八C.九D.十一正確答案:C[解析]當進行乘法(江南博哥)運算時,無論是什么進制的數(shù)進行運算,其基本方法都是相同的,以十進制數(shù)的計算為例:2*5=10。如果是七進制,那么運算結果最后一位一定是10%7=3,相乘后進位值為10/7=1。同理,如果是八進制,相乘結果最后一位一定等于10%8=2。如果是九進制,最后一位一定是10%9=1。如果是十一進制,最后一位一定是10%11=A(類似于十六進制中,使用A表示數(shù)字10)。

本題中,計算結果為311,最后一位為1,可以排除選項A選項B和選項D,只有選項C滿足題意。

所以,本題的答案為C。

2.

下面說法錯誤的是______A.如果一個類的成員前面有訪問修飾符private,那么這些成員不能被繼承,在類的外部不可見。但如果成員被指定為protected和public,那么可以被繼承,在類的外部也是可見的。B.PHP5中,final關鍵字可以禁止繼承和重載C.PHP5中,析構函數(shù)的名稱是__destruct(),并且不能有任何參數(shù)D.繼承接口的類必須實現(xiàn)接口中聲明的所有方法,在PHP中,如果繼承接口的類沒有實現(xiàn)接口中的方法,那么將會產生一個致命錯誤正確答案:A[解析]對于選項A,private修飾的成員是不可以被繼承的,protected的成員是可以被繼承的,但是在外部不可見。選項A說法錯誤,選項A正確。

對于選項B,final關鍵字的方法是禁止被繼承和重載的。選項B說法正確,選項B錯誤。

對于選項C,析構函數(shù)不能有參數(shù)。選項C說法正確,選項C錯誤。

對于選項D,繼承接口的類沒有實現(xiàn)接口中的方法是會產生錯誤的。選項D說法正確,選項D錯誤。

所以,本題的答案為A。

3.

考慮如下腳本:運行時,盡管文件test.txt已經(jīng)被用unlink(()函數(shù)刪除,腳本仍然輸出1,1。在腳本的最后添加什么函數(shù)才能解決這個問題?______

<?php

$f=fopen("test.txt","w");

fwrite($f,"test");

fclose($f);

echo(int)file_exists("test.txt").',';

unlink("c:\\test.txt");

echo(int)file_exists("test.txt");

?>A.clearstatcache()B.fflush()C.ob_flush()D.touch()正確答案:A[解析]腳本仍然輸出1,1,是因為PHP會緩存某些文件系統(tǒng)函數(shù)的返回值,例如file_exists()函數(shù),為了提高腳本處理重復操作時的效率,所以可以使用clearstatcache()函數(shù)清理緩存,防止unlink()刪除文件后仍然輸出1,1。選項A正確。

fflush()函數(shù)是將緩沖內容輸出到文件,ob_flush()函數(shù)是輸出緩沖區(qū)中的內容,touch()函數(shù)是設置指定文件的訪問和修改時間。選項B選項C選項D錯誤。

所以,本題的答案為A。

4.

在PHP的“安全模式”下,有助于降低安全風險的是______A.限制shell命令的執(zhí)行B.限制對系統(tǒng)環(huán)境變量的訪問C.限制PHP的文件包含目錄D.限制允許對數(shù)據(jù)庫進行的操作E.以上全部正確答案:ABC[解析]在安全模式下,增加了許多附加的安全驗證,從而降低了安全隱患。但是在安全模式下無法執(zhí)行系統(tǒng)命令、訪問環(huán)境變量和判斷文件引入是否安全。正是這些限制使得安全模式下運行的代碼有更小的風險。選項A選項B選項C正確。

所以,本題的答案為ABC。

5.

PHP的mysql系列函數(shù)中常用的遍歷數(shù)據(jù)的函數(shù)是______A.mysql_fetch_row,mysql_fetch_assoc,mysql_affetced_rowsB.mysql_fecth_row,mysql_fecth_assoc,mysql_affetced_rowsC.mysql_fetch_rows,mysql_fetch_array,mysql_fetch_assocD.mysql_fecth_row,mysql_fecth_array,mysql_fecth_assoc正確答案:D[解析]mysql系列函數(shù)常用的遍歷數(shù)據(jù)函數(shù)有mysql_fetch_row、mysql_fetch_array、mysql_fetch_assoc等三個函數(shù),但不存在mysql_fetch_rows。

所以,本題的答案為D。

6.

使用mysqli擴展可以很方便地完成數(shù)據(jù)庫的事務處理功能,下面對數(shù)據(jù)庫事務處理的描述中,不正確的是______A.MySQL目前只有InnoDB和BDB兩個數(shù)據(jù)表類型才支持事務B.MySQL是以自動提交(autocommit)模式運行的,必須執(zhí)行mysqli對象中的autocommit(0)方法關閉MySQL事務機制的自動提交模式C.調用mysqli類對象的commit()方法提交事務D.調用mysqli類對象的rollback()方法撤銷事務,并開啟自動提交模式運行正確答案:D[解析]mysqli類對象的rollbackback()方法,只是撤銷從上一次提交commit()后不成功的事務,并不會開啟自動提交模式。選項D正確。

所以,本題的答案為D。

7.

以下程序的功能是______

<?php

$a=array_sum(explode('',microtime()));

for($i=0;$i<10000;$i++);

$b=array_sum(explode('',microtime()));

echo$b-$a;

?>A.測算for循環(huán)的執(zhí)行時間B.測定服務器的時鐘頻率C.計算操作系統(tǒng)的硬件時鐘頻率與軟件時鐘頻率的差D.測算for循環(huán)、一個array_sum()函數(shù)與一個microtime()的總執(zhí)行時間E.測算for循環(huán)、兩個array_sum()函數(shù)與兩個microtime()的總執(zhí)行時間正確答案:A[解析]代碼array_sum(explode('',microtime()))求得的是時間戳和微妙數(shù)的一個和,在執(zhí)行循環(huán)前的$a得到的是執(zhí)行循環(huán)前的開始時間點,$b得到的是每次循環(huán)的運行時間點。所以每次循環(huán)后的$b的值都是執(zhí)行一次循環(huán)后的總時間點,直到循環(huán)結束,$b得到的是執(zhí)行10000次的總執(zhí)行時間點,最后輸出的$b減去$a的值是for循環(huán)的總執(zhí)行時間。選項A正確。

所以,本題的答案為A。

8.

以下有關PHP字符串的說法中,不正確的是______A.如果一個腳本的編碼是ISO-8859-1,則其中的字符串也會被編碼為ISO-8859-1B.PHP的字符串在內部是字節(jié)組成的數(shù)組,用花括號訪問或修改字符串對多字節(jié)字符集很不安全C.substr()、strpos()、strlen()、htmlentities()處理字符串時依據(jù)的編碼方式是相同的D.一個布爾值Boolean的true被轉換成string的“1”,false被轉換成空字符串正確答案:C[解析]substr在處理多字節(jié)字符的時候可能會出現(xiàn)亂碼。

所以,本題的答案為C。

9.

以下程序如何用三元操作替代?______

if($a<10){

if($b>11){

if($c==10&&$d!=$c){

$x=0;

}else{

$x=1;

}

}

}A.$x=($a<10||$b>11||$c==1&&$d!=$c)?0:1;B.$x=($a<10||$b>11||($c==1&&$d!=$c))?0:1;C.$x=(($a<10&&$b>11)||($c==1&&$d!=$c))?0:1;D.$x=($a<10&&$b>11&&$c==1&&$d!=$c)?1:0;E.以上都不對正確答案:E[解析]由于需要$a<10為真才能執(zhí)行內部語句,而$b>11也需要為真才能執(zhí)行下一個條件,所以$a<10需要與$b>11同時為真才能執(zhí)行到if($c==10&&$d!=$c),才會執(zhí)行$x=0或$x=1,如果它們其中有一個條件為假,那么都不會執(zhí)行得到$x=0或$x=1,因此可以改寫用($a<10&&$b>11)?($c==10&&$d!=$c)?$x=0:$x=1:"的三元運算符替代。選項E正確。

所以,本題的答案為E。

10.

下列有關關聯(lián)數(shù)組和索引數(shù)組的描述中,正確的是______A.索引數(shù)組是以字符串作為鍵名的數(shù)組B.關聯(lián)數(shù)組是以數(shù)字作為數(shù)組的鍵名的數(shù)組C.關聯(lián)數(shù)組是以字符串作為鍵值的數(shù)組D.索引數(shù)組是以數(shù)字作為數(shù)組的鍵名的數(shù)組正確答案:D[解析]索引數(shù)組是以數(shù)字作為鍵名的數(shù)組,關聯(lián)數(shù)組是以字符串作為鍵名的數(shù)組。但是關聯(lián)數(shù)組的值不一定是字符串。選項D正確。

所以,本題的答案為D。

二、填空題1.

前置++和后置++的區(qū)別是______。正確答案:變量前置++是先將變量增加1,然后將值賦值給原來的變量;變量后置++是先返回變量的當前值,然后將變量的當前值增加1。

2.

$array['anykey']和$array[anykey]的區(qū)別是______。正確答案:數(shù)組中鍵名一般由單引號指明鍵名為字符串,如果沒有單引號,那么系統(tǒng)首先認為鍵名為常量,如果發(fā)現(xiàn)沒有定義該常量值,那么認為該值為字符串并且會報NOTICE錯誤,但這樣執(zhí)行效率較低。它們的根本區(qū)別在于編譯時系統(tǒng)認為'anykey'是字符串,而anykey可能是常量或者字符串。

3.

PHP中獲取圖像尺寸大小的方法是______。正確答案:getimagesize()、Imagesx()、Imagesy()??梢允褂胓etimagesize()獲取圖片的大小及相關信息,使用方法為getimagesize(圖片路徑),如果成功獲取,那么返回數(shù)組,如果不成功,那么返回false。

2)可以使用Imagesx()函數(shù)用于獲取圖像的寬度,單位為像素,返回值為整型。

3)可以使用Imagesy()函數(shù)用于獲取圖像的高度,單位為像素,返回值為整型。

4.

varchar和char的區(qū)別是______。正確答案:varchar與char的區(qū)別是char是固定長度的字符類型,分配多少空間,就占用多少空間。varchar是可變長度的字符類型,內容有多大就占用多大的空間,比較節(jié)省空間。查找效率上char比varchar快,因為varchar是非定長,必須先查找長度,然后進行數(shù)據(jù)的提取,由于它比char定長類型多了一個步驟,所以效率比char低。

5.

在MySQL中提取數(shù)據(jù)時,用______來刪除重復的記錄。正確答案:DISTINCT。[解析]DISTINCT關鍵字可以對數(shù)據(jù)過濾重復記錄,只返回唯一的、不同值的數(shù)據(jù)。

三、簡答題1.

MySQL的索引都有哪些?正確答案:MySQL的索引如下:

1)唯一索引。唯一索引避免了表中存在重復的數(shù)據(jù),提高了檢索速度。創(chuàng)建唯一索引的目的是避免表中插入重復的數(shù)據(jù),從而提高表的查詢速度。

2)普通索引。普通索引允許被索引的數(shù)據(jù)列包含重復的值。優(yōu)點如下:①簡化MySQL對這個索引的管理工作,使工作更有效率;②MySQL會對新插入的數(shù)據(jù)自動檢測是否有重復的值。

3)主索引。即主鍵索引,關鍵字PRIMARY。

4)外鍵索引。外鍵約束。

5)復合索引。索引可以覆蓋多列數(shù)據(jù),例如,INDEX(columnA,columnB)。這種索引的特點是MySQL可以有選擇地使用索引,例如,INDEX(A,B,C)可以當作A或(A,B)的索引來使用,但不能當作B或(B,C)來使用。

6)索引的長度。在為char和varchar類型的數(shù)據(jù)列定義索引時,可以把索引的長度限制為一個給定的字符個數(shù),這個數(shù)字必須小于這個字段所允許的最大字符個數(shù)。

7)全文索引。針對內容開頭的字符進行檢索操作,如果檢索的內容由多個字段構成,數(shù)據(jù)量很大,那么全文索引是必要的。注意,MySQL的InnoDB引擎不支持全文搜索索引。

2.

正則表達式是什么?PHP中有哪些常用的與正則相關的函數(shù)?請寫出一個email的正則表達式、中國手機號碼和座機號碼的正則表達式?正確答案:正則表達式是一種字符串匹配的模式,可以判斷一個字符串的組成是否滿足某種特定的模式,將匹配的子串替換或者從某個串中取出符合某個條件的子串等。

常用的正則函數(shù)有:

1)preg_match()函數(shù)用于通過正則表達式匹配字符串。

2)preg_quote()函數(shù)可以轉義正則表達式字符。

3)preg_replace()函數(shù)用于執(zhí)行正則表達式的搜索和替換。

4)preg_replace_callback()函數(shù)可以執(zhí)行一個正則表達式搜索和使用回調替換。

5)preg_split()函數(shù)可以通過一個正則表達式分隔字符串。

email擁有固定的格式,可以根據(jù)這個格式匹配正確的email,它的正則表達式為/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/。

中國手機號碼的正則表達式如下:

/^1[3-5,8]{1}[0-9]{9)$/

座機號碼的驗證的正則表達式如下:

/^([0,9]{3,4}-)?[0-9]{7,8}$/

3.

PHP的魔術方法包含哪些(越多越好)?在什么情況下被自動調用?正確答案:PHP可用的魔術方法會在特定情況下被自動調用,但是前提是特定的條件被觸發(fā),并且這些魔術方法可以在類中作為方法。

PHP的魔術方法有:

1)__construct()。構造函數(shù),創(chuàng)建對象時自動被調用。

2)__destruct()。析構函數(shù),對象的所有引用都被刪除或者當對象被顯式銷毀時執(zhí)行。

3)__clone()。復制函數(shù),調用clone方法時自動調用。

4)__set()。當程序試圖寫入一個不存在或不可見的成員變量時自動調用。該函數(shù)在類中定義時必須有兩個參數(shù),即變量名和變量值。

5)__get()。當程序調用一個未定義或不可見的成員變量時自動調用__get()來讀取變量值。定義時必須有一個參數(shù),即變量名。

6)__call()。當程序試圖調用不存在或不可見的成員方法時,自動調用__call()。__call()方法一般用于監(jiān)視錯誤的方法調用。為了避免當調用的方法不存在時產生錯誤,可以使用__call()方法來避免。該方法包含兩個參數(shù),即方法名和方法參數(shù)。其中方法參數(shù)以數(shù)組形式存在。

7)__sleep()。使用serialize()實現(xiàn)序列化對象時,先調用該方法,可以用來清除對象并返回一個該對象中所有變量的數(shù)組。

8)__wakeup()。使用unserialize()還原一個被序列化的對象時,先執(zhí)行該方法,恢復在序列化中可能丟失的數(shù)據(jù)庫連接及相關工作。

9)__toString()。當使用echo或print輸出對象時,將對象轉化為字符串。

10)__autoload()。調用未被實例化的類時,自動調用,在指定路徑下查找和該類名稱相同的文件。

4.

請簡述HTTP中POST、GET、PUT、DELETE方式的區(qū)別。正確答案:HTTP定義了與服務器交互的不同的方法,最基本的方法是POST、GET、PUT和DELETE,URL全稱是資源描述符,可以認為一個URL地址用于描述一個網(wǎng)絡上的資源,而對應的HTTP中的四種方法GET、POST、PUT、DELETE對應這個資源的查、改、增和刪四個操作。它們的具體功能如下:

1)根據(jù)HTTP規(guī)范,GET用于信息獲取,信息應該是安全的。

2)根據(jù)HTTP規(guī)范,POST表示可以修改服務器上的資源的請求。

3)PUT和POST極為相似,都是向服務器發(fā)送數(shù)據(jù),但它們之間有一個重要區(qū)別,PUT通常指定了資源的存放位置,而POST則沒有,POST的數(shù)據(jù)存放位置由服務器決定。

4)DELETE的功能是刪除某一個資源。

5.

文件上傳需要注意哪些細節(jié)?怎么把文件保存到指定目錄?怎么避免上傳文件重名問題?正確答案:文件上傳需要注意以下幾點:

1)確保php.ini中已經(jīng)開啟了文件上傳功能。

2)如果對文件上傳的大小有限制,那么需在php.ini中修改允許上傳的最大值,默認是2MB。

3)在上傳圖片的表單中,form標簽需要加上enctype="multipart/form-data"。

4)表單上傳圖片時,method必須使用post。

5)表單使用file類型,并且有name屬性值,后臺才能獲取。

6)必須保證上傳文件的大小不會超出限制,文件類型符合上傳要求,上傳文件的存儲路徑不存在問題。

7)需要使用$_FILES接收上傳文件信息。其中$_FILES是一個二維數(shù)組,一維是上傳空間的name,二維對應了文件名、文件類型、上傳到臨時目錄下的臨時文件名、文件大小、是否有錯誤等信息。如果是批量上傳,那么二維數(shù)組下標是數(shù)組而不是字符串。

文件上傳后是放置在服務器端的臨時路徑下的,需要使用move_uploaded_file()函數(shù)將上傳后的文件保存到指定目錄。

為了避免上傳圖片重名,可以使用時間戳加隨機數(shù)的方式給文件重新命名。

四、編程題1.

打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153是一個“水仙花數(shù)”,因為153=1的三次方+5的三次方+3的三次方。正確答案:利用for循環(huán)控制100~999個數(shù),每個數(shù)分解出個位、十位和百位。利用循環(huán),分別用$i代表百位,$i代表十位,$m代表個位,且百位的初始數(shù)值是1~9,而十位和個位初始數(shù)值是0~9,然后按百位、十位、個位的順序嵌套循環(huán),判斷找出符合“水仙花數(shù)”的公式的數(shù)。

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

<?php

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

for($j=0;$j<=9;$j++){

for($m=0;$m<=9;$m++){

if(pow($i,3)+pow($j,3)+pow($m,3)==100*$i+10*$j+$m){

echo$i.$j.$m;

}

}

}

}

?>

程序的運行結果為

01153370371407

2.

給定一個數(shù)d和n,如何計算d的n次方?例如,d=2,n=3,d的n次方為23=8。正確答案:可以把n的取值分為如下幾種情況:

1)當n=0時,計算結果肯定為1。

2)當n=1時,計算結果肯定為d。

3)當n>0時,計算方法為初始化計算結果result=1,然后對result執(zhí)行n次乘以d的操作,得到的結果就是d的n次方。

4)當n<0時,計算方法為初始化計算結果result=1,然后對result執(zhí)行|n|次除以d的操作,得到的結果就是d的n次方。

以2的三次方為例,首先初始化result=1,接著對result執(zhí)行3次乘以2的操作:result=result*2=1*2=2,result=result*2=2*2=4,result=result*2=4*2=8,因此,2的三次方等于8。根據(jù)這個思路給出實現(xiàn)代碼如下:

<?php

/*函數(shù)功能:計算一個數(shù)d的n次方*/

functionpower($d,$n)

{

if($n==0)return1;

if($n==1)return$d;

$result=1.0;

if($n>0)

{

for($i=1;$i<=$n;$i++)

{

$result*=$d;

}

return$result;

}

else

{

for($i=1;$i<=abs($n);$i++)

{

$result=$result/$d;

}

}

return$result;

}

printf("%0.2f<br>",power(2,3));

printf("%0.2f<br>",power(-2,3));

printf("%0.3f",power(2,-3));

?>

程序的運行結果為

8.00

-8.00

0.125

算法性能分析:這個算法時間復雜度為O(n),需要注意的是,當n非常大的時候,這種算法的效率是非常低下的。

3.

給定一個數(shù)組,數(shù)組中含有重復元素,給定兩個數(shù)字num1和num2,求這兩個數(shù)字在數(shù)組中出現(xiàn)的位置的最小距離。正確答案:對于這類問題,最簡單的方法就是對數(shù)組進行雙重遍歷,找出最小距離,但是這種方法效率比較低下。由于在求距離的時候只關心num1與num2這兩個數(shù),因此,只需要對數(shù)組進行一次遍歷即可,在遍歷的過程中分別記錄num1或num2的位置就可以非常方便地求出最小距離。

主要思路:對數(shù)組進行雙重遍歷,外層循環(huán)遍歷查找num1,只要找到num1,就開始內層循環(huán),即對數(shù)組從頭開始遍歷查找num2,當遍歷到num2時,就計算它們的距離dist。當遍歷結束后,最小的dist值就是它們之間的最小距離。

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

<?php

functionminDistance($arr,$num1,$num2){

$len=count($arr);

if(!$arr||$len<=0){

printf("參數(shù)不合理");

return";

}

$minDis=max($arr);

//num1與num2的最小距離

$dist=0;

for($i=0;$i<$len;++$i){

if($arr[$i]==$num1){

for($j=0;$j<$len;++$j){

if($arr[$j]==$num2){

$

溫馨提示

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

評論

0/150

提交評論