PHP中級程序員常見面試題


1)、寫一個函數,從一個標准url里取出文件的擴展名,需要取出php或.php

<?php
$a="http://www.test.com.cn:88/abc/de/fg.php?id=1";
 
$b=parse_url($a);//解析 URL,以數組的方式返回其組成部分
 
var_dump($b);
 
echo '<br>';
 
// 方法一
echo substr($b['path'],strpos($b['path'],'.'));
 
echo '<br>';
 
// 方法二
$path_array = explode('.',$b['path']);
echo end($path_array);

參考函數:

 

parse_url

substr

strpos

explode

end

2)、描述一下大流量高並發量網站的解決方案

  1. 首先,確認服務器硬件是否足夠支持當前的流量 普通的P4服務器一般最多能支持每天10萬獨立IP,如果訪問量比這個還要大, 那么必須首先配置一台更高性能的專用服務器才能解決問題 ,否則怎么優化都不可能徹底解決性能問題。
  2. 其次,優化數據庫訪問前台實現完全的靜態化當然最好,可以完全不用訪問數據庫,不過對於頻繁更新的網站, 靜態化往往不能滿足某些功能。      緩存技術就是另一個解決方案,就是將動態數據存儲到緩存文件中,動態網頁直接調用 這些文件,而不必再訪問數據庫,WordPress和Z-Blog都大 量使用這種緩存技術      如果確實無法避免對數據庫的訪問,那么可以嘗試優化數據庫的查詢SQL.避免使用 Select * from這樣的語句,每次查詢只返回自己需要的結果,避免短時間內的大,盡量做到"所查即所得" ,遵循以小表為主,附表為輔,查詢條件先索引,先小后大的原則,提高查詢效率.量SQL查詢。
  3. 禁止外部的盜鏈     外部網站的圖片或者文件盜鏈往往會帶來大量的負載壓力,因此應該嚴格限制外部對於自身的圖片或者文件盜鏈,好在目前可以簡單地通過refer來控制盜 鏈,Apache自 己就可以通過配置來禁止盜鏈,IIS也有一些第三方的ISAPI可以實現同樣的功能。當然,偽造refer也可以通過代碼來實現盜 鏈,不過目前蓄意偽造refer盜鏈的還不多, 可以先不去考慮,或者使用非技術手段來解決,比如在圖片上增加水印。 
  4. 控制大文件的下載。       大文件的下載會占用很大的流量,並且對於非SCSI硬盤來說,大量文件下載會消耗 CPU,使得網站響應能力下降。因此,盡量不要提供超過2M的大文件下載,如果需要提供,建議將大文件放在另外一台服務器上。 
  5. 使用不同主機分流主要流量       將文件放在不同的主機上,提供不同的鏡像供用戶下載。比如如果覺得RSS文件占用流量大,那么使用FeedBurner或者FeedSky等服務將RSS 輸出放在其他主機上,這樣別人訪問的流量壓力就大多集中在FeedBurner的主機上,RSS就不占用太多資源了。
  6. 使用流量分析統計軟件       在網站上安裝一個流量分析統計軟件,可以即時知道哪些地方耗費了大量流量,哪些頁面需要再進行優化,因此,解決流量問題還需要進行精確的統計分析才可以。 我推薦使用的流量分析統計軟件是Google Analytics(Google分析)。若還有其他的流量分析軟件,歡迎共享交流.

3)、如何設計或配置Mysql,才能達到高效使用的目的

  1. 數據庫設計方面,設計結構良好的數據庫,允許部分數據冗余。 選取最適用的字段屬性,盡可能把字段設置為NOT NULL,這樣在查詢的時候,數據庫不用去比較NULL值。
  2. 系統架構設計方面,表散列,把海量數據散列到幾個不同的表里面,集群,數據庫查詢和寫入分開。 寫高效sql語句,以提高效率。使用連接(join)來代替子查詢使用聯合(union)來代替手動創建的臨時表所得皆必須,只從數據庫取必須的數據。必要的時候用不同的存儲引擎,比如Innodb可以減少死鎖,HEAP可以提高一個數量級的查詢速度。

4)、如何進行防SQL注 入?

  1. 過濾掉一些常見的數據庫操作關鍵字:select,insert,update,delete,and,*等或者通過系統函 數:addslashes(需要被過濾的內容)來進行過濾。
  2. 在PHP配置文件中Register_globals=off;設置為關閉狀態 //作用將注冊全局變量關閉。比如:接收POST表單的值使用$_POST['user'],如果將register_globals=on;直接使 用$user可以接收表單的值。
  3. SQL語句書寫的時候盡量不要省略小引號(tab鍵上面那個)和單引號
  4. 提高數據庫命名技巧,對於一些重要的字段根據程序的特點命名,取不易被猜到的
  5. 對於常用的方法加以封裝,避免直接暴漏SQL語句
  6. 開啟PHP安全模式Safe_mode=on;
  7. 打開magic_quotes_gpc來防止SQL注入 Magic_quotes_gpc=off;默認是關閉的,它打開后將自動把用戶提交的sql語句的查詢進行轉換,把'轉為\',這對防止sql注入有重 大作用。因此開啟:magic_quotes_gpc=on;
  8. 控制錯誤信息關閉錯誤提示信息,將錯誤信息寫到系統日志。
  9. 使用mysqli或pdo預處理。

5)、用PHP寫出一個安全的用戶登錄系統需要注意哪些方面。

  1. 密碼要使用MD5(密碼+字符串)進行加 密。
  2. 登錄表單的名稱不要跟數據庫字段一樣,以免暴漏表字段。
  3. 用戶表的表名、字段名、密碼盡量用不容易被猜到的。
  4. 要使用驗證碼驗證登陸,以防止 暴力破解。
  5. 驗證提交的數據是不是來自本網站。
  6. 登錄后台處理代碼數據庫部分使用預處理,做好過濾,防止sql注入。

6)、$_SERVER

$indicesServer = array('PHP_SELF',
    'argv',
    'argc',
    'GATEWAY_INTERFACE',
    'SERVER_ADDR',
    'SERVER_NAME',
    'SERVER_SOFTWARE',
    'SERVER_PROTOCOL',
    'REQUEST_METHOD',
    'REQUEST_TIME',
    'REQUEST_TIME_FLOAT',
    'QUERY_STRING',
    'DOCUMENT_ROOT',
    'HTTP_ACCEPT',
    'HTTP_ACCEPT_CHARSET',
    'HTTP_ACCEPT_ENCODING',
    'HTTP_ACCEPT_LANGUAGE',
    'HTTP_CONNECTION',
    'HTTP_HOST',
    'HTTP_REFERER',
    'HTTP_USER_AGENT',
    'HTTPS',
    'REMOTE_ADDR',
    'REMOTE_HOST',
    'REMOTE_PORT',
    'REMOTE_USER',
    'REDIRECT_REMOTE_USER',
    'SCRIPT_FILENAME',
    'SERVER_ADMIN',
    'SERVER_PORT',
    'SERVER_SIGNATURE',
    'PATH_TRANSLATED',
    'SCRIPT_NAME',
    'REQUEST_URI',
    'PHP_AUTH_DIGEST',
    'PHP_AUTH_USER',
    'PHP_AUTH_PW',
    'AUTH_TYPE',
    'PATH_INFO',
    'ORIG_PATH_INFO') ;
 
echo '<table cellpadding="10">' ;
foreach ($indicesServer as $arg) {
    if (isset($_SERVER[$arg])) {
        echo '<tr><td>'.$arg.'</td><td>' . $_SERVER[$arg] . '</td></tr>' ;
    }
    else {
        echo '<tr><td>'.$arg.'</td><td>-</td></tr>' ;
    }
}
echo '</table>' ;

7)、下面說法不正確的是:C

  A. PHP有四種標量類型:布爾型(boolean),整型(integer),浮點型(float),字符串(string)

  B. 浮點型(float)與雙精度型(double)是同一種類型

  C. 符合類型包括:數組(array),對象(object),資源(resource)

  D. 偽類型:混合型(mixed),數字型(number),回調(callback)

參考:http://blog.csdn.net/snn1410/article/details/7728971

8)SESSION與 COOKIE的區別是什么,請從協議,產生的原因與作用說明?

  1. http無狀態協議,不能區分用戶是否是從同一個網站上來的,同一個用戶請求不同的 頁面不能看做是同一個用戶。
  2. SESSION保存在服務器端,COOKIE保存在客戶端,SESSION依賴COOKIE進行傳輸,如果COOKIE被 禁用了,SESSION將不能繼續使用。

9)HTTP狀態中302、403、 500代碼含義?

  300重定向、403服務器拒絕訪問、500服務器內部錯誤。

10)Linux 下建立壓縮包,解壓縮包的命令。

  壓縮:gzip 、tar -cvfz、zip、bzip22、解壓:gunzip、tar -zxvf、unzip、bunzip2

 

---------------------
作者:EVKJ
來源:CSDN
原文:https://blog.csdn.net/evkj2013/article/details/72866713
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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