2017騰訊PHP實習生面試題

第一道題 PHP URL參數獲取方式的四種例子

第一種、利用$_SERVER內置數組變量
第二種、利用pathinfo內置函數

<?php
$test = pathinfo("http://localhost/index.php");
print_r($test);
/*
結果如下
Array
(
[dirname] => http://localhost //url的路徑
[basename] => index.php //完整文件名
[extension] => php //文件名后綴
[filename] => index //文件名
)
*/
?>
第三種、利用parse_url內置函數
<?php
$test = parse_url("http://localhost/index.php?name=tank&sex=1#top");
print_r($test);
?>
結果如下
Array
(
[scheme] => http //使用什么協議
[host] => localhost //主機名
[path] => /index.php //路徑
[query] => name=tank&sex=1 // 所傳的參數
[fragment] => top //后面根的錨點
)
第四種、利用basename內置函數

<?php
$test = basename("http://localhost/index.php?name=tank&sex=1#top");
echo $test;
/*
結果如下
index.php?name=tank&sex=1#top
*/
?>

第二大題post和get的區別
接下來看看兩種請求方式的區別:

1、GET請求,請求的數據會附加在URL之后,以?分割URL和傳輸數據,多個參數用&連接。URL的編碼格式采用的是ASCII編碼,而不是uniclde,即是說所有的非ASCII字符都要編碼之后再傳輸。

POST請求:POST請求會把請求的數據放置在HTTP請求包的包體中。上面的item=bandsaw就是實際的傳輸數據。

因此,GET請求的數據會暴露在地址欄中,而POST請求則不會。

2、傳輸數據的大小

在HTTP規范中,沒有對URL的長度和傳輸的數據大小進行限制。但是在實際開發過程中,對于GET,特定的瀏覽器和服務器對URL的長度有限制。因此,在使用GET請求時,傳輸數據會受到URL長度的限制。

對于POST,由于不是URL傳值,理論上是不會受限制的,但是實際上各個服務器會規定對POST提交數據大小進行限制,Apache、IIS都有各自的配置。

3、安全性

POST的安全性比GET的高。這里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全僅僅是不修改服務器的數據。比如,在進行登錄操作,通過GET請求,用戶名和密碼都會暴露再URL上,因為登錄頁面有可能被瀏覽器緩存以及其他人查看瀏覽器的歷史記錄的原因,此時的用戶名和密碼就很容易被他人拿到了。除此之外,GET請求提交的數據還可能會造成Cross-site request frogery攻擊

4、HTTP中的GET,POST,SOAP協議都是在HTTP上運行的

第三大題PHP處理中文字符
一、中文截取:mb_substr() mb_substr( $str, $start, $length, $encoding ) $str,需要截斷的字符串 $start,截斷開始處,起始處為0 $length,要截取的字數 $encoding,網頁編碼,如utf-8,GB2312,GBK 實例: 復制代碼代碼如下:
<?php $str='腳本之家:http://www.jb51.net'; echo mb_substr($str,0,4,'utf-8');//截取頭5個字,假定此代碼所在php文件的編碼為utf-8 ?> 結果顯示:腳本之家
二、獲取中文長度:mb_strlen() mb_strlen( $str, $encoding ) $str,要計算長度的字符串 $encoding,網頁編碼,如utf-8,GB2312,GBK 實例: 復制代碼代碼如下:
<?php $str='腳本之家:http://www.jb51.net'; echo mb_strlen($str,'utf-8');//假定此代碼所在php文件的編碼為utf-8 ?> 結果顯示:24

第四大題、
echo json_decode($data,true);
結果: 復制代碼代碼如下:
Array ( [0] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

可以看出 json_decode($data,true)輸出的一個關聯數組,由此可知json_decode($data)輸出的是對象,而json_decode("$arr",true)是把它強制生成PHP關聯數組.

代碼如下:
$obj->Name= 'a1';$obj->Number ='123'; $obj->Contno= '000'; echo json_encode($obj);
結果為: 復制代碼代碼如下:
{"Name":"a1", "Number":"123", "Contno":"000" }
可以看出json_encode()和json_decode()是編譯和反編譯過程,注意json只接受utf-8編碼的字符,所以json_encode()的參數必須是utf-8編碼,否則會得到空字符或者null。

第五題 手機號的正則表達式

/^1[3,5,7,8]{1}[0-9]{9}$/

第六題 memcached和redis的區別
總結一:
memcache官方定義
Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
redis官方定義
Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.
版權相同
它們都是使用的bsd協議,使用它的項目可以用于商業用戶,不必發布二次修改的代碼,可以修改源代碼。
數據類型
redis數據類型豐富,支持set liset等類型
memcache支持簡單數據類型,需要客戶端自己處理復雜對象
持久性
redis支持數據落地持久化存儲
memcache不支持數據持久存儲
分布式存儲
redis支持master-slave復制模式
memcache可以使用一致性hash做分布式
value大小不同
memcache是一個內存緩存,key的長度小于250字符,單個item存儲要小于1M,不適合虛擬機使用
數據一致性不同
redis使用的是單線程模型,保證了數據按順序提交。
memcache需要使用cas保證數據一致性。CAS(Check and Set)是一個確保并發一致性的機制,屬于“樂觀鎖”范疇;原理很簡單:拿版本號,操作,對比版本號,如果一致就操作,不一致就放棄任何操作
cpu利用
redis單線程模型只能使用一個cpu,可以開啟多個redis進程
總結二:
1.Redis中,并不是所有的數據都一直存儲在內存中的,這是和Memcached相比一個最大的區別。
2.Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。
3.Redis支持數據的備份,即master-slave模式的數據備份。
4.Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。
我個人認為最本質的不同是Redis在很多方面具備數據庫的特征,或者說就是一個數據庫系統,而Memcached只是簡單的K/V緩存
總結三:
redis和memecache的不同在于:
1、存儲方式:
memecache 把數據全部存在內存之中,斷電后會掛掉,數據不能超過內存大小
redis有部份存在硬盤上,這樣能保證數據的持久性。
2、數據支持類型:
redis在數據支持上要比memecache多的多。
3、使用底層模型不同:
新版本的redis直接自己構建了VM 機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求。
4、運行環境不同:
redis目前官方只支持LINUX 上去行,從而省去了對于其它系統的支持,這樣的話可以更好的把精力用于本系統 環境上的優化,雖然后來微軟有一個小組為其寫了補丁。但是沒有放到主干上
memcache只能當做緩存,cache
redis的內容是可以落地的,就是說跟mongodb有些類似,然后redis也可以作為緩存,并且可以設置master-slave

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,881評論 18 139
  • 1. session和cookie的區別 1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上...
    米酒真香閱讀 908評論 1 51
  • 蔡家峪始建于唐代.相傳一蔡姓武官在此戍邊,為官清正,深受百姓愛戴,后人為紀念他,故取名蔡家峪鄉與淶水縣交界處,海拔...
    八道I江山閱讀 1,129評論 0 1
  • 說起鞋子中的常青樹,那就一定要好好說說帆布鞋了,即使是前段日子拖鞋占據了時尚制高點,也一直沒有少了帆布鞋的身影,在...
    潮流一起說閱讀 266評論 0 0
  • 小河灣灣的日子 淌過桃花村莊 河水中的桃花 芬芳漂泊遠方 陽光淌過淺水的河面 少女涉水的背影 魚兒追逐魚兒遐想 朵...
    雪山孟龍閱讀 327評論 0 0