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

下載本文檔

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

文檔簡介

某知名出行打車服務(wù)商PHP工程師面試筆試真題18

一、選擇題

1.如果等式12*25=311成立,那么使用的是進(jìn)制運算。

A.七

B.A

C.九

D.H—

正確答案:Q

[解析]當(dāng)進(jìn)行乘法運算時,無論是什么進(jìn)制的數(shù)進(jìn)行運算,其基

本方法都是相同的,以十進(jìn)制數(shù)的計算為例:2*5=10。如果是七進(jìn)制,那么運

算結(jié)果最后一位一定是10%7=3,相乘后進(jìn)位值為10/7=1。同理,如果是八進(jìn)

制,相乘結(jié)果最后一位一定等于10968=2。如果是九進(jìn)制,最后一位一定是

10%9二1。如果是十一進(jìn)制,最后一位一定是(類似于十六進(jìn)制中,使用

A表示數(shù)字10)。

本題中,計算結(jié)果為311,最后一位為1,可以排除選項A選項B和選項

D,只有選項C滿足題意。

所以,本題的答案為C。

2.下面說法錯誤的是______

A.如果一個類的成員前面有訪問修飾符private,那么這些成員不能被繼承,在

類的外部不可見。但如果成員被指定為protected和public,那么可以被繼

承,在類的外部也是可見的。

B.PHP5中,final關(guān)鍵字可以禁止繼承和重載

C.PHP5中,析構(gòu)函數(shù)的名稱是_destruct(),并且不能有任何參數(shù)

D.繼承接口的類必須實現(xiàn)接口中聲明的所有方法,在PHP中,如果繼承接口的

類沒有實現(xiàn)接口中的方法,那么將會產(chǎn)生一個致命錯誤

正確答案:A

[解析]對于選項A,private修飾的成員是不可以被繼承的,protected的成員

是可以被繼承的,但是在外部不可見。選項A說法錯誤,選項A正確。

對于選項B,final關(guān)鍵字的方法是禁止被繼承和重載的。選項B說法正

確,選項B錯誤。

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

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

D說法正確,選項D錯誤。

所以,本題的答案為A。

3.考慮如下腳本:運行時,盡管文件125七1*1已經(jīng)被用皿打位(()函數(shù)刪

除,腳本仍然輸出1,1。在腳本的最后添加什么函數(shù)才能解決這個問題?

<?php

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

fwrite($f,"test");

fclose($f);

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

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

echo(int)file_exists(,ztest.txt〃);

?>

A.clearstatcache()

B.fflush()

C.obflush()

D.touch()

正確答案:A

[解析]’而本仍然輸出1,1,是因為PHP會緩存某些文件系統(tǒng)函數(shù)的返回值,例

如file_exists()函數(shù),為了提高腳本處理重復(fù)操作時的效率,所以可以使用

clearstatcache()函數(shù)清理緩存,防止unlink。刪除文件后仍然輸出1,1。選

項A正確。

fflush()函數(shù)是將緩沖內(nèi)容輸出到文件,ob_flush()函數(shù)是輸出緩沖區(qū)中

的內(nèi)容,touch。函數(shù)是設(shè)置指定文件的訪問和修祓時間。選項B選項C選項D

錯誤。

所以,本題的答案為A。

4.在PHP的“安全模式”下,有助于降低安全風(fēng)險的是

A.限制shell命令的執(zhí)行

B.限制對系統(tǒng)環(huán)境變量的訪問

C.限制PHP的文件包含目錄

D.限制允許對數(shù)據(jù)庫進(jìn)行的操作

E.以上全部

正確答案:ABC

[解析]在安全模式下,增加了許多附加的安全驗證,從而降低了安全隱患。但

是在安全模式卜無法執(zhí)行系統(tǒng)命令、訪問環(huán)境變量和判斷文件引入是否安全。

正是這些限制使得安全模式下運行的代碼有更小的風(fēng)險。選項A選項B選項C

正確。

所以,本題的答案為ABC。

5.PHP的mysql系列函數(shù)中常用的遍歷數(shù)據(jù)的函數(shù)是______

A.mysql_fetch_row,mysql_fetch_assoc,mysql_affetced_rows

B.mysql_fecth_row,mysql_fecth_assoc,mysql_affetced_rows

C.mysqlfetchrows,mysqlfetcharray,mysqlfetchassoc

D.mysql_fecth_row,mysql_fecth_array,mysql_fecth_assoc

正確答案:D

[解析]mysql系列函數(shù)常用的遍歷數(shù)據(jù)函數(shù)有mysql_fetch_rowx

mysql_fetch_array>mysql_fetch_assoc等三個函數(shù),但不存在

mysqlfetchrows。

所以,本題的答案為D。

6.使用mysqli擴(kuò)展可以很方便地完成數(shù)據(jù)庫的事務(wù)處理功能,下面對數(shù)據(jù)

庫事務(wù)處理的描述中,不正確的是

A.MySQL目前只有InnoDB和BDB兩個數(shù)據(jù)表類型才支持事務(wù)

B.MySQL是以自動提交(autocommit)模式運行的,必須執(zhí)行mysqli對象中的

autocommit(0)方法關(guān)閉MySQL事務(wù)機(jī)制的自動提交模式

C.調(diào)用mysqli類對象的commit()方法提交事務(wù)

D.調(diào)用mysqli類對象的rollback。方法撤銷事務(wù),并開啟自動提交模式運行

正確答案:D

[解析]mysqli類對象的rollbackback()方法,只是撤銷從上一次提交commit()

后不成功的事務(wù),并不會開啟自動提交模式。選項D正確。

所以,本題的答案為D。

7.以下程序的功能是一

<?php

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

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

$b=array_sum(explode(,*,microtimeO));

echo$b-$a;

?>

A.測算for循環(huán)的執(zhí)行時間

B.測定服務(wù)器的時鐘頻率

C.計算操作系統(tǒng)的硬件時鐘頻率與軟件時鐘頻率的差

D.測算for循環(huán)、一個arraysum()函數(shù)與一個microtime()的總執(zhí)行時間

E.測算for循環(huán)、兩個array_sum()函數(shù)與兩個microtimeO的總執(zhí)行時間

正確答案:A

[解析]代碼array_sum(explode(5',microtimeO))求得的是時間戳和微妙數(shù)的

一個和,在執(zhí)行循環(huán)前的$2得到的是執(zhí)行循環(huán)前的開始時間點,$b得到的是每

次循環(huán)的運行時間點。所以每次循環(huán)后的$b的值都是執(zhí)行一次循環(huán)后的總時間

點,直到循環(huán)結(jié)束,$b得到的是執(zhí)行10000次的總執(zhí)行時間點,最后輸出的$b

減去$a的值是for循環(huán)的總執(zhí)行時間。選項A正確。

10.下列有關(guān)關(guān)聯(lián)數(shù)組和索引數(shù)組的描述中,正確的是

A.索引數(shù)組是以字符串作為鍵名的數(shù)組

B.關(guān)聯(lián)數(shù)組是以數(shù)字作為數(shù)組的鍵名的數(shù)組

C.關(guān)聯(lián)數(shù)組是以字符串作為鍵值的數(shù)組

D.索引數(shù)組是以數(shù)字作為數(shù)組的鍵名的數(shù)組

正確答案:D

[解析]索加數(shù)組是以數(shù)字作為鍵名的數(shù)組,關(guān)聯(lián)數(shù)組是以字符串作為鍵名的數(shù)

組。但是關(guān)聯(lián)數(shù)組的值不一定是字符串。選項D正確。

所以,本題的答案為D。

二、填空題

1.前置++和后置++的區(qū)別是O

正確答案:

變量前置+;是先將變量增加1,然后將值賦值給原來的變量;變量后置++是先返

回變量的當(dāng)前值,然后將變量的當(dāng)前值增加1。

2.$arrayfanykey']和$@n*a丫[anykey]的區(qū)別是。

正確答案:

數(shù)組中鍵名一般由單引號指明鍵名為字符串,如果沒有單引號,那么系統(tǒng)首先

認(rèn)為鍵名為常量,如果發(fā)現(xiàn)沒有定義該常量值,那么認(rèn)為該值為字符串并且會

報NOTICE錯誤,但這樣執(zhí)行效率較低。它們的根本區(qū)別在于編譯時系統(tǒng)認(rèn)為

'anykey'是字符串,而anykey可能是常量或者字符串。

3.PHP中獲取圖像尺寸大小的方法是______。

正確答案:

getimagesize()、Imagesx()、Imagesy()。

可以使用getimagesize()獲取圖片的大小及相關(guān)信息,使用方法為

getimagesize(圖片路徑),如果成功獲取,那么返回數(shù)組,如果不成功,那么

返回false。

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

整型。

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

整型。

4.varchar和char的區(qū)別是。

正確答案:

varchar與char的區(qū)別是char是固定長度的字符類型,分配多少空間,就占用

多少空間。varchar是可變長度的字符類型,內(nèi)容有多大就占用多大的空間,比

較節(jié)省空間。查找效率上char比varchar快,因為varchar是非定長,必須先

查找長度,然后進(jìn)行數(shù)據(jù)的提取,由于它比char定長類型多了一個步驟,所以

效率比char低。

5.在MySQL中提取數(shù)據(jù)時,用來刪除重復(fù)的記錄。

正確答案:

DISTINCTo

[解析]DISTINCT關(guān)鍵字可以對數(shù)據(jù)過濾重復(fù)記錄,只返回唯一的、不同值的數(shù)

據(jù)。

三、簡答題

1.MySQL的索引都有哪些?

正確答案:

MySQL的索引如下:

1)唯一索引。唯一索引避免了表中存在重復(fù)的數(shù)據(jù),提高了檢索速度。創(chuàng)

建唯一索引的目的是避免表中插入重復(fù)的數(shù)據(jù),從而提高表的查詢速度。

2)普通索引。普通索引允許被索引的數(shù)據(jù)列包含重復(fù)的值。優(yōu)點如下:①

簡化MySQL對這個索引的管理工作,使工作更有效率;②MySQL會對新插入的數(shù)

據(jù)自動檢測是否有重復(fù)的值。

3)主索引。即主鍵索引,關(guān)鍵字PRIMARY。

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

5)復(fù)合索引。索引可以覆蓋多列數(shù)據(jù),例如,INDEX(columnA,columnB)。

這種索引的特點是MySQL可以有選擇地使用索引,例如,INDEX(A,B,C)可以當(dāng)

作A或(A,B)的索引來使用,但不能當(dāng)作B或(B,C)來使用。

6)索引的長度。在為char和varchar類型的數(shù)據(jù)列定義索引時,可以把

索引的長度限制為一個給定的字符個數(shù),這個數(shù)字必須小于這個字段所允許的

最大字符個數(shù)。

7)全文索引。針對內(nèi)容開頭的字符進(jìn)行檢索操作,如果檢索的內(nèi)容由多個

字段構(gòu)成,數(shù)據(jù)量很大,那么全文索引是必要的。注意,MySQL的IrmoDB引擎

不支持全文搜索索引。

2.正則表達(dá)式是什么?PHP中有哪些常用的與正則相關(guān)的函數(shù)?請寫出一個

email的正則表達(dá)式、中國手機(jī)號碼和座機(jī)號碼的正則表達(dá)式?

正確答案:

正則表達(dá)式是一種字符串匹配的模式,可以判斷一個字符串的組成是否滿足某

種特定的模式,將匹配的子串替換或者從某個串中取出符合某個條件的子串

等。

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

Dpreg.match()函數(shù)用于通過正則表達(dá)式匹配字符串。

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

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

4)preg_replace_calIback()函數(shù)可以執(zhí)行一個正則表達(dá)式搜索和使用回

調(diào)替換。

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

email擁有固定的格式,可以根據(jù)這個格式匹配正確的email,它的正則

表達(dá)式為/“a-zA-Z0-9_-]+@[d-zA-Z0-9_-]+(\.[d-zA-Z0-9_-]+)+$/。

中國手機(jī)號碼的if則表達(dá)式如下:

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

座機(jī)號碼的驗證的正則表達(dá)式如下:

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

3.PHP的魔術(shù)方法包含哪些(越多越好)?在什么情況下被自動調(diào)用?

正確答案:

PHP可用的旖術(shù)方法會在特定情況下被自動調(diào)用,但是前提是特定的條件被觸

發(fā),并且這些魔術(shù)方法可以在類中作為方法。

P1IP的魔術(shù)方法有:

1)—construct()o構(gòu)造函數(shù),創(chuàng)建對象時自動被調(diào)用。

2)_destruct()o析構(gòu)函數(shù),對象的所有引用都被刪除或者當(dāng)對象被顯式

銷毀時執(zhí)行。

3)_clone()o復(fù)制函數(shù),調(diào)用clone方法時自動調(diào)用。

4)_set().當(dāng)程序試圖寫入一個不存在或不可見的成員變量時自動調(diào)

用。該函數(shù)在類中定義時必須有兩個參數(shù),即變量名和變量值。

5)_get()o當(dāng)程序調(diào)用一個未定義或不可見的成員變量時自動調(diào)用

_get()來讀取變量值。定義時必須有一個參數(shù),即變量名。

6)_call()o當(dāng)程序試圖調(diào)用不存在或不可見的成員方法時,自動調(diào)用

_call()o()方法一般用于監(jiān)視錯誤的方法調(diào)用。為了避免當(dāng)調(diào)用的方

法不存在時產(chǎn)生錯誤,可以使用_call()方法來避免。該方法包含兩個參數(shù),

即方法名和方法參數(shù)。其中方法參數(shù)以數(shù)組形式存在。

7)—sleep()o使用serialize。實現(xiàn)序列化對象時,先調(diào)用該方法,可以

用來清除對象并返回一個該對象中所有變量的數(shù)組。

8)—wakeup()o使用unserialize()還原一個被序列化的對象時,先執(zhí)行

該方法,恢復(fù)在序列化中可能丟失的數(shù)據(jù)庫連接及相關(guān)工作。

9)—toStringOo當(dāng)使用echo或print輸出對象時,將對象轉(zhuǎn)化為字符

串。

10)_autoload()o調(diào)用未被實例化的類時,自動調(diào)用,在指定路徑下查

找和該類名稱相同的文件。

4.請簡述HTTP中POST、GET、PUT、DELETE方式的區(qū)別。

正確答案:

HTTP定義了與服務(wù)器交互的不同的方法,最基本的方法是POST、GET、PUT和

DELETE,URL全稱是資源描述符,可以認(rèn)為一個URL地址用于描述一個網(wǎng)絡(luò)上的

資源,而對應(yīng)的HTTP中的四種方法GET、POST、PUT、DELETE對應(yīng)這個資源的

查、改、增和刪四個操作。它們的具體功能如下:

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

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

3)PUT和POST極為相似,都是向服務(wù)器發(fā)送數(shù)據(jù),但它們之間有一個重要

區(qū)別,PUT通常指定了資源的存放位置,而POST則沒有,POST的數(shù)據(jù)存放位置

由服務(wù)器決定。

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

5.文件上傳需要注意哪些細(xì)節(jié)?怎么把文件保存到指定目錄?怎么避免上傳文

件重名問題?

正確答案:

文件上傳需要注意以下幾點:

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

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

大值,默認(rèn)是2MB。

3)在上傳圖片的表單中,form標(biāo)簽需要加上enctype=,zmultipart/form-

datao

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

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

6)必須保證上傳文件的大小不會超出限制,文件類型符合上傳要求,上傳

文件的存儲路徑不存在問題。

7)需要使用$_FILES接收上傳文件信息。其中$_FILES是一個二維數(shù)組,

一維是上傳空間的name,二維對應(yīng)了文件名、文件莢型、上傳到臨時目錄下的

臨時文件名、文件大小、是否有錯誤等信息。如果是批量上傳,那么二維數(shù)組

卜標(biāo)是數(shù)組而不是字符串。

文件上傳后是放置在服務(wù)器端的臨時路徑下的,需要使用

move_uploaded_file()函數(shù)將上傳后的文件保存到指定目錄。

為了避免上傳圖片重名,可以使用時間戳加隨機(jī)數(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=l;$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;

)

}

?>

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

01153370371407

2.給定一個數(shù)d和n,如何計算d的n次方?例如,d=2,n=3,d的n次方為

23=8O

正確答案:

可以把n的取值分為如下幾種情況:

1)當(dāng)n=0時,計算結(jié)果肯定為1。

2)當(dāng)n口時,計算結(jié)果肯定為d。

3)當(dāng)n>0時,計算方法為初始化計算結(jié)果result=l,然后對result執(zhí)行

n次乘以d的操作,得到的結(jié)果就是d的n次方。

4)當(dāng)nVO時,計算方法為初始化計算結(jié)果result』,然后對result執(zhí)行

|n|次除以d的操作,得到的結(jié)果就是d的n次方。

以2的三次方為例,首先初始化results,接著對result執(zhí)行3次乘以

2的操作:result二result*2=l*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=l)return$d;

$result=l.0;

if($n>0)

(

for($i=l;$i<=$n;${++)

(

$result*=$d;

}

return$result;

}

else

(

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

(

$result=$result/$d;

}

}

return$result;

}

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

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

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

?>

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

8.00

-8.00

0.125

算法性能分析:這個算法時間復(fù)雜度為0(n),需要注意的是,當(dāng)n非常大

的時候,這種算法的效率是非常低下的。

3.給定一個數(shù)組,數(shù)組中含有重復(fù)元素,給定兩個數(shù)字numl和ninn2,求這

兩個數(shù)字在數(shù)組中出現(xiàn)的位置的最小距離。

正確答案:

對于這類問題,最簡單的方法就是對數(shù)組進(jìn)行雙重遍歷,找出最小距離,但是

這種方法效率比較低下。由于在求距離的時候只關(guān)心numl與num2這兩個數(shù),

因此,只需要對數(shù)組進(jìn)行一次遍歷即可,在遍歷的過程中分別記錄numl或num2

的位置就可以非常方便地求出最小距離。

主要思路:對數(shù)組進(jìn)行雙重遍歷,外層循環(huán)遍歷查找numl,只要找到

nu.nl,就開始內(nèi)層循環(huán),即對數(shù)組從頭開始遍歷查找num2,當(dāng)遍歷到num2時,

就計算它們的距離dist。當(dāng)遍歷結(jié)束后,最小的dist值就是它們之間的最小距

離。

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

<?php

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

$len=count($arr);

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

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

return”;

}

$minDis=max($arr);

//numl與num2的最小距離

$dist=0;

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

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

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

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

$dist=abs($i-$j);

〃當(dāng)前遍歷的numl與num2的距離

if($dist<$minDis)

$minDis=$dist;

}

}

}

}

return$minDis;

)

$arr=array(4,5,6,4,7,4,6,4,7,8,5,6,4,3,10,8);

$numl=4;

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論