10 câu hỏi có thể gặp khi phỏng vấn
Chọn theo kỹ năng và cấp của tin (Tester / QA, Python). Gợi ý trả lời do Drama Công Ty biên soạn để bạn ôn nhanh, không phải đề của công ty.
01Test automation của bạn hay bị flaky (lúc pass lúc fail). Bạn xử lý thế nào?Tester / QA · Senior
Gợi ý trả lời
Ôn thêm câu hỏi Tester / QA →Flaky test làm team mất niềm tin vào automation, nên cần xử lý có hệ thống chứ không chỉ bấm chạy lại.
Nguyên nhân thường gặp:
- Chờ bằng sleep cứng thay vì chờ điều kiện (element hiển thị, API trả về).
- Locator dễ vỡ (XPath dài, phụ thuộc thứ tự); nên dùng data-testid hoặc role.
- Dữ liệu test dùng chung, test phụ thuộc thứ tự chạy.
- Môi trường test không ổn định, dịch vụ bên thứ ba.
Cách làm:
- Theo dõi tỷ lệ fail từng test, cách ly test flaky khỏi pipeline chặn release cho tới khi sửa.
- Mỗi test tự tạo và dọn dữ liệu của mình; mock dịch vụ ngoài khi phù hợp.
- Lưu screenshot, video, trace khi fail để tìm nguyên nhân.
Hay sai: cấu hình retry thật nhiều để che lỗi.
02Nếu được giao xây dựng quy trình QA cho một team chưa có tester, bạn bắt đầu từ đâu?Tester / QA · Senior
Gợi ý trả lời
Ôn thêm câu hỏi Tester / QA →Bắt đầu từ hiểu hiện trạng và rủi ro, rồi cải thiện từng bước thay vì áp nguyên một quy trình nặng.
- Tuần đầu: tìm hiểu sản phẩm, luồng nghiệp vụ chính, lịch sử bug sau release, cách team đang làm việc.
- Nền tảng: thống nhất quy trình bug (template, severity, vòng đời ticket), Definition of Done có bước test, môi trường test tách khỏi production.
- Shift-left: tham gia refinement để làm rõ acceptance criteria trước khi code.
- Phủ test: bộ smoke cho luồng quan trọng, sau đó automation dần (ưu tiên API), đưa vào CI.
- Đo lường: số bug lọt ra production, thời gian xử lý bug, độ phủ regression, để chứng minh hiệu quả.
Người phỏng vấn muốn nghe: bạn biết ưu tiên, làm việc với dev chứ không đứng ngoài "bắt lỗi", và đo được kết quả.
03QA và QC khác nhau thế nào? Tester trong team của bạn đang làm phần nào?Tester / QA · Junior
Gợi ý trả lời
Ôn thêm câu hỏi Tester / QA →QA (Quality Assurance) lo quy trình để lỗi ít xảy ra ngay từ đầu; QC (Quality Control) kiểm tra sản phẩm để tìm lỗi đã xảy ra. Testing là một hoạt động chính của QC.
- QA: review requirement, đặt chuẩn Definition of Done, checklist review code, quy trình release.
- QC: viết và chạy test case, log bug, verify fix, regression.
- Thực tế ở Việt Nam, chức danh "QA" thường làm cả hai, nhưng phần lớn thời gian là QC.
Người phỏng vấn muốn nghe: bạn hiểu khái niệm và kể được việc cụ thể mình làm, ví dụ "Em tham gia review user story từ sprint planning để hỏi rõ acceptance criteria, rồi mới viết test case".
04Bạn tổ chức một codebase Python lớn nhiều người cùng làm như thế nào: type hints, quản lý dependency, chất lượng code?Python · Senior
Gợi ý trả lời
Ôn thêm câu hỏi Python →Python linh hoạt nên dự án lớn dễ rối; cần công cụ để bắt lỗi trước khi chạy.
- Type hints + type checker (
mypyhoặcpyright) chạy trong CI. DùngProtocolcho interface,TypedDicthoặc dataclass thay cho dict tự do. - Validate dữ liệu ở biên (request, config, message) bằng Pydantic; bên trong tin vào kiểu đã kiểm.
- Dependency: môi trường ảo riêng, file lock để build tái lập được (
uv, Poetry hoặc pip-tools). Tách dependency dev và production. - Lint/format tự động:
ruffthay cho nhiều công cụ cũ; chạy qua pre-commit và CI. - Cấu trúc: chia theo domain, tách logic nghiệp vụ khỏi framework để test không cần DB hay HTTP.
- Test bằng
pytestvới fixture; test tích hợp cho các luồng chính.
Người phỏng vấn muốn nghe: bạn hiểu type hints không kiểm tra lúc runtime, nên vẫn cần validate dữ liệu đầu vào.
- Type hints + type checker (
05Phân biệt list, tuple, set và dict. Kiểu nào mutable, kiểu nào immutable và vì sao điều đó quan trọng?Python · Junior
Gợi ý trả lời
Ôn thêm câu hỏi Python →listlà dãy có thứ tự, sửa được.tuplecó thứ tự nhưng bất biến.setlà tập không trùng lặp.dictlà cặp key-value, giữ thứ tự chèn từ Python 3.7.- Mutable:
list,dict,set. Immutable:tuple,str,int,frozenset. - Key của
dictvà phần tử củasetphải hashable, nên dùng đượctuplenhưng không dùng đượclist. - Kiểm tra
x in my_settrung bình O(1), cònx in my_listlà O(n). Cần tra cứu nhiều lần thì đổi sang set.
seen = set() for item in items: if item.id in seen: continue seen.add(item.id)Người phỏng vấn muốn nghe: bạn chọn cấu trúc dữ liệu theo thao tác cần làm, không theo thói quen.
- Mutable:
06Bạn sẽ viết test case như thế nào cho màn hình đăng nhập (email + mật khẩu)?Tester / QA · Junior
Gợi ý trả lời
Ôn thêm câu hỏi Tester / QA →Chia theo nhóm để không sót, rồi áp dụng kỹ thuật thiết kế test.
- Chức năng: đúng email/mật khẩu; sai mật khẩu; email chưa đăng ký; để trống từng trường.
- Phân vùng tương đương & giá trị biên: độ dài mật khẩu ở min-1, min, max, max+1; email sai định dạng.
- Bảo mật: khoá tài khoản sau N lần sai, mật khẩu bị che, thông báo lỗi không tiết lộ email có tồn tại hay không, thử ký tự đặc biệt/SQL injection cơ bản.
- UI/UX: nhấn Enter để submit, tab order, hiện/ẩn mật khẩu, thông báo lỗi rõ ràng.
- Khác: "Ghi nhớ đăng nhập", session hết hạn, nhiều trình duyệt/thiết bị.
Hay sai: chỉ liệt kê case happy path, hoặc liệt kê lan man không có nhóm. Nên nói thêm mỗi test case gồm: tiền điều kiện, các bước, dữ liệu, kết quả mong đợi.
07Một bug report tốt cần có những gì? Severity và Priority khác nhau ra sao?Tester / QA · Junior
Gợi ý trả lời
Ôn thêm câu hỏi Tester / QA →Bug report tốt giúp dev tái hiện được ngay mà không cần hỏi lại.
- Tiêu đề ngắn, nói rõ chỗ lỗi và hiện tượng.
- Môi trường: build/version, trình duyệt hoặc thiết bị, tài khoản test.
- Các bước tái hiện, kết quả thực tế, kết quả mong đợi.
- Bằng chứng: ảnh, video, log, request/response.
- Severity, Priority, tần suất (luôn xảy ra hay thỉnh thoảng).
Severity là mức ảnh hưởng kỹ thuật (crash, mất dữ liệu là Critical). Priority là mức gấp cần sửa theo góc nhìn business. Ví dụ: logo sai màu ở trang chủ có severity thấp nhưng priority cao trước buổi demo khách hàng; app crash ở một màn hình gần như không ai dùng có severity cao nhưng priority có thể thấp hơn.
Hay sai: tự đặt Priority thay cho PO/PM mà không trao đổi.
08Smoke test, sanity test và regression test khác nhau thế nào?Tester / QA · Junior
Gợi ý trả lời
Ôn thêm câu hỏi Tester / QA →Ba loại này khác nhau ở mục đích và phạm vi.
- Smoke test: chạy nhanh các luồng chính ngay khi có build mới để quyết định build có đủ ổn để test tiếp không. Rộng nhưng nông.
- Sanity test: sau khi sửa một bug hay thay đổi nhỏ, kiểm tra nhanh đúng chỗ đó và vùng liên quan. Hẹp nhưng sâu.
- Regression test: kiểm tra lại các chức năng đã chạy đúng để chắc thay đổi mới không làm hỏng chúng. Phạm vi lớn nhất, hợp để automation.
Ví dụ trả lời: "Ở dự án trước, mỗi build lên môi trường test em chạy bộ smoke khoảng 20 case trong 15 phút. Fix bug thì sanity phần liên quan. Trước release cả team chạy regression, phần lặp lại đã được automation."
Người phỏng vấn muốn nghe: ví dụ thực tế từ dự án của bạn, không chỉ định nghĩa.
09Đoạn code
def add(item, items=[])có vấn đề gì?Python · JuniorGợi ý trả lời
Ôn thêm câu hỏi Python →Giá trị mặc định được tạo một lần khi định nghĩa hàm, không phải mỗi lần gọi. Mọi lần gọi không truyền
itemssẽ dùng chung một list, nên dữ liệu bị cộng dồn qua các lần gọi.def add(item, items=None): if items is None: items = [] items.append(item) return items- Áp dụng cho mọi giá trị mặc định mutable:
[],{},set(). - Với dataclass, dùng
field(default_factory=list). - Với Django model field, truyền hàm chứ không truyền object:
default=list, không phảidefault=[].
Hay sai: dùng
if not items:thay choif items is None:. Khi caller truyền vào list rỗng có chủ đích, hàm lại tạo list mới và caller không nhận được kết quả.- Áp dụng cho mọi giá trị mặc định mutable:
10Vì sao bạn chọn ứng tuyển vào công ty chúng tôi?Câu hỏi hành vi & văn hoá
Gợi ý trả lời
Ôn thêm câu hỏi Câu hỏi hành vi & văn hoá →Câu này kiểm tra bạn có tìm hiểu không hay chỉ rải CV. Nối ba thứ: công ty, vị trí, và bạn.
- Tìm hiểu trước: sản phẩm, khách hàng, công nghệ, tin tức gần đây, đánh giá của nhân viên cũ và hiện tại.
- Chọn một hai điểm cụ thể bạn thật sự quan tâm: sản phẩm bạn từng dùng, bài toán kỹ thuật, quy mô người dùng, văn hoá làm việc.
- Nối với kinh nghiệm hoặc mục tiêu của bạn.
Câu mẫu: "Em có dùng ứng dụng của bên mình và thấy phần thanh toán rất mượt. Trong JD có nói team đang mở rộng hệ thống xử lý giao dịch, đúng mảng em đã làm hai năm. Em nghĩ mình đóng góp được ngay và cũng học được nhiều ở quy mô lớn hơn."
Hay sai: "Vì công ty lớn, lương tốt" hoặc khen chung chung áp vào công ty nào cũng được.
Bạn đã phỏng vấn ở Scandinavian Software Park?
Kể lại các vòng và câu hỏi đã gặp (ẩn danh) để người sau ôn đúng trọng tâm.
Chia sẻ kinh nghiệm phỏng vấn