Câu hỏi phỏng vấn Python

Bởi Aaron Cao · Cập nhật

Hãy chuẩn bị cho ba tầng: cơ chế ngôn ngữ như tính khả biến, generator và decorator; hành vi tại thời điểm chạy như GIL; và lập trình ứng dụng trên các cấu trúc dữ liệu. Phần lớn các trường hợp bị loại đến từ việc giải thích "tại sao" quá hời hợt, chứ không phải do sai cú pháp.

Những câu hỏi cứ lặp đi lặp lại

Làm hết danh sách hai trăm câu hỏi Python nghe có vẻ hiệu quả nhưng hiếm khi thay đổi kết quả phỏng vấn. Phần này thu hẹp phạm vi xuống một số ít câu hỏi lặp lại trong các vòng sàng lọc qua điện thoại và vòng kỹ thuật, đồng thời cho thấy một câu trả lời tốt cần có gì. Một số ít tính năng ngôn ngữ mang phần lớn tín hiệu đánh giá.

  • Tham số mặc định có thể thay đổi. Vì sao def f(x=[]) lại tích lũy giá trị qua các lần gọi? Giá trị mặc định chỉ được tính một lần, khi hàm được định nghĩa, chứ không phải mỗi lần gọi.
  • Generator so với list. Khi nào yield tốt hơn việc xây dựng một list? Khi chuỗi dữ liệu lớn, hoặc khi bạn có thể dừng đọc sớm.
  • Decorator. Một decorator thực sự trả về điều gì, và vì sao wrapper cần functools.wraps?
  • GIL. Vì sao các thread giới hạn bởi CPU không mở rộng được trong CPython, và bạn sẽ dùng gì thay thế?
  • Sao chép nông so với sao chép sâu. Điều gì bị hỏng khi một cấu trúc lồng nhau được sao chép bằng slice?
  • Định danh so với bằng nhau. Vì sao kiểm tra is với các số nguyên nhỏ trong shell lại cho ra kết quả gây hiểu lầm.

Điều phân biệt đậu và rớt

Hai ứng viên có thể đưa ra cùng một định nghĩa đúng về GIL, nhưng chỉ một người được đi tiếp. Sự khác biệt thường nằm ở câu thứ hai.

Một kỹ sư backend phỏng vấn cho vị trí L5 tại một nhà cung cấp cloud công cộng được hỏi vì sao dịch vụ của họ chậm lại khi tải cao. Người này nêu ra GIL, rồi tiếp tục: đường dẫn nóng là phân tích JSON, nên thread không phải công cụ phù hợp, và việc chuyển giai đoạn đó sang một process pool đã khôi phục thông lượng. Việc gọi tên được giới hạn chỉ mang lại điểm một phần. Việc gắn nó với một quyết định cụ thể mới giành được vòng phỏng vấn đó.

Xây dựng mỗi câu trả lời theo ba nhịp: tính năng đó làm gì, vì sao nó tồn tại, và khi nào bạn sẽ tránh dùng nó. Nhịp thứ ba là điều mà hầu hết ứng viên bỏ qua, và cũng chính là điều thể hiện khả năng phán đoán. Các trang khác về vòng coding, phỏng vấn hành vi và thiết kế hệ thống được nhóm dưới các loại phỏng vấn.

Cách chuẩn bị mà không cần học thuộc lòng

Đọc một câu trả lời và nói ra một câu trả lời là hai kỹ năng khác nhau, và chỉ một trong hai được kiểm tra. Hãy luyện tập nói to, có bấm giờ, bằng chính những từ ngữ bạn sẽ dùng trong cuộc gọi thật.

  • Viết câu trả lời cho mỗi câu hỏi hay lặp lại thành ba câu, sau đó nói lại mà không nhìn.
  • Chọn hai tính năng bạn dùng hằng ngày và chuẩn bị một giới hạn trung thực cho mỗi tính năng. Việc có thể phê bình chính công cụ mình dùng cho thấy kinh nghiệm.
  • Mang theo một câu chuyện gỡ lỗi thực tế, nơi hành vi của Python khiến bạn bất ngờ và bạn đã tìm ra lý do.
  • Luyện phần ứng dụng riêng: dictionary, set, sắp xếp bằng hàm key, và xử lý chuỗi chiếm phần lớn các vòng sàng lọc.

Nếu bạn muốn có một buổi luyện tập tính giờ với một AI phỏng vấn viên trước buổi thật, hãy vào trang phỏng vấn thử.

Trợ lý trực tiếp phù hợp ở đâu, và không phù hợp ở đâu

SubcueAI là ứng dụng desktop gốc cho macOS và Windows. Nó ghi lại âm thanh của cả hai bên cuộc gọi, phiên âm theo thời gian thực, và hiển thị một khung ý trên một lớp phủ nổi chỉ tồn tại cục bộ trên máy của bạn, nên nó không tham gia cuộc họp với tư cách người tham dự hay bot. Đối với vòng phỏng vấn Python, đầu ra hữu ích là một gợi ý cấu trúc, chứ không phải một câu trả lời hoàn chỉnh: các chi tiết cụ thể phải là của riêng bạn, vì câu hỏi tiếp theo sẽ xoay quanh chính đoạn mã bạn vừa mô tả.

Giới hạn trung thực quan trọng hơn khả năng. Nếu bạn chia sẻ màn hình, mọi thứ trên màn hình đó đều được chia sẻ. Nếu vòng phỏng vấn diễn ra trên một nền tảng đánh giá có giám sát, hoặc trên thiết bị do công ty quản lý, trợ lý không nằm trong phạm vi cho phép. Cách thiết lập và quyền truy cập được trình bày trên trang hướng dẫn.

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

Phỏng vấn Python có còn hỏi về GIL không?

Có, và thường được dùng như một câu hỏi thay thế. Người phỏng vấn muốn biết liệu bạn có thể phân biệt một tác vụ giới hạn bởi CPU với một tác vụ giới hạn bởi I/O, và chọn giữa thread, process hoặc async cho phù hợp. Chỉ đưa ra định nghĩa thì mới trả lời được một nửa.

Tôi nên học thuộc bao nhiêu kiến thức vặt về Python?

Ít hơn bạn nghĩ. Người phỏng vấn hiếm khi thưởng cho việc nhớ được cú pháp ít dùng; họ thưởng cho lập luận đúng về hành vi mà bạn có thể giải thích được. Hãy ưu tiên chiều sâu ở những tính năng bạn thực sự dùng hơn là chiều rộng ở những tính năng bạn không dùng.

Bài toán coding có phải một phần của phỏng vấn Python không?

Thường là có. Hầu hết các vòng sàng lọc kết hợp câu hỏi thảo luận với một bài toán ứng dụng nhỏ, thường về dictionary, set, sắp xếp hoặc xử lý chuỗi. Việc trình bày cách tiếp cận trước khi gõ code là điều được mong đợi, và sự im lặng bị đánh giá thấp.

Tôi có nên thừa nhận khi không biết câu trả lời không?

Có, sau đó hãy cho thấy bạn sẽ tìm hiểu như thế nào. Việc nói rằng bạn chưa từng dùng một tính năng và mô tả cách bạn sẽ kiểm tra hành vi của nó là một câu trả lời mạnh hơn nhiều so với một phỏng đoán tự tin mà người phỏng vấn có thể sửa ngay lập tức.

Tôi có thể dùng trợ lý AI trong lúc phỏng vấn coding Python không?

Điều này hoàn toàn phụ thuộc vào hình thức và các quy tắc bạn đã đồng ý. Trên một nền tảng có giám sát, khi chia sẻ màn hình, hoặc trên thiết bị do công ty quản lý, điều đó nằm ngoài phạm vi cho phép. Với các vòng luyện tập bạn tự thực hiện, không có giới hạn như vậy.

Câu hỏi liên quan

← Thêm về Loại phỏng vấn