PHP面試之網絡協議面試題

你好,是我琉憶。
本篇是本週(2019.2-25至3-1)的最後一篇文章。
之前的文章可以關注我的“PHP面試”專欄獲取,或者關注我的公衆號“琉憶編程庫”查看歷史獲取。

我正在segmentfault社區送兩本書:《PHP程序員面試筆試真題解析》 ,今晚(3月1日)19點開獎,歡迎參與。

明天就是週末了,提前祝各位週末愉快。

面試時如何給自己添金?沒接觸過支付功能?爲此特意準備了一篇“新手零基礎對接境外支付paypal”的文章,爲你面試添金,關注公衆號:“琉憶編程庫”,回覆:“pay”,我發給你。

以下正文的內容來自《PHP程序員面試筆試真題解析》書籍,如果轉載請保留出處:


【真題1】如何利用PHP解決HTTP的無狀態本質?

答案:可以使用Session和Cookie記住用戶,監控是否同一個用戶在操作。使用Session前需要在頁面使用session_start()開啓Session。然後使用$_SESSION來存儲Session變量。
使用Cookie時,需使用set_cookie()設置Cookie,然後使用$_COOKIE取Cookie值。


【真題2】HTTP的Keep-Alive作用是什麼?

答案:HTTP的Keep-Alive作用如下:Keep-Alive使客戶端到服務器端的連接持續有效,當出現對服務器的後繼請求時,Keep-Alive功能避免了建立或者重新建立連接。Web服務器基本上都支持HTTP Keep-Alive。
缺點:對於提供靜態內容的網站來說,這個功能通常很有用。但是,對於負擔較重的網站來說,雖然爲客戶保留打開的連接有一定的好處,但它同樣影響了性能,因爲在暫停使用的期間,本來可以釋放的資源仍舊被佔用。所以當Web服務器和應用服務器在同一臺機器上運行時,Keep-Alive功能對資源利用的影響尤其突出。
解決:Keep-Alive:timeout=5,max=100

timeout:過期時間5秒(對應httpd.conf裏的參數是:KeepAliveTimeout),max是最多請求一百次,強制斷掉連接。在timeout時間內又有新的連接過來時,max會自動減1,直到爲0,強制斷掉。

【真題3】如何快速下載一個遠程HTTP服務器上的圖片文件到本地?

答案:先通過fopen()函數打開要下載的圖片路徑,然後使用fread()函數讀取圖片,再在本地打開指定存儲圖片的目錄,將讀取到的圖片信息寫入到該目錄內的文件中,即可遠程下載一個圖片到本地。實現代碼如下:

<?php
    $file="http://static.nipic.com/images/originalNewtip.png";
    $fp=fopen($file,'rb');
    $img=fread($fp,100000);
    $dir="./";
    $local=fopen($dir.'/'.basename($file),'w');
    fwrite($local,$img);
?>

【真題4】請簡述HTTP中POST、GET、PUT、DELETE方式的區別。

答案:HTTP定義了與服務器交互的不同的方法,最基本的方法是POST、GET、PUT和DELETE,URL全稱是資源描述符,可以認爲一個URL地址用於描述一個網絡上的資源,而對應的HTTP中的四種方法GET、POST、PUT、DELETE對應這個資源的查,改,增,刪四個操作。它們的具體功能爲:
(1)根據HTTP規範,GET用於信息獲取,信息應該是安全的;
(2)根據HTTP規範,POST表示可以修改服務器上的資源的請求;
(3)PUT和POST極爲相似,都是向服務器發送數據,但它們之間有一個重要區別,PUT通常指定了資源的存放位置,而POST則沒有,POST的數據存放位置由服務器決定;
(4)DELETE的功能是刪除某一個資源。


【真題5】如何理解HTTP的gzip壓縮傳輸?

答案:HTTP下的gzip是一種流行的文件壓縮算法,在Linux平臺上使用十分廣泛,gzip壓縮傳輸能更加有效節約帶寬流量。它先把文本壓縮爲.gz然後傳輸給瀏覽器,最後由瀏覽器負責解壓縮呈現給用戶,可以降低網絡傳輸的字節數,加快網頁的加載速度。


面試時如何給自己添金?沒接觸過支付功能?爲此特意準備了一篇“新手零基礎對接境外支付paypal”的文章,爲你面試添金,關注公衆號:“琉憶編程庫”,回覆:“pay”,我發給你。

【真題6】如何給動態文件(如PHP頁面)做緩存?(即第二次刷新瀏覽器時,返回304狀態)

答案:304狀態的意思是當客戶端向服務端請求時,服務端告訴客戶端緩存的文檔沒有過期可以繼續使用。
可以通過以下方法作瀏覽器緩存:
(1)當用戶首次請求該文件的時候,通過HTTP HEAD的Last-Modified字段將該文件的最後修改日期發送到客戶端,讓客戶端知道該文件的版本,例如:
Last-Modified: Tue, 08 Apr 2008 14:48:05 GMT
(2)在瀏覽器再次請求該文件的時候,會自動將該時間作爲請求的HTTP HEAD的If-Modified-Since字段內容,例如:
 If-Modified-Since: Tue, 08 Apr 2008 14:48:05 GMT
(3)服務端根據If-Modified-Since字段的內容(如果存在該字段)來判斷客戶端的文件是否已經過期,如果已經過期,那麼重新返回新的文件,如果沒有,那麼只需要返回304狀態碼,就可結束輸出,這樣代表瀏覽器端的文件版本是最新的,不需要返回文件內容。


【真題7】真題478、請寫出HTTP和HTTPS的區別。

clipboard.png


【真題8】IP是否可以僞造?PHP中如何拿到真實IP?

答案:IP地址是可以僞造的,客戶端可以僞造IP地址或使用代理IP導致IP地址不是用戶的真實IP地址。
REMOTE_ADDR代表客戶端的IP地址,HTTP_X_FORWARDED_FOR是代理服務器的IP地址,存放真實的IP和各級代理IP。實現代碼如下:

<?php
    function getIP(){ 
    $unknown = 'unknown'; 
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])&&$_SERVER['HTTP_X_FORWARDED_FOR']&&strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'],$unknown)){ 
        $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    }elseif(isset($_SERVER['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],$unknown)){ 
        $IP = $_SERVER['REMOTE_ADDR']; 
    } 
    if (false !== strpos($IP,',')) $IP = reset(explode(',',$IP)); 
        return $IP; 
    } 
?>

【真題9】在HTTP 1.0中,狀態碼 401 的含義是( );如果返回“找不到文件”的提示,則可用 header 函數,其語句爲( )。

參考答案:客戶端在授權頭信息中沒有有效的身份信息時訪問受到密碼保護的頁面;header("HTTP/1.0 404 Not Found");。


【真題10】下列關於HTTP協議的說法中,錯誤的是( )。

A.如果本地開啓了Cookie,那麼每打開一個網址,HTTP請求就會把相應的Cookie傳給Web服務器
B.HTTP響應的狀態碼爲301,意思是暫時地把內容轉移到一個新的URL,但是老的URL還沒有廢除
C.HTTP是一個基於請求與響應模式的、無狀態的、應用層的協議,絕大多數的Web開發都是基於HTTP協議
D.絕大多數的Web開發離不開Cookie,如果禁用Cookie導致Session失效,那麼可以通過URL來傳遞sessionID
參考答案:B。
分析:301表示請求的網頁已被永久移動到新位置而不是暫時轉移內容到新的URL。所以,選項B說法錯誤。


預告:下週(3.4-3.8)將更新PHP面試之MySQL數據庫知識點,敬請期待。

以上內容摘自《PHP程序員面試筆試真題解析》書籍,該書已在天貓京東噹噹等電商平臺銷售。
圖片描述

更多PHP相關的面試知識、考題可以關注公衆號獲取:琉憶編程庫
圖片描述

對本文有什麼問題或建議都可以進行留言,我將不斷完善追求極致,感謝你們的支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章