資深 PHP 後端工程師面試指南:Linux 篇
在資深 PHP 後端工程師的面試中,Linux 相關知識是展現技術深度與系統管理能力的重要部分。本文根據 Albert Chen 的 PHP/後端工程師面試指南 與其他面試經驗,整理出 Linux 核心知識的七大追問方向,並提供模擬問答、程式碼範例與實戰建議,幫助你在面試中脫穎而出。這份指南也適用於技術創作者,將內容轉化為影片或部落格教學。
1. Linux 系統操作與原理
問題:你如何排查 Linux 系統資源異常?
回答要點:
- 使用工具如
top
、htop
、vmstat
、iotop
和strace
進行系統資源監控與診斷。 - 按 CPU、記憶體、I/O 或網路逐層排查,展現邏輯化分析能力。
- 強調問題定位的步驟化思維與工具選擇的優先級。
模擬答案:
- 初步檢查:執行
top
或htop
,觀察 CPU、記憶體使用率及高負載進程。例如,若 CPU 使用率高,記下相關進程的 PID。 - 深入分析:針對 CPU 問題,用
pidstat -u
查看進程 CPU 佔用;針對 I/O 瓶頸,用iotop -o -a
檢查磁碟讀寫。 - 網路排查:用
ss -tuln
或netstat
檢查異常連線或端口佔用。 - 進階診斷:若進程行為異常,用
strace -p <pid>
追蹤系統調用,找出問題根源。
範例程式碼:
# 查看系統資源使用情況
top -b -n 1 | head -n 10
# 檢查磁碟 I/O
iotop -o -a
# 追蹤進程系統調用
strace -p 12345 -o strace.log
實戰建議:在面試中,說明排查順序(如「先看整體負載,再聚焦具體進程」),並提及如何根據工具輸出快速定位問題。
2. Shell Script 與 Bash 熟練度
問題:請寫一段 script 來監控某個服務是否存活,並自動重啟。
回答要點:
- 展示
#!/bin/bash
、條件語句、迴圈、錯誤處理與日誌記錄。 - 強調腳本的可維護性與健壯性(如使用
set -e
確保錯誤退出)。 - 提到
cron
或systemd timer
進行定期執行。
模擬答案:
- 使用
pgrep
或systemctl status
檢查服務狀態。 - 若服務停止,記錄日誌並用
systemctl restart
重啟。 - 設定
cron
排程(如每分鐘檢查一次)或使用systemd timer
確保持續監控。
範例程式碼:
#!/bin/bash
SERVICE="nginx"
LOG_FILE="/var/log/service_monitor.log"
# 檢查服務是否存活
if ! pgrep -x "$SERVICE" > /dev/null; then
echo "[$(date)] $SERVICE is down, restarting..." >> "$LOG_FILE"
systemctl restart "$SERVICE"
if [ $? -eq 0 ]; then
echo "[$(date)] $SERVICE restarted successfully" >> "$LOG_FILE"
else
echo "[$(date)] Failed to restart $SERVICE" >> "$LOG_FILE"
fi
else
echo "[$(date)] $SERVICE is running" >> "$LOG_FILE"
fi
實戰建議:將腳本存為 monitor_service.sh
,用 chmod +x
賦予執行權限,並設定 cron
(如 */1 * * * * /path/to/monitor_service.sh
)。面試時可提及如何透過日誌追蹤問題。
3. 權限與使用者管理
問題:請說明 Linux 權限 755 與 644 的差異。
回答要點:
- 解釋 Linux 權限結構(r=4, w=2, x=1)與三組對象(owner、group、others)。
- 對比 755(可執行檔案/目錄)與 644(普通檔案)的應用場景。
- 提到
chmod
、chown
和visudo
的使用,強調最小權限原則。
模擬答案:
- 權限結構:Linux 權限由三組數字表示,分别對應 owner、group 和 others 的讀(r=4)、寫(w=2)、執行(x=1)權限。
- 755:擁有者可讀寫執行(7=4+2+1),群組與其他人可讀執行(5=4+1)。適用於腳本或目錄(如
/usr/bin
)。 - 644:擁有者可讀寫(6=4+2),群組與其他人只可讀(4)。適用於設定檔或靜態檔案(如
/etc/nginx/nginx.conf
)。 - 應用實例:用
chmod 755 script.sh
確保腳本可執行;用chmod 644 config.ini
保護設定檔。
範例程式碼:
# 設定執行腳本權限
chmod 755 /path/to/script.sh
# 設定設定檔權限
chmod 644 /path/to/config.ini
# 檢查權限
ls -l
實戰建議:面試時可補充如何用 chown
更改檔案擁有者,或用 visudo
限制 sudo 指令,展現安全意識。
4. 網路與防火牆設定
問題:如何設定 Linux 防火牆只允許特定 IP 存取某個 port?
回答要點:
- 熟悉
iptables
、firewalld
或ufw
的使用。 - 說明規則的優先級與持久化保存。
- 展現對網路安全的理解(如限制不必要的端口訪問)。
模擬答案:
- 使用
iptables
設定規則,允許特定 IP(如192.168.1.100
)訪問 80 端口,其他全部拒絕。 - 使用
service iptables save
或iptables-save
持久化規則。 - 若使用
firewalld
,則用firewall-cmd
實現相同功能。
範例程式碼(以 iptables 為例):
# 允許特定 IP 訪問 80 端口
iptables -A INPUT -p tcp --dport 80 -s 192.168.1.100 -j ACCEPT
# 拒絕其他 IP 訪問 80 端口
iptables -A INPUT -p tcp --dport 80 -j DROP
# 保存規則
service iptables save
實戰建議:面試時可提到 iptables
與 firewalld
的差異(前者更底層,後者更易用),並補充如何用 nftables
替代舊系統。
5. 效能與資源監控
問題:請說明 load average 的意義。
回答要點:
- 定義
load average
(1、5、15 分鐘的平均負載)與其反映的系統狀態。 - 解釋如何結合 CPU 核心數解讀負載。
- 介紹相關工具如
uptime
、sar
、dstat
。
模擬答案:
- 定義:
load average
表示過去 1、5、15 分鐘內等待 CPU 或 I/O 的平均進程數,顯示於uptime
輸出。 - 解讀:在一台 4 核 CPU 的系統上,load average 為 4.0 表示 CPU 負載飽和;若超過 4.0,則有進程在排隊。
- 排查:用
top
檢查進程佔用,用sar -q
分析歷史負載趨勢,用iotop
檢查 I/O 瓶頸。
範例程式碼:
# 查看 load average
uptime
# 輸出示例:load average: 1.50, 2.00, 1.80
# 採樣負載數據
sar -q 1 3
實戰建議:面試時可補充如何根據 load average
判斷系統瓶頸(CPU 或 I/O),並提及如何用 dstat
監控即時資源使用。
6. 部署與 CI/CD 整合
問題:你如何在 Linux 上部署 Laravel 應用?
回答要點:
- 熟悉 PHP 環境(PHP-FPM、Nginx、MySQL)與 Laravel 部署流程。
- 提到
supervisor
管理 Queue 進程與systemctl
管理服務。 - 展示 CI/CD 工具(如 GitHub Actions)的整合經驗。
模擬答案:
- 環境準備:安裝 PHP 8.1、Composer、Nginx、MySQL,啟用
php-fpm
。 - 應用部署:用
git clone
拉取程式碼,執行composer install
,設定.env
檔案,運行php artisan migrate
。 - 伺服器配置:配置 Nginx 指向 Laravel 的
public
目錄,確保php-fpm
正常運作。 - 進程管理:用
supervisor
管理 Laravel Queue,設定systemctl
啟動服務。
範例程式碼(Nginx 配置):
server {
listen 80;
server_name example.com;
root /var/www/laravel/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
實戰建議:面試時可補充如何用 GitHub Actions 自動化部署(如運行測試、推送程式碼到伺服器),展現 DevOps 能力。
7. 容器與虛擬化
問題:你如何在 Linux 上使用 Docker Compose 部署多服務?
回答要點:
- 解釋 Docker 的 namespace、cgroups 與 image layering 原理。
- 展示
docker-compose.yml
的撰寫,涵蓋服務、網路與卷管理。 - 提到容器化的優勢(如環境一致性、可移植性)。
模擬答案:
- 定義服務:撰寫
docker-compose.yml
,包含 PHP、Nginx、MySQL 等服務。 - 網路與卷管理:使用 Docker 網路確保服務間通信,設定持久化卷存儲 MySQL 數據。
- 啟動與管理:用
docker-compose up -d
啟動,檢查容器狀態與日誌。
範例程式碼:
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
networks:
- app-network
php:
image: php:8.1-fpm
volumes:
- ./app:/var/www/html
networks:
- app-network
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
db_data:
實戰建議:面試時可補充如何用 docker logs
或 docker exec
排查容器問題,並提到 Docker 與 VM 的性能差異。
總結與面試建議
面試技巧
- 結構化回答:將答案分為「定義 → 步驟 → 範例」,展現邏輯清晰。
- 展示實戰經驗:結合具體案例(如部署 Laravel 或排查高負載)讓回答更具說服力。
- 強調安全與最佳實踐:如最小權限原則、規則持久化、日誌記錄等。
進階學習資源
- Linux 基礎:閱讀
man
頁面(如man iptables
)、《Linux System Programming》。 - 容器化:參考 Docker 官方文件與《Docker in Action》。
- 效能監控:學習
sar
、prometheus
等進階工具。
透過反覆練習這些模擬問答,並結合實戰案例,你將能在面試中自信展現 Linux 技能!若需將本文轉化為影片腳本或補充視覺化圖表,請隨時告訴我。
沒有留言:
張貼留言