Phỏng vấn

Phỏng vấn Amazon SDE: coding và Leadership Principles

Amazon đánh giá cả năng lực giải quyết vấn đề và cách ứng viên hành động trong công việc. Muốn chuẩn bị tốt, bạn phải nối code đúng với những câu chuyện thật có quyết định và kết quả.

Đừng học một quy trình duy nhất từ bài kể kinh nghiệm

Amazon tuyển nhiều loại SDE ở nhiều quốc gia và cấp độ, và Online Assessment (OA) cho chương trình sinh viên không nhất thiết giống đánh giá cho ứng viên có kinh nghiệm. Với OA của sinh viên, Amazon Jobs công bố khá chi tiết các phần, thời lượng và chính sách tài liệu (xem mục Online Assessment bên dưới); email mời của bạn vẫn là bản quyết định. Những gì Amazon không công bố, như dạng bài hay độ khó cụ thể, chỉ là điều thường gặp theo chia sẻ của ứng viên trên diễn đàn.

Điểm bền vững là hai trục: kỹ thuật và hành vi. Trang chuẩn bị kỹ thuật của Amazon liệt kê programming language, data structures, algorithms, coding, object-oriented design, databases, distributed computing, operating systems, internet topics và kiến thức chung về học máy, trí tuệ nhân tạo (general machine learning and artificial intelligence). Không phải mọi vòng hỏi tất cả, nhưng danh sách cho thấy chỉ luyện thuộc LeetCode là chưa đủ cho nhiều vị trí.

Ý chính

Hãy coi coding và Leadership Principles là hai phần của cùng một năng lực: bạn hiểu vấn đề, ra quyết định có lý do, kiểm chứng kết quả và chịu trách nhiệm về tác động.

Top-K Frequent (k = 2) trên [4, 1, 4, 2, 1, 4, 3] Số 4 Tần suất: 3 Hạng #1 (Chọn) Số 1 Tần suất: 2 Hạng #2 (Chọn) Số 2 Tần suất: 1 Số 3 Tần suất: 1 Sắp theo (-freq[x], x) → Top 2 trả về: [4, 1]
Top-K (k = 2): [4, 1, 4, 2, 1, 4, 3] Giá trị 4 · Tần suất = 3 Hạng #1 → Chọn vào Top 2 Giá trị 1 · Tần suất = 2 Hạng #2 → Chọn vào Top 2 Giá trị 2 và 3 · Tần suất = 1 Phá hòa theo giá trị nhỏ trước Đáp án k = 2: 4 1
Hình 1. Đếm tần suất bằng bảng băm và chọn k = 2 phần tử xuất hiện nhiều nhất trên [4, 1, 4, 2, 1, 4, 3].

Online Assessment: đọc đúng hướng dẫn trước

Theo trang University SDE OA của Amazon Jobs (đọc ngày 10/11/2026), OA cho vị trí full-time có một hoặc hai phần tùy quốc gia và nên dành tới hai giờ liền, gồm: Coding assessment (trung bình khoảng 70 phút), Workstyles Assessment (khoảng 15 phút), Work Simulation (khoảng 60 phút) và một khảo sát phản hồi (khoảng 5 phút). OA cho thực tập sinh mất khoảng 90 phút, gồm coding, workstyles và khảo sát phản hồi, không có Work Simulation. Email OA cho biết cấu trúc của bạn.

Trong phần coding, Amazon cho phép dùng tài liệu công khai trên mạng (ví dụ Java Developer Kit hay Standard Template Library), nhưng không được vào trang cần đăng nhập hay kho code riêng, và lịch sử trình duyệt được ghi lại. Không dùng chức năng chụp màn hình (phiên làm bài sẽ bị dừng và bạn bị khóa), và tránh sao chép, dán code. Trước khi bắt đầu, kiểm trình duyệt, kết nối, webcam và cách yêu cầu hỗ trợ kỹ thuật.

Trong coding, ưu tiên lời giải đúng và có thể kiểm. Đọc toàn bộ đề, xác nhận kiểu dữ liệu, viết ví dụ nhỏ, rồi mới chọn cấu trúc. Nếu nền tảng cho chạy code, đừng chỉ thử sample. Thêm ca rỗng, trùng, cực trị và một ca phá giả định. Nếu không được chạy, mô phỏng biến quan trọng trên giấy.

Ví dụ: K phần tử xuất hiện nhiều nhất

Với mảng 1 1 1 2 2 3 và k=2, bảng tần suất là {1:3, 2:2, 3:1}. Hợp đồng của ví dụ quy định tần suất giảm dần, hòa thì giá trị nhỏ hơn trước, nên kết quả là 1 2. Quy tắc hòa phải nói rõ; nếu đề chấp nhận mọi thứ tự, đừng tự tạo ràng buộc khiến code phức tạp.

Giải pháp mẫu dựng hash map rồi sắp các cặp. Chi phí O(n + u log u), u là số giá trị khác nhau. Nếu k rất nhỏ và u lớn, có thể dùng heap kích thước k; vì tần suất không vượt quá n, cũng có thể chia bucket theo tần suất, nhưng với quy tắc hòa của ví dụ (giá trị nhỏ hơn đứng trước) mỗi bucket vẫn phải sắp lại. Trong phỏng vấn, hãy nêu phương án phù hợp dữ liệu trước khi tối ưu.

#include <algorithm>
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, k;
    if (!(cin >> n >> k)) return 0;
    unordered_map<long long, int> freq;
    for (int i = 0; i < n; i++) {
        long long x;
        cin >> x;
        freq[x]++;
    }
    vector<pair<long long, int>> items(freq.begin(), freq.end());
    sort(items.begin(), items.end(), [](const auto& a, const auto& b) {
        if (a.second != b.second) return a.second > b.second;
        return a.first < b.first;
    });
    k = min(k, (int)items.size());
    for (int i = 0; i < k; i++) {
        cout << (i ? " " : "") << items[i].first;
    }
    cout << '\n';
    return 0;
}
Cách làm Thời gian Bộ nhớ Khi nên chọn
đếm rồi sắp toàn bộ O(n + u log u) O(u) rõ ràng, u vừa phải
đếm rồi heap k O(n + u log k) O(u+k) k nhỏ hơn u nhiều
bucket theo tần suất O(n+u), cộng chi phí sắp trong bucket nếu cần quy tắc hòa O(n+u) chấp nhận bộ nhớ theo n

Chạy tay thêm k=0, k lớn hơn số giá trị khác nhau, số âm và các tần suất bằng nhau. Bản mẫu chặn k ở u và dùng thứ tự xác định, nhờ vậy kết quả giữa ba ngôn ngữ so được trực tiếp.

Trình bày coding như một quyết định kỹ thuật

Một câu trả lời dễ theo dõi gồm năm nhịp: làm rõ; vét cạn; quan sát nút thắt; phương án tối ưu; kiểm ca. Với top-k, nút thắt của cách đếm từng ứng viên bằng vòng lặp lồng nhau là lặp lại công việc. Hash map gom tần suất trong một lượt. Sau đó lựa chọn sort, heap hoặc bucket tùy k và giới hạn.

Đừng ném tên cấu trúc rồi im lặng. Hãy nói điều gì được lưu, bất biến là gì, khi nào cập nhật. Khi code, chọn tên frequency, candidates, topK thay vì mọi thứ là a, b. Nếu dùng comparator, giải thích cả nhánh hòa; comparator sai tính bắc cầu có thể khiến sort cho hành vi không hợp lệ.

Leadership Principles phải đi vào câu chuyện

Danh sách Leadership Principles chính thức là ngôn ngữ Amazon dùng để mô tả cách ra quyết định. Mục tiêu không phải nhắc càng nhiều tên càng tốt. Hãy chọn câu chuyện thật cho thấy hành vi liên quan. Một tình huống xử lý sự cố có thể thể hiện Ownership, Dive Deep và Bias for Action, nhưng câu trả lời vẫn phải tập trung vào câu hỏi đang được hỏi.

Chuẩn bị một ngân hàng câu chuyện, mỗi câu có: bối cảnh đủ hiểu, nhiệm vụ của bạn, các lựa chọn, hành động cá nhân, kết quả, bài học. Tập trung phần lớn thời gian vào hành động. Nếu kết quả xấu, nói rõ bạn phát hiện gì và đã thay đổi hệ thống ra sao. Một thất bại được phân tích trung thực thường giàu tín hiệu hơn thành công kể chung chung.

Bảng nối câu hỏi với bằng chứng

Dạng câu hỏi Bằng chứng nên có Điều tránh
bất đồng với đồng đội dữ liệu đã dùng, cách lắng nghe, quyết định cuối biến người khác thành “kẻ sai”
giao hàng gấp phạm vi đã cắt, rủi ro, cách theo dõi nhận công hết về mình
lỗi do bạn gây ra tác động, khắc phục, phòng ngừa tái diễn đổ cho yêu cầu mơ hồ
quyết định thiếu dữ liệu giả định, thí nghiệm nhỏ, ngưỡng quay lại nói “dùng trực giác” mà không kiểm

Các con số chỉ dùng khi có thật: độ trễ giảm, lỗi giảm, thời gian tiết kiệm, số người dùng bị ảnh hưởng. Nếu không có số chính xác, mô tả trước/sau và nguồn phản hồi. Đừng bịa độ lớn để câu chuyện “ấn tượng”.

System design và kiến thức nền

Nếu vai trò có phần design, bắt đầu từ yêu cầu chức năng và phi chức năng. Ước lượng quy mô, xác định API và dữ liệu, rồi vẽ luồng đơn giản trước. Sau đó mới bàn cache, phân vùng, hàng đợi, nhất quán và quan sát. Nêu trade-off: một lựa chọn tăng tính sẵn sàng có thể làm dữ liệu chậm đồng bộ; cache giảm đọc nhưng thêm bài toán invalidation.

Theo chia sẻ của ứng viên, với ứng viên mới, design thường thiên về thiết kế lớp hoặc thành phần nhỏ. Với cấp cao hơn, chiều sâu hệ thống và quyết định vận hành quan trọng hơn. Hỏi recruiter phạm vi kỳ vọng để phân bổ thời gian đúng.

Kế hoạch chuẩn bị bốn tuần

Tuần một làm mock để đo nền, đọc mô tả việc và chọn tám câu chuyện. Tuần hai luyện hash, heap, tree, graph, DP cùng hai câu chuyện mỗi ngày. Tuần ba trộn bài dưới thời gian, luyện thiết kế nếu cần, và nhờ người khác hỏi xoáy. Tuần bốn ôn lỗi lặp, kiểm thiết bị, giảm cường độ trước ngày thi.

Sau mỗi mock, chỉ chọn hai điểm sửa. Ví dụ “nói quy tắc hòa trước code” và “dành năm phút cuối cho ca biên”. Danh sách mười lỗi cùng lúc không tạo thay đổi hành vi.

Các lỗi chuẩn bị thường gặp

  • Thuộc lòng câu chuyện đến mức trả lời câu hỏi khác với điều được hỏi.
  • Gắn mọi câu với quá nhiều Leadership Principles, làm mất trọng tâm.
  • Chỉ luyện bài có hash/heap, bỏ kiến thức hệ thống ghi trong phạm vi vai trò.
  • Không đọc kỹ email OA và chính sách tài liệu, rồi vô tình vi phạm (ví dụ chụp màn hình hay vào trang cần đăng nhập).
  • Tuyên bố độ phức tạp trung bình của hash map như bảo đảm tuyệt đối mà không biết giả định.
  • Không hỏi lại khi đề thiếu quy tắc hòa hoặc k vượt số giá trị khác nhau.

Luyện ngay trên Big-O Coding

Luyện bảng băm, top-k và quy trình giải thích trước khi đi tiếp theo Coding Interview 150.

Câu hỏi thường gặp

Online Assessment có giống nhau cho mọi SDE không?

Không. Amazon Jobs mô tả OA của vị trí full-time và của thực tập sinh khác nhau (thực tập không có Work Simulation), và số phần còn tùy quốc gia. Hãy dùng hướng dẫn trong email mời và hỏi recruiter về đúng chương trình của bạn.

Có cần nhắc tên Leadership Principle trong câu trả lời?

Không bắt buộc để câu chuyện tốt. Hành động và bằng chứng phải thể hiện nguyên tắc; tên gọi chỉ giúp bạn tổ chức việc ôn.

Có nên tối ưu top-k bằng heap ngay?

Chỉ khi k và u làm nó có lợi hoặc người phỏng vấn yêu cầu. Bản sort rõ ràng là điểm bắt đầu tốt để thảo luận trade-off.

Muốn học bài bản cùng giảng viên?

Luyện LeetCode thực chiến theo pattern, giải bài trong 45 phút và mock interview cùng AI. 16 buổi online, lớp 7–12 học viên, chọn C++, Java hoặc Python.

Xem Khóa LeetCode

Nguồn tham khảo

Chia sẻ: Facebook LinkedIn
Nhắn Zalo tư vấnZalo Gọi 0937 401 483