Mặc dù câu hỏi phỏng vấn backend rất đa dạng, phụ thuộc vào nhu cầu của nhà tuyển dụng, nhưng sau thời gian tìm hiểu và trải nghiệm phỏng vấn từ level junior cho tới senior cũng như tham khảo bạn bè, tôi nghĩ mình hoàn toàn có thể chia những câu hỏi phỏng vấn ra thành các dạng cụ thể. Bài này sẽ tập trung viết về các câu hỏi phỏng vấn kỹ thuật dành cho backend developer.
1. Câu hỏi "Là gì"
Mục đích hỏi để kiểm tra xem ứng viên có hiểu kiến thức cơ bản không. Loại câu hỏi này thường được hỏi đối với những vị trí từ middle trở xuống. Đối với loại câu hỏi này, bạn cần nắm được khái niệm cơ bản và cần trả lời chính xác.
Tôi chia những câu hỏi "Là gì" này ra làm 2 loại chính:
- Câu hỏi về kiến thức nền tảng. Ví dụ: "Giải thích OOP là gì?", "Bạn có hiểu SOLID là gì không?"
- Câu hỏi cụ thể dành cho từng công nghệ. Ví dụ: "Interface trong Go thì khác gì với interface trong các ngôn ngữ OOP khác như Java?"
Tôi sẽ lấy một vài những câu hỏi kinh điển như sau:
- "Giải thích OOP là gì?
- "Bạn có hiểu SOLID là gì không?"
- "Bạn đã bao giờ gặp vấn đề với N+1 không?"
- "Bạn xử lý lỗi
database table is lock
kiểu gì?"
Những câu hỏi kiểu "Là gì" rất đa dạng và việc "ôn tủ" thường không mang lại hiệu quả. Vậy có cách gì giúp chúng ta vượt qua biển câu hỏi dạng này?
Câu trả lời đơn giản nằm ở "động cơ" nhà tuyển dụng đưa ra câu hỏi. Có 2 động cơ mà tôi thường thấy:
- Công ty họ thường xuyên hoặc đang gặp vấn đề đó.
- Họ muốn biết bạn hiểu kiến thức ở mức nào và cách bạn giải quyết vấn đề.
Ví dụ: Nếu NTD hỏi bạn về N+1, database locks, ... thì khả năng cao là trong dự án của họ cũng đã/đang gặp phải vấn đề tương tự. Hoặc giả sử bạn được kỹ về DevOps hơn so với database thì khả năng là dự án của họ cần developer biết cả DevOps.
Một lỗi cơ bản nữa mà ứng viên hay mắc phải đó chính là trả lời "quá sát" câu hỏi. Ví dụ, nếu NTD hỏi bạn "Bạn có biết channel là gì không?" và bạn chỉ trả lời mỗi câu "Tôi có biết" mà không nói gì thêm thì đây có thể được xem là điểm trừ. Lý do là kể cả với câu hỏi Có/Không, bạn cũng nên trả lời cụ thể vào những gì mình biết.
Sau đây là format câu trả lời yêu thích của tôi khi NTD hỏi về X:
- X là ... (bạn nên nêu khái niệm ngắn gọn, đơn giản)
- Bạn đã sử dụng X trong thực tế như thế nào
- Giải thích X hoạt động như nào
- Nêu ưu/nhược điểm của X
- Convention khi sử dụng X
- ...
Nhìn vào format trên, có lẽ bạn sẽ thốt lên rằng tôi đang lan man. Quả đúng vậy nếu bạn chỉ áp dụng máy móc mà không có chọn lọc. Trong một buổi phỏng vấn, ngoài việc tập trung nghe xem NTD hỏi gì, bạn nên học cách quan sát NTD, họ sẽ tìm cách ngắt lời bạn ở những điểm dừng giữa các luận điểm bằng cách hỏi sang thứ có liên quan khác. Cho nên, hãy cứ thoải mái trả lời theo khả năng của mình nhé.
2. Câu hỏi "mơ hồ"
Thi thoảng, khi lướt các nhóm lập trình trên các mạng xã hội khác nhau, tôi lại đọc được câu hỏi như thế này:
Hôm qua em phỏng vấn ở công ty A, người phỏng vấn có ra đề bài Hãy thiết kế hệ thống chịu tải cao cho 1 triệu user.
Chắc hẳn trong đầu bạn sẽ nảy số ra những câu hỏi như "Đề bài thiếu nhiều dữ kiện như này thì làm sao mà trả lời được. Tại sao người phỏng vấn lại hỏi một câu như thế?" ... Hay có người dừng luôn ở câu trả lời "Tôi chưa bao giờ làm hệ thống to như vậy nên chưa có kinh nghiệm để trả lời".
Tất cả những câu hỏi trên đều đúng cả. Điều mấy chốt đặt ra là tại sao NTD thừa biết câu hỏi "mơ hồ" không trả lời được mà vẫn hỏi? Liệu có phải do trình độ của họ có vấn đề không?
Để trả lời cho câu hỏi này, một lần nữa tôi nhấn mạnh lại điều tôi nêu ra trong phần 1 - động cơ của họ là gì? Ở đây, câu hỏi mơ hồ nhằm mục đích kiểm tra nhiều kỹ năng cùng một lúc bao gồm kiến thức của bạn trên cả 2 phương diện chiều rộng và chiều sâu, kỹ năng xử lý vấn đề khi được giao một yêu cầu thiếu thông tin, kỹ năng giao tiếp, ...
Nếu là người có kinh nghiệm bạn sẽ hỏi lại họ business của hệ thống, tải cao cụ thể là gì (ví dụ: số concurrent user mong muốn, tốc độ load trang web, ...), ... Sau đó, hai bên sẽ trao đổi và họ sẽ cho bạn những thông tin cần thiết hoặc đôi khi là chuyển sang câu hỏi khác.
Tôi từng được hỏi một câu "Làm sao để tối ưu một API request?". Tôi đã hỏi cụ thể về nghiệp vụ của API đó, database xài gì, code tổ chức ra sao, ... Trong lúc nghe tôi hỏi ngược lại, tôi quan sát thấy người phỏng vấn nhíu mày và tìm cách chuyển sang câu hỏi khác. Buổi phỏng vấn được đánh giá tốt và tôi đã pass.
3. Live coding
Live code là hình thức phỏng vấn mà NTD sẽ ra một đề bài và yêu cầu bạn code trực tiếp trên một nền tảng mà cả bạn và họ đều có thể theo dõi trực tiếp bạn đang thao tác gì trên màn hình.
Do phải code trực tiếp, vừa nghe yêu cầu với thời gian suy nghĩ ít ỏi, cùng áp lực phỏng vấn nên live coding có lẽ là ác mộng của nhiều developer. Tôi cùng từng sợ phát khiếp mỗi khi có ai đó nhìn vào màn hình mình khi đang code. Nhưng vì hay pair programming với đồng nghiệp nên khi NTD yêu cầu live coding bất ngờ, tôi đã kịp thời vận dụng các kỹ năng thường ngày. Buổi phỏng vấn ấy diễn ra rất trôi chảy còn tôi cảm thấy tự tin hẳn.
Có 2 loại câu hỏi live coding phổ biến:
- Câu hỏi về thuật toán và cấu trúc dữ liệu cơ bản như sort, linked-list, array, recursion, ... Những câu hỏi này khá dễ vì đều có công thức chung. Những dạng khó hơn liên quan tới tree và graph ít được hỏi. Nếu bạn từng được hỏi những câu ở dạng ít kia, nhớ inbox cho tôi nhé. ^^
- Câu hỏi về system design: đối với loại câu hỏi này, NTD sẽ yêu cầu bạn vẽ trên một tool UML phổ biến như draw.io. Bạn cần hiểu rõ về system dessign và các sử dụng các UML diagram để có thể trả lời những câu hỏi kiểu này. Lưu ý là không có câu trả lời đúng hay sai tuyệt đối cho từng câu hỏi nên bạn cứ thoải mái thể hiện ý tưởng của mình ra. Trong thời gian ngắn dưới 2 tiếng cho 1 buổi phỏng vấn, không ai có thể kỳ vọng xử lý một bài toán lớn cả.
Hiện tại, 200lab đang có Khóa học Design System: Thiết kế hệ thống Microservice cung cấp cho bạn rất nhiều kiến thức về thiết kế hệ thống và các bí quyết để xây dựng hệ thống microservice hiệu quả.
Tổng kết
Trong bài viết này, tôi đã phân tích 3 loại câu hỏi thường gặp khi phỏng vấn lập trình backend bao gồm câu hỏi "là gì", câu hỏi "mơ hồ" và live coding.
Ở cả ba loại câu hỏi này, bí quyết trả lời là dựa vào động cơ của NTD, họ hỏi nhằm mục đích kiểm tra kỹ năng gì của mình. Suy nghĩ theo cách này giúp bạn không bị giới hạn vào nội dung câu hỏi mà còn ghi điểm trước mắt NTD.
Hi vọng bài viết giúp ích cho bạn. Chúc các bạn có những trải nghiệm phỏng vấn vui vẻ!
Bài viết liên quan
Cách Discord Lưu Trữ Hàng Nghìn Tỷ Tin Nhắn Với ScyllaDB
Dec 06, 2024 • 9 min read
Idempotent Consumer: Xử lý thông điệp trùng lặp trong Microservices
Dec 04, 2024 • 7 min read
Hướng dẫn tích hợp Redux và React Query trong dự án React Vite
Nov 22, 2024 • 8 min read
Giới thiệu Kiến trúc Backend for Frontend (BFF)
Nov 16, 2024 • 10 min read
Flask là gì? Hướng dẫn tạo Ứng dụng Web với Flask
Nov 15, 2024 • 7 min read
Webhook là gì? So sánh Webhook và API
Nov 15, 2024 • 8 min read