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";
  • 1
  • 2
  • 1
  • 2

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

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

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

得到的結果是: 
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
  • 1
  • 1

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

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

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 函數

 

 

1 寫出MySQL中,插入數據,讀出數據,更新數據的語句 
INSERT INTO 表名 VALUES (””,””); 
SELECT * FROM 表名;。 
UPDATE 表名 SET 字段名1=’a’,字段名2=’b’ WHERE 字段名3=’c’;。

2 寫入數據時,聚簇索引所在的列的內容是隨機的,會引起什么性能問題? 
聚簇索引情況下,寫入數據時,插入速度嚴重依賴插入順序,按照主鍵的順序插入是加載數據到InnoDB表中速度最快的方式。但如果不是按照主鍵順序加載數據,那么在加載完成后最好使用OPTIMIZE TABLE命令重新組織一下表。 
基於聚簇索引的表在插入新行,或者主鍵被更新導致需要移動行的時候,可能面臨“頁分裂”的問題。當行的主鍵值要求必須將這一行插入到某個已滿的頁中時,存儲引擎會將該頁分裂成兩個頁面來容納該行,這就是一次分裂操作。頁分裂會導致表占用更多的磁盤空間。 
聚簇索引可能導致全表掃描變慢,尤其是行比較稀疏,或者由於頁分裂導致數據存儲不連續的時候。

3 請描述一下mysql主從服務器之間是如何同步數據的,什么樣的sql會造成主從無法正確同步?

4 如何查看當前Linux服務器的磁盤io狀態? 
iostat -x -k

5 如何查看linux服務器的cpu負載

top(top程序提供了一個動態的、實時的、直觀的運行中的系統。它能顯示系統的主要信息,並且把由內核管理的任務列表顯示出來。top命令監控CPU利用率,進程狀態和內存利用率。頂部區域包含了整個系統狀態的信息,從左到右,從上到下,依次是:當前時間,正常運行時間,負載均衡,進程總數和概況,CPU狀態,內存占用情況,swap占用情況。)

mpstat/sar/….

6 如何查看一個進程當前打開的文件? 
查看所有進程的文件打開數 
lsof |wc -l 
查看某個進程打開的文件數 
lsof -p pid |wc -l

7 什么是管道命令? 
其實這個管道命令“|”僅能處理經由前面一個命令傳來的正確信息,也就是standard output的信息,對於stdandard error並沒有直接處理能力。在每個管道后面接的第一個數據必定是“命令”,而且這個命令必須要能夠接受standard input的數據才行,這樣的命令才可以是“管道命令”,例如Less、more、head、tail等都是可以接收standard input的管道命令。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM