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

PHP 面試必考三大經典題目:相對路徑計算、分頁原理、請求方式判斷

     編輯:PHP 相關知識

整理 PHP 面試高頻三大核心筆試題,含標準答案、代碼實現、邊界情況處理與擴展思考,助你面試從容應對。

題目一:計算兩個路徑之間的相對路徑

需求:給定兩個絕對路徑 $a、$b,計算 $b 相對於 $a 的相對路徑。

示例:
$a = '/a/b/c/d/e.php'
$b = '/a/b/12/34/c.php'
結果:../../12/34/

標準實現

<?php
function getRelativePath($from, $to) {
    // 規範化:去除尾部斜槓、分割為陣列
    $fromParts = array_filter(explode('/', rtrim($from, '/')));
    $toParts   = array_filter(explode('/', rtrim($to, '/')));
    
    // 找出共同前綴長度
    $commonLen = 0;
    $minLen = min(count($fromParts), count($toParts));
    for ($i = 0; $i < $minLen; $i++) {
        if ($fromParts[$i] === $toParts[$i]) $commonLen++;
        else break;
    }
    
    // 構建相對路徑:向上級目錄 + 目標剩餘路徑
    $upLevels = count($fromParts) - $commonLen;
    $relative = str_repeat('../', $upLevels);
    $relative .= implode('/', array_slice($toParts, $commonLen));
    
    // 如果目標是檔案,保留檔案名;如果是目錄,補尾部斜槓
    if (substr($to, -1) !== '/') {
        // 已包含檔案名
    } else {
        $relative .= '/';
    }
    return $relative;
}

// 測試
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
echo getRelativePath($a, $b); // 輸出:../../12/34/c.php
?>

面試加分點

  • 處理 .、..、多重斜槓、符號連結
  • 使用 realpath() 規範化後再計算
  • 考慮跨磁碟(Windows)無相對路徑情況
  • PHP 5.6+ 可直接用 Symfony\Component\Filesystem\Filesystem::getRelativePath()

題目二:MySQL 分頁原理與優化

核心公式

SELECT * FROM table LIMIT offset, pageSize
offset = (currentPage - 1) * pageSize

深度追問與優化

問題標準答案進階優化
大偏移量性能下降LIMIT 1000000, 20 需掃描 100 萬行延遲關聯:SELECT * FROM t INNER JOIN (SELECT id FROM t LIMIT 1000000, 20) tmp USING(id)
總數統計慢COUNT(*) 全表掃描資訊表估算、緩存總數、近似計數
游標分頁OFFSET 基礎WHERE id > last_id ORDER BY id LIMIT 20 無偏移量掃描
並發一致性數據插入/刪除導致頁面漂移快照隔離、版本號、游標標識

題目三:判斷 HTTP 請求方法(GET/POST/PUT/DELETE)

標準寫法

<?php
$method = $_SERVER['REQUEST_METHOD']; // 'GET', 'POST', 'PUT', 'DELETE', 'PATCH'...
if ($method === 'POST') {
    // 處理 POST
}
?>

框架封裝參考

  • Laravel:$request->method() / $request->isMethod('post')
  • Symfony:$request->getMethod()
  • ThinkPHP:Request::instance()->method()
  • 原生擴展:function isPost() { return $_SERVER['REQUEST_METHOD'] === 'POST'; }

陷阱提醒

  • $_POST 非空 ≠ POST 請求(PUT/DELETE 也可能填充)
  • 表單 method="post" + _method=put 模擬 PUT 需框架中介軟體支援
  • CLI 模式下 REQUEST_METHOD 不存在

面試心法

  1. 先寫出核心邏輯,再補邊界處理
  2. 說出時間/空間複雜度
  3. 主動提出優化方案(如分頁的延遲關聯)
  4. 引用實際專案經驗佐證

這三題覆蓋字串處理、SQL 優化、HTTP 協議三大後端核心能力,吃透即過關。

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