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

大廠 PHP 面試題精選:基礎、SQL、框架、架構全覆蓋

     編輯:PHP 相關知識

大廠 PHP 面試題精選:基礎、SQL、框架、架構全覆蓋

匯總多家一線互聯網公司 PHP 面試真題,涵蓋語言基礎、數據庫優化、框架原理、系統架構、演算法等核心考點,附參考答案與解析,助你高效備戰。

一、PHP 語言核心

1. COOKIE 禁用後 SESSION 是否可用?

答案:默認不可用。SESSION 依賴 COOKIE 傳遞 PHPSESSID,禁用後需通過 URL 傳遞 session_id 或隱藏表單字段實現,安全性極差,生產環境不推薦。

2. 抓取遠程圖片到本地用什麼函數?

答案:file_get_contents() + file_put_contents()(簡單場景);大文件/高併發用 curl 流式下載或 Guzzle 異步客戶端。

3. POST/GET 最大傳輸容量?

答案:GET 受限於瀏覽器/服務器 URL 長度(約 2KB~8KB);POST 理論無上限,實際受 post_max_size(默認 8M)、upload_max_filesize、memory_limit、Nginx client_max_body_size 限制。

4. 最少代碼求三值最大值

function max3($a, $b, $c) {
    return max($a, $b, $c); // 內置函數最優
    // 或三元運算符:return $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c);
}

5. 經典弱類型陷阱

$s = 'abc';
if ($s == 0) echo 'is zero'; // 輸出 is zero!
// 原因:字符串轉數字為 0,使用 === 嚴格比較避免

二、數據庫與 SQL

6. 兩日期差值計算

$begin = strtotime('2007-2-5');
$end = strtotime('2007-3-6');
echo ($end - $begin) / 86400; // 86400 = 24*3600

7. 下劃線轉駝峰

function toCamel($str) {
    return str_replace(' ', '', ucwords(str_replace('_', ' ', $str)));
}
// open_door → OpenDoor

8. 二維數組按 fid 分組重構

function regroup($arr) {
    $result = [];
    foreach ($arr as $v) {
        $result[$v['fid']][] = ['tid' => $v['tid'], 'name' => $v['name']];
    }
    return array_values($result);
}

9. 數據庫三大範式

  • 1NF:屬性不可再分(原子性)
  • 2NF:非主鍵完全依賴主鍵(無部分依賴)
  • 3NF:非主鍵不傳遞依賴主鍵(無傳遞依賴)

實際項目通常遵循 3NF,適當反範式化換查詢性能。

10. SQL 查詢某 ID 記錄數(存儲過程/視圖)

-- 存儲過程
CREATE PROCEDURE proc_countNum(IN columnId INT, OUT rowsNo INT)
BEGIN SELECT COUNT(*) INTO rowsNo FROM member WHERE member_id = columnId; END;

-- 視圖
CREATE VIEW v_countNum AS SELECT member_id, COUNT(*) AS countNum FROM member GROUP BY member_id;

11. 取三列最大值 SQL

SELECT GREATEST(A, B, C) AS max_val FROM table; -- MySQL 專用
-- 通用 CASE WHEN 寫法見原文

12. SQL 優化核心手段

  1. 索引優化(覆蓋索引、最左前綴)
  2. 避免 SELECT *、ORDER BY RAND()、大表 JOIN
  3. 分表分庫、讀寫分離、緩存熱點數據
  4. EXPLAIN 分析執行計劃

三、框架與組件

13. Smarty 模板遍歷

{section name=loop loop=$data}
  {$data[loop].id} - {$data[loop].name}
{/section}

{foreach from=$data item=val key=k}
  {$k} - {$val.id} - {$val.name}
{/foreach}

14. 遞歸遍歷目錄

function scanDir($dir) {
    $files = [];
    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)) as $file) {
        $files[] = $file->getPathname();
    }
    return $files;
}

四、系統與架構

15. 進程 vs 線程

  • 進程:資源分配基本單位,獨立地址空間,切換開銷大
  • 線程:CPU 調度基本單位,共享進程資源,切換快,需鎖同步
  • PHP-FPM 多進程模型,Swoole 協程實現用戶態線程

16. 冒泡排序實現

$a = [10,2,36,14,10,25,23,85,99,45];
for ($j=0; $j $a[$i+1]) {
            [$a[$i], $a[$i+1]] = [$a[$i+1], $a[$i]]; // PHP 7.1+ 解構賦值交換
        }
    }
}

17. 大流量架構應對

  1. 硬件擴容(CDN、負載均衡、集群)
  2. 數據庫優化(主從、分表、緩存)
  3. 靜態化、頁面緩存、對象緩存
  4. 異步化(隊列削峰)
  5. 限流熔斷(Sentinel、令牌桶)

五、新浪/騰訊等大廠經典題

  • echo count("abc") → 1(字符串視為單元素數組)
  • 客戶端 IP:$_SERVER['REMOTE_ADDR'](注意代理下需讀 HTTP_X_FORWARDED_FOR)
  • error_reporting(2047) ≡ E_ALL
  • PHP/Java 交互:SOAP、Thrift、gRPC、JNI、消息隊列
  • Safe Mode 影響:文件操作、執行函數受限
  • 郵箱正則:/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
  • 二維數組排序:array_multisort() 或 usort()
  • 猴子選大王(约瑟夫環):數組模擬或數學公式 f(n,m) = (f(n-1,m)+m)%n

面試加分項

  1. 手寫熟悉框架核心源碼(路由分發、容器解析、中間件管道)
  2. 參與過開源項目或編寫過 Composer 包
  3. 有高併發、大數據量實戰優化案例
  4. 理解 PHP 底層(Zend VM、內存管理、GC 機制)
  5. 具備全棧視野:前端構建、DevOps、K8s、監控體系

面試不只是背題,更是展示工程思維與解決問題能力的過程。祝你拿到心儀 Offer!

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