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, JavaScript & TypeScript, SQL & Database). 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.
01Khi nào nên automation, khi nào nên giữ manual?Tester / QA
Gợi ý trả lời
Ôn thêm câu hỏi Tester / QA →Automation đáng tiền khi chạy lặp lại nhiều và ổn định; manual hợp với thứ thay đổi liên tục hoặc cần cảm nhận người dùng.
Nên automation:
- Bộ regression và smoke chạy mỗi build/release.
- Test API, tính toán nghiệp vụ nhiều bộ dữ liệu (data-driven).
- Luồng chính ít thay đổi giao diện.
Nên giữ manual:
- Tính năng mới, UI còn thay đổi theo sprint.
- Exploratory, usability, kiểm tra trực quan.
- Case chỉ chạy một hai lần, hoặc chi phí dựng môi trường quá lớn.
Nên nhắc chi phí bảo trì: script hỏng vì locator thay đổi cũng tốn thời gian. Ưu tiên tầng API/unit trước UI theo mô hình test pyramid.
Hay sai: nói "automation hết cho nhanh". Người phỏng vấn muốn thấy bạn biết tính ROI.
02Dự án sắp release nhưng không đủ thời gian chạy hết regression. Bạn làm gì?Tester / QA · Senior
Gợi ý trả lời
Ôn thêm câu hỏi Tester / QA →Chuyển sang test theo rủi ro (risk-based testing) và minh bạch với team về phần chưa test.
- Xác định thay đổi trong bản release và vùng code bị ảnh hưởng (hỏi dev, xem danh sách commit/ticket).
- Ưu tiên: luồng tạo ra tiền hoặc dữ liệu quan trọng (thanh toán, đăng nhập, đặt hàng), chỗ hay có bug trong quá khứ, tính năng mới.
- Chạy bộ automation sẵn có, người tập trung vào phần automation chưa phủ.
- Báo cáo rõ: đã test gì, chưa test gì, rủi ro còn lại, đề xuất (release có điều kiện, feature flag, theo dõi sau release).
- Quyết định release là của PO/PM dựa trên thông tin bạn đưa.
Người phỏng vấn muốn nghe: bạn không âm thầm bỏ qua test, cũng không cố chặn release; bạn cung cấp thông tin để team quyết định. Về lâu dài, đề xuất tăng automation cho regression.
03Bạn chọn framework automation (Selenium, Playwright, Cypress…) dựa trên tiêu chí nào?Tester / QA · Senior
Gợi ý trả lời
Ôn thêm câu hỏi Tester / QA →Không có framework tốt nhất, chỉ có cái hợp với sản phẩm và team.
- Loại ứng dụng: web, mobile (Appium hoặc framework native), desktop, API.
- Ngôn ngữ của team: nên trùng với dev để họ cùng review và viết test.
- Trình duyệt cần hỗ trợ, có cần nhiều tab/domain, iframe, file upload.
- Tốc độ và độ ổn định: auto-wait, chạy song song, retry, trace khi lỗi.
- Tích hợp CI/CD, báo cáo, chạy trên container.
- Cộng đồng, tài liệu, khả năng tuyển người.
Ví dụ: "Dự án web mới, team dùng TypeScript, em chọn Playwright vì auto-wait giảm test chập chờn, chạy song song sẵn, có trace viewer để debug. Selenium vẫn hợp với dự án Java có sẵn nhiều script."
Hay sai: chọn vì "đang hot" mà không có lý do gắn với dự án.
04Dùng generics và type narrowing trong TypeScript thế nào? Cho ví dụ discriminated union.JavaScript & TypeScript · Senior
Gợi ý trả lời
Ôn thêm câu hỏi JavaScript & TypeScript →Generics giúp viết hàm và kiểu dùng lại được mà vẫn giữ thông tin kiểu, thay vì rơi về
any.type Result<T> = | { ok: true; data: T } | { ok: false; error: string }; function show(r: Result<User>) { if (r.ok) return r.data.name; // TS biết có data return r.error; }- Field chung (
ok,type,status) giúp TypeScript thu hẹp kiểu trongif/switch. Đây là cách mô hình hoá trạng thái không thể sai: không có chuyện vừa códatavừa cóerror. - Ràng buộc generic:
<T extends { id: string }>. - Utility types hay dùng:
Partial,Pick,Omit,Record,ReturnType,Awaited. - Type guard tự viết:
function isUser(x: unknown): x is User.
Người phỏng vấn muốn nghe: bạn dùng kiểu để làm trạng thái sai không biểu diễn được, chứ không chỉ để chú thích.
- Field chung (
05Một trang web dùng càng lâu càng chậm và tốn RAM. Bạn tìm memory leak ở frontend thế nào?JavaScript & TypeScript · Senior
Gợi ý trả lời
Ôn thêm câu hỏi JavaScript & TypeScript →Memory leak ở frontend thường do thứ gì đó vẫn giữ tham chiếu đến object đáng lẽ đã bỏ đi, nhất là trong SPA vì trang không bao giờ tải lại.
Nguyên nhân hay gặp:
addEventListenertrênwindow/documentmà không gỡ khi component bị huỷ.setInterval, subscription (WebSocket, store) không huỷ.- DOM đã bị gỡ khỏi trang nhưng vẫn được biến JS giữ lại (detached DOM).
- Cache hoặc mảng toàn cục chỉ tăng không giảm.
Cách điều tra với Chrome DevTools:
- Tab Memory: chụp heap snapshot, thực hiện thao tác vài lần, chụp lại, so sánh phần tăng thêm.
- Lọc "Detached" để tìm DOM bị giữ, xem chuỗi retainers để biết ai đang giữ.
- Tab Performance bật Memory để xem heap có giảm sau GC không.
Người phỏng vấn muốn nghe: mỗi tài nguyên đăng ký đều có chỗ huỷ tương ứng (cleanup của effect,
ngOnDestroy,onUnmounted,AbortController).06Khi nào chọn NoSQL (MongoDB, Redis…) thay vì SQL? Trade-off là gì?SQL & Database · Senior
Gợi ý trả lời
Ôn thêm câu hỏi SQL & Database →Chọn theo mô hình truy cập dữ liệu, không theo xu hướng. SQL mạnh ở quan hệ, ràng buộc và transaction; NoSQL mạnh ở schema linh hoạt, mô hình dữ liệu đặc thù hoặc scale ngang dễ hơn.
- Document (MongoDB): dữ liệu dạng cây, đọc nguyên khối theo một khoá, schema thay đổi thường xuyên.
- Key-value (Redis): cache, session, rate limit, bộ đếm, hàng đợi nhỏ; dữ liệu chủ yếu nằm trong RAM.
- Wide-column, time-series, search engine: ghi khối lượng lớn, log, tìm kiếm full-text.
Trade-off: JOIN và transaction nhiều document hạn chế hoặc đắt hơn, ràng buộc dữ liệu chuyển sang tầng ứng dụng, và phải thiết kế theo query ngay từ đầu.
Người phỏng vấn muốn nghe: nhiều hệ thống dùng kết hợp, vd. PostgreSQL làm nguồn sự thật, Redis làm cache. PostgreSQL với
JSONBcũng đủ cho nhiều nhu cầu "schema linh hoạt".07Test 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.
08Nế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ả.
09Requirement còn mơ hồ hoặc chưa có tài liệu, bạn test như thế nào?Tester / QA
Gợi ý trả lời
Ôn thêm câu hỏi Tester / QA →Đừng đợi tài liệu hoàn hảo; chủ động làm rõ và ghi lại giả định.
- Đặt câu hỏi cụ thể cho BA/PO ngay từ lúc refinement, ưu tiên những chỗ ảnh hưởng tới acceptance criteria.
- Tham khảo nguồn khác: bản thiết kế UI, hệ thống cũ, sản phẩm tương tự, hỏi dev về logic đã code.
- Viết test scenario ở mức cao trước, ghi rõ giả định, gửi lại cho BA/PO xác nhận.
- Kết hợp exploratory testing theo session có mục tiêu và ghi chú.
- Chỗ chưa rõ thì log thành câu hỏi/ticket thay vì tự quyết là bug hay không.
Người phỏng vấn muốn nghe: bạn chủ động và minh bạch. Ví dụ: "Em gửi danh sách 8 câu hỏi kèm giả định, PO trả lời 6, 2 câu còn lại em đánh dấu là rủi ro trong test report."
10Bạn thấy mình ở đâu sau 2–3 năm nữa?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á →Người phỏng vấn muốn biết mục tiêu của bạn có khớp với hướng phát triển ở công ty và bạn có định gắn bó không.
- Nêu hướng phát triển cụ thể, thực tế: đi sâu chuyên môn (senior, chuyên gia một mảng) hay quản lý (lead, PM).
- Kèm kế hoạch: kỹ năng cần học, trách nhiệm muốn nhận thêm.
- Gắn với cơ hội ở vị trí đang ứng tuyển.
Câu mẫu: "Trong 2–3 năm tới em muốn trở thành senior có thể tự thiết kế và chịu trách nhiệm một module lớn, đồng thời hướng dẫn được các bạn mới. Em đang học thêm về thiết kế hệ thống và thấy team bên mình có nhiều bài toán ở quy mô lớn, rất hợp để em phát triển theo hướng đó."
Hay sai: "Em muốn mở công ty riêng" hoặc "em chưa nghĩ tới". Cũng đừng nói muốn ngồi vào chỗ của người đang phỏng vấn.
Bạn đã phỏng vấn ở Inspectorio?
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