2020最新PHP面試100題(三)

2020-10-09 16:00:39

77、寫幾個魔術方法並說明作用?

  • __call()當呼叫不存在的方法時會自動呼叫的方法

  • __autoload()在範例化一個尚未被定義的類是會自動呼叫次方法來載入類檔案

  • __set()當給未定義的變數賦值時會自動呼叫的方法

  • __get()當獲取未定義變數的值時會自動呼叫的方法

  • __construct()構造方法,範例化類時自動呼叫的方法

  • __destroy()銷燬物件時自動呼叫的方法

  • __unset()當對一個未定義變數呼叫unset()時自動呼叫的方法

  • __isset()當對一個未定義變數呼叫isset()方法時自動呼叫的方法

  • __clone()克隆一個物件

  • __tostring()當輸出一個物件時自動呼叫的方法

點選加入我的企鵝群

78、$ _REQUEST、$ _POST、$ _GET、$ _COOKIE、$ _SESSION、$_FILES的意思是什麼?

它們都是PHP預定義變數

  • $_REQUEST用來獲取post或get方式提交的值

  • $_POST用來獲取post方式提交的值

  • $_GET用來獲取get方式提交的值

  • $_COOKIE用來獲取cookie儲存的值

  • $_SESSION用來獲取session儲存的值

  • $_FILES用來獲取上傳檔案表單的值

79、陣列中下標最好是什麼型別的,為什麼?

陣列的下標最好是數位型別的,數位型別的處理速度快。

80、++i和i++哪一個效率高,為什麼?

++i效率比i++的效率更高,因為++i少了一個返回i的過程。

81、magic_quotes_gpc()、magic_quotes_runtime()的意思是什麼?

Magic_quotes_gpc()是php組態檔中的,如果設定為on則會自動POST,GET,COOKIE中的字串進行跳脫,在‘之前加\

Magic_quotes_runtime()是php中的函數,如果引數為true則會資料庫中取出來的單引號、雙引號、反斜線自動加上反斜槓進行跳脫。

82、框架中什麼是單一入口和多入口,單一入口的優缺點?

(1)多入口就是通過存取不同的檔案來完成使用者請求。

單一入口指web程式所有的請求都指向一個指令碼檔案的。

(2)單一入口更容易控制許可權,方便對http請求可以進行安全性檢查。

缺點:URL看起來不那麼美觀,特別是對搜尋引擎來說不友好。

83、你對Memcach的理解,優點有哪些?

Memcache是一種快取技術,在一定的時間內將動態網頁經過解析之後儲存到檔案,下次存取時動態網頁就直接呼叫這個檔案,而不必在重新存取資料庫。使用memcache做快取的好處是:提高網站的存取速度,減輕高並行時伺服器的壓力。

Memcache的優點:穩定、設定簡單、多機分散式儲存、速度快。

84、對關係型資料庫而言,索引是相當重要的概念,請回答有關索引幾個問題:

a) 索引的目的是什麼?

  • 快速存取資料表中的特定資訊,提高檢索速度

  • 建立唯一性索引,保證資料庫表中每一行資料的唯一性

  • 加速表和表之間的連線

  • 使用分組和排序子句進行資料檢索時,可以顯著減少查詢中分組和排序的時間

b) 索引對資料庫系統的負面影響是什麼?

負面影響:建立索引和維護索引需要耗費時間,這個時間隨著資料量的增加而增加;索引需要佔用物理空間,不光是表需要佔用資料空間,每個索引也需要佔用物理空間;當對錶進行增、刪、改的時候索引也要動態維護,這樣就降低了資料的維護速度。

c) 為資料表建立索引的原則有哪些?

  • 在最頻繁使用的、用以縮小查詢範圍的欄位上建立索引

  • 在平頻繁使用的、需要排序的欄位上建立索引

d) 什麼情況下不宜建立索引?

  • 對於查詢中很少涉及的列或者重複值比較多的列,不宜建立索引

  • 對於一些特殊的資料型別,不宜建立索引,比如文字欄位(text),值範圍較少的知道等。

84、web應用中,資料庫的讀取頻率遠高於寫入頻率, 如何優化MySQL而應對此種情景?

使用memcache快取技術,將動態資料快取到檔案,存取動態頁面時直接呼叫快取檔案,而不必重新存取資料庫,這樣就減少了查詢資料庫的次數。

如果網站的存取量很大,可以把資料庫讀寫伺服器分開,使用多臺伺服器去處理資料庫查詢,使用較少的伺服器去處理資料庫的寫入和修改。

85、include與require的區別?

  • include()在執行檔案時每次都要進行讀取和評估

  • require()檔案只處理一次(實際上檔案內容替換了require()語句)

  • require()通常放在PHP指令碼程式的最前面

  • include()的使用和require()一樣,一般放在流程控制的處理區段中,PHP指令碼檔案讀到include()語句時,才將它包含的檔案讀進來,這種方式,可以把程式執行時的流程簡單化

  • require()和include()語句是語言結構,不是真正的函數,可以像PHP的其他語言結構一樣

  • include_once()和require_once()語句也是在指令碼執行期間包括並執行指定檔案,與include()require()唯一的區別是如果檔案中的程式碼已經被包括了,則不會再次包括.

  • require()包含檔案失敗,停止執行,給出錯誤(致命的)

  • include()常用於動態包含.

  • 通常是自動載入的檔案,即使載入出錯,整個程式還是繼續執行

  • 一個頁面宣告,另一個頁面呼叫

  • 包函檔案失敗,繼續向下執行,返回一條警告

86、PHP字串中單引號與雙引號的區別?

單引號不能解釋變數,而雙引號可以解釋變數。

單引號不能跳脫字元,在雙引號中可以跳脫字元。

87、php中,模板引擎的目的是什麼? 你用過哪些模板引擎?

使用模板引擎的目的是使程式的邏輯程式碼和html介面程式碼分離開,是程式的結構更清晰。

使用過的模板引擎:Smarty、ThinkPHP的ThinkTemplate

88、指出以下程式碼片段中的SQL隱碼攻擊漏洞以及解決方法(magic_quotes_gpc = off)

mysql_query(「select id,title from content where catid={$_GET[catid]}and title like ’%$_GET[keywords]%’」, $link);

注入漏洞主要存在使用者提交的資料上,這裡的注入漏洞主要是 G E T [ c a t i d ] 和 _GET[catid]和 GET[catid]_GET[keyword]

解決注入漏洞:

$_GET[catid]=intval($_GET[catid]);
$sql=」select id,title from content where catid={$_GET[catid]}and title like ’%$_GET[keywords]%;
$sql=addslashes($sql);
Mysql_query($sql);

89、分別指出php.ini中 magic_quotes_gpc, magic_quotes_runtime兩項引數的作用.

Magic_quotes_gpc的作用是在POST、GET、COOKIE資料上使用addslashes()自動跳脫。

Magic_quotes_runtime引數的作用是設定狀態,當狀態為0時則關閉自動跳脫,設定為1則自動跳脫,將資料庫中取出來的單引號、雙引號、反斜線這些字元加上反斜槓跳脫。

90、寫出以下php程式碼的執行結果:

function foo($i) {
$i++;
echo $i ;
}
function bar(&$i) {
}
$i = 10 ;
echo $i++ , ++$i; 輸出:10,12
foo($i); 輸出:13
bar($i); 輸出:無輸出

91、如何快速下載一個遠端http伺服器上的圖片檔案到本地?

$file=」";
$fp=fopen($file,’rb’);
$img=fread($fp,10000);
$dir=./;
$local=fopen($dir./.basename($file),’w');
Fwrite($local,$img);

92、什麼是時間戳? 如何取得當前時間戳?

時間戳是從1970年1月1日 00:00:00到指定日期的秒數。

獲取當前時間戳:time()

93、瞭解XSS攻擊嗎? 如何防止 ?

XSS是跨站指令碼攻擊,首先是利用跨站指令碼漏洞以一個特權模式去執行攻擊者構造的指令碼,然後利用不安全的Activex控制元件執行惡意的行為。

使用htmlspecialchars()函數對提交的內容進行過濾,使字串裡面的特殊符號實體化。

94、SQL隱碼攻擊漏洞產生的原因 ? 如何防止?

SQL隱碼攻擊產生的原因:程式開發過程中不注意規範書寫sql語句和對特殊字元進行過濾,導致使用者端可以通過全域性變數POST和GET提交一些sql語句正常執行。

防止SQL隱碼攻擊:

  • 開啟組態檔中的magic_quotes_gpc和magic_quotes_runtime設定

  • 執行sql語句時使用addslashes進行sql語句轉換

  • Sql語句書寫儘量不要省略小引號和單引號

  • 過濾掉sql語句中的一些關鍵字:update、insert、delete、select、*

  • 提高資料庫表和欄位的命名技巧,對一些重要的欄位根據程式的特點命名,取不易被猜到的。

  • Php組態檔中設定register_globals為off,關閉全域性變數註冊

  • 控制錯誤資訊,不要再瀏覽器上輸出錯誤資訊,將錯誤資訊寫到紀錄檔檔案中。

95、一個位元組佔多少bit ? 一個IPv4地址佔幾個位元組? 一個IPv6地址呢?

一個位元組佔8bit,一個IPV4佔用4位元組,一個IPV6佔用16位元組。

96、M ADSL寬頻連線, 理想情況下, 最大下載速度是多少KB/s ?

256KB/s

97、請寫出一個正規表示式,用於匹配一個HTML檔案中標記中的圖片地址

$url=」」;
//

98、Fatal error: Call to undefined method ge_user() in /website/index.php on line 39

呼叫了未定義的方法ge_user(),檢查程式中有沒有定義此方法

99、Fatal error: Class ’client’ not found in /website/index.php on line 173

類client沒有找到,檢查檔案中有沒有client類,或者有沒有包含client類檔案

Warning: Cannot modify header information - headers already sent by (output started at /website/index.php:1) in /website/index.php on line 3

提示檔案前面有輸出,檢查是否有輸出,或者編碼

100、Warning:session_start(): open(/website/tmp/sess_47e067121facf033785f9a1cb16d243b, O_RDWR) failed: No such file or directory (2) in /website/index.php on line 10

沒有找到檔案或目錄,檢查檔案是否存在

點關注,不迷路

好了各位,以上就是這篇文章的全部內容了,能看到這裡的人呀,都是人才。之前說過,PHP方面的技術點很多,也是因為太多了,實在是寫不過來,寫過來了大家也不會看的太多,所以我這裡把它整理成了PDF和檔案,如果有需要的可以

點選進入暗號: PHP+「平臺」

在這裡插入圖片描述

在這裡插入圖片描述


更多學習內容可以存取【對標大廠】精品PHP架構師教學目錄大全,只要你能看完保證薪資上升一個臺階(持續更新)

以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務程式碼寫多了沒有方向感,不知道該從那裡入手去提升,對此我整理了一些資料,包括但不限於:分散式架構、高可延伸、高效能、高並行、伺服器效能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell指令碼、Docker、微服務、Nginx等多個知識點高階進階乾貨需要的可以免費分享給大家,需要的可以加入我的 PHP技術交流群