![某知名社交軟件公司PHP工程師面試筆試真題4_第1頁](http://file4.renrendoc.com/view4/M02/3C/1B/wKhkGGZb9DuAOEXMAAJq5JspfQw725.jpg)
![某知名社交軟件公司PHP工程師面試筆試真題4_第2頁](http://file4.renrendoc.com/view4/M02/3C/1B/wKhkGGZb9DuAOEXMAAJq5JspfQw7252.jpg)
![某知名社交軟件公司PHP工程師面試筆試真題4_第3頁](http://file4.renrendoc.com/view4/M02/3C/1B/wKhkGGZb9DuAOEXMAAJq5JspfQw7253.jpg)
![某知名社交軟件公司PHP工程師面試筆試真題4_第4頁](http://file4.renrendoc.com/view4/M02/3C/1B/wKhkGGZb9DuAOEXMAAJq5JspfQw7254.jpg)
![某知名社交軟件公司PHP工程師面試筆試真題4_第5頁](http://file4.renrendoc.com/view4/M02/3C/1B/wKhkGGZb9DuAOEXMAAJq5JspfQw7255.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
某知名社交軟件公司PHP工程師面試筆試真題4一、選擇題1.
某城市發(fā)生了一起汽車撞人逃跑事件,該城市只有兩種顏色的車,其中,白色車占15%,黑色車占85%,事發(fā)時有一個人在現(xiàn)場看見似乎是一輛白色的車,但是(江南博哥)根據(jù)專家在現(xiàn)場分析,在當時那種條件能看正確的可能性是80%。那么,肇事車是白車的概率是______A.12%B.29%C.41%D.80%正確答案:C[解析]本題中,肇事車的情況一共存在著以下4種可能性:
1)如果肇事車是白色車,被正確識別的概率P1=15%*80%=12%。
2)如果肇事車是白色車,被看成是黑車的概率P2=15%*20%=3%。
3)如果肇事車是黑色車,被正確識別的概率P3=85%*80%=68%。
4)如果肇事車是黑色車,被看成是白車的概率P4=85%*20%=17%。
肇事車是白色車的概率P=P1/(P1+P4)=12%/(12%+17%)=41.3%,選項C正確。
所以,本題的答案為C。
2.
店主銷售電話卡,他以60元的價格銷售兩張,其中一張賺了20%,另一張?zhí)澚?0%,那么他總共賺了______元。A.-10B.10C.-5D.0正確答案:C[解析]對于店主而言,假設(shè)賺了20%的那張電話卡的進價為x元,虧了20%的那張電話卡的進價為y元,根據(jù)題意,可得以下兩個等式:
得出x=50元,y=75元。
兩張電話卡的進價和為(50+75)元=125元,而售價和為(60+60)元=120元,因此,店主總共賺了(120-125)元=-5元,選項C正確。
所以,本題的答案為C。
3.
有如下代碼:
<?php
$x="display";
${$x.'_result'}();
?>
以上代碼將會調(diào)用display_result()______A.錯誤B.正確C.編譯錯誤D.無答案正確答案:C[解析]在PHP中,如果一個函數(shù)的名字不是確定的,那么可以把函數(shù)名存放到一個變量中,然后通過如下兩種方法調(diào)用:
1)直接通過“$變量名()”進行調(diào)用。
2)通過內(nèi)置函數(shù)來進行調(diào)用,即
①mixedcall_user_func(callback$function[,mixed$parameter[,mixed$...]])
②mixedcall_user_func_array(callback$function,array$param_arr)
示例代碼如下:
<?php
functionhello($name)
{
echo"hello$name\n";
}
$f="hello";
$f("world");
//輸出helloworld
call_user_func('hello',"world");
//輸出helloworld
?>
對于本題而言,通過$x.'_result'拼接出的字符串為display_result,因此,${$x.'_result'}()也就等價于$display_result(),顯然變量名display_result是不存在的,因此編譯無法通過,一種可行寫法為$y=$x.'_result';$y();。
所以,本題的答案為C。
4.
以下說法不正確的是______A.PHP有4種標量類型:布爾型(boolean)、整型(integer)、浮點型(float)、字符串(string)B.浮點型(float)與雙精度型(double)是同一種類型C.復合類型包括數(shù)組(array)、對象(object)、資源(resource)D.偽類型:混合型(mixed)、數(shù)字型(number)、回調(diào)(callback)正確答案:C[解析]PHP主要有8種數(shù)據(jù)類型,根據(jù)類型還可以被劃分為3大類,標量類型中包含布爾型、整型和浮點型,復合類型包括數(shù)組和對象,特殊類型包括資源類型和空類型。除此之外,PHP還可以存在偽類型,主要是數(shù)據(jù)存在混合相關(guān)聯(lián),所以存在偽類型。
所以,本題答案為C。
5.
執(zhí)行如下程序段:
<?php
echo24%(-5);
?>
程序的輸出結(jié)果是______A.5B.4C.-4D.19正確答案:B[解析]在PHP中,取模運算符%的操作數(shù)在運算之前都會轉(zhuǎn)換成整數(shù)(除去小數(shù)部分)。其運算結(jié)果和被除數(shù)的符號(正負號)相同,即$a%$b的結(jié)果和$a的符號相同。本題中,24%(-5)的符號為正,結(jié)果為4。
所以,本題的答案為B。
6.
有如下代碼:
$String="Thisisatest,";
echoereg_replace("is","was",$string)."<br>";
echoereg_replace("()is","\\1was",$string)."<br>";
echoereg_replace("(()is)","\\2was",$string)."<br>";
程序的輸出結(jié)果為______A.Thiswasatest.Thisisatest.Thiswasatest.B.Thisisatest.Thisisatest.Thiswasatest.C.Thisisatest.Thisisatest.Thisisatest.D.Thiswasatest.Thisisatest.Thisisatest.E.Thiswasatest.Thiswasatest.Thiswasatest.正確答案:E[解析]ereg_replace()函數(shù)可以對符合正則條件的字符串進行替換,因為第一個是將is替換成was,所以,選項B選項C錯誤。第二句匹配的是“()is”規(guī)則,“()”表示的是匹配符合規(guī)則的字符串,而“\\1”表示的是和子匹配一樣的內(nèi)容,那么會被替換成“Thiswasatest.”。第三個輸出中,“(()is)”匹配符合括號內(nèi)規(guī)則的字符串,“\\2was”表示和第二個子匹配()is的內(nèi)容一樣,會替換輸出為“Thiswasatest.”。選項E正確,選項A選項D錯誤。
所以,本題的答案為E。
7.
設(shè)有一個數(shù)據(jù)庫mydb中有一個表tb1,表中有6個字段,主鍵為ID,有10條記錄,ID為0~9,以下代碼輸出結(jié)果是______
<?php
$link=mysq1_connect("localhost","mysq1_user","mysq1_password")
ordie("Couldnotconnect:".mysq1_error());
$result=mysq1_query("SELECTid,name,ageFROMmydb、tb1whereid<5");
ordie("Couldnotquery:.mysq1_error());
echomysq1_num_fields($result);
mysq1_close($link);
?>A.6B.5C.4D.3正確答案:D[解析]mysql_num_fields()返回結(jié)果集中字段的數(shù)目,該語句主要查詢了id、name和age三個字段。選項D正確。
所以,本題的答案為D。
8.
以下關(guān)于mysq1_pconnect的說法中,正確的是______A.與數(shù)據(jù)庫進行多連接B.與mysq1_connect功能相同C.與@mysq1_connect功能相同D.與數(shù)據(jù)庫建立持久連接正確答案:D[解析]mysql_pconnect()函數(shù)打開一個到MySQL服務(wù)器的持久連接。
mysql_pconnect()和mysql_connect()非常相似,雖然只多了一個P,但它們有兩個主要區(qū)別:首先,當建立連接的時候,本函數(shù)將先嘗試尋找一個在同一個主機上用同樣的用戶名和密碼已經(jīng)打開的(持久)連接,如果找到,則返回此連接標識而不打開新連接。其次,當腳本執(zhí)行完畢后,到SQL服務(wù)器的連接不會被關(guān)閉,此連接將保持打開以備以后使用(mysql_close()不會關(guān)閉由mysql_pconnect()建立的連接)。選項D正確。
所以,本題的答案為D。
9.
file()函數(shù)返回的數(shù)據(jù)類型是______A.數(shù)組B.字符串C.整型D.根據(jù)文件來定正確答案:A[解析]file()函數(shù)可以把整個文件讀入一個數(shù)組中,將文件作為一個數(shù)組返回,如果失敗,那么返回false。選項A正確。
所以,本題的答案為A。
10.
index.php腳本通過post方法提交,獲取表單元素email的值的方法是______A.$_GET['email']B.$_POST['email']C.$_SESSION['text']D.$_REQUEST['email']E.$_POST['text']正確答案:BD[解析]通過post方法提交表單可以通過$_POST['email']獲取表單email的值,也可以通過$_REQUEST['email']方法獲取無論是post還是get傳過來對應(yīng)的參數(shù)值。選項B選項D正確,選項A選項C選項E錯誤。
所以,本題的答案為BD。
二、填空題1.
運行時(run-time)包含一個PHP腳本使用______,而編譯時(compile-time)包含一個PHP腳本使用______。正確答案:include,require。[解析]require(或requier_once())和include()(或include_once())都可以用來包含PHP文件,它們的唯一區(qū)別是,如果包含的文件不存在,那么require(或require_once())將產(chǎn)生一個致命錯誤,同時終止腳本的執(zhí)行;而include(或include_once())只會產(chǎn)生一個警告,不終止后續(xù)腳本的執(zhí)行。二者在運行和編譯引用文件時沒有區(qū)別。
2.
函數(shù)______能讀取文本文件中的一行。讀取二進制文件或者其他文件時,應(yīng)當使用______函數(shù)。正確答案:fgets(),fread()。[解析]fgets()函數(shù)主要用于讀取文本文件中的一行,而fread()函數(shù)主要用于讀取二進制文件。fseek()函數(shù)主要用于在打開的文件中定位,fputs()函數(shù)用于寫入文件。
3.
______函數(shù)能返回腳本里任意行中調(diào)用的函數(shù)的名稱。該函數(shù)同時還經(jīng)常被用在調(diào)試中,用來判斷錯誤是如何發(fā)生的。正確答案:debug_backtrace。[解析]debug_backtrace()的作用是,返回在特定位置調(diào)用過的函數(shù)名組成的數(shù)組,經(jīng)常被用于調(diào)試中。
4.
需要設(shè)置一個有效期為31天的Memcache值,請補充下面的代碼:
<?php
$memcache_obj=newMemcache();
$memcache_obj->connect('memcache_host,11211');
$memcache_obj->set('varKey','varValue',0,
);
?>正確答案:time()+31*24*3600或31*24*3600。[解析]首先初始化Memcache對象,然后進行Memcache連接,最后用set方法設(shè)置過期時間。memcache::set語法為memcache::set("鍵","值","是否壓縮","設(shè)置過期時間,0為永久不過期"),其中時間值可以是一個時間戳,也可以是秒數(shù)。所以設(shè)置一個有效期為31天的Memcache值方法格式為memcache::set("key","value",0,time()+31*24*3600)。
5.
在PHP中,heredoc是一種特殊的字符串,它的結(jié)束標志必須______。正確答案:頂格寫,且以分號“;”結(jié)束。[解析]heredoc的語法是用“<<<”加上自己定義成對的標簽,在標簽范圍內(nèi)的文字視為一個字串。結(jié)束表示符必須獨占一行,且必須頂格寫,最后以“;”分號結(jié)尾。示例代碼如下:
<?php
$str=<<<ED
hello
world.
ED;
echo$str;
?>
運行結(jié)果為
hello
world.
三、簡答題1.
什么是內(nèi)存管理?正確答案:內(nèi)存管理主要指程序運行時對計算機內(nèi)存資源的分配、使用和釋放等技術(shù),內(nèi)存管理的目標是高效、快速地分配內(nèi)存,同時及時地釋放和回收內(nèi)存資源。內(nèi)存管理主要包括是否有足夠的內(nèi)存供程序使用,從內(nèi)存池中獲取可用內(nèi)存,使用后及時銷毀并重新分配給其他程序使用。
在PHP開發(fā)過程中,如果遇到大數(shù)組等操作,那么可能會造成內(nèi)存溢出等問題。一些常見的處理方法如下:
1)通過ini_set('memory_limit','64M')方法重置php可以使用的內(nèi)存大小,一般在遠程主機上是不能修改php.ini文件的,只能通過程序設(shè)置。注:在safe_mode(安全模式)下,ini_set會失效。
2)對數(shù)組進行分批處理,及時銷毀無用的變量,盡量減少靜態(tài)變量的使用,在需要數(shù)據(jù)重用時,可以考慮使用引用(&)。同時對于數(shù)據(jù)庫、文件操作完要及時關(guān)閉,對象使用完,要及時調(diào)用析構(gòu)函數(shù)等。
3)及時使用unset()函數(shù)釋放變量,使用時需要注意以下兩點:
①unset()函數(shù)只能在變量值占用內(nèi)存空間超過256B時才會釋放內(nèi)存空間。
②只有當指向該變量的所有變量都銷毀后,才能成功釋放內(nèi)存。
2.
抽象類至少有一個抽象方法嗎?正確答案:如果一個類中有一個抽象方法,那么該類必須為抽象類,但抽象類中可以沒有抽象方法。
3.
PHP如何判斷變量為空?正確答案:在PHP中,NULL與空是兩種不同的概念。isset()主要用來判斷變量是否被初始化過。empty()可以將值為“假”“空”“0”“NULL”“未初始化”的變量都判斷為true。is_null()僅把值為“NULL”的變量判斷為true?!皏ar==null”把值為“假”“空”“0”“NULL”的變量都判斷為true?!皏ar===null”僅把值為“NULL”的變量判斷為true。
4.
類與對象的區(qū)別是什么?正確答案:(1)類與對象
對象是系統(tǒng)中用來描述客觀事物的一個實體,它是構(gòu)成系統(tǒng)的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務(wù)組成。
類是具有相同屬性和服務(wù)的一組對象的集合。它為屬于該類的所有對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和服務(wù)兩個主要部分。在面向?qū)ο蟮木幊陶Z言中,類是一個獨立的程序單位,它應(yīng)該有一個類名并包括屬性說明和服務(wù)說明兩個主要部分。在PHP中類定義的格式為
<?php
class類名{
//類體,包含類的屬性和操作屬性的方法
}
?>
類的方法和變量的權(quán)限修飾符有如下3種:public、protected和private。
偽變量$this可以在當一個方法在對象內(nèi)部調(diào)用時使用。$this是一個到調(diào)用對象(該對象通常是方法所屬于的對象,但也可以是另一個對象,如果該方法是從第二個對象內(nèi)調(diào)用的)的引用。
類與對象的關(guān)系就如模具和鑄件的關(guān)系,類的實例化結(jié)果就是對象,而這一類對象的抽象就是類。
(2)類的訪問符及“=>”的區(qū)別
在類中主要使用“::”和“_>”運算符訪問類中的屬性和方法,而它們和“=>”的區(qū)別如下:
1)“::”運算符是調(diào)用一個類中的靜態(tài)成員的方法,例如:
classtest{
protectedstatic$instance;
self::$instance="abc";
或者$this::$instance="def";
}
2)“_>”運算符是操作一個類中的成員變量的方法,可以是非static成員變量,例如:
classtest{
private$test;
$this_>test="abc";
}
3)“=>”運算符是數(shù)組的key和value映射時使用的運算符。
5.
Memcache的最大優(yōu)勢是什么?正確答案:Memcache最大的優(yōu)勢是具有很好的水平可擴展性,在一個巨大的系統(tǒng)中,客戶端做了一次存儲后,很容易增加大量的數(shù)據(jù)到Memcache的集群中,Memcache之間沒有互相通信,因此不會增加Memcache的負載,也不會網(wǎng)絡(luò)通信量爆炸。
四、編程題1.
據(jù)說著名猶太歷史學家約瑟夫(Josephus)有過以下的故事:在羅馬人占領(lǐng)喬塔帕特后,39個猶太人與約瑟夫及他的朋友躲到一個洞中,39個猶太人決定寧愿死也不要被敵人抓到,于是決定了一個自殺方式,41個人排成一個圓圈,由第1個人開始報數(shù),每報數(shù)到第3個人該人就必須自殺,然后再由下一個重新報數(shù),直到所有人都自殺身亡為止。
然而約瑟夫和他的朋友并不想遵從,約瑟夫要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,于是逃過了這場死亡游戲。
約瑟夫問題可用代數(shù)分析來求解,假設(shè)現(xiàn)在您與m個朋友不幸參與了這個游戲,您要如何保護您與您的朋友?正確答案:實際上只要畫兩個圓圈就可以讓自己與朋友免于死亡游戲,這兩個圓圈中內(nèi)圈是排列順序,而外圈是自殺順序,如下圖所示。
使用程序來求解時,只要將陣列當作環(huán)狀來處理,在陣列中由計數(shù)1開始,每三個數(shù)得到一個計數(shù),直到計數(shù)到41為止;然后將陣列由索引1開始列出,就可以得知每個位置的自殺順序,這就是約瑟夫排列。41個人報數(shù)的約瑟夫排列如下(第一個開始對應(yīng)每個人的站位):
1436138152243031634425175403161826737198352792032104121112839122233132923
由上可知,最后一個自殺的是在第31個位置的人,而倒數(shù)第二個自殺的要排在第16個位置,之前的人都死光了,所以他們也就不知道約瑟夫與他的朋友并沒有遵守游戲規(guī)則。
實現(xiàn)代碼如下:
<?php
header("content-type:text/html;charset=utf-8");
define("N",41);
//參與總?cè)藬?shù)
define("M",3);
//每到3自殺一人
$man=array(0);
$count=1;
$i=0;
$pos=-1;
$alive=2;
//想救的人數(shù)
while($count<=N){
do{
$pos=($pos+1)%N;
//環(huán)狀處理
if(@$man[$pos]==0)
$i++;
if($i==M){
$i=0;
break;
}
}while(1);
$man[$pos]=$count;
$count++;
}
//截取出對應(yīng)最大鍵值對應(yīng)的鍵名
arsort($man);
$arr=array_slice($man,0,$alive,true);
echo"約琴夫排列:";
for($i=0;$i<N;$i++){
echo"".$man[$i];
}
echo"<br>L表示要救的".$alive."個人要放的位置:";
for($i=0;$i<N;$i++){
if(isset($arr[$i])&&$man[$i]==$arr[$i])
echo"L";
else
echo"D";
if(($i+1)%5==0)
echo"";
}
?>
程序的運行結(jié)果為
約琴夫排列:1436138152243031634425175403161826737198352792032104121112839122233132923
L表示要救的2個人要放的位置:DDDDDDDDDDDDDDDLDDDDDDDDDDDDDDLDDDDDDDDDD
2.
一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”。例如,6=1+2+3。編程找出1000以內(nèi)的所有完數(shù)。正確答案:外層循環(huán)998次,每次循環(huán)得到的$i傳入下個循環(huán)內(nèi),內(nèi)部循環(huán)求解出符合$i整除$k等于0的數(shù),如果能夠整除,那么說明$k是$i的一個因子,則用$sum累加,直到$sum+1等于$i條件成立,說明$i是一個“完數(shù)”。需要注意的是,因為$sum求解出的因子是不包括1的,所以還需要額外地加1到$sum中,并且$i的一個因子不會大于$i/2,所以內(nèi)部循環(huán)判斷是否繼續(xù)循環(huán)的條件為$i/2。
實現(xiàn)代碼如下:
<?php
for($i=2;$i<1000;$i++){
$sum=0;
for($k=2;$k<=$i/2;$k++){
if($i%$k==0){
$sum+=$k;
}
}
if($sum+1==$i){
echo$i."";
}
}
?>
程序的運行結(jié)果為
628496
3.
實現(xiàn)一個隊列的數(shù)據(jù)結(jié)構(gòu),使其具有入隊列、出隊列、查看隊列首尾元素、查看隊列大小等功能。正確答案:隊列的實現(xiàn)也有兩種方法,分別為采用數(shù)組來實現(xiàn)和采用鏈表來實現(xiàn)。下面分別詳細介紹這兩種方法。
下圖給出了一種最簡單的實現(xiàn)方式,用front來記錄隊列首元素的位置,用rear來記錄隊列尾元素往后一個位置。入隊列的時候只需要將待入隊列的元素放到數(shù)組下標為rear的位置,同時rear++,出隊列的時候只需要執(zhí)行行front++即可。
實現(xiàn)代碼如下:
<?php
header("content-type:text/html;charset=utf-8");
classqueue{
private$queueList;
private$size;
publicfunction__construct(){
$this->queueList=array();
$this->size=0;
}
//入隊操作
publicfunctionenQueue($data){
$this->queueList[$this->size++]=$data;
return$this;
}
//出隊操作
publicfunctionoutQueue(){
if(!$this->isEmpty()){
--$this->size;
$front=array_splice($this->queueList,0,1);
return$front[0];
}
returnfalse;
}
//獲取隊列
publicfunctiongetQueue(){
return$this->queueList;
}
//獲取隊頭元素
publicfunctiongetFront(){
if(!$this->isEmpty()){
return$this->queueList[0];
}
returnfalse;
}
//獲取隊尾元素
publicfunctiongetRear(){
if(!$this->isEmpty()){
$l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《物業(yè)管理實務(wù)》課件
- 《服務(wù)利潤鏈》課件
- 2025年度圖書館學術(shù)著作采購合同模板
- 《廬山的云霧》課件
- 《露天礦生產(chǎn)能力》課件
- 2025年度養(yǎng)老產(chǎn)業(yè)服務(wù)合作合同范例
- 《氣體動理論》課件
- 《財務(wù)綜合評價》課件
- 校園網(wǎng)學生公寓網(wǎng)絡(luò)項目需求分析報告
- 二零二五年度私人車輛抵押借款風險控制合同
- 價格監(jiān)督檢查知識培訓課件
- 駐場保潔方案
- 中國心理衛(wèi)生協(xié)會家庭教育指導師參考試題庫及答案
- 智能廣告投放技術(shù)方案
- 知識產(chǎn)權(quán)保護執(zhí)法
- 高質(zhì)量社區(qū)建設(shè)的路徑與探索
- 數(shù)字化時代的酒店員工培訓:技能升級
- 足球守門員撲救技巧:撲救結(jié)合守護球門安全
- 《學術(shù)規(guī)范和論文寫作》課件全套 第1-10章 知:認識研究與論文寫作 - 引文規(guī)范
- 起重機更換卷筒施工方案
- 01智慧物流信息技術(shù)概述
評論
0/150
提交評論