# Phỏng vấn FDE ở Anthropic: dùng tin tuyển dụng làm đề cương ôn từng vòng

> Đọc tin tuyển dụng như một đề cương ôn thi: mỗi dòng yêu cầu chỉ ra một năng lực bạn nên ôn cho một vòng cụ thể.

Bản gốc: https://fdetimes.net/vi/bach-khoa/phong-van-fde-anthropic/

Bạn mở tin tuyển dụng Forward Deployed Engineer của Anthropic tại London và gặp một dòng dễ đọc lướt qua: dành 25-50% thời gian đi đến chỗ khách hàng để build trực tiếp cùng họ. Thoạt nhìn đây chỉ là chuyện hậu cần, nhưng nó cho thấy vị trí này cần người build được ngay trước mặt khách hàng, chứ không chỉ người giải giỏi đề thuật toán.

Vì thế cách ôn hiệu quả nhất là lấy chính tin tuyển dụng làm đề cương, rồi ghép từng dòng yêu cầu với vòng thi nhiều khả năng sẽ kiểm tra nó.

## Tin tuyển dụng là đề cương, không phải quảng cáo

Theo tin đăng, vị trí này thuộc đội Applied AI. FDE xây ứng dụng production với Claude ngay bên trong hệ thống của khách hàng. Sản phẩm giao cho khách là những thứ cụ thể như MCP server, sub-agent và agent skill. Đó là danh sách những thứ bạn phải tự tay làm được, không phải chỉ cần biết tên.

Phần yêu cầu cũng nói thẳng. Ứng viên cần 4 năm kinh nghiệm trở lên ở một vai trò kỹ thuật làm việc trực tiếp với khách hàng, ví dụ FDE.

Ứng viên cần kinh nghiệm production với LLM, gồm prompt engineering nâng cao và phát triển agent. Ứng viên cần Python vững, và tin đăng muốn một người rất chủ động, biết tự tìm đường khi làm việc trong những tổ chức lớn, nhiều tầng và chưa rõ ràng.

Bạn có thể ghép mỗi yêu cầu trên với vòng thi nhiều khả năng sẽ chạm tới nó. Vì thế việc đầu tiên nên làm không phải là mở trang luyện code, mà là lập bảng ghép đó.

## Bốn vòng, mỗi vòng kiểm tra một năng lực

Hướng dẫn luyện thi của Exponent/Aced đưa ra một quy trình mẫu cho vị trí này. Vòng đầu là cuộc gọi 30 phút với recruiter về xuất thân, động lực, người tham chiếu (reference) và cấp bậc phù hợp.

Tiếp theo là vòng technical screen, xoay quanh một tình huống thực tế: triển khai Claude cùng công cụ MCP và giữ cho hệ thống chạy ổn định khi ngữ cảnh rất dài.

Vòng code, cũng theo hướng dẫn này, là một bài thực hành làm theo từng bước trên nền tảng kiểu CodeSignal, và mỗi bước lại có thêm yêu cầu mới.

Vòng panel cuối gộp hai phần: thiết kế giải pháp, tức kiến trúc một hệ thống Claude cho một khách hàng, và các câu hỏi về hành vi cùng giá trị của công ty.

Đây là quy trình mẫu, không phải lịch cố định, nên bạn hãy hỏi recruiter về thứ tự vòng thi của mình.

| Dòng trong tin tuyển dụng | Vòng nhiều khả năng chạm tới | Cách ôn hiệu quả |
|---|---|---|
| Giao MCP server, sub-agent, agent skill | Technical screen | Tự dựng một MCP server nhỏ nối Claude với một nguồn dữ liệu thật |
| Prompt engineering nâng cao, phát triển agent | Technical screen, thiết kế | Chuẩn bị một bộ ca kiểm thử để so hai phiên bản prompt |
| Python vững | Vòng code tăng dần | Luyện viết hàm nhỏ, dễ mở rộng, có test cho từng bước |
| Tự xoay xở khi mọi thứ chưa rõ | Thiết kế, hành vi | Tập đặt câu hỏi làm rõ trước khi vẽ kiến trúc |
| 4 năm trở lên làm việc với khách hàng | Recruiter, hành vi | Chọn sẵn ba câu chuyện có khách hàng, có xung đột, có kết quả |

## Ví dụ: bài code thêm yêu cầu sau mỗi bước

Thử hình dung đề bài như sau, và đây chỉ là đề tự luyện, không phải đề thật. Bước một: nhận danh sách ticket hỗ trợ dạng JSON, gom ticket theo khách hàng. Bước hai: bỏ các ticket trùng nội dung. Bước ba: trước khi gửi cho model, cắt bớt sao cho tổng độ dài của mỗi khách hàng không vượt quá một ngưỡng.

Cái bẫy là viết bước một thành một hàm dài. Đến bước ba, bạn phải đập ra viết lại trong khi đồng hồ vẫn chạy. Cách an toàn hơn là tách mỗi yêu cầu thành một hàm thuần, để yêu cầu mới chỉ đòi bạn thêm một mắt xích:

```python
from dataclasses import dataclass
from collections import defaultdict

@dataclass(frozen=True)
class Ticket:
    id: str
    customer: str
    created_at: str  # ISO 8601, e.g. "2026-03-01T09:30:00Z"
    text: str

def load(rows: list[dict]) -> list[Ticket]:
    return [Ticket(r["id"], r["customer"], r["created_at"], r["text"].strip())
            for r in rows]

def dedupe(tickets: list[Ticket]) -> list[Ticket]:          # step 2
    seen, out = set(), []
    for t in tickets:
        key = (t.customer, t.text.lower())
        if key not in seen:
            seen.add(key)
            out.append(t)
    return out

def group(tickets: list[Ticket]) -> dict[str, list[Ticket]]:  # step 1
    groups = defaultdict(list)
    for t in tickets:
        groups[t.customer].append(t)
    return dict(groups)

def budget(groups, max_chars: int):                            # step 3
    trimmed = {}
    for customer, items in groups.items():
        total, kept = 0, []
        # newest first: ISO 8601 strings in one timezone sort chronologically
        for t in sorted(items, key=lambda t: t.created_at, reverse=True):
            if total + len(t.text) > max_chars:
                break
            kept.append(t)
            total += len(t.text)
        trimmed[customer] = kept
    return trimmed

def pipeline(rows, max_chars=4000):
    return budget(group(dedupe(load(rows))), max_chars)
```

Ở bước ba, code sắp xếp theo thời điểm tạo ticket chứ không theo id, vì id lớn hơn chưa chắc là ticket mới hơn. Nếu dữ liệu không có trường thời gian, hãy nói rõ giả định của bạn trước khi dùng id thay thế.

Điểm ăn tiền nằm ở lời bạn nói khi code chứ không nằm ở bản thân dòng code. Hãy nói ra quyết định đánh đổi: giữ ticket mới nhất vì giả định chúng liên quan hơn, và bạn sẽ hỏi lại khách hàng nếu giả định này sai.

Bài toán giới hạn ngữ cảnh này cũng gần với chuyện độ ổn định khi ngữ cảnh dài mà vòng technical screen xoay quanh.

## Vòng thiết kế: hỏi trước, vẽ sau

Vì tin tuyển dụng nhấn mạnh khả năng tự xoay xở khi mọi thứ chưa rõ, bạn nên chuẩn bị tinh thần rằng đề thiết kế có thể thiếu nhiều chi tiết, và tập thói quen hỏi lại trước khi vẽ.

Thử hình dung người phỏng vấn nói: "Một hãng bảo hiểm muốn nhân viên hỏi Claude về điều khoản hợp đồng." Thay vì vẽ ngay sơ đồ có vector database, bạn có thể hỏi lại vài câu trước.

Bạn có thể mở đầu bằng ba câu hỏi: "Ai sẽ dùng, nhân viên tổng đài hay bộ phận bồi thường? Hợp đồng đang nằm ở hệ thống nào, có phân quyền không? Nếu Claude trả lời sai thì hậu quả là một cuộc gọi bực bội hay một khoản chi trả sai?"

Chỉ sau ba câu đó bạn mới đề xuất kiến trúc: một MCP server bám theo phân quyền sẵn có, một sub-agent chuyên trích dẫn điều khoản, và một bộ ca kiểm thử dựng từ câu hỏi thật của nhân viên.

**Điểm mấu chốt:** Trước khi vẽ kiến trúc, hãy hỏi ai sẽ dùng và nếu hệ thống trả lời sai thì hậu quả là gì.

## Hành vi và deep-dive: chuyện thật thắng chuyện bóng bẩy

Hướng dẫn của Educative về quy trình tuyển kỹ sư nói chung ở Anthropic nhận xét rằng vòng technical deep-dive có lợi cho người thật sự hiểu những hệ thống mình đã xây. Với vòng hành vi, người phỏng vấn thường đánh giá cao sự trung thực, khả năng tự nhận thức và tự nhìn lại hơn là những câu chuyện thành công được đánh bóng.

Áp vào thực tế, bạn nên chuẩn bị ít nhất một câu chuyện về lần deployment của mình hỏng. Hãy kể đủ nguyên nhân kỹ thuật, quyết định bạn đã đưa ra và điều bạn làm khác đi về sau. Nếu người ta hỏi sâu thêm hai tầng mà bạn vẫn giải thích được, câu chuyện đó có giá trị hơn mười dự án chỉ được kể ở bề mặt.

Đây cũng là chỗ để sửa CV. Đừng viết chung chung "có kinh nghiệm LLM". Hãy viết rằng bạn đã xây một MCP server nối model với hệ thống nào, chạy cho ai, và đo chất lượng bằng cách nào.

Những dòng cụ thể như vậy không thay được yêu cầu 4 năm kinh nghiệm trở lên mà tin đăng ghi rõ. Chúng chỉ giúp người đọc CV thấy ngay bạn đã làm gì trong những năm đó.

## Luật dùng Claude: biết trước để không mất điểm oan

Anthropic có công bố hướng dẫn chính thức về việc ứng viên dùng AI. Bạn được dùng Claude để chỉnh hồ sơ, nhưng phải tự viết bản nháp đầu tiên. Bạn được dùng Claude để tìm hiểu về công ty, luyện câu trả lời và chuẩn bị câu hỏi cho người phỏng vấn.

Ranh giới nằm ở phần thi. Phỏng vấn trực tiếp là "tất cả là bạn", không có AI hỗ trợ trừ khi người phỏng vấn nói khác. Bài take-home cũng làm mà không có Claude, trừ khi được cho phép.

Nghe thì có vẻ ngược đời với một vị trí suốt ngày làm việc cùng Claude, nhưng cách hiểu hợp lý là họ muốn thấy năng lực nền của bạn khi không có trợ lý bên cạnh.

## Những lỗi khiến ứng viên giỏi vẫn trượt

Lỗi dễ mắc đầu tiên là ôn sai thể loại: dành hàng tuần luyện thuật toán trong khi vòng kỹ thuật, theo quy trình mẫu, lại là một tình huống triển khai Claude với MCP. Lỗi tiếp theo là viết code thành một khối liền, để rồi mỗi yêu cầu mới lại buộc phải viết lại.

Rồi đến chuyện nhảy thẳng vào kiến trúc khi đề thiết kế còn bỏ ngỏ, bỏ qua đúng năng lực tự xoay xở mà tin tuyển dụng ghi rõ.

Hai lỗi còn lại thuộc về con người. Một là kể chuyện quá hoàn hảo, đến mức người nghe không tìm ra được chỗ nào bạn đã học được điều gì.

Hai là dùng Claude ở nơi bị cấm, chẳng hạn trong bài take-home khi chưa được cho phép. Lỗi này làm bạn mất lòng tin, mà trong vai trò sống nhờ lòng tin của khách hàng thì mất lòng tin là mất tất cả.

Bài tập tuần này: nhờ một đồng nghiệp đóng vai người phỏng vấn và chỉ đưa bạn một câu đề thiết kế thật mơ hồ, chẳng hạn "một bệnh viện muốn dùng Claude cho bộ phận lễ tân".

Bấm giờ 30 phút, và trong 10 phút đầu bạn chỉ được đặt câu hỏi, chưa được vẽ gì; sau buổi tập, hãy hỏi người kia câu nào của bạn làm đề bài rõ ra nhiều nhất.

**Thử ngay tuần này:**

- Chép tin tuyển dụng FDE của Anthropic ra, gạch chân mọi động từ và danh từ kỹ thuật, rồi ghi bên cạnh mỗi dòng một dự án bạn từng làm để chứng minh nó. Dòng nào còn trống là việc cần ôn trước.
- Tự viết đề code ba tầng: tầng một gom ticket theo khách hàng, tầng hai bỏ ticket trùng, tầng ba giới hạn độ dài dữ liệu đưa vào model. Bấm giờ 20 phút mỗi tầng và nói to cách bạn đánh đổi.
- Viết bằng tay một câu chuyện về lần một deployment của bạn hỏng: nguyên nhân, việc bạn làm, điều bạn đã thay đổi sau đó. Chỉ nhờ Claude góp ý sau khi đã có bản nháp.

## Nguồn

- [Forward Deployed Engineer - Anthropic (General Catalyst job board)](https://jobs.generalcatalyst.com/companies/anthropic/jobs/93102649-forward-deployed-engineer)

- [Guidance on Candidates' AI Usage \ Anthropic](https://www.anthropic.com/candidate-ai-guidance)

- [Anthropic Forward Deployed Engineer Interview Guide (Exponent/Aced)](https://www.aced.io/guides/anthropic-forward-deployed-engineer-interview)

- [Anthropic interview process guide for 2026 (Educative)](https://www.educative.io/blog/anthropic-interview-process)
