1. 程式人生 > >2016某知名網際網路公司PHP面試題及答案

2016某知名網際網路公司PHP面試題及答案

1 字串”\r”,”\n”,”\t”,”\x20”分別代表什麼

答案: “\r”代表的含義是:
在Linux、unix 中表示返回到當行的最開始位置,在Mac OS 中表示換行且返回到下一行的最開始位置,相當於Windows 裡的 \n 的效果。
“\n”代表的含義是:
在Windows 中表示換行且回到下一行的最開始位置。相當於Mac OS 裡的 \r 的效果,在Linux、unix 中只表示換行,但不會回到下一行的開始位置。
“\t”所代表的含義是:
鍵盤上的“TAB”鍵,跳格(移至下一列)。
“\x20”所代表的含義是:是32在ASCII表中16進位制的表示。

2 以下語句輸出的結果是什麼

$a = 3;
echo "$a",'$a',"\\\$a","${a}","$a"."$a","$a"+"$a";

得到的結果是:
3$a\$a3336

3 以下語句輸出的結果是什麼

setcookie("a","value");
print $_COOKIE['a'];

得到的結果是:
value(若只是這兩段編碼執行,則會提示PHP Notice: Undefined index: a)

4 php中將當前頁面重定向到另一個頁面怎麼寫?

header();

5 什麼是魔術引號(magic_quotes_gpc)?
魔術引號(Magic Quotes)是一個自動將進入 PHP 指令碼的資料進行轉義的過程。提示:最好在編碼時不要轉義而在執行時根據需要而轉義。

6 在類的方法中,如何呼叫其父類的同名方法?
parent::方法名

7 php中如何取得get,post引數,和上傳的檔案

$_GET,$_POST,$_FILES

8 如何取得客戶端的ip(要求取得一個int)

$_SERVER["REMOTE_ADDR"];ip2long進行轉換

9 include和require的區別

require:出現錯誤後直接終止退出,程式不再執行
include:包含一個不存在的檔案,會提示警告程式會繼續執行

10 extends的作用是什麼
類的繼承

11 @test()和&test()的區別

@test()的作用是遮蔽test()方法中警告的作用
&test()引用test()方法

12 array+array與array_merge()的區別
二者之間的區別是:
1 鍵名為數字時,array_merge()不會覆蓋掉原來的值,但+合併陣列則會把最先出現的值作為最終結果返回,而把後面的陣列擁有相同鍵名的那些值“拋棄”掉(不是覆蓋)
2 鍵名為字元時,+仍然把最先出現的值作為最終結果返回,而把後面的陣列擁有相同鍵名的那些值“拋棄”掉,但array_merge()此時會覆蓋掉前面相同鍵名的值

13 請列舉最少3個php物件的魔術方法和說明它們的用途
構造方法: __construct()
析構方法__destruct()
__get() 控制私有的受保護的未定義的成員屬性的訪問
__set() 對私有的受保護的未定義的成員屬性進行賦值控制
__isset() 對私有的受保護的未定義成員屬性進行isset和empty的判斷控制
等等

14 什麼是fpm
FastCGI Process Manager:FastCGI程序管理器

15 描述一下php開發中常見的幾種攻擊以及解決方案
SQL注入:
解決這個問題的辦法是,將 PHP 的內建 mysql_real_escape_string() 函式用作任何使用者輸入的包裝器。這個函式對字串中的字元進行轉義,使字串不可能傳遞撇號等特殊字元並讓 MySQL 根據特殊字元進行操作。
跨站點指令碼攻擊(XSS):
strip_tags() 函式,這個函式可以清除任何包圍在 HTML 標記中的內容
或者使用htmlspecialchars() 函式。

16 echo intval(0.58*100) 輸出的結果是57,試分析這是為什麼?
原因就是浮點數精度的問題。
簡單的十進位制分數如同 0.1 或 0.7 不能在不丟失一點點精度的情況下轉換為內部二進位制的格式。這就會造成混亂的結果:例如,floor((0.1+0.7)*10) 通常會返回 7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9999999999…。這和一個事實有關,那就是不可能精確的用有限位數表達某些十進位制分數。例如,十進位制的 1/3 變成了 0.3333333…。所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。如果確實需要更高的精度,應該使用任意精度數學函式或者 gmp 函式