首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 面試筆試題精選 35 道:覆蓋基礎到進階核心考點

     編輯:PHP 相關知識

PHP 面試筆試題精選 35 道

整理自真實面試場景,涵蓋基礎語法、數組/字符串操作、數據庫、HTTP/網絡、OOP、設計模式、性能優化、安全等核心考點,附帶參考答案與解析。

第一部分:基礎語法與核心函數(1-10題)

  1. 獲取遠程圖片到本地常用函數?
    file_get_contents() (allow_url_fopen=On)、cURL (推薦、支持超時/重試/並發)、fopen()/fread() 流式讀取大文件。
  2. 最少代碼求三值最大值?
    max($a, $b, $c) 或三元運算符:$a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c)。
  3. 打印前一天時間,格式:2007年5月10日22:21:21?
    date('Y年m月d日H:i:s', strtotime('-1 day'))。
  4. JS 不支持二維數組如何解決?
    數組嵌套:arr[0] = new Array(); arr[0][0] = 'val'; 或對象模擬。
  5. JS 5秒後自動跳轉 a.html → b.html?
    setTimeout(() => location.href = 'b.html', 5000)。
  6. $_SERVER 常用鍵含義?
    REMOTE_ADDR 客戶端 IP、QUERY_STRING 查詢字符串、DOCUMENT_ROOT 文檔根目錄、REQUEST_URI 請求路徑、HTTP_REFERER 來源頁面、HTTP_USER_AGENT 客戶端標識。
  7. HTTP 1.0 狀態碼 401 含義?返回 404 Header 寫法?
    401 = 未授權;header('HTTP/1.0 404 Not Found');。
  8. 遞歸遍歷目錄所有文件/子目錄?
    見代碼示例(使用 opendir/readdir/is_dir 遞歸,排除 . ..)。
  9. 向數組末尾添加元素?
    $arr[] = 'john'; 或 array_push($arr, 'john');。
  10. error_reporting 作用?
    設置/獲取 PHP 錯誤報告級別,如 E_ALL & ~E_NOTICE & ~E_DEPRECATED。

第二部分:正則、字符串、數組進階(11-20題)

  1. 正則驗證郵箱格式?
    /^[\w\-\.]+@([\w\-]+\.)+[a-zA-Z]{2,6}$/(實際項目建議用 filter_var($email, FILTER_VALIDATE_EMAIL))。
  2. 獲取客戶端 IP 與服務器 IP?
    客戶端:$_SERVER['REMOTE_ADDR'] 或 getenv('REMOTE_ADDR');服務器:gethostbyname($_SERVER['SERVER_NAME'])。
  3. 修改 Session 生命周期 3 種方法?
    ① php.ini: session.gc_maxlifetime ② session_save_path() + session_set_cookie_params() + session_start() ③ setcookie(session_name(), session_id(), time()+$lifetime)。
  4. 獲取遠程頁面內容 2 種方法?
    ① file_get_contents('https://...') (需開啟 allow_url_fopen) ② cURL 更靈活可控。
  5. 傳值 vs 傳引用區別與選擇?
    傳值:函數內修改不影響外部,需複製內存(大數組/對象開銷大);傳引用:修改同步生效,性能優,用 &$var。大數據結構、需修改原值時用引用。
  6. 從 URL 高效提取擴展名?
    pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_EXTENSION) 或 substr(strrchr($url, '.'), 1) 需處理查詢參數。
  7. 5種以上方式獲取文件擴展名?
    pathinfo()、strrchr()、substr(strrpos())、array_pop(explode())、SplFileInfo::getExtension()、strrev(substr(strrev(), 0, strpos(strrev(), '.')))、preg_replace()。
  8. 輸出結果:null==false, ''==0, 0==='0'?
    相等、相等、不相等(=== 比較類型與值)。
  9. varchar vs char 區別與查找效率?
    varchar 變長節省空間,char 定長查找快(無需計算長度偏移),但 char 可能浪費空間,InnoDB 建議 varchar。
  10. JS 創建 Image 標簽 3 種方式?
    new Image()、document.createElement('img')、img.innerHTML = '<img>'(不推薦)。

第三部分:HTML/XHTML、排序、存儲引擎、日期、字符串轉換(21-30題)

  1. XHTML vs HTML 顯著區別?
    ① 必須聲明 DOCTYPE ② 標籤必須閉合 ③ 標籤/屬性小寫 ④ 屬性值必須加引號 ⑤ 嚴格嵌套規則。
  2. 冒泡排序與快速排序實現?
    見代碼(冒泡 O(n²)、快排平均 O(n log n))。
  3. MySQL 常見存儲引擎 ≥3 種?
    MyISAM、InnoDB(默認、事務/行鎖/外鍵)、Memory(Heap)、Archive、CSV、Federated 等。
  4. 計算兩日期差天數 3 種方法?
    (strtotime($d2)-strtotime($d1))/86400、mktime() 組裝時間戳、DateTime::diff() (OO 推薦)。
  5. 下劃線轉駝峰:open_door → OpenDoor?
    str_replace(' ', '', ucwords(str_replace('_', ' ', $str))) 或 implode('', array_map('ucfirst', explode('_', $str)))。
  6. SQL 查詢某 ID 記錄數:存儲過程/視圖實現?
    存儲過程 IN/OUT 參數,視圖 GROUP BY member_id。
  7. JS 歷史前進/後退?
    history.forward()/go(1)、history.back()/go(-1)。
  8. echo count("abc") 輸出?
    1(非數組/不可數對象返回 1,NULL 返回 0)。
  9. 一維整型數組降序排序(高效自實現)?
    優化冒泡(標志位提前退出)、快排、計數排序(範圍已知)、PHP 內置 rsort() 最快。
  10. 項目中加快頁面加載速度的方法?
    靜態化、CDN、數據庫索引/慢查詢優化、Redis 緩存熱點數據、Opcode 緩存、資源合並壓縮、異步加載非關鍵 JS/CSS、keep-alive、Gzip/Brotli 壓縮。

第四部分:變量作用域、OOP 修飾符、HTTP 方法、資源管理(31-35題)

  1. 函數內修改全局 $num=10 不生效原因?
    函數作用域隔離,需 global $num 或 $GLOBALS['num'] 引用。
  2. class 中 static/public/private/protected 區別?
    static 靜態屬於類;public 任意訪問;private 僅本類;protected 本類+子類+父類。
  3. HTTP GET/POST/HEAD 區別?
    HEAD 僅獲取頭部;GET 獲取資源(參數在 URL、長度受限、可緩存);POST 提交數據(體中、無長度限制、非冪等、不緩存)。
  4. 大文件上傳斷點續傳核心思路?
    前端分片 + 後端合併,關鍵:唯一文件標識(Hash)、分片索引、臨時存儲、斷點記錄、合併驗證完整性。
  5. PHP-FPM master/worker 進程模型與優化參數?
    Master 管理 Worker 池;pm=dynamic/ondemand/static;pm.max_children/start_servers/min_spare_servers/max_spare_servers;request_terminate_timeout 防卡死;slowlog 定位慢請求。

備考建議

  • **手寫核心代碼**:排序、單例、自動加載、PDO 預處理、cURL 封裝、Redis 基本操作
  • **理解原理而非背誦**:Opcode 緩存機制、GC 回收算法、MySQL 索引底層、HTTP 協議細節
  • **項目實戰複盤**:高併發怎麼解決?緩存一致性怎麼保證?異常怎麼監控?重構過哪些模塊?
  • **關注新版本特性**:PHP 8.0/8.1/8.2/8.3 新語法(屬性、只讀屬性、DNF 類型、Fiber、Random 擴展等)

將題目轉化為知識點檢索表,查漏補缺,方能在面試中游刃有餘。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved