某知名化妝品自營(yíng)電子商務(wù)公司PHP工程師面試筆試真題15_第1頁
某知名化妝品自營(yíng)電子商務(wù)公司PHP工程師面試筆試真題15_第2頁
某知名化妝品自營(yíng)電子商務(wù)公司PHP工程師面試筆試真題15_第3頁
某知名化妝品自營(yíng)電子商務(wù)公司PHP工程師面試筆試真題15_第4頁
某知名化妝品自營(yíng)電子商務(wù)公司PHP工程師面試筆試真題15_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

某知名化妝品自營(yíng)電子商務(wù)公司PHP工程師面試筆試真題15一、選擇題1.

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

所以,本題的答案為D。

2.

即時(shí)加載一個(gè)類的方法是______A.使用__autoload魔術(shù)函數(shù)B.把它們定義為forward類C.實(shí)現(xiàn)一個(gè)特殊的錯(cuò)誤處理手段D.不可能E.用有條件限制的include來包含它們正確答案:A[解析]因?yàn)楫?dāng)某個(gè)類不存在時(shí),可以自動(dòng)調(diào)用__autoload函數(shù)去執(zhí)行該函數(shù)內(nèi)的方法,所以可以在函數(shù)內(nèi)執(zhí)行加載某個(gè)類。選項(xiàng)A正確。

所以,本題的答案為A。

3.

以下代碼用于______

<?php

require_once"myclass.php";

MyClass::myMethod();

?>A.調(diào)用靜態(tài)方法myMethodB.生成MyClass的實(shí)例并調(diào)用myMethod方法C.產(chǎn)生一個(gè)語法錯(cuò)誤D.調(diào)用名為MyClass::myMethod()方法正確答案:A[解析]MyClass::myMethod()表示調(diào)用MyClass類中的靜態(tài)方法myMethod,選項(xiàng)A正確。

所以,本題的答案為A。

4.

continue可以用在______中。A.forB.whileC.do-whileD.switch正確答案:ABC[解析]continue可以用于循環(huán)中,當(dāng)循環(huán)執(zhí)行到continue后會(huì)跳轉(zhuǎn)到循環(huán)開頭重新執(zhí)行,主要用于循環(huán)中,不能用于分支結(jié)構(gòu)中。選項(xiàng)A選項(xiàng)B選項(xiàng)C正確。

所以,本題的答案為ABC。

5.

執(zhí)行如下代碼,其輸出結(jié)果是______

<?php

$a=3;

$b=4;

$c=$a<2&&$b++;

echo$b;

?>A.4B.5C.出錯(cuò)D.都不是正確答案:A[解析]因?yàn)?a=3,大于2,所以$a<2不成立,“&&”運(yùn)算符具有短路的特性,也就是說,在從左向右判斷的時(shí)候一旦發(fā)現(xiàn)一個(gè)條件為假就直接返回false,而不會(huì)繼續(xù)判斷后面的條件,因?yàn)楹竺娴呐袛嘁呀?jīng)沒有意義了。在本題中,由于“&&”的第一個(gè)條件為假,此時(shí)就不再判斷第二個(gè)條件直接返回假,所以$b++沒有執(zhí)行,最終$b的值還是4。選項(xiàng)A正確。

所以,本題的答案為A。

6.

以下代碼執(zhí)行后,$result的值為______

<?php

$srcArray=array('a','b','c','d');

$randValue=array_rand($srcArray);

$result=is_string($randValue);

?>A.aB.falseC.trueD.bE.c正確答案:B[解析]array_rand()函數(shù)的作用是隨機(jī)返回?cái)?shù)組的一個(gè)鍵名。而$srcArray數(shù)組為關(guān)聯(lián)數(shù)組,數(shù)組下標(biāo)為數(shù)字而不是字符串,所以,當(dāng)通過is_string()判斷時(shí),由于鍵名不是字符串所以結(jié)果$result值等于false。選項(xiàng)B正確。

所以,本題的答案為B。

7.

下面關(guān)于面向?qū)ο蟮拿枋鲋校e(cuò)誤的是______A.父類的構(gòu)造函數(shù)與析構(gòu)函數(shù)不會(huì)自動(dòng)被調(diào)用B.成員變量需要用public、protected、private修飾,在定義變量時(shí)不再需要var關(guān)鍵字C.父類中定義的靜態(tài)成員,不可以在子類中直接調(diào)用D.包含抽象方法的類必須為抽象類,抽象類不能被實(shí)例化正確答案:A[解析]對(duì)于選項(xiàng)A,子類繼承父類,如果子類沒有構(gòu)造函數(shù)和析構(gòu)函數(shù),那么實(shí)例化子類時(shí)會(huì)自動(dòng)調(diào)用父類的構(gòu)造函數(shù)和析構(gòu)函數(shù);但如果子類只有構(gòu)造函數(shù)沒有析構(gòu)函數(shù),那么實(shí)例化子類時(shí),自動(dòng)調(diào)用的是子類的構(gòu)造函數(shù),銷毀對(duì)象時(shí)調(diào)用父類的析構(gòu)函數(shù);如果子類沒有構(gòu)造函數(shù)只有析構(gòu)函數(shù),那么實(shí)例化子類時(shí)會(huì)自動(dòng)調(diào)用父類的構(gòu)造函數(shù),銷毀對(duì)象時(shí)調(diào)用子類的析構(gòu)函數(shù)。選項(xiàng)A說法不完全,選項(xiàng)A錯(cuò)誤。

對(duì)于選項(xiàng)B,成員變量使用了public、protected、private修飾定義變量時(shí)是不需要var關(guān)鍵字的。選項(xiàng)B說法正確,選項(xiàng)B錯(cuò)誤。

對(duì)于選項(xiàng)C,父類中的靜態(tài)成員,子類中是不可以直接訪問的。選項(xiàng)C說法正確,選項(xiàng)C錯(cuò)誤。

對(duì)于選項(xiàng)D,一個(gè)包含抽象方法的類必須是抽象類,并且抽象類不能被實(shí)例化。選項(xiàng)D說法正確,選項(xiàng)D錯(cuò)誤。

所以,本題的答案為A。

8.

一個(gè)類如何覆蓋默認(rèn)的序列化機(jī)制?______A.使用__shutdown和__startup方法B.調(diào)用register_shutdown_function()函數(shù)C.使用sleep()和__wakeup()方法D.無法覆蓋默認(rèn)序列化機(jī)制E.使用ob_start()將類放入輸出緩沖中正確答案:C[解析]當(dāng)執(zhí)行serialize()序列化時(shí),會(huì)檢查是否存在魔法函數(shù)__sleep(),如果存在,那么先執(zhí)行__sleep(),然后才執(zhí)行serialize()序列化,這個(gè)功能可以清理對(duì)象,并返回一個(gè)包含對(duì)象中所有變量名的數(shù)組。而__wakeup()方法是在執(zhí)行unserialize()反序列化前使用,預(yù)先準(zhǔn)備對(duì)象數(shù)據(jù)。選項(xiàng)C正確。

所以,本題的答案為C。

9.

下列代碼的輸出結(jié)果是______

<?php

classA{

publicfunction__construct(){

echo"ClassA...<br/>";

}

}

classBextendsA{

publicfunction__construct(){

echo"ClassB...<br/>";

}

}

newB();

?>A.ClassB...B.ClassA...ClassB...C.ClassB...ClassA...D.ClassA...正確答案:A[解析]在PHP中,如果子類定義__construct,則會(huì)覆蓋父類的__construct,如果沒有定義__construct,則會(huì)使用父類的,可以在子類的__construct中顯式調(diào)用父類的構(gòu)造函數(shù),方法如下:parent::__construct();。本題中,由于只實(shí)例化了子類的對(duì)象,因此只會(huì)調(diào)用子類的構(gòu)造函數(shù)。選項(xiàng)A正確。

所以,本題的答案為A。

10.

PDO通過執(zhí)行SQL查詢與數(shù)據(jù)庫進(jìn)行交互,可以分為多種不同的策略,使用哪一種方法取決于要做什么操作。如果向數(shù)據(jù)庫發(fā)送DML語句,那么下面最合適的方式是______A.使用PDO對(duì)象中的exec()方法B.使用PDO對(duì)象中的query()方法C.使用PDO對(duì)象中的prepare()和PDOStatement對(duì)象中的execute()兩個(gè)方法結(jié)合D.以上方式都可以正確答案:A[解析]PDO->exec()方法主要是針對(duì)沒有結(jié)果集合返回的操作,例如INSERT、UPDATE、DELETE等操作,它返回的結(jié)果是當(dāng)前操作影響的列數(shù)。選項(xiàng)A正確。

所以,本題的答案為A。

二、填空題1.

同時(shí)滿足這樣條件的數(shù):被10除余9,被9除余8,被8除余7,在100~1000之間,有______個(gè)。正確答案:2個(gè)。[解析]假設(shè)要求解的數(shù)為P,分析過程如下:

P除以10余9,可知P+1能被10整除;

P除以9余8,可知P+1能被9整除;

P除以8余7,可知P+1能被8整除;

所以P=(8,9,10的公倍數(shù))-1;

8=2*2*2,9=3*3,10=2*5:

則P+1一定是2*2*2*3*3*5的倍數(shù)(只能約掉一個(gè)2);

又100≤P≤1000;

101≤P+1≤1001;

所以P+1=360,720;

即P=359,719;

由分析可知,有兩個(gè)這樣的數(shù)存在,分別是359和719。

2.

______函數(shù)能把數(shù)組轉(zhuǎn)化能字符串。正確答案:implode()。[解析]使用的代碼如下:

<?php

$arr=array('I','Love','You');

echoimplode("",$arr);

?>

程序的運(yùn)行結(jié)果為ILoveYou。

3.

有一個(gè)字符串變量$String,去除其中的HTML標(biāo)記的正則表達(dá)式為______。正確答案:$result=preg_replace("/<∨?[^<>]*?>/","",$String);。

4.

事務(wù)必須滿足______、______、______、______四個(gè)屬性。正確答案:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability),即ACID四種屬性。

5.

Memcache最大能存儲(chǔ)的單個(gè)item為多大?______。正確答案:1MB。[解析]Memcache存儲(chǔ)的單個(gè)最大數(shù)據(jù)為1MB,如果數(shù)據(jù)大于1MB,那么可以考慮將數(shù)據(jù)進(jìn)行拆分存儲(chǔ)到不同的key中。

三、簡(jiǎn)答題1.

請(qǐng)寫出MVC的優(yōu)點(diǎn)。正確答案:1)可以為一個(gè)模型在運(yùn)行時(shí)建立和使用多個(gè)視圖。變化傳播機(jī)制可以確保所有相關(guān)的視圖及時(shí)得到模型數(shù)據(jù)變化,從而使所有關(guān)聯(lián)的視圖和控制器做到行為同步。

2)視圖與控制器的可接插性。允許更換視圖和控制器對(duì)象,而且可以根據(jù)需求動(dòng)態(tài)地打開或關(guān)閉,甚至在運(yùn)行期間進(jìn)行對(duì)象替換。

3)模型的可移植性。因?yàn)槟P褪仟?dú)立于視圖的,所以可以把一個(gè)模型獨(dú)立地移植到新的平臺(tái)工作,需要做的只是在新平臺(tái)上對(duì)視圖和控制器進(jìn)行修改。

4)潛在的框架結(jié)構(gòu)??梢曰诖四P徒?yīng)用程序框架,不只是用在設(shè)計(jì)界面中。

2.

“===”是什么?試舉一個(gè)“==”是真但“===”是假的例子。正確答案:“===”表示的是全等運(yùn)算符,要求兩個(gè)變量比較時(shí),不僅是值相等,而且還要求它們的數(shù)據(jù)類型也要相同,只有待比較的兩個(gè)變量的類型相同且有相同的值,比較結(jié)果才是true?!?=”表示的是相等運(yùn)算符,要求兩個(gè)變量的值相等即可,即使不是相同的數(shù)據(jù)類型也可以認(rèn)為它們相等并返回true,如果值不相等,那么返回false,因?yàn)樗鼈兇嬖陬愋偷呐袛鄥^(qū)別,所以只要值相等、類型不相等它們就會(huì)返回不同的結(jié)果。例如,“0”和0比較,用“==”比較時(shí)返回true,但是用“===”比較時(shí),因?yàn)樗鼈償?shù)據(jù)類型不一樣,所以返回false。

3.

什么是局部變量和全局變量?函數(shù)內(nèi)是否可以直接調(diào)用全局變量?正確答案:局部變量指的是在函數(shù)內(nèi)部定義的變量,其只能在函數(shù)內(nèi)使用。如果函數(shù)外存在一個(gè)與局部變量名字相同的變量,那么程序會(huì)認(rèn)為它們是兩個(gè)完全不同的變量。函數(shù)外的變量是一個(gè)全局變量,與函數(shù)內(nèi)的變量互不影響,函數(shù)執(zhí)行完畢后,函數(shù)內(nèi)的局部變量會(huì)被

全局變量是在所有函數(shù)外定義的變量,其作用域是整個(gè)源文件,并且在函數(shù)內(nèi)部是無法使用全局變量的。如果用戶需要在函數(shù)內(nèi)使用全局變量,那么在函數(shù)內(nèi)使用關(guān)鍵字global聲明局部變量為全局變量,就可以在函數(shù)內(nèi)使用全局變量了。除了可以在函數(shù)內(nèi)使用關(guān)鍵字global獲取全局變量外,還可以在函數(shù)內(nèi)使用$GLOBALS['var']獲取對(duì)應(yīng)的全局變量的值。

4.

Session的原理是什么?大型網(wǎng)站中,使用Session應(yīng)注意什么?正確答案:Session用來標(biāo)識(shí)服務(wù)器與瀏覽器的一次會(huì)話過程,服務(wù)器會(huì)給每個(gè)Session分配一個(gè)唯一的會(huì)話ID(SID)。SID可以看作與任意數(shù)量的數(shù)據(jù)有關(guān)聯(lián),在HTTP無狀態(tài)行為下,可以通過兩種方式實(shí)現(xiàn):

1)通過Cookie存儲(chǔ)SID并在必要時(shí)獲取SID,在頁面中使用和SID相關(guān)的各項(xiàng)數(shù)據(jù),即使會(huì)話結(jié)束了,Cookie也可以在客戶端保存,并在后續(xù)會(huì)話中讀取使用。

2)URL重寫,在每個(gè)請(qǐng)求頁面的本地URL上增加SID。無論客戶什么時(shí)候點(diǎn)擊這些鏈接,都會(huì)通過SID自動(dòng)傳播,這樣即使客戶端禁用Cookie,也不影響會(huì)話處理功能,可以正常使用;但是這種方法也存在一些問題,例如,URL重寫在會(huì)話之間不能保持持久性,也無法阻止用戶將URL分享給別人。

在大型網(wǎng)站中,因?yàn)樵L問量比較大,所以應(yīng)用服務(wù)器一般都會(huì)做集群部署,Session是存儲(chǔ)在每個(gè)服務(wù)器中的,這時(shí)需要注意實(shí)現(xiàn)各個(gè)服務(wù)器之間的Session共享。

5.

請(qǐng)寫出面向?qū)ο笾薪涌诤统橄箢惖膮^(qū)別及應(yīng)用場(chǎng)景。正確答案:1)被abstract修飾的類叫作抽象類,抽象類可以沒有抽象方法,但是一個(gè)類如果存在抽象方法,那么這個(gè)類一定是抽象類。抽象方法必須使用abstract關(guān)鍵字修飾。

2)接口中全部是抽象方法,方法不需要用abstract定義。

3)當(dāng)多個(gè)同類的類要設(shè)計(jì)一個(gè)上層時(shí),通常設(shè)計(jì)為抽象類,當(dāng)多個(gè)異構(gòu)的類要設(shè)計(jì)一個(gè)上層時(shí),通常設(shè)計(jì)為接口。

四、編程題1.

默認(rèn)情況下,Session在瀏覽器關(guān)閉時(shí)將失效,如果要延長(zhǎng)Session的生存周期(比如一個(gè)月),那么如何處理?正確答案:要延長(zhǎng)Session的生存周期方法有下面兩種:

1)通過setcookie()設(shè)置。語法為setcookie(Cookie名稱、Cookie值、Cookie有效期(可選),Cookie服務(wù)端路徑(可選),Cookie域名(可選),是否通過安全的HTTPS連接傳輸Cookie(可選)),因?yàn)閟ession_id是存在Cookie里的,通過延長(zhǎng)session_id的生存周期,可以延長(zhǎng)客戶端帶著session_id訪問服務(wù)端的Session。實(shí)現(xiàn)代碼如下:

<?php

session_start();

$time=24*3600*30;

setcookie(session_name(),session_id),time()+$time,"/");

?>

2)通過Session提供的session_set_cookie_params()函數(shù)。該函數(shù)通過設(shè)置Cookie的生命周期,延長(zhǎng)Cookie存儲(chǔ)SessionID的時(shí)間,從而延長(zhǎng)了訪問Session的生存期,但該函數(shù)須在session_start()前調(diào)用。實(shí)現(xiàn)代碼如下:

<?php

$time=24*3600*30;

session_set_cookie_params($time);

session_start();

?>

2.

請(qǐng)寫一個(gè)函數(shù),實(shí)現(xiàn)以下功能:字符串“opendoor‘”轉(zhuǎn)換成“OpenDoor”、“make_by_id”轉(zhuǎn)換成“MakeById”。正確答案:從題目可以看出,源字符串中單詞通過“_”分割的,轉(zhuǎn)換后的字符串,從第二個(gè)單詞開始首字母都大寫。通過這個(gè)規(guī)律可以有下面幾種實(shí)現(xiàn)方式。

方法一:將字符串按“_”分割為數(shù)組,然后按照空格合并為字符串,使用ucwords函數(shù)將字符串首字母轉(zhuǎn)換為大寫,同時(shí)再次調(diào)用implode函數(shù)合并為字符串。

functionstr_explode($str){

$str_arr=explode("_",$str);

$str_implode=implode("",$str_arr);

$str_implode=implode("",explode("",ucwords($str_implode)));

return$str_implode;

}

$strexplode=str_explode("make_by_id");

print_r($strexplode);

方法二:將字符串按“_”分割為數(shù)組,對(duì)分割后的數(shù)組進(jìn)行循環(huán)調(diào)用ucwords函數(shù)將字符串首字母轉(zhuǎn)換為大寫。

functionstr_explode($str){

$result="";

$expStr=explode("_",$str);

for($i=0;$i<count($expStr);$i++)

{

$result=$result.ucwords($expStr[$i]);

}

return$result;

}

$str="make_by_id";

$result=str_explode($str);

echo$result;

方法三:將字符串中“_”替換為空格,調(diào)用ucwords函數(shù)將字符串首字母轉(zhuǎn)換為大寫,最后替換掉空格。

echostr_replace('',",ucwords(str_replace('_','','open_door')));

3.

寫出一個(gè)能創(chuàng)建多級(jí)目錄的函數(shù)。正確答案:<?php

functioncreate_dir($paht,$mode=077){

if(is_dir($path)){

echo"folderexists";

}else{

if(mkdir($path,$mode,true)){

echo"createsuccess";

}else{

echo"createfailed";

}

}

}

?>

4.

如何實(shí)現(xiàn)旋轉(zhuǎn)數(shù)組功能?正確答案:先分別把兩個(gè)子數(shù)組的內(nèi)容交換,然后把整個(gè)數(shù)組的內(nèi)容交換,即可得到問題的解。

溫馨提示

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

評(píng)論

0/150

提交評(píng)論