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

高階 PHP 面試題精選:HTTP、架構、資料庫、Linux、前端全方位

     編輯:PHP 相關知識

整理高階 PHP 工程師面試常考題目,涵蓋 HTTP 協定、Web 架構、MySQL 優化、專案經驗、Linux 基礎、前端核心等六大維度,附參考答案與延伸思考方向。

一、HTTP 協定與基礎知識

1.1 常見狀態碼含義

碼含義典型場景
200OK請求成功
301Moved Permanently永久重導向,SEO 權重傳遞
302Found暫時重導向
401Unauthorized需登入/Token 失效
403Forbidden權限不足
404Not Found資源不存在
500Internal Server Error程式錯誤/異常未捕獲
503Service Unavailable維護中/過載/熔斷

1.2 include/require 差異

  • require:失敗產生 E_COMPILE_ERROR,腳本終止。
  • include:失敗產生 E_WARNING,腳本繼續。
  • _once:同一請求僅載入一次,防止重複定義。

1.3 PHP 版本演進重點

  • PHP 4 → 5:引入 OOP 完整模型、__construct、__destruct、介面、抽象類、靜態成員、異常處理、PDO。
  • PHP 5.3:命名空間、匿名函數、Late Static Binding、goto、__invoke。
  • PHP 5.4:Trait、短陣列語法 []、內建 Web Server、JsonSerializable。
  • PHP 7.0:Zend Engine 3、標量/回傳型別宣告、??、<=>、匿名類、效能提升 2x。
  • PHP 8.0:JIT、Union Types、Named Arguments、Attributes、Match Expression、Constructor Property Promotion。

1.4 Heredoc / Nowdoc

<<<EOD
多行字串,支援變數解析
EOD;

<<<'EOD'
Nowdoc:不解析變數,類似單引號
EOD;

結束標識必須頂格、獨佔一行、無前後空白、可加分號。

1.5 Magic Methods 速查

__construct, __destruct, __call, __callStatic,
__get, __set, __isset, __unset,
__sleep, __wakeup, __toString, __invoke,
__set_state, __clone, __debugInfo

1.6 編譯 PHP 常用 configure 參數

--prefix=/usr/local/php
--with-config-file-path=/usr/local/php/etc
--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd
--enable-fpm --with-fpm-user=www --with-fpm-group=www
--enable-mbstring --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem
--enable-inline-optimization --enable-opcache
--with-curl --with-zlib --with-openssl --with-gd --with-jpeg --with-png --with-freetype
--with-libxml --with-xmlrpc --with-zip --with-bz2
--disable-rpath --disable-debug

1.7 CLI 參數傳遞三法

  1. $argc/$argv:原始陣列,需自行解析。
  2. getopt('f:g:'):支援短選項,回傳關聯陣列。
  3. fwrite(STDOUT, ...) + fgets(STDIN):互動式提示輸入。

1.8 MySQL 型別與 Char/Varchar 差異

型別說明
INT整數
CHAR(n)固定長度,不足右補空格,存取快但浪費空間
VARCHAR(n)可變長度,額外 1-2 字節記錄長度,節省空間
DATETIME日期時間,8 字節,範圍 1000-9999 年
TEXT長文本,64KB,存儲在溢出頁面

1.9 error_reporting 運用

error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);  // 生產建議
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');

1.10 版本控制工具

Git (主流)、SVN (舊專案)、Mercurial。掌握 rebase、cherry-pick、bisect、hook 進階用法。

1.11 POSIX vs PCRE 正則差異

  • POSIX (ereg_*):PHP 5.3 棄用、7.0 移除,較慢、功能少。
  • PCRE (preg_*):Perl 相容、效能優、功能全、現代標準。

1.12 Safe Mode 限制 (已移除)

PHP 5.4 移除。歷史限制:UID 檢查、exec/system 禁用、fopen 限同擁有者檔案。

1.13 多進程檔案鎖

$fp = fopen('/tmp/lock.txt', 'w+');
if (flock($fp, LOCK_EX)) {
    fwrite($fp, "data\n");
    flock($fp, LOCK_UN);
} else {
    echo "Lock failed";
}
fclose($fp);

1.14 檔案上傳核心代碼

// HTML: enctype="multipart/form-data" + input type="file"
// PHP:
$uploads = '/uploads';
foreach ($_FILES['file']['error'] as $key => $err) {
    if ($err === UPLOAD_ERR_OK) {
        move_uploaded_file($_FILES['file']['tmp_name'][$key], "$uploads/{$_FILES['file']['name'][$key]}");
    }
}

1.15 MyISAM vs InnoDB

特性MyISAMInnoDB
Transaction不支援支援 (ACID)
Lock LevelTable LockRow Lock
FK不支援支援
FULLTEXT支援 (5.6+ InnoDB 也支援)5.6+ 支援
Count(*)極快 (儲存行數)需掃描/估算
Crash Recovery無Redo/Undo Log

二、Web 架構、安全、專案經驗

2.1 快取擴充套件經驗

  • APCu:本機使用者空間快取,單機極快,無分散式。
  • Redis:分散式、資料結構豐富、支援持久化、Pub/Sub、Lua 腳本。
  • Memcached:純記憶體 KV、多執行緒、無持久化、簡單高效。
  • OpCache:PHP 內建 Bytecode 快存,生產必開。

2.2 mod_rewrite 實戰

# .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^archives/(\d+)\.html$ index.php?id=$1 [L,QSA]

前提:AllowOverride All、載入 mod_rewrite 模組。

2.3 千萬級資料表優化策略

  1. 架構:讀寫分離、分庫分表 (Range/Hash)、冷熱資料分離。
  2. 索引:覆蓋索引、避免 SELECT *、EXPLAIN 驗證。
  3. SQL:禁止大事務、拆分大 DELETE/UPDATE、延遲關聯優化分頁。
  4. 快存:Redis 熱點資料、頁面片段快存、CDN 靜態資源。
  5. 異步:寫入 MQ、消費者落庫、最終一致性。

2.4 排序演算法與優化

快速排序 (Quick Sort):平均 O(n log n),原地分區、隨機選 pivot 避免最壞 O(n²)。優化:小陣列改插入排序、三向切分處理重複鍵、尾遞迴消除。

2.5 Session 原理與大型站點注意

  • 原理:session_id 存 Cookie/URL → 檔案/Redis/Memcached 存資料 → GC 機率清理過期。
  • 大站點:集中式 Session 存儲 (Redis Cluster)、關閉檔案鎖 (session.save_handler = redis)、session.write_short_circuit、適當縮短 GC 機率。

2.6 效能測試工具

  • PHP:xhprof/xhgui、Blackfire、Tideways。
  • MySQL:sysbench、tpcc-mysql、EXPLAIN ANALYZE、Performance Schema。
  • 系統:ab/wrk、JMeter、Locust、Prometheus+Grafana。

2.7 正則提取頁面所有連結

preg_match_all('/<a\s[^>]*href\s*=\s*["\']([^"\']+)["\']/i', $html, $matches);
$links = $matches[1];

2.8 SSO 單點登入方案

  • CAS / SAML / OAuth2 / OIDC / JWT。
  • 核心流程:用戶登入 Auth Server → 獲取 Ticket/Token → 子系統驗證 Ticket/Token → 建立局部 Session。
  • 登出:前端通知所有子系統銷毀 Session,或 Auth Server 廣播登出事件。

2.9 自製框架特色

回答要點:解決什麼痛點 (路由、DI、ORM、中介層、模組化)、遵循 PSR、與 Laravel/Symfony/Yii 差異、生產驗證案例。

2.10 相簿上傳系統技術選型

需求技術方案
多檔並發上傳Plupload / WebUploader / Uppy (切片、斷點續傳)
圖片裁剪/壓縮前端 Canvas / 後端 ImageMagick / GD / libvips
壓縮包解壓後端 ZipArchive / exec('unzip')
50M 大檔Nginx client_max_body_size、分片上傳、臨時目錄磁碟空間
進度條XHR upload.onprogress / WebSocket / SSE
多規格縮略圖上傳完成觸發 Queue Worker (Gearman/Redis Queue) 非同步生成
影片轉 FLVFFmpeg 非同步轉碼、預設預覽圖

2.11 猴子圈圈踢出問題 (Josephus Problem)

function josephus($n, $m) {
    $arr = range(1, $n);
    $idx = 0;
    while (count($arr) > 1) {
        $idx = ($idx + $m - 1) % count($arr);
        array_splice($arr, $idx, 1);
    }
    return $arr[0];
}
// 或遞迴數學解:f(1)=0; f(i)=(f(i-1)+m)%i; 答案+1

三、Linux 基礎運維

3.1 系統負載檢視

top / htop          # 即時進程
uptime / w          # 1/5/15min load average
vmstat 1 5          # 虛擬記憶體/CPU/IO
iostat -x 1 5       # 磁碟 IO 細節
sar -u 1 5          # 歷史 CPU
dmesg | tail        # 核心訊息

3.2 Vim 核心操作

Normal/Insert/Visual/Command 模式切換、hjkl、gg/G、/pattern、yy/p/dd、u/Ctrl+r、:%s/old/new/g、:set nu/hls。

3.3 SSH 強化

# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Port 2222
AllowUsers deploy@*
# 客戶端金鑰生成
ssh-keygen -t ed25519 -C "user@host"
ssh-copy-id -p 2222 user@server

3.4 套件管理

系統安裝查詢移除
Debian/Ubuntuapt install pkgapt list --installed / dpkg -lapt remove pkg
CentOS/RHEL 7yum install pkgyum list installed / rpm -qayum remove pkg
CentOS/RHEL 8+dnf install pkgdnf list installeddnf remove pkg
FreeBSDpkg install pkgpkg infopkg delete pkg

3.5 Makefile / GCC

# Makefile 範例
CC = gcc
CFLAGS = -Wall -O2
TARGET = app
OBJS = main.o utils.o

$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^

%.o: %.c
	$(CC) $(CFLAGS) -c $<

clean:
	rm -f $(OBJS) $(TARGET)
  • -O0:無優化,除錯資訊完整,編譯快。
  • -O3:激進優化 (內聯、向量化、循環展開),執行快但編譯久、二進制大、除錯難。

3.6 除錯工具

  • gdb:斷點、堆疊、變數檢查、Core Dump 分析。
  • strace -p PID:系統呼叫追蹤、卡住點定位。
  • valgrind --tool=memcheck:記憶體洩漏、非法存取、未初始化讀取。

四、前端核心

主題關鍵點
CSS 盒模型content/padding/border/margin;box-sizing: border-box 含 padding/border 於 width
Prototype每個函數有 prototype 物件,實例 __proto__ 指向之,形成原型鏈繼承
this 綁定預設綁定、隱式綁定、顯式綁定 (call/apply/bind)、new 綁定、箭頭函數繼承外層
事件流捕獲→目標→冒泡;IE 僅冒泡;stopPropagation()/stopImmediatePropagation()
渲染模式Quirks (無 Doctype) / Standards (HTML5 <!DOCTYPE html>) / Almost Standards
DTD文件類型定義,告訴瀏覽器用哪套規則解析
Hack條件註解 <!--[if IE]>、屬性 Hack *color/_color、@media、_::-ms-reveal
除錯工具Chrome DevTools (Elements/Console/Network/Performance/Application)、React/Vue DevTools

給面試者的建議

廣度決定下限,深度決定上限。
準備時:
1. 將每個知識點轉為「我如何在專案中解決具體問題」的故事。
2. 系統設計題:畫圖 → 估量 → 選型 → 權衡 → 演進。
3. 承認不會,但展示「如何快速學會並驗證」的過程。
4. 基礎不牢,地動山搖 —— 定期回顧 HTTP、TCP、OS、資料結構、演算法。

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