![某知名安全軟件服務(wù)商PHP工程師面試筆試真題7_第1頁](http://file4.renrendoc.com/view4/M00/3C/1B/wKhkGGZb9DiARdE1AAJnslmGeS4228.jpg)
![某知名安全軟件服務(wù)商PHP工程師面試筆試真題7_第2頁](http://file4.renrendoc.com/view4/M00/3C/1B/wKhkGGZb9DiARdE1AAJnslmGeS42282.jpg)
![某知名安全軟件服務(wù)商PHP工程師面試筆試真題7_第3頁](http://file4.renrendoc.com/view4/M00/3C/1B/wKhkGGZb9DiARdE1AAJnslmGeS42283.jpg)
![某知名安全軟件服務(wù)商PHP工程師面試筆試真題7_第4頁](http://file4.renrendoc.com/view4/M00/3C/1B/wKhkGGZb9DiARdE1AAJnslmGeS42284.jpg)
![某知名安全軟件服務(wù)商PHP工程師面試筆試真題7_第5頁](http://file4.renrendoc.com/view4/M00/3C/1B/wKhkGGZb9DiARdE1AAJnslmGeS42285.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
某知名安全軟件服務(wù)商PHP工程師面試筆試真題7一、選擇題1.
以下程序的輸出結(jié)果是______
<?php
$x='apple';
echosubstr_replace($x,'(江南博哥)x',1,2);
?>A.xB.axleC.axxleD.applexE.Xapple正確答案:B[解析]substr_replace()函數(shù)用來把字符串的一部分替換為另一部分,語法為substr_replace(檢查的字符串,需要插入的字符串,何處開始替換(可選),替換多少個字符(可選))。所以substr_replace($x,'x',1,2)的意思是,從索引位置等于1的$x字符串位置開始,把$x中的2個字符串替換為一個字符串x,可以得到axle。選項(xiàng)B正確。
所以,本題的答案為B。
2.
以下代碼的執(zhí)行結(jié)果為______
<?php
$num="24thiz"+6;
echo$num;
?>A.30B.24thiz6C.6D.30thiz正確答案:A[解析]$num被賦值為字符串“24thiz”與6相加,字符串會被轉(zhuǎn)換成整型,具體的轉(zhuǎn)換有以下規(guī)則:①如果字符串以數(shù)字開頭且和字母(或符號)搭配,那么會舍棄字母(或符號)部分直接轉(zhuǎn)換為開頭的數(shù)字,所以“24thiz”轉(zhuǎn)換得到24;②如果是字符串開頭加數(shù)字,那么字符串轉(zhuǎn)換成整型得到的是0,例如,“abc110”得到的是0;③如果是數(shù)字0開頭或以數(shù)字0開頭和字母(或符號)搭配的字符串,那么它們被轉(zhuǎn)換成整型時開頭的數(shù)字0是被舍棄的,例如,字符串“05abc”和“05”轉(zhuǎn)換成數(shù)字時都是得到5。
對于本題而言,“24thiz”被轉(zhuǎn)換成整型得到24,最后$num=24+6得到結(jié)果30。選項(xiàng)A正確。
所以,本題的答案為A。
3.
以下有關(guān)PHP面向?qū)ο蟮恼f法中,不正確的是______A.要實(shí)現(xiàn)一個接口,使用implements操作符,類中必須實(shí)現(xiàn)接口中定義的所有方法,否則會報(bào)一個致命錯誤B.類名可以是任何非PHP保留字的合法標(biāo)簽,漢字也可以作為PHP的類名C.如果PHP的子類中定義了構(gòu)造函數(shù),則創(chuàng)建子類的對象時,會隱式地調(diào)用其父類的構(gòu)造函數(shù)D.序列化一個對象將會保存對象的所有變量,但是不會保存對象的方法,只會保存類的名字正確答案:C[解析]子類定義的構(gòu)造函數(shù)會覆蓋父類的構(gòu)造函數(shù),如果要子類的構(gòu)造函數(shù)執(zhí)行,同時也執(zhí)行父類的構(gòu)造函數(shù),那么必須顯式地使用parent::___construct();去調(diào)用。選項(xiàng)C錯誤。
所以,本題的答案為C。
4.
運(yùn)算符“%”的作用是______A.無效B.乘方C.取余D.位異或正確答案:C[解析]%運(yùn)算符在PHP中表示求余運(yùn)算符,用于求解某個數(shù)是否能夠被整除。選項(xiàng)C正確。
所以,本題的答案為C。
5.
要修改每個元素的值,遍歷$myarray數(shù)組最合適的方法是______
$myarray=array("MyString","AnotherString","hi,Mom!");A.用for循環(huán)B.用foreach循環(huán)C.用while循環(huán)D.用do...while循環(huán)正確答案:B[解析]雖然for循環(huán)可以遍歷數(shù)組,但是效率沒有使用foreach函數(shù)高,所以選擇foreach遍歷$myarray數(shù)組最合適,選項(xiàng)B正確。
所以,本題的答案為B。
6.
在循環(huán)操作非順序索引的數(shù)組時,可以用來讀取數(shù)組當(dāng)前元素的索引值的函數(shù)是______A.key()B.next()C.prev()D.current()正確答案:A[解析]key()函數(shù)的作用是從當(dāng)前內(nèi)部指針的位置返回元素鍵名,next()函數(shù)將內(nèi)部指針指向數(shù)組中的下一個元素,并輸出。prev()函數(shù)將內(nèi)部指針指向數(shù)組中的上一個元素,并輸出。current()函數(shù)返回?cái)?shù)組中的當(dāng)前元素的值。所以,可以通過key()函數(shù)讀取數(shù)組當(dāng)前元素的索引值,選項(xiàng)A正確。
所以,本題的答案為A。
7.
在PHP中,總是包含所有總客戶端發(fā)出的Cookies數(shù)據(jù)的變量數(shù)組是______A.$_COOKIEB.$_COOKIESC.$_GETCookieD.$_GETCookieS正確答案:A[解析]獲取客戶端發(fā)出的Cookies數(shù)據(jù)是通過$_COOKIE方法進(jìn)行獲取的。
所以,本題的答案為A。
8.
在忽略瀏覽器bug的正常情況下,如何用一個與先前設(shè)置的域名(domain)不同的新域名來訪問某個Cookie?______A.通過HTTP_REMOTE_Cookie訪問B.不可能C.在調(diào)用setcookie()時設(shè)置一個不同的域名D.向?yàn)g覽器發(fā)送額外的請求E.使用JavaScript,把Cookie包含在URL中發(fā)送正確答案:B[解析]domain表示的是Cookie所在的域,默認(rèn)情況下為請求的地址,例如,網(wǎng)址/index.php/index/hello,它的domain默認(rèn)為。對于Cookie的跨域名訪問,只支持同域名下的多級域名訪問,如域A為,域B為,那么域名A和域名B共同訪問域名A或域名B生成的Cookie,它們的domain都要設(shè)置為“.”才行。而如果要在域A中生成一個域名B不能訪問的Cookie,那么只需要將Cookie的domain設(shè)置為“”。
如果先前設(shè)置了一個域名domain,那么使用新域名訪問domain域名的Cookie時,會出現(xiàn)新域名不在domain的范圍內(nèi)的情況,導(dǎo)致Cookie不能被訪問到,所以這個domain的Cookie是不可能被新域名訪問到的。選項(xiàng)B正確。
所以,本題的答案為B。
9.
借助繼承可以創(chuàng)建其他類的派生類,那么在PHP中,子類最多可以繼承的父類的個數(shù)是______A.一個B.兩個C.取決于系統(tǒng)資源D.任意個數(shù)正確答案:A[解析]因?yàn)镻HP不支持一個類繼承多個父類,所以子類最多只能繼承一個父類。選項(xiàng)A正確。
所以,本題的答案為A。
10.
如果不在php.ini中禁用register_globals,那么為了確保程序代碼的安全,以下說法正確有效的是______(雙選)A.使用難以猜測的變量名以避免用戶注入B.過濾全部來自于程序外部的變量C.在顯示的頁面內(nèi)容中如直接使用GET/POST方式取得的變量,將可能引起注入漏洞D.在顯示的頁面內(nèi)容中通過base64encode()對URL進(jìn)行編碼以轉(zhuǎn)義特殊字符正確答案:BC[解析]php.ini配置中的register_globals被稱為注冊全局變量,默認(rèn)值為off,如果為on開啟,那么取傳輸過來的數(shù)據(jù)是不用到特定的數(shù)組里面取,可以直接通過變量獲取值。
對于選項(xiàng)A,對于難以猜測的變量名,也可以通過全局的變量打印出來查看到對應(yīng)的變量名,從而進(jìn)行注入。選項(xiàng)A錯誤。
對于選項(xiàng)B,通過過濾全部程序外的變量可以避免用戶注入。選項(xiàng)B正確。
對于選項(xiàng)C,通過GET/POST傳輸數(shù)據(jù)時,用戶可以對HTTP進(jìn)行抓包,可能引起注入漏洞。選項(xiàng)C正確。
對于選項(xiàng)D,在顯示的頁面中即使通過base64_encode對編碼進(jìn)行轉(zhuǎn)義,但是用戶還是可以通過base64_decode進(jìn)行解密,程序也并不安全有效。選項(xiàng)D錯誤。
所以,本題的答案為BC。
11.
要防止跨站攻擊,以下需要做的是______(三選)A.永遠(yuǎn)不要使用include和require引入靠用戶輸入決定路徑的文件(比如:include"$username/script.txt";)B.除非網(wǎng)站需要,否則關(guān)閉allow_url_fopenC.避免使用如curl這類用來打開遠(yuǎn)程連接的擴(kuò)展庫D.使用類似strip_tags()一類的函數(shù)過濾一個用戶輸入給另一個用戶看的內(nèi)容E.以上都對正確答案:ABD[解析]如果用戶通過篡改URL來修改$username變量,并且allow_url_fopen是打開的,那么PHP將會下載某臺非信任的遠(yuǎn)程服務(wù)器上的script.txt文件,并把它當(dāng)作本地PHP腳本來執(zhí)行。所以不要使用include和require的方式引用文件,也盡量關(guān)閉allow_url_fopen。選項(xiàng)A選項(xiàng)B正確。
對于選項(xiàng)C,如果需要在PHP中打開遠(yuǎn)程連接受信任的擴(kuò)展庫,那么使用curl方法是可以的。選項(xiàng)C錯誤。
對于選項(xiàng)D,一個用戶輸入的內(nèi)容給另一個用戶看時是需要使用strip_tags()函數(shù)過濾HTML標(biāo)簽的,這能有效防止造成跨站攻擊或者瀏覽器bug。選項(xiàng)D正確。
所以,本題的答案為ABD。
12.
某些時候需要在PHP腳本中使用第三方功能,來實(shí)現(xiàn)一些PHP不能完成的任務(wù)(比如調(diào)用壓縮軟件壓縮某種PHP不支持其格式的文件)。當(dāng)在PHP腳本中執(zhí)行系統(tǒng)命令時,以下選項(xiàng)中,能確保沒有命令注入的是______(雙選)A.總是要給在exec()中執(zhí)行的命令加’B.總是使用shell_exec()函數(shù),它能夠在執(zhí)行前對命令進(jìn)行安全檢查C.使用escapeshellcmd()函數(shù)轉(zhuǎn)義命令中的特殊字符D.在執(zhí)行命令前,先用ini_set()打開safemodeE.用escapeshellarg()函數(shù)在執(zhí)行前轉(zhuǎn)義命令參數(shù)正確答案:CE[解析]在PHP中執(zhí)行帶參數(shù)的系統(tǒng)命令時,是沒有辦法保證任何一個函數(shù)是絕對安全的,可以使用escapeshellcmd()函數(shù)和escapeshellarg()函數(shù)轉(zhuǎn)義命令中的特殊字符或命令參數(shù),再傳遞給shell,這樣可以保證字符和命令參數(shù)的安全。選項(xiàng)C選項(xiàng)E正確。
所以,本題的答案為CE。
13.
在PHP中,如果派生類與父類有相同名字的函數(shù),那么派生類的函數(shù)會替換父類的函數(shù),有如下程序代碼:
<?php
classA{
functiondisName(){
echo"Picachu";
}
}
classBextendsA{
var$tmp=";
functiondisName(){
echo"Doraemon";
}
}
$cartoon=newB;
$cartoon->disName();
?>
上述代碼的運(yùn)行結(jié)果為______A.tmpB.PicachuC.disNameD.DoraemonE.無輸出正確答案:D[解析]當(dāng)派生類繼承父類時,通過實(shí)例化一個派生類的對象來訪問對象的方法的時候,如果派生類不存在父類中的方法,那么執(zhí)行父類中的方法。如果派生類和父類存在相同名字的方法,那么派生類的方法會覆蓋父類方法,執(zhí)行派生類的方法。所以,本題中可以執(zhí)行派生類的disName()方法。選項(xiàng)D正確。
所以,本題的答案為D。
14.
下列關(guān)于HTTP協(xié)議的說法中,錯誤的是______A.如果本地開啟了Cookie,那么每打開一個網(wǎng)址,HTTP請求就會把相應(yīng)的Cookie傳給Web服務(wù)器B.絕大多數(shù)的Web開發(fā)離不開Cookie,如果禁用Cookie導(dǎo)致Session失效,那么可以通過URL來傳遞SessionIDC.HTTP響應(yīng)的狀態(tài)碼為301意思是暫時地把內(nèi)容轉(zhuǎn)移到一個新的URL,但是老的URL還沒有廢除D.HTTP是一個基于請求與響應(yīng)模式的、無狀態(tài)的、應(yīng)用層的協(xié)議,絕大多數(shù)的Web開發(fā)都是基于HTTP協(xié)議正確答案:C[解析]301表示的是頁面永久性移走(301重定向),意思是該網(wǎng)頁被永久性地轉(zhuǎn)移到另一個地址。所以,301不是暫時地把內(nèi)容轉(zhuǎn)移,選項(xiàng)C錯誤。
所以,本題的答案為C。
15.
以下錯誤類型中,無法被自定義的錯誤處理器捕捉到的有______A.E_WARNINGB.E_ERRORC.E_USER_ERRORD.E_PARSEE.E_NOTICE正確答案:BD[解析]用戶自定義的錯誤管理器是在腳本里,出現(xiàn)錯誤時無法解析腳本,錯誤管理器無法執(zhí)行,像E_ERROR會顯示錯誤并且中斷程序執(zhí)行。因?yàn)镋_PARSE是語法錯誤,也會中斷程序執(zhí)行,所以無法執(zhí)行到用戶自定義的錯誤處理器捕捉返回錯誤。選項(xiàng)B選項(xiàng)D正確。
而E_WARNING和E_NOTICE會顯示警告和提示并繼續(xù)執(zhí)行,E_USER_ERROR表示用戶產(chǎn)生的錯誤信息,當(dāng)執(zhí)行到錯誤信息會彈出錯誤并且繼續(xù)執(zhí)行到錯誤處理器并被捕捉。選項(xiàng)A選項(xiàng)C選項(xiàng)E錯誤。
所以,本題的答案為BD。
二、填空題1.
error_reporting(0);echo$value;echo"helloPHP";,以上代碼運(yùn)行后會輸出______。正確答案:“helloPHP”。[解析]error_reporting()的作用是設(shè)置PHP的報(bào)錯級別并返回當(dāng)前級別。函數(shù)原型為error_reporting(report_level),如果參數(shù)report_level未指定,那么當(dāng)前報(bào)錯級別將被返回。參數(shù)0可以關(guān)閉錯誤報(bào)告,E_ALL可以返回所有的錯誤和警告(不包括E_STRICT)(E_STRICTwillbepartofE_ALLasofPHP6.0)。
因?yàn)閑rror_reporting(0)可以關(guān)閉錯誤提示,所以即使$value未定義也不會有錯誤信息提示,頁面輸出結(jié)果“helloPHP”。
2.
Nginx主要使用的網(wǎng)絡(luò)協(xié)議是______、______、______、______。正確答案:TCP/IP、HTTP、HTTPS、Webstocket等網(wǎng)絡(luò)協(xié)議。
3.
PHP中調(diào)用某一個對象的方法或?qū)傩允褂玫倪\(yùn)算符是______。正確答案:->。[解析]在PHP中調(diào)用某一個對象的方法或?qū)傩灾饕鞘褂谩?>”運(yùn)算符。
4.
已知$g=14,則PHP表達(dá)式$h=$g+=10,運(yùn)算后的結(jié)果是______。正確答案:$h=$g=24。[解析]$h=$g+=10表示的是$h=$g=$g+10,而$g的值是14,將$g代入式求得$g=24,最后結(jié)果為$h=$g=24。
5.
執(zhí)行程序段<?phpecho8%(-2);?>將輸出______。正確答案:0。[解析]因?yàn)?能夠被-2整除,所以,8對-2求余后輸出得到0。
三、簡答題1.
如何摧毀會話?正確答案:如果會話使用的是Session,那么可以通過unset($_SESSION['名稱'])或session_destroy()兩種方法對Session會話進(jìn)行銷毀。
如果會話使用的是Cookie,那么刪除Cookie的方法為使被銷毀的Cookie變量的日期變?yōu)檫^去時間點(diǎn)就可以讓它過期銷毀,例如setcookie('user',",time()-3600),即讓這個變量過期一小時即可實(shí)現(xiàn)刪除。刪除Cookie還可以通過setcookie('user',")或setcookie('user',NULL)來實(shí)現(xiàn)。
2.
PHP有哪幾種常用的設(shè)計(jì)模式?請簡單說明。正確答案:PHP有多種設(shè)計(jì)模式,這里簡單介紹五種常用的設(shè)計(jì)模式。
(1)工廠模式
工廠模式專門負(fù)責(zé)實(shí)例化有大量公共接口的類。工廠模式可以動態(tài)地決定將哪一個類實(shí)例化,而不必事先知道每次要實(shí)例化哪一個類。客戶類和工廠類是分開的。消費(fèi)者無論什么時候需要某種產(chǎn)品,需要做的只是向工廠提出請求即可。消費(fèi)者無須修改就可以接納新產(chǎn)品。這種方法當(dāng)然也存在缺點(diǎn),就是當(dāng)產(chǎn)品修改時,工廠類也要做相應(yīng)地修改。
(2)單例模式
這種模式涉及一個單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建。這個類提供了一種訪問其唯一對象的方式,可以直接訪問,不需要實(shí)例化該類的對象。
(3)觀察者模式
觀察者模式提供了避免組件之間耦合的另一種方法,該模式非常簡單,一個對象通過添加方法(該方法允許另一個對象,即觀察者自己)使本身變得可觀察。當(dāng)可觀察的對象更改時,它會將消息發(fā)送到己注冊的觀察者。
(4)命令鏈模式
以松散耦合主題為基礎(chǔ),發(fā)送消息、命令和請求,或通過一組處理程序發(fā)送任意內(nèi)容。每個處理程序都會自行判斷自己能否處理請求,如果可以,那么該請求被處理,進(jìn)程停止。
(5)策略模式
在策略模式中,創(chuàng)建表示各種策略的對象和一個行為隨著策略對象的改變而改變的context對象,并且一個類的行為或其算法可以在運(yùn)行時更改。
3.
Redis的原理是什么?它有什么優(yōu)勢?正確答案:Redis是一個訪問速度非??斓母咝阅躪ey-value存儲的非關(guān)系型數(shù)據(jù)庫,它的出現(xiàn)很大程度上彌補(bǔ)了Memcache的key/value存儲的不足。首先,它支持5種value數(shù)據(jù)類型存儲,包括String、list、set、zset和hash。其次,它主要把數(shù)據(jù)存儲在內(nèi)存中,所以保證了訪問速度的快速,并且Redis可以周期性地把更新的數(shù)據(jù)寫入磁盤或者追加到記錄文件中,從而實(shí)現(xiàn)數(shù)據(jù)永久性存儲和主從同步。
Redis具有以下幾點(diǎn)優(yōu)勢:
1)它支持的數(shù)據(jù)結(jié)構(gòu)多,例如String、list、set、zset、hash數(shù)據(jù)結(jié)構(gòu)。
2)支持事務(wù)操作,具有原子性,即對數(shù)據(jù)的更改要么都執(zhí)行,要么都不執(zhí)行。
3)具備豐富的特性,用于消息、緩存,對key設(shè)置過期時間,過期后將自動刪除等。
4)訪問速度快,因?yàn)閿?shù)據(jù)存在內(nèi)存中,具有HashMap的優(yōu)勢,所以查找和操作的時間復(fù)雜度都是O(1)。
4.
優(yōu)化MySQL數(shù)據(jù)庫的方法有哪些?正確答案:優(yōu)化MySQL數(shù)據(jù)庫的方法如下:
1)選取最適用的字段屬性,盡可能減少定義字段長度,盡量把字段設(shè)置為NOTNULL,例如‘省份,性別’,最好設(shè)置為ENUM。
2)使用連接(JOIN)來代替子查詢。
①刪除沒有任何訂單的客戶:DELETEFROMcustomerWHEREcustomeridNOTin(SELECTcustomeridFROMorderinfo)。
②提取所有沒有訂單的客戶:SELECT*FROMcustomerWHEREcustomeridNOTin(SELECTcustomeridFROMorderinfo)。
③提高②的速度優(yōu)化:SELECT*FROMcustomercLEFTJOINorderidinfoiONc.customerid=i.customeridWHEREi.customeridISNULL。
3)使用聯(lián)合(UNION)查詢來代替手動創(chuàng)建的臨時表。
SELECTnameFROM'nametest'UNIONSELECTusemameFROM'nametest2'
4)事務(wù)處理。保證數(shù)據(jù)完整性,例如添加和修改,兩者成立則都執(zhí)行,一者失敗則都失敗。
mysql_query("BEGIN");
mysql_query("INSERTINTOcustomerinfo(name)VALUES('$name1')";
mysql_query("SELECT*FROM'orderinfo'wherecustomerid=".$id);
mysql_query("COMMIT");
5)鎖定表,優(yōu)化事務(wù)處理。
①用一個SELECT語句取出初始數(shù)據(jù),通過一些計(jì)算,用UPDATE語句將新值更新到表中。
②包含有WRITE關(guān)鍵字的LOCKTABLE語句可以保證在UNLOCKTABLES命令被執(zhí)行之前,不會有其他的訪問來對inventory進(jìn)行插入、更新或者刪除的操作。
mysql_query("LOCKTABLEcustomerinfoREAD,orderinfoWRITE");
mysql_query("SELECTcustomeridFROM'customerinfo'whereid=".$id);
mysql_query("UPDATE'orderinfo'SETordertitle='$title'wherecustomerid=".$id);
mysql_query("UNLOCKTABLES");
6)使用外鍵,優(yōu)化鎖定表。把customerinfo里的customerid映射到orderinfo里的customerid,任何一條沒有合法的customerid的記錄不會寫到orderinfo里。
CREATETABLEcustomerinfo
(
customeridINTNOTNULL,
PRIMARYKEY(customerid)
)TYPE=INNODB;
CREATETABLEorderinfo
(
orderidINTNOTNULL,
customeridINTNOTNULL,
PRIMARYKEY(customerid,orderid),
FOREIGNKEY(customerid)REFERENCEScustomerinfo(customerid)ONDELETECASCADE
)TYPE=INNODB;
注意:'ONDELETECASCADE',該參數(shù)保證當(dāng)customerinfo表中的一條記錄被刪除時,同時也會刪除order表中的該用戶的所有記錄,注意使用外鍵時,要定義事務(wù)安全類型為INNODB。
7)建立索引。格式如下:
①普通索引。
創(chuàng)建:CREATEINDEX<索引名>ONtablename(索引字段)
修改:ALTERTABLEtablenameADDINDEX[索引名](索引字段)
創(chuàng)表指定索引:CREATETABLEtablename([...],INDEX[索引名](索引字段))
②唯一索引。
創(chuàng)建:CREATEUNIQUE<索引名>ONtablename(索引字段)
修改:ALTERTABLEtablenameADDUNIQUE[索引名](索引字段)
創(chuàng)表指定索引:CREATETABLEtablename([...],UNIQUE[索引名](索引字段))
③主鍵。它是唯一索引,一般在創(chuàng)建表時建立,格式為
CREATATABLEtablename([...],PRIMARYKEY[索引字段])
8)優(yōu)化查詢語句。最好在相同字段進(jìn)行比較操作,在建立好的索引字段上盡量減少函數(shù)操作。
例如1:
SELECT*FROMorderWHEREYEAR(orderDate)<2008;(慢)
SELECT*FROMorderWHEREorderDate<"2008-01-01";(快)
例如2:
SELECT*FROMorderWHEREaddtime/7<24;(慢)
SELECT*FROMorderWHEREaddtime<24*7;(快)
例如3:
SELECT*FROMorderWHEREtitlelike"%good%"
SELECT*FROMorderWHEREtitle>="good"andname<"good"
5.
請舉例說明在開發(fā)過程中可以用什么方法來加快頁面的加載速度。正確答案:1)實(shí)現(xiàn)頁面的靜態(tài)化,減少頁面的動態(tài)加載。
2)使用Redis、Memcactle等緩存技術(shù),減少不必要的數(shù)據(jù)庫請求,將動態(tài)數(shù)據(jù)緩存在內(nèi)存中,當(dāng)需要時直接調(diào)取使用。
3)對于大的文件、圖片等可以使用單獨(dú)的服務(wù)器。
4)對代碼通過優(yōu)化工具進(jìn)行優(yōu)化,使文件加載效率提高。
5)對數(shù)據(jù)庫進(jìn)行優(yōu)化,提高數(shù)據(jù)庫的查詢速度。
6)保證服務(wù)器的配置比較好,保證頁面的加載速度。
四、編程題1.
一個有序數(shù)列,序列中的每一個值都能夠被2或者3或者5所整除,1是這個序列的第一個元素。求第1500個值是多少。正確答案:最簡單的方法就是用一個計(jì)數(shù)器來記錄滿足條件的整數(shù)的個數(shù),然后從1開始遍歷整數(shù),如果當(dāng)前遍歷的數(shù)能被2或者3或者5整除,則計(jì)數(shù)器的值加1,當(dāng)計(jì)數(shù)器的值為1500時,當(dāng)前遍歷到的值就是所要求的值。根據(jù)這個思路實(shí)現(xiàn)代碼如下:
<?php
functionsearth($n)
{
$count=0;
for($i=1;;$i++)
{
if($i%2==0||$i%3==0||$i%5==0)
$count++;
if($count==$n)
break;
}
return$i;
}
printf("%d",searth(1500));
?>
程序的運(yùn)行結(jié)果為
2045
2.
把一個含有n個元素的數(shù)組循環(huán)右移K(K是正數(shù))位,要求時間復(fù)雜度為O(N),且只允許使用兩個附加變量。正確答案:把數(shù)組看成由兩段組成的,記為XY。左旋轉(zhuǎn)相當(dāng)于要把數(shù)組XY變成YX。先在數(shù)組上定義一種翻轉(zhuǎn)的操作,就是翻轉(zhuǎn)數(shù)組中數(shù)字的先后順序。記X翻轉(zhuǎn)后為XT,顯然有(XT)T=X。
首先對X和Y兩段分別進(jìn)行翻轉(zhuǎn)操作,這樣就能得到XTYT,接著對XTYT進(jìn)行翻轉(zhuǎn)操作,得到(XTYT)T=(YT)T(XT)T=YX,正好是期待的結(jié)果。
回到題目中,要做的僅僅是把數(shù)組分成兩段,再定義一個翻轉(zhuǎn)子數(shù)組的函數(shù),按照前面的步驟翻轉(zhuǎn)三次就行了。時間復(fù)雜度和空間復(fù)雜度都符合要求。
對于數(shù)組序列A={1,2,3,4,5,6},如何實(shí)現(xiàn)對其循環(huán)右移2位的功能呢?將數(shù)組A分成兩個部分:A[0~n-k-1]和A[n-k~n-1],將這兩個部分分別翻轉(zhuǎn),然后放在一起再翻轉(zhuǎn)(反序)。具體如下:
1)翻轉(zhuǎn)1234:123456→432156;
2)翻轉(zhuǎn)56:432156→432165;
3)翻轉(zhuǎn)432165:432165→561234。
示例代碼如下:
functionreverse(&$arr,$start,$end)
{
while($start<$end)
{
$temp=$arr[$start];
$arr[$start]=$arr[$end];
$arr[$end]=$temp;
$star++;
$end--;
}
}
functionrightShift(&$arr,$ten,$k)
{
if(!$arr||$len<1)
{
printf("參數(shù)不合法");
}
$k%=$len;
reverse($arr,0,$len-$k-1);
reverse($arr,$len-$k,$len-1);
reverse($arr,0,$len-1);
}
算法性能分析:此時的時間復(fù)雜度為O(n)。主要是完成翻轉(zhuǎn)(逆序)操作,并且只用了一個輔助空間。
3.
100個燈泡排成一排,第一輪將所有燈泡打開;第二輪每隔一個燈泡關(guān)掉一個,即排在偶數(shù)的燈泡被關(guān)掉,第三輪每隔兩個燈泡,將開著的燈泡關(guān)掉,關(guān)掉的燈泡打開。依次類推,第100輪結(jié)束的時候,還有幾盞燈泡亮著?正確答案:1)對于每盞燈,當(dāng)拉動的次數(shù)是奇數(shù)時,燈是亮著的,當(dāng)拉動的次數(shù)是偶數(shù)時,燈是關(guān)著的。
2)每盞燈拉動的次數(shù)與它的編號所含約數(shù)的個數(shù)有關(guān),它的編號有幾個約數(shù),這盞燈就被拉動幾次。
3)考慮在1~100這100個數(shù)中有哪幾個數(shù)的約數(shù)個數(shù)是奇數(shù)。
一個數(shù)的約數(shù)都是成對出現(xiàn)的,只有完全平方數(shù)的約數(shù)個數(shù)才是奇數(shù)。所以,這100盞燈中有10盞燈是亮著的,它們的編號分別是1、4、9、16、25、36、49、64、81、100。
示例代碼如下:
<?php
functionfactorIsOdd($a)
{
$total=0;
for($i=1;$i<=$a;$i++)
{
if($a%$i==0)
$total++;
}
if($total%2==1)
return1;
else
return0;
}
functiontotalCount($num,$n)
{
$count=0;
for($i=0;$i<$n;$i++)
{
if(factorIsOdd($num[$i]))//判斷因子數(shù)是不是奇數(shù),奇數(shù)(燈亮)則加1
{
printf("亮著的燈的編號是:%d<br>",$
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年二年級數(shù)學(xué)教師工作總結(jié)模版(3篇)
- 2025年個人居間協(xié)議(4篇)
- 2025年中外貨物買賣合同標(biāo)準(zhǔn)樣本(2篇)
- 化妝品儲存運(yùn)輸服務(wù)合同
- 農(nóng)產(chǎn)品城鄉(xiāng)配送合同范本
- 醫(yī)療設(shè)備緊急運(yùn)輸合同
- 咨詢公司裝修居間協(xié)議范本
- 服裝物流配送標(biāo)準(zhǔn)合同樣本
- 醫(yī)院窗簾改造工程施工方案
- 萊州花紋藝術(shù)漆施工方案
- 農(nóng)產(chǎn)品貯運(yùn)與加工考試題(附答案)
- 幼兒園開學(xué)教職工安全教育培訓(xùn)
- 學(xué)校財(cái)務(wù)年終工作總結(jié)4
- 2025年人民教育出版社有限公司招聘筆試參考題庫含答案解析
- 康復(fù)醫(yī)學(xué)治療技術(shù)(士)復(fù)習(xí)題及答案
- 鋼鐵是怎樣煉成的鋼鐵讀書筆記
- 《血管性血友病》課件
- 2025年汽車加氣站作業(yè)人員安全全國考試題庫(含答案)
- 2024年司法考試完整真題及答案
- 高三日語一輪復(fù)習(xí)日語助詞「に」和「を」的全部用法課件
- 2024年監(jiān)控安裝合同范文6篇
評論
0/150
提交評論