不只是寫 PHP,要懂整個技術棧的運作原理
PHP 面試早已超越「echo、array、include/require 差別」的基礎層面。高級工程師需具備全棧視野:從請求進入 Nginx、經 PHP-FPM、到 MySQL 執行計畫、Linux 內核參數、網路協議、緩存架構、演算法建模、框架原理、C 底層擴充開發。本文梳理大廠面試高頻知識點,助你查漏補缺、建立知識體系。
一、PHP 語言核心
- 版本差異:5.6 → 7.0 (Zend Engine 3, 純量型別, 錯誤異常化) → 7.4 (預載入, 箭頭函式) → 8.0 (JIT, 屬性, 聯集型別, match, Named Arguments) → 8.2/8.3 新特性。
- 記憶體管理:引用計數、GC 循環回收、
gc_collect_cycles()、記憶體洩漏排查(xdebug、memory_get_usage)。
- OPcache 原理:共享記憶體存儲 opcode、
opcache.validate_timestamps、預載入 opcache.preload。
- 擴充開發:PHP-CPP、Zend API、
phpize、config.m4、生命週期函數(MINIT, RINIT, RSHUTDOWN, MSHUTDOWN)。
- 型別系統:弱型別陷阱、嚴格模式
declare(strict_types=1)、TypeError 處理。
二、MySQL 深度
- 索引:B+ 樹結構、最左前綴、覆蓋索引、索引下推 (ICP)、條件下推、
EXPLAIN 關鍵欄位(type, key, rows, Extra)。
- 引擎:InnoDB (聚簇索引、MVCC、間隙鎖、Next-Key Lock、redo/undo log、雙寫緩衝) vs MyISAM。
- 事務:ACID、隔離級別 (RC, RR)、幻讀、MVCC 實現、死鎖檢測與避免。
- 高併發:分庫分表 (ShardingSphere、中間件)、讀寫分離、主從同步 (GTID、半同步)、備份策略 (XtraBackup、Binlog)。
- 慢查詢優化:
slow_query_log、pt-query-digest、SHOW PROFILE、索引優化、SQL 改寫、分頁優化 (延遲關聯、游標)。
三、HTTP/網路協議
- 三次握手、四次揮手、TIME_WAIT 意義、
SO_REUSEADDR。
- HTTP/1.1 vs HTTP/2 (多路複用、頭部壓縮、Server Push) vs HTTP/3 (QUIC、UDP、0-RTT)。
- 狀態碼:1xx/2xx/3xx/4xx/5xx 精確語義、
301/302/307/308 差異。
- Header:
Cache-Control、ETag、Last-Modified、Content-Security-Policy、Referrer-Policy、Set-Cookie (SameSite, Secure, HttpOnly)。
- 長連接:
Connection: keep-alive、Nginx keepalive_timeout、PHP-FPM fastcgi_keep_conn。
四、Linux 系統與運維
- Shell 腳本:
awk/sed/grep 文字處理、cron 定時任務、systemd 服務管理。
- 效能分析:
top/htop、vmstat/iostat/mpstat、pidstat、perf、strace/ltrace、tcpdump/Wireshark。
- 瓶頸定位:CPU (us/sy/wa)、記憶體 (free/buff/cache)、磁碟 IO (await/util)、網路 (带寬/丟包/重傳)。
- 高併發調優:
ulimit -n、/proc/sys/net/core/somaxconn、tcp_tw_reuse、tcp_fin_timeout、Nginx worker_processes/worker_connections。
五、Web 容器:Nginx vs Apache
- 架構:Nginx 事件驅動 (epoll/kqueue) vs Apache Prefork/Worker/Event MPM。
- 靜態資源:Nginx 極致快;動態 PHP:Nginx + PHP-FPM (FastCGI) vs Apache mod_php。
- 配置:Nginx 簡潔聲明式;Apache .htaccess 分散式配置。
- 請求全鏈路:DNS → TCP/TLS → Nginx → FastCGI → PHP-FPM → Opcode → Zend VM → Extension → MySQL → 回傳。
六、C 語言與底層
- 指標、記憶體佈局 (堆/棧/數據/代碼)、結構體對齊、函數棧幀。
- PHP 內核:
zval、HashTable、zend_string、zend_array、zend_function、zend_class_entry。
- 高效框架:Yaf (C 擴充)、Swoole (C 協程)、PhpStorm 內建分析器。
七、演算法與資料結構
- 排序:快排、歸併、堆排、計數排序、時間/空間複雜度、穩定性。
- 查找:二分、BST、紅黑樹、B+樹、Trie、佈隆過濾器。
- 動態規劃:背包、最長公共子序列、爬樓梯、編輯距離。
- 圖:BFS/DFS、拓撲排序、最短路徑 (Dijkstra, A*)、最小生成樹。
- 經典智力題:30 瓶水 1 瓶毒 → 5 隻老鼠 (2^5=32);n 階樓梯 1~m 步 → DP/矩陣快速冪。
八、系統架構設計
- 短鏈接系統:雪花演算法/基數 62 編碼、布隆過濾器防穿透、Redis 集群、MySQL 分表、QR Code 生成、訪問統計。
- 投票系統:Redis 原子計數
INCR、Lua 腳本防重複、異步寫入 MySQL、熱點 Key 拆分。
- 秒殺/搶購:令牌桶限流、Redis 預扣庫存、MQ 削峰、資料庫樂觀鎖、最終一致性補償。
- 分散式一致性:CAP、BASE、兩階段提交 (2PC)、TCC、Saga、Raft/Paxos。
九、框架原理
- Laravel:服務容器 (IoC)、門面、契約、服務提供者、中介軟體、Eloquent ORM、調度器、Octane (Swoole/RoadRunner)。
- ThinkPHP:路由、中介軟體、模型、驗證器、指令、事件、多應用模式。
- Yii2:元件、行為、模組、ActiveRecord、RBAC、Gii 代碼生成。
- 原理通用:前端控制器、依賴注入、AOP、事件驅動、ORM 映射、遷移、測試。
十、前端基礎
- HTML5 語義化、Canvas/WebGL、CSS3 Flex/Grid/動畫、BEM/ITCSS 架構。
- JS 原型鏈、閉包、Event Loop (Micro/Macro Task)、Promise/Async-Await、模組化 (ESM/CommonJS)。
- Vue 3 Composition API、React Hooks、Vite/Webpack 建構、TypeScript 型別系統。
十一、緩存中介軟體
- Redis:資料結構 (SDS, List, Dict, SkipList, Ziplist)、持久化 (RDB/AOF/混合)、主從/哨兵/Cluster、Lua 腳本原子性、分散式鎖 (Redlock)、大 Key 刪除 (UNLINK/SCAN)。
- Memcached:多執行緒、Slab Allocator、LRU、一致性雜湊、無持久化、適合純快取場景。
- 選型:需持久化/複雜結構/發布訂閲/流 → Redis;純 Key-Value、極高併發、多核 → Memcached。
學習建議:功夫在平時
- 建立個人知識庫(Notion/Obsidian/GitBook),按模組整理、定期複習。
- 閱讀源碼:從
vendor/laravel/framework、ext/standard、Zend/zend_vm_execute.h 入手。
- 動手造輪子:手寫簡易 MVC、連接池、協程調度器、Redis Client。
- 參與開源:提交 PR、修復 Bug、翻譯文檔。
- 模擬面試:找夥伴互相出題、白板寫碼、講解思路、計時訓練。
面試是檢驗,更是契機。將零散知識串聯成體系,平時多問「為什麼」、「底層怎麼實現」、「還有什麼替代方案」,臨陣自然從容。Good Luck!