Meta Production Engineer(PE)岗位的 OA 风格独特——不是 LeetCode 而是"实战脚本 + 系统调试 + 网络追问"。本文不重复"PE Playbook"已经讲过的流程,而是把 2026-Q1 起 17 位学员复盘的 OA 题型逐类拆开,给出代码模板和备考节奏。
一、Meta PE OA 概览
| 维度 | 详情 |
|---|---|
| 平台 | HackerRank / Meta Codepair |
| 时长 | 75 分钟 |
| 题量 | 3 题(脚本 + 系统 + 调试) |
| 推荐语言 | Python 3 / Bash(建议两个都会) |
| 评分 | 单题部分用例 + 通用代码质量分 |
| onsite cutoff | 学员观察 2 全 AC + 1 半 AC 为安全线 |
关键观察:PE OA 比 SDE OA简单但更挑剔风格——一个
cat | grep | awk风格的脚本能拿满分,但写得啰嗦的 Python 反而扣分。
二、3 题分布
Q1: 脚本类(Bash 或 Python) → 20 分钟 约 30%
Q2: 系统问答 + 小程序 → 25 分钟 约 35%
Q3: 调试 / 故障排查 → 30 分钟 约 35%
--------
75 分钟
三、Q1 脚本类高频考点
PE OA 的 Q1 通常考察"日志解析 / 文件批处理"。下面是 2026 出现 5 次以上的题型:
高频真题:从 Nginx 日志统计 Top N 错误源 IP
给定一个 access.log 文件,每行格式:
IP - - [timestamp] "METHOD path" status size。统计 status >= 400 的 IP,按出现次数降序输出前 N 个,同 count 时按 IP 字典序。
import re
from collections import Counter
LOG_LINE = re.compile(r'^(\S+) .*? "\S+ \S+" (\d{3}) ')
def top_error_ips(log_path, n):
counter = Counter()
with open(log_path, encoding="utf-8") as f:
for line in f:
m = LOG_LINE.match(line)
if not m:
continue
ip, status = m.group(1), int(m.group(2))
if status >= 400:
counter[ip] += 1
# 同 count 时按 IP 字典序升序
return sorted(counter.items(), key=lambda kv: (-kv[1], kv[0]))[:n]
时间复杂度:O(L + k log k),L 是日志行数,k 是 distinct IP
Bash 等价版本:
awk '$9 >= 400 {print $1}' access.log | sort | uniq -c | sort -k1 -rn -k2 | head -n "$1"
评分关键:能写出 Bash 一行版本会让面试官印象很深——PE 文化偏好 Unix 哲学。
四、Q2 系统问答 + 小程序
Q2 题面有 5-8 个小问题,混合概念问答 + 代码实现。常见组合:
高频考点拆解
| 主题 | 常见追问 | 代码长度 |
|---|---|---|
| fork / exec | 子进程僵尸态、孤儿进程 | 20 行 Python |
| signal | SIGTERM vs SIGKILL;trap | 15 行 Bash/Python |
| permission | chmod 4755 (setuid) 含义 | 概念为主 |
| 文件描述符 | stdin/stdout/stderr 重定向 | 10 行 Bash |
| cron | 每周 1-5 凌晨 2:30 跑 | 单行 |
示例:监督子进程并优雅重启
import os
import signal
import time
def run_with_supervisor(child_cmd, max_restart=3):
restarts = 0
while restarts <= max_restart:
pid = os.fork()
if pid == 0:
# 子进程
os.execvp(child_cmd[0], child_cmd)
os._exit(127)
# 父进程
try:
_, status = os.waitpid(pid, 0)
except KeyboardInterrupt:
os.kill(pid, signal.SIGTERM)
time.sleep(2)
os.kill(pid, signal.SIGKILL)
break
if os.WIFEXITED(status) and os.WEXITSTATUS(status) == 0:
print("clean exit"); break
restarts += 1
print(f"restart #{restarts} after exit {status}")
time.sleep(min(2 ** restarts, 60)) # 指数退避
else:
print("too many restarts, giving up")
关键:写出指数退避和优雅 SIGTERM → SIGKILL 两个细节,会从中等分跳到高分。
五、Q3 调试 / 故障排查(最难)
Q3 给你一段已经有 bug 的代码或一个故障场景日志,要求定位问题并修复。常见包装:
高频场景
- 死锁:两个线程互相 wait
- 内存泄露:Python global list 没释放
- socket 半关闭:服务端 close 后客户端仍在写
- DNS 解析慢:getaddrinfo 阻塞主线程
- 磁盘满:日志没轮转
示例:定位线上服务"间歇 504"
题面给你 5 段日志,让你找出:
- 哪个组件是 root cause
- 用什么命令定位(
ss -s,dmesg,vmstat,iostat,tcpdump) - 修复方案
学员高分模板:
1. Triage(先稳止血)
- 描述:流量切换到 standby,确保业务可用
- 命令:kubectl scale deployment app --replicas=N
2. Diagnose(定位)
- 看 metric:QPS / latency / error rate / CPU / memory / IO
- 看 log:grep ERROR + 时间窗口
- 看 trace:分布式追踪关联 request ID
3. Root cause
- 一句话总结,可证伪
4. Fix
- 短期修复 + 长期优化
5. Postmortem
- 监控告警是否提前;可不可以加 health check
这套模板适用于 绝大多数 PE 调试题——背下来。
六、网络考点速查
| 知识点 | 必背 |
|---|---|
| TCP 三次握手 | SYN → SYN-ACK → ACK;状态 LISTEN/SYN_SENT/SYN_RECV/ESTABLISHED |
| TCP 四次挥手 | FIN → ACK → FIN → ACK;TIME_WAIT 2MSL |
| DNS | recursive vs iterative;TTL;A / AAAA / CNAME / MX |
| HTTP/2 vs HTTP/3 | multiplexing;HoL blocking;QUIC over UDP |
| TLS 1.3 | 1-RTT handshake;0-RTT replay 风险 |
| 防火墙 / iptables | INPUT/OUTPUT/FORWARD chain;NAT |
七、4 周备考路线
Week 1: Bash 基础(grep/awk/sed/cut)+ 日志解析 5 题
Week 2: Linux 系统调用 + signal + fork/exec
Week 3: 网络(TCP/DNS/HTTPS)+ tcpdump 实战
Week 4: 限时模拟 3 套 + 故障排查模板背诵
强烈推荐资源:
- 《The Linux Programming Interface》第 24 / 26 / 53 章(fork、signal、socket)
man 2 fork、man 7 signal- Brendan Gregg 的
perf-toolsrepo(PE 面试常被 cite)
八、Pitfalls(学员高频踩坑)
- Python 写得太长:PE 题用 Bash 一行能写就别用 50 行 Python
- 不读 expected output:HackerRank 严格比对,多空格直接 0 分
- 忽视 stderr vs stdout 区分:Q1 的 awk/grep 题常考重定向
- Q3 上来就改代码:先用 1-2 分钟描述 triage 步骤拿满方法分
- 不写 comments:PE 看重"思考路径"——关键决策写一行注释
九、常见问题 FAQ
Q1:PE OA 难度和 SDE OA 比怎么样?
A:算法难度更低,但广度更宽——Linux、网络、Bash、debugging 都要会。SDE 选手切换过来通常 Q3 卡得最厉害。
Q2:要会 SQL 吗?
A:不必。PE OA 基本不出 SQL,但 onsite 偶尔会问"PostgreSQL slow query 怎么排查"。
Q3:用 Bash 还是 Python?
A:Q1 优先 Bash(短小有力),Q2/Q3 用 Python(更容易写状态)。学员数据:能两种切换的得分高 30%。
Q4:PE onsite 多少轮?
A:5 轮——1 OA-style coding、2 Linux/网络深挖、1 system design、1 BQ。
Q5:H1B sponsor 吗?
A:给。Meta PE 对 H1B 友好度比 SDE 略低(HC 紧),但仍是 sponsor 标配公司。
十、需要 Meta PE OA / VO 辅助?
PE OA 的考察面非常宽,刷 LeetCode 几乎没用——Bash 熟练度 + Linux 内核认知 + 故障排查模板才是关键。如果你正在准备:
- 微信:Coding0201 · 立即联系
- Email:[email protected]
- Telegram:@OAVOProxy
我们提供:Meta PE 当周题、Linux / 网络深度讲解、故障排查 mock、PE onsite 系统设计辅导。
联系方式
Email: [email protected]
Telegram: @OAVOProxy
微信: Coding0201
最后更新:2026-05-18 | 作者:oavoservice 面试组