版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
某知名共享單車公司PHP工程師面試筆試真題及答案
一、選擇題
1、實驗高中的小明暗戀女神同學(xué)已經(jīng)三年了,高考結(jié)束后,小明決
定向女神同學(xué)表白C這天,小明來到女神樓下等待女神的出現(xiàn),時
間一分一秒地流逝,兩個多小時過去了,女神還沒有出現(xiàn),小明看
了下表,時針和分針的位置正好跟開始等的時候互換,請問小明一
共等了女神______分鐘。
A.165B.150C.172D.166
2、全等運(yùn)算符===如何比較兩個值?______
A.把它們轉(zhuǎn)換成相同的數(shù)據(jù)類型再比較轉(zhuǎn)換后的值
B.只在兩者的數(shù)據(jù)類型和值都相同時才返回true
C,如果兩個值是字符串,則進(jìn)行詞匯比較
D.基于strcmp函數(shù)進(jìn)行比較
3、可以用來表現(xiàn)以下條件判斷最合適的語法結(jié)構(gòu)是—
if($a==,a'){
somefunctiont);
}elseif($a==*b*){
anotherfunction();
}elseif($a='c'){
dosomethingO;
}else{
donothingO;
A.沒有default的switch語句B.一個遞歸函數(shù)
C.while語句D.有default的switch語句
4、假設(shè)$a=5,有$b=($a-),則$b是
A.4B.5C.6D.0
5、考慮如下數(shù)組,能從數(shù)組$multi_array中找出值cat的方法是
$multi_array=array("red","green二
42。"blue",
nye11ow,r=>array(napp1eH,9=>"pear","banana",
IF"、/niun.irft?if\\
orange=>array(dog,cat,iguana))
);
A.$multi_array[,yellow,][rapple][0]
B.$multi_array[rbluer][0]['orange*][1]
C.$multi_array[3][3][2]
D.$multi_array[ryellow1]['orange']['cat']
E.$multi_array[ryellow1]['orange'][1]
6、下面關(guān)于PHP抽象類的描述中,錯誤的是
A.PUP中抽象類使用abstract關(guān)鍵字定義
B.沒有方法體的方法叫抽象方法,包含抽象方法的類必須是抽
象類
C.抽象類中必須有抽象方法,否則不叫抽象類
D.抽象類不能實例化,也就是不可以new成對象
7、在PHP的類中要使用定義的變量或函數(shù)時,要使用某種方式來指
向類中的變量,下列選項中,錯誤的是(三選)
A.$it->B.$my->C.$this->D.$I->
8、下面有關(guān)require。和include。的描述中,說法錯誤的是
A.require函數(shù)通常放在PHP程序的最前面
B.include函數(shù)一般是放在流程控制的處理部分中
C.require_once語句和require語句完全相同,唯一區(qū)別是
PHP會檢查該文件是否已經(jīng)被包含過,如吳是,則不會再次包含
D.require在引入不存在的文件時產(chǎn)生一個警告且腳本還會繼
續(xù)執(zhí)行,而include則會導(dǎo)致一個致命性錯誤且腳本停止執(zhí)行
9、正則表達(dá)式可以被用來實現(xiàn)___(雙選)
A.過濾特定的字符串B.查找指定的匹配字符
C.完成頁面的跳轉(zhuǎn)D.轉(zhuǎn)換字符編碼
10、處理HTTP文件上傳時,PHP把文件存儲在$FILES中。在PHP腳
本的執(zhí)行周期中,這些文件將被放在本地的臨時文件夾里,而在腳
B.file。函數(shù)既能讀取文本文件也能讀取二進(jìn)制文件,但是讀
取二進(jìn)制文件有可能出現(xiàn)安全問題
C.如果表單中沒有選擇上傳的文件,則PHP變量的值將為
NULL
D.fsockopcn()和fputs()結(jié)合起來可以發(fā)送郵件,也可以用
來抓取網(wǎng)頁內(nèi)容、下載ftp文件等
14、下列PHP配置項中,和安全最不相關(guān)的是
A.open_basedirB.register_globals
C.disable_functionsD.file_uploads
15、在PHP中,使用sendmail程序從Windows或Novell系統(tǒng)中發(fā)
送郵件的方式,與從類UNIX系統(tǒng)中發(fā)送的方式不同。以下哪些選項
說明了這個不同?______(雙選)
A.Windows/Novell不需要第三方軟件的支持就能實現(xiàn)該功能
B.UNIX中,s2ndmail_from的配置決定了郵件頭中的From信
息
C.在Windows/Novell中,無法發(fā)送有多個收件人的電子郵
件,每個收件人都必須單獨(dú)發(fā)送
D.有可能完全相同,這取決于sendmailpath的配置
E.不同于Windows/Novell,在UNIX中,必須用SMTP和
smtp_port配置好MTA主機(jī)和端口
二、填空題
16、假設(shè)機(jī)器上沒有安裝sendmail,要想mail函數(shù)能在Windows
下使用,需要O
17、PHP支持的流傳輸方式的是和o
18、能讓類在整個腳本里只實例化一次的設(shè)計模式是o
19、使用final關(guān)鍵字時,應(yīng)注意的問題有、______、
________________O
20、即時加載一個類的方法是o
三、簡答題
21、5名海盜搶得了窖藏的100枚金幣,并打算瓜分這些戰(zhàn)利品c
這是一些講民主的海盜(當(dāng)然是他們自己特有的民主),他們的習(xí)慣
是按下面的方式進(jìn)行分配:最厲害的一名海盜提出分配方案,然后
所有的海盜(包括提出方案者本人)就此方案進(jìn)行表決。如果50%或
更多的海盜贊同此方案,此方案就獲得通過并據(jù)此分配戰(zhàn)利品。否
則提出方案的海盜將被扔到海里,然后下一名最厲害的海盜又重復(fù)
上述過程。
所有的海盜都樂于看到他們的一位同伙被扔進(jìn)海里,不過,如
果讓他們選擇的話,他們還是寧可得一筆現(xiàn)金。他們當(dāng)然也不愿意
自己被扔到海里。所有的海盜都是有理性的,而且知道其他的海盜
也是有理性的。此外,沒有兩名海盜是同等厲害的一一這些海盜按
照完全由上到下的等級排好了座次,并且每個人都清楚自己和其他
所有人的等級。這些金塊不能再分,也不允許幾名海盜共有金塊,
因為任何海盜都不相信他的同伙會遵守關(guān)于共享金塊的安排。這是
一伙每人都只為自己打算的海盜。
最兇的一名海盜應(yīng)當(dāng)提出什么樣的分配方案才能使他獲得最多
的金子呢?
22、如何定義一個函數(shù)?函數(shù)名區(qū)分大小寫嗎?
23、談?wù)勀銓VC的認(rèn)識,介紹幾種目前二匕較流行的MVC框架。
24、請介紹說明觀察者模式。
25、Memcache的工作原理是什么?
四、編程題
26、數(shù)字1?1000放在含有1001個元素的數(shù)組中,其中只有唯一的
一個元素值重復(fù),其他數(shù)字均只出現(xiàn)一次。設(shè)計一個算法,將重復(fù)
元素找出來,要求每個數(shù)組元素只能訪問一次。如果不使用輔助存
儲空間,能否設(shè)計一個算法實現(xiàn)?
27、設(shè)計一個算法,判斷給定的一個數(shù)n是否是某個數(shù)的平方,不
能使用開方運(yùn)算。例如,16就滿足條件,因為它是4的平方;而15
則不滿足條件,因為不存在一個數(shù)使得其平方值為15。
28、用類編程實現(xiàn):Stu類中有兩個私有屬性name和sex,有兩個
公有方法,setNamcO和setSex()參數(shù)自定,方法可實現(xiàn)對兩個私
有屬性進(jìn)行修改。在實例化類的時候要求對私有屬性能初始化。
29、把鏈表相鄰元素翻轉(zhuǎn),例如,給定鏈表為1->2->3->4->5-
>6->7,則翻轉(zhuǎn)后的鏈表變?yōu)?->1->4->3->6->5->7O
答案:
一、選擇題
1、D
[解析]根據(jù)題目中的描述,可以畫一個表示時針與分針的圖例,如
下圖所示。
假設(shè)小明開始等待女神的那一時刻時針與分針的夾角為?;?/p>
度,那么,等到時針與分針正好互換位置時,時針走過了0弧度,
而由于分針轉(zhuǎn)動一圈表示的時間為一個小時,鐘表一圈是一個圓,
表示的弧度值為2冗,分針因為要轉(zhuǎn)若干圈才能到達(dá)時針的位置,
記分鐘所轉(zhuǎn)圈數(shù)為n,此時分針轉(zhuǎn)過的角度則為2nn-0弧度。
題目強(qiáng)調(diào),“時間一分一秒地流逝,兩個多小時過去了,女神
還沒有出現(xiàn)“,通過這條信息可知,分針轉(zhuǎn)了2?3圈,接近3圈,
此時可知,n值取3,所以,時針轉(zhuǎn)過的角度值為0,分針轉(zhuǎn)過的角
度值為2冗*3-0二6"-0。
對于時針而言,2兀代表一圈,即12個小時,那么弧度。表示
的時間值為12*8/2Ji小時,對于分針而言,2兀代表一圈,即60
分鐘,那么6兀-。表示的是60*(6兀-。)/2n分鐘。由于時鐘走過
的時間值與分鐘走過的時間值所代表的時間量是一個量,故而二者
是相等的,由此可以構(gòu)建如下等式關(guān)系:
(120/2n)*60=60*(6n-0)/2JI
求解上述等式可知,。=6n/13,即小明等待的時間反映在鐘表
上為6兀/13弧度值,所以,小明一共等了12*(6兀/13)/2幾小時,
即36/13小時,合166分鐘。
所以,本題的答案為D。
2、B
1解析」全等運(yùn)算符主要比較兩者數(shù)據(jù)類型和值是否相等,都相等時
才會返回true。
本題中,對于選項A,全等運(yùn)算符是先比較它們的值是否相
等,如果不相等,那么返回false;如果相等,那么比較數(shù)據(jù)類型
是否相等。并不是先轉(zhuǎn)換相同的數(shù)據(jù)類型,再進(jìn)行值的比較。選項
A錯誤。
對于選項B,全等運(yùn)算符是比較兩者的數(shù)據(jù)類型和值是否都相
等,如果數(shù)據(jù)類型和值都相等,那么返回true。選項B正確。
對于選項C,如果比較的兩個值都是字符串,那么會對每個字
符進(jìn)行比較,而不是進(jìn)行詞匯比較。選項C錯誤。
對于選項D,strcmp只能用來比較兩個字符串的值是否相等,
而全等比較還能比較兩個數(shù)據(jù)的類型是否相等,顯然它們的功能是
不同的,因此全等也不是基于strcmp實現(xiàn)的。選項D錯誤。
所以,本題的答案為B。
3、D
[解析]對于if...elseif...else結(jié)構(gòu)的分支結(jié)構(gòu)程序可以使用
switch語句進(jìn)行優(yōu)化,從而可以避免冗長的代碼塊。本題中,else
相當(dāng)于switch里面的default部分,即條件沒有符合的都可以執(zhí)行
到default里面的語句。選項A錯誤,選項D正確。
邏輯判斷語句是不可能被改成循環(huán)語句或遞歸函數(shù)完成對應(yīng)功
能的,選項B選項C錯誤。
所以,本題的答案為D。
4、B
[解析]$b=($a—)相當(dāng)于$b=$a一,$a一會先把$a的值賦值給$b再
減1,得到$b=5。
所以,本題的答案為B。
5、E
[解析]$multi_array數(shù)組是一個多維數(shù)紐,值cat在orange數(shù)組
中,鍵名1,orange又在yellow,數(shù)組中,所以獲得cat值的方法
應(yīng)該為$multi_array「yellow']['orange'][1]。選項E正確。
所以,本題的答案為E。
6、C
[解析]抽象類可以是個空類,也就是不一定需要有抽象方法。但抽
象方法只能存在抽象類中。選項C錯誤。
所以,本題的答案為C。
7、ABD
[解析]在類中指向定義的屬性或方法只能使用“$this->”的方式
指向,選項A選項3選項D正確。
所以,本題的答案為ABD。
8、D
[解析]require和include引用文件和使用方法幾乎完全一樣,除
了處理失敗的方式不同之外,require在出錯時產(chǎn)生
E_COMPILE_ERROR級別的錯誤。換句話說,require將導(dǎo)致腳本口止
而include只產(chǎn)生警告(EJYARNING),腳本會繼續(xù)運(yùn)行。
include在引入不存在的文件時產(chǎn)生一個警告且腳本還會繼續(xù)
執(zhí)行,而require則會導(dǎo)致一個致命性錯誤且腳本停止執(zhí)行。
所以,本題的答案為D。
9、AB
[解析]正則表達(dá)式可以匹配查找替換字符串,也可以過濾字符串中
包含的特定字符串c選項A選項B正確。
正則表達(dá)式不具備頁面跳轉(zhuǎn)功能和轉(zhuǎn)換字符編碼的功能。選項
C選項D錯誤。
所以,本題的答案為AB。
10、CD
[解析]在上傳前,一定要用is_uploaded_file()函數(shù)確保文件名
正確傳輸,并把本地臨時文件通過move_upload_file()函數(shù)在上傳
文件前檢查文件,再移動文件到安全位置進(jìn)行長期保存,防止文件
丟失。而在操作前不需要特意地對文件名進(jìn)行對比和使用。
file_exists()函數(shù)判斷文件是否存在。其次,文件的上傳,PHP并
不是只信任臨時文件目錄下的文件。選項C選項D正確。
所以,本題的答案為CD。
11、B
[解析]字符串將被轉(zhuǎn)換成數(shù)字(如果無法發(fā)生轉(zhuǎn)換,那么就是0),
然后與整型數(shù)字相加。
所以,本題的答案為B。
12、D
[解析]本題中,in_array()函數(shù)可以判斷值是否在數(shù)組中,
array_slice()函數(shù)可以在數(shù)組中根據(jù)條件取出一段值,list()函數(shù)
可以一次操作所有的變量,無論是單個變量還是數(shù)組都可以。而
intvalO函數(shù)是獲取數(shù)據(jù)的整數(shù)值,不能用于對象中。選項D正
確。
所以,本題的答案為D。
13、C
[解析]對于選項A,可以通過context參數(shù)設(shè)置超時時間。選項A
錯誤。
對于選項B,file。函數(shù)可以安全用于讀取二進(jìn)制文件。選項B
錯誤。
對于選項C,表單中沒有文件上傳時,PHP的$_FILES變量值為
NULLo選項C正確c
對于選項D,fputs()用于寫入字符串到文件中時,只能用于上
傳不能用于下載ftp文件。選項D錯誤。
所以,本題的答案為C。
14、D
[解析]對于選項A,open_basedir可將用戶訪問文件的活動范圍限
制在指定的區(qū)域,通常是受家目錄的路徑,也可用符號來代表
當(dāng)前目錄。注意,用。pcn_basedir指定的限制實際上是前綴,而不
是目錄名。舉例來說,若aopen_basedir=/dir/userw,那么目錄
"/dir/user"和"/dir/userl"都是可以訪問的。所以如果要將訪
問限制在僅為指定的目錄,那么要用斜線結(jié)束路徑名。例如,設(shè)置
成uopen_basedir=/dir/user/。
對于選項B,register_globals的意思就是注冊為全局變量,
所以當(dāng)它的值被設(shè)為on的.候,傳遞過來的值會被直接注冊為全局
變量來使用。當(dāng)被設(shè)為。ff的時候,要到特定的數(shù)組里去獲得它。
但需要注意的是:
1)從PHP4.2.0版開始,配置文件中register_globals的默認(rèn)
值從on改為。ff,雖然可以設(shè)置它為。n,但是當(dāng)無法控制服務(wù)器的
時候,代碼的兼容性就成為一個大問題,所以,最好從現(xiàn)在就開始
使用off的風(fēng)格來編程。
2)當(dāng)register_globals打開以后,各種變量都會被注入代碼
中,例如,來自HTML表單的請求變量。再加上PHP在使用變量之前
是無須進(jìn)行初始化的,這就使得更容易寫出不安全的代碼。當(dāng)打開
時,人們使用變量時確實不知道變量是哪里來的。但是
register_globals的關(guān)閉改變了這種代碼內(nèi)部變量和客戶端發(fā)送的
變量混雜%一起的糟糕情況。
對于選項C,disable_functions限制程序使用一些可以直接執(zhí)
行系統(tǒng)命令的函數(shù),如system、exec、passthru、shell_exec^
proc_open等。所以如果想保證服務(wù)器的安全,那么要將這個函數(shù)
加到disable_functions里或者將安全模式打開。
對于選項D,file_uploads是決定PHP文件上傳時記錄
file_uploads指令是否啟用的函數(shù),默認(rèn)值為on。該函數(shù)和安全最
不相關(guān),選項D正確。
所以,本題的答案為D。
15、AD
[解析]對于選項A,Windows/Novell版本通過SMTP可以直接用
MTA發(fā)送郵件,而UNIX的PHP需要用sendmail程序通過MTA發(fā)送
郵件。選項A正確,選項E錯誤。
對于選項B,在Windows/Novell上使用mail()時,需要配置
sendmail_from才能使用,并不是通過sendmail_from配置決定郎
件中的From信息。而UNIX發(fā)郵件是交給sendmail程序來處理的。
選項D正確,選項3錯誤。
對于選項C,條件允許的情況下,Windows/Novell上的PHP可
以進(jìn)行配置,通過“sendmail”封裝器模擬sendmail發(fā)信,可以發(fā)
送多個收件人的電子郵件。選項C錯誤。
所以,本題的答案為AD。
二、填空題
16、改變php.ini的設(shè)置。
[解析]在UNIX、Linux系統(tǒng)中,PHP主要使用sendmail程序來處
理郵件。而在Windows中除非已經(jīng)有sendmail包裝器,否則只能使
用服務(wù)器的SMTP配置進(jìn)行,而SMTP是可以在php.ini文件中進(jìn)行
配置開啟的。
17、STDIO、streamo
[解析]PHP只支持兩種流傳輸,分別為本地操作的STD1O和遠(yuǎn)程操
作的stream,并且可以根據(jù)創(chuàng)建的流的類型來自動選擇合適的傳輸
方式。
18、單例模式。
[解析]單例模式是一種用于確保程序中只有一個類實例化的程序。
19、定義的類禁止繼承;定義的成員禁止繼承;定義的方法禁止重
寫。
20、spl_autoload_register()函數(shù)。
[解析]spl_autoload_registerl()提供了一種更加靈活的方式來實
現(xiàn)類的自動加載(同一個應(yīng)用文件中,可支持任意數(shù)量的加載器,比
如第三方庫中的類文件)。而_autoload()函數(shù)在PHP7.2版本中已經(jīng)
被廢除。
三、簡答題
21、如果輪到第四個海盜分配:100,0;
輪到第三個:99,0,1;
輪到第二個:99,0,1,0;
輪到第一個:98,0,1,0,I,這就是第一個海盜的最佳方
案。
可以從后往前推測每次最優(yōu)的方案,從而確定第一種方案就是
最好的。
1)當(dāng)只剩兩個海盜分金時,因為只要有5096或以上的支持率則
方案通過,所以第四個海盜和第五個海盜分金時,無論第五個海盜
是否支持自己,第四個海盜都可以給自己分配100枚金幣。
2)當(dāng)只剩三個海盜分金時,第三個海盜分金的方案,除了自己
的支持外,還需要一個海盜的支持,否則方案不通過。所以,如果
第三個海盜想要拿最多金幣,最好的方案就是讓第五個海盜得到金
幣來支持他,因為第四個海盜可以通過否定第三個海盜的方案實現(xiàn)
自己的利益最大化c所以,第三個海盜得99枚金幣,而第五個海盜
得1枚金幣的方案是最好的方案。
3)當(dāng)只剩下四個海盜分金時,第二個海盜的方案,只需要一個
海盜支持他即可通過方案。由2)的分析知道,要第四個海盜支持自
己是最有利的,所以可以得到最好的方案是第二個海盜得99枚金
幣,第四個海盜得1枚金幣的方案。
最初的情況,5個海盜分金,第一個海盜必須要其余2名海盜
支持自己,他才有可能得到最多的金幣。通過3)的分析知道,分配
給第三個海盜和第五個海盜1枚金幣,讓他們支持自己是最優(yōu)的方
案。22、定義一?個函數(shù)的步驟為以下幾點(diǎn),函數(shù)名的大小寫是
不區(qū)分的。
1)通過function關(guān)鍵字聲明函數(shù),格式為function函數(shù)名
OOo
2)函數(shù)命名遵循變量命名的規(guī)則,以字母或下劃線開頭,且不
能以數(shù)字開頭。
3)函數(shù)名不可以使用系統(tǒng)函數(shù)的名稱,且不能使用已經(jīng)聲明過
的函數(shù)名。
PHP中函數(shù)名、方法名、類名不區(qū)分大小寫,但PHP的變量名
是區(qū)分大小寫的。
實現(xiàn)代碼為
<?php
functionabc(){
echoT;
ABC();
?>
程序運(yùn)行結(jié)果為lo
從上面運(yùn)行結(jié)果可以看出,函數(shù)名是abc小寫,但是可以通過
ABC大寫去調(diào)用該函數(shù)。23、MVC是一種設(shè)計模式,由模型
層、邏輯層和視圖層組成。用戶通過入口訪問到控制器,控制器從
模型層獲取數(shù)據(jù)然后分配視圖,并加載數(shù)據(jù)到視圖層。用戶通過視
圖層操作向邏輯層反饋,邏輯層處理反饋,如果涉及數(shù)據(jù)庫操作,
那么將會在模型層中對數(shù)據(jù)庫增、刪、改、查。最后邏輯層將執(zhí)行
結(jié)果返回到視圖層C
目前比較流行的MVC框架有Laravel、ThinkPHP、Yii、
codeigniter.CakePHP等。24、觀察者模式(也被稱為發(fā)布/
訂閱模式)提供了避免組件之間緊密耦合的另一種方法,它將觀察者
和被觀察的對象分離開。在該模式中,一個對象通過添加一個方法
(該方法允許另一個對象,即觀察者注冊自己)使本身變得可觀察。
當(dāng)可觀察的對象更改時,它會將消息發(fā)送到已注冊的觀察者。這些
觀察者使用該信息執(zhí)行的操作與可觀察的對象無關(guān),結(jié)果是對象可
以相互對話,而不必了解原因。
例如,用戶界面可以作為一個觀察者,業(yè)務(wù)數(shù)據(jù)是被觀察者,
用戶界面觀察業(yè)務(wù)數(shù)據(jù)的變化,發(fā)現(xiàn)數(shù)據(jù)變化后,就顯示在界面
上。面向?qū)ο笤O(shè)計的一個原則是,系統(tǒng)中的每個類將重點(diǎn)放在某一
個功能上,而不是其他方面。一個對象只做一件事情,并且將它做
好。觀察者模式在模塊之間劃定了清晰的界限,提高了應(yīng)用程序的
可維護(hù)性和重用性C
實現(xiàn)的代碼如下:
<?php
〃觀察者接口
interfaceInterfaceobserver
functiononListen($sender,$args);
functiongetObserverName();
}
〃可被觀察者接口
interfaceInterfaceObservable
[
functionaddObserver($observer);
functionremoveObserver($observer_name);
〃觀察者抽象類
abstractclassObserverimplementsInterfaceobserver
protected$observer_name;
functiongetObserverName()
(
return$this->observername;
}
functiononListen($sender,$args)
()
)
〃可被觀察類
abstractclassObservableimplements
TnterfaceObservable
protected$observers=array();
publicfunctionaddObserver($observer)
(
if($observerinstanceofInterfaceobserver)
{
$this->observers[]=$observer;
}
publicfunctionremoveObserver($observer_ncime)
foreach($this->observersas$index=>$observer)
(
if($observer->getObserverName()===$observer_name)
(
array_splice($this->observers,$index,1);
return;
)
)
}
)
〃模擬一個可以被觀察的類
classAextendsObservable
publicfunctionaddListener($listener)
(
foreach($this->observersas$observer)
{
$observer->or)Listen($this,$listener);
}
)
〃模擬一個觀察者類
classBextendsObserver
(
protected$observer_name='B*;
publicfunctiononListen($sender,$args)
{
var_dump($sender);
echo*'<br>";
var_dump($args);
echo"<br>v;
)
}
〃模擬另外一個觀察者類
classCextendsObserver
(
protected$observer_name=,C;
publicfunctiononListen($sender,$args)
{
var_dump($sender);
echo"<br>";
vardump($args);
echo,,<br>M;
)
)
$a=ncwA();
〃注入觀察者
$a->addObserver(newB());
$a->addObserver(newCO);
〃可以看到觀察到的信息
$a->addListener(*D');
〃移除觀察者
$a->removeObserver(1B*);
?>25、Memcache的工作就是在專門的機(jī)器內(nèi)存里維護(hù)一
張巨大的hash表,存儲經(jīng)常被讀寫的一些文件與數(shù)據(jù),從而極大地
提高網(wǎng)站的運(yùn)行效率。
Memcache的程序運(yùn)行在一個或多個服務(wù)器中,Memcache把全部
的數(shù)據(jù)保存在內(nèi)存中,通過hash表的方式,每條數(shù)據(jù)由key/value
的形式構(gòu)成,隨時接受客戶端的請求,然后返回結(jié)果。
客戶端與Memcache建立連接后,存儲對象主要是通過唯一的
key存儲value到內(nèi)存中,取數(shù)據(jù)時通過這個key從內(nèi)存中獲取對
應(yīng)的valueo因為Memcache的數(shù)據(jù)是存儲在內(nèi)存中而不是保存在
cache文件中,所以Memcache訪問比較快。但是因為這些數(shù)據(jù)不是
永久化存儲,所以不建議存儲重要數(shù)據(jù)在Momcache中,因為重啟服
務(wù)器后這些數(shù)據(jù)就會消失。
四、編程題
26、拿到題目,首先需要做的就是分析題目所要達(dá)到的目標(biāo)以及其
中的限定條件。從題目的描述中可以發(fā)現(xiàn),本題的目標(biāo)就是在一個
有且僅有一個元素值重復(fù)的數(shù)組中找出這個唯一的重復(fù)元素,而限
定條件就是每個數(shù)組元素只能訪問一次,并且不許使用輔助存儲空
間。
示例代碼如下:
<?php
/*
**函數(shù)功能:在數(shù)組中找唯一重復(fù)的元素
**輸入?yún)?shù):array數(shù)組首地址,len數(shù)組長度
**返回值:重復(fù)元素的值,無重復(fù)元素則返回T
*/
functionfindDup($array)
$len=count($array);
if(!$array||$len<l)
return-1;
$newArr=array();
for($i=0;$i<$1en-1;$i++)
$newArr[$i]=0;
for($i=0;$i<$len;$i++)
{
if($newArr[$£rray[$i]-l]==0)
{
$newArr[$arr£y[$i]-l]=l;
}else
return$array[$i];
}
}
return-1;
}
$array=[1,3,4,2,5,3];
printf(f,%dH,findDup($array));
?>
程序的運(yùn)行結(jié)果為
327、通過對平方數(shù)進(jìn)行分析發(fā)現(xiàn)有如下規(guī)律:
(n+1)-2=r/2+2n+l=(nT)-2+(2*(nT)+l)+2*n+l=…
=1+(2*1+1)+(2*2+1)+???+(2*n+l)o
通過上式可以發(fā)現(xiàn),這些項構(gòu)成了一個公差為2的等差數(shù)列的
和。由此可以得到如下的解決方法:對n依次減1,3,5,7,???,
如果相減后的值大于0,則繼續(xù)減下一項;如果相減的后的值等于
0,則說明n是某個數(shù)的平方;如果相減后的值小于0,則說明n不
是某個數(shù)的平方。根據(jù)這個思路,代碼實現(xiàn)如下:
functionisPower($n)
(
if($n<=0)
(
printf(5d不是自然數(shù)\n",n);
returnfalse;
}
$minus=l;
while($n>0)
(
$n=$n-$minus;
//n是某個數(shù)的平方
ir($n——0)
returntrue;
//n不是某個數(shù)的平方
elseif($n<0)
returnfalse;
〃每次減數(shù)都加2
else
$minus+=2;
)
returnfalse;
}28、實現(xiàn)代碼如下:
<?php
ClassStu{
private$name;
private$sex;
publicfunctionsetName($name){
$this->name=$name;
}
publicfunctionsetSex($sex){
$this->sex=$sex;
}
)
?>29、主要思路為,通過調(diào)整結(jié)點(diǎn)指針域的指向來直接
調(diào)換相鄰的兩個結(jié)點(diǎn)。如果單鏈表恰好有偶數(shù)個結(jié)點(diǎn),那么只需要
將奇偶結(jié)點(diǎn)對調(diào),如果鏈表有奇數(shù)個結(jié)點(diǎn),那么除最后一結(jié)點(diǎn)外的
其他結(jié)點(diǎn)進(jìn)行奇偶對調(diào)。為了便于理解,下圖給出了其中第一對結(jié)
點(diǎn)對調(diào)的方法。
在上圖中,當(dāng)前遍歷到結(jié)點(diǎn)cur,通過①?⑥6個步驟用虛線的
指針來代替實線的指針實現(xiàn)相鄰結(jié)點(diǎn)的逆序。其中,①?④實現(xiàn)了
前兩個結(jié)點(diǎn)的逆序操作,⑤和⑥兩個步驟向后移動指針,接著可以
采用同樣的方式實現(xiàn)后面兩個相鄰結(jié)點(diǎn)的逆序操作。
實現(xiàn)代碼如下:
<?php
header("content-type:text/html;charset=utf-8n);
〃鏈表結(jié)點(diǎn)
classnode{
public$data;
〃存儲數(shù)據(jù)
public$next;
〃下一結(jié)點(diǎn)
publicfunction_construct($data)[
$this->data=$data;
$this->next=NULL;
!
)
〃單鏈表
classlinkList{
private$header;
〃鏈表頭結(jié)點(diǎn)
〃構(gòu)造方法
publicfunction_construct($data=NULL){
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年中國汽車制造業(yè)行業(yè)市場規(guī)模及投資前景預(yù)測分析報告
- 交通流監(jiān)控工程師面試題及答案
- 物流規(guī)劃師面試要點(diǎn)及答案解析
- 新加坡數(shù)學(xué)中學(xué)考試題目及答案
- 金融學(xué)試卷及答案
- 資產(chǎn)證券化合作合同
- 直腸癌轉(zhuǎn)移肺癌診療指南
- 福州中考語文全部試卷及答案
- 2025年科室醫(yī)院感染控制年度工作總結(jié)范文
- 物流行業(yè)HRM面試題及答案
- 代建項目管理流程與責(zé)任分工
- cnc刀具刀具管理辦法
- DB14∕T 3069-2024 放射治療模擬定位技術(shù)規(guī)范
- 如何培養(yǎng)孩子深度專注
- 2024年餐飲店長年度工作總結(jié)
- 護(hù)理8S管理匯報
- 產(chǎn)前篩查標(biāo)本采集與管理制度
- 2025勞動合同書(上海市人力資源和社會保障局監(jiān)制)
- 門診護(hù)士長工作總結(jié)匯報
- 藥膳餐廳創(chuàng)新創(chuàng)業(yè)計劃書
- erp沙盤模擬實訓(xùn)報告采購總監(jiān)
評論
0/150
提交評論