淘寶PHP筆試題及答案解析
問(wèn)題一:新浪微博首頁(yè)你和他共同關(guān)注的人功能實(shí)現(xiàn),用于存儲(chǔ)人這個(gè)信息的方法是什么?
1)可以使用redis的set方式存儲(chǔ),使用sinter命令返回交集。2)可以使用PHP的array_intersect函數(shù)實(shí)現(xiàn)。
問(wèn)題二:PHP靜態(tài)類的特性?
1)被聲明為靜態(tài)類的類不允許包含任何非靜態(tài)成員2)抽象靜態(tài)類中的靜態(tài)方法不允許調(diào)用,它必須先被繼承。3)在靜態(tài)類中,允許抽象的靜態(tài)方法。(莫名其妙?)4)靜態(tài)類不允許含有 構(gòu)造函數(shù)、析構(gòu)函數(shù)、動(dòng)態(tài)攔截函數(shù)(本人理解為魔術(shù)函數(shù))以及 __toString()。5)靜態(tài)類不允許繼承自非靜態(tài)類。6)為了向下兼容,目前含有靜態(tài)成員的抽象類/非靜態(tài)類的行為不會(huì)被改變。7)在抽象類中添加 __setStatic() 以及 __getStatic() 以代替 __get() 、 __set()。8)靜態(tài)類不能被實(shí)例化9)靜態(tài)類可以實(shí)現(xiàn)自只包含靜態(tài)方法的接口
掃盲:所謂靜態(tài)類指的是無(wú)需實(shí)例化成對(duì)象,直接通過(guò)靜態(tài)方式調(diào)用的類。代碼如下:
<?phpclass Math{ public static function ceil($value) {return ceil($value); } public static function floor($value) {return floor($value); }}?>
此時(shí)類所扮演的角色更像是命名空間,這或許是很多人喜歡使用靜態(tài)類最直接的原因。
問(wèn)題三:用PHP以及shell或者perl寫出從access_log中查找出最多訪問(wèn)IP的方法。
PHP代碼如下
function new_sort($a,$b){ if ($a == $b) return 0; return ($a>$b) ?-1:1;}$pattern=’/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/’;if($file = file_get_contents('/var/log/httpd/access_log')){ if(preg_match_all($pattern, $file, $matches)) {$result = array_count_vaules($matches[0]);uasort($result,'new_sort');print_r($result); }else{echo 'match failed!' }}else{ echo 'open file failed!!';}
Perl代碼如下:
#!/usr/bin/perl -wopen(ACCESS,’/var/log/httpd/access_log’);@log = <ACCESS>;foreach $word (@log){ $word =~ /d{1,3}.d{1,3}.d{1,3}.d{1,3}/; $match = $&; $matchlist{$match} +=1;}@sorted = map {{($_=>$matchlist{$_})}}sort {$matchlist{$a} cmp $match{$b} or $a cmp $b} keys %matchlist;foreach $cap (keys(%matchlist)){ ($key,$value) = each %$cap; print('$key => $valuen');}close(ACCESS);
直接命令實(shí)現(xiàn):
awk -F’ ’ ’{print $1}’ /var/log/httpd/access_log | uniq -c | sort -nr
問(wèn)題四:PHP獲取網(wǎng)頁(yè)內(nèi)容的方法
1)file_get_contents: 將整個(gè)文件讀入一個(gè)字符串。2)curl:流程為curl_init();curl_setopt();curl_exec();curl_close();
<?php $url = 'http://www.jb51.net'; $ch = curl_init(); $timeout = 5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); //在需要用戶檢測(cè)的網(wǎng)頁(yè)里需要增加下面兩行 //curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); //curl_setopt($ch, CURLOPT_USERPWD, US_NAME.':'.US_PWD); $contents = curl_exec($ch); curl_close($ch); echo $contents;
3)fopen->fread->fclose:實(shí)現(xiàn)類似file_get_contents,通過(guò)打開遠(yuǎn)程文件并讀取
其中 fopen和file_get_contents需要開啟php.ini中的allow_url_fopen選項(xiàng),Curl需要開啟curl選項(xiàng)。
4)經(jīng)rtxbc提醒,知道了其實(shí)常用的是socket方法抓取網(wǎng)頁(yè)內(nèi)容
找到了一段示例代碼如下:
{ $fp = fsockopen($host, 80) or die('Open '. $url .' failed'); $header = 'GET /'.$url .' HTTP/1.1rn'; $header .= 'Accept: */*rn'; $header .= 'Accept-Language: zh-cnrn'; $header .= 'Accept-Encoding: gzip, deflatern'; $header .= 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)rn'; $header .= 'Host: '. $host .'rn'; $header .= 'Connection: Keep-Alivern'; //$header .= 'Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-rnrn';
問(wèn)題五:Memcache和memcached的區(qū)別,緩存的時(shí)間應(yīng)該怎么設(shè)置?
memcached中有g(shù)etmulti和setmulti,很實(shí)用,而且還有很多方法是memcache沒(méi)有的,因此可以理解為memcache的升級(jí)版。
問(wèn)題六:Redis有哪些存儲(chǔ)類型,各有什么特點(diǎn)
具體類型包括strings, list, set, sorted set, hash
問(wèn)題七:Node.js的特性,什么是異步?
異步,事件驅(qū)動(dòng),非阻塞。
異步的特點(diǎn)就是一個(gè)調(diào)用者發(fā)出一個(gè)請(qǐng)求之后不需要馬上得到結(jié)果,而是等待處理者得出結(jié)果集之后返回給調(diào)用者,和同步的你說(shuō)完我再說(shuō)概念不同。
事件驅(qū)動(dòng)是javascript的特性,當(dāng)一個(gè)動(dòng)作觸發(fā)之后驅(qū)動(dòng)一個(gè)事件,可以是多對(duì)多的關(guān)系,也就是說(shuō)多個(gè)動(dòng)作驅(qū)動(dòng)多個(gè)事件。
非阻塞是node.js的一個(gè)新特性,傳統(tǒng)編程語(yǔ)言是面向過(guò)程的流程,也就是上面的操作沒(méi)完成,下面的操作會(huì)阻塞在那里等待操作完成。而node.js的特點(diǎn)就是非阻塞,用下面的例子來(lái)說(shuō)明
$file = fopen('/etc/file',r+);$contents = fread($file,filesize('/etc/file'));fclose();echo 'this will not display';
文件讀寫沒(méi)完成的時(shí)候,echo不會(huì)輸出,但是在node.js的特性中就不一樣了,看下面的代碼:
require('fs')fs.readFile(’/etc/filename’,’UTF-8’,function(err,date){ if(err) throw err; console.log(date);});console.log('running');
這個(gè)程序中,讀取文件的操作沒(méi)有影響console.log輸出running,而date需要文件讀取完畢再輸出,兩者不阻塞。
相關(guān)文章:
1. 華為手機(jī)怎么設(shè)置微信視頻鈴聲2. Android Studio實(shí)現(xiàn)簡(jiǎn)單的QQ登錄界面的示例代碼3. 搜狗輸入法怎么設(shè)置 搜狗輸入法天氣預(yù)報(bào)在哪里4. 華為watchgt3可以回復(fù)微信嗎 watchgt3可以下載應(yīng)用嗎5. 支付寶店員收款通知怎么設(shè)置聲音6. 網(wǎng)易云音樂(lè)人格測(cè)試怎么玩?網(wǎng)易云音樂(lè)使用人格測(cè)試的方法7. 華為mate30epro怎么微信分身8. 京東省錢卡怎么取消自動(dòng)續(xù)費(fèi)9. Win7右鍵沒(méi)有WPS新建選項(xiàng)怎么辦?10. 微信怎么設(shè)置置頂文字
