Tôi nên chuẩn bị những câu hỏi phỏng vấn .NET nào?
Bởi Aaron Cao · Cập nhật

Hãy chuẩn bị các câu hỏi về runtime (CLR, thu gom rác, kiểu giá trị so với kiểu tham chiếu), ngôn ngữ (async và await, LINQ, generic, record), framework (middleware và dependency injection trong ASP.NET Core, EF Core), cùng các tình huống như rò rỉ bộ nhớ trong dịch vụ chạy lâu hoặc endpoint API chậm. Người phỏng vấn đánh giá cách bạn lập luận.
Câu hỏi runtime và ngôn ngữ nào thường mở đầu phỏng vấn .NET?
Người phỏng vấn bắt đầu từ nơi framework khởi đầu: runtime. Bạn cần giải thích Common Language Runtime làm gì (nạp assembly, biên dịch tức thời ngôn ngữ trung gian, quản lý bộ nhớ), rồi đi sâu thêm một mức về thu gom rác. Chuỗi câu hỏi tiếp theo khá dễ đoán: tại sao bộ thu gom chia theo thế hệ, điều gì khiến một đối tượng sống sót để chuyển sang thế hệ sau, vùng nhớ đối tượng lớn dùng để làm gì, và tại sao IDisposable cùng using vẫn tồn tại khi bộ nhớ đã được quản lý. Với câu cuối, hãy nói về các tài nguyên không được quản lý như handle tệp và kết nối, vốn không thể được bộ thu gom giải phóng kịp thời.
- Kiểu giá trị và kiểu tham chiếu. Mỗi loại nằm ở đâu, thao tác sao chép có ý nghĩa gì với từng loại và boxing tốn chi phí ra sao.
- async và await. Giải thích rằng một tác vụ đang được await sẽ giải phóng luồng gọi thay vì chặn nó, tại sao
async voidchỉ dành cho trình xử lý sự kiện và deadlock nào được nhắc đến khi người ta cảnh báo về.Result. - LINQ. Thực thi trì hoãn là cái bẫy: truy vấn
IEnumerablechạy khi được duyệt chứ không phải khi được viết, còn truy vấn qua trình cung cấp cơ sở dữ liệu chỉ được chuyển thành SQL đối với các biểu thức mà trình cung cấp hiểu được. - Generic, interface và record. Các ràng buộc, lý do ưu tiên interface hơn lớp cơ sở để dễ kiểm thử và lợi ích của phép so sánh bình đẳng theo giá trị ở record.
Với mỗi câu, hãy nêu cơ chế và một hệ quả. Giải thích rằng việc thu gom thế hệ không có chi phí thấp vì phần lớn đối tượng chết sớm mới là mức độ người phỏng vấn mong muốn; chỉ kể tên các thế hệ mà không nêu lý do thì chưa đủ.
Các câu hỏi ASP.NET Core và EF Core có dạng nào?
Bạn tự tin khi viết controller nhưng lo rằng câu hỏi sẽ xoay quanh phần hạ tầng ít khi đụng tới. Nỗi lo đó có cơ sở vì đây chính là nơi xuất hiện các câu hỏi về framework; dưới đây là phần hạ tầng theo thứ tự thường được hỏi, kèm câu hỏi tiếp nối của từng mục.
- Pipeline xử lý yêu cầu. Middleware chạy theo thứ tự đăng ký, mỗi thành phần tự quyết định có gọi thành phần tiếp theo hay không. Câu hỏi tiếp nối: authentication nằm ở đâu so với authorization, và chuyện gì xảy ra nếu bạn đăng ký chúng theo thứ tự ngược lại?
- Vòng đời dependency injection. Singleton tồn tại suốt vòng đời ứng dụng, scoped tồn tại trong một yêu cầu, còn transient được tạo mỗi khi được resolve. Cái bẫy kinh điển là inject một dịch vụ scoped, chẳng hạn context cơ sở dữ liệu, vào singleton; hãy sẵn sàng giải thích tại sao đó là lỗi.
- Cấu hình và options. Các nguồn cấu hình phân lớp, giá trị ghi đè theo môi trường và options pattern dành cho thiết lập có kiểu.
- EF Core. Theo dõi thay đổi và khi nào nên tắt nó cho truy vấn chỉ đọc, vấn đề N+1 và cách eager loading hoặc projection tránh vấn đề này, migration, cùng thời điểm thực tế mà truy vấn viết tay hiệu quả hơn LINQ.
- Kiểm thử. Cách interface và DI container giúp một dịch vụ có thể kiểm thử, cũng như những gì trình cung cấp trong bộ nhớ có thể và không thể chứng minh về cơ sở dữ liệu thực.
Những ứng viên xuất sắc nhất kết nối được các điểm này: context scoped được resolve bên trong dịch vụ nền singleton không phải câu hỏi mẹo, mà là lỗi bộ nhớ và tính đúng đắn người phỏng vấn từng thực sự đưa lên production; họ muốn nghe rằng bạn sẽ chủ động tạo một scope.
Các câu hỏi tình huống diễn ra như thế nào?
Ở các vòng phỏng vấn cấp cao, người ta đưa ra một triệu chứng rồi quan sát phương pháp của bạn. Một ví dụ điển hình: kỹ sư backend phỏng vấn cho vị trí cấp cao tại công ty logistics được cho biết bộ nhớ của API ASP.NET Core tăng dần trong nhiều ngày cho đến khi container khởi động lại. Câu trả lời tốt không phỏng đoán. Nó hỏi điều gì đã thay đổi, kiểm tra các đối tượng bị static cache hoặc subscription sự kiện dài hạn giữ lại, tìm dịch vụ scoped bị singleton giữ, xem xét mức tăng của vùng nhớ đối tượng lớn và dùng snapshot bộ nhớ trước khi đề xuất cách sửa. Người phỏng vấn đánh giá thứ tự điều tra.
Các tình huống thường gặp khác gồm: endpoint chỉ chậm khi tải cao, trong đó câu trả lời chuyển từ lệnh gọi cơ sở dữ liệu đồng bộ sang async, tình trạng cạn connection pool và caching; race condition trong collection dùng chung cùng chi phí của concurrent collection và các phương án khóa; một yêu cầu phải gọi ba dịch vụ hạ nguồn và cách bạn xử lý timeout, retry cùng lỗi một phần; cũng như migration phải thêm cột mà không gây downtime. Trong mỗi trường hợp, hãy nêu ràng buộc, chọn cơ chế và nói rõ sự đánh đổi.
Những câu này sẽ dễ hơn nhiều nếu bạn đã luyện trả lời thành tiếng cùng các câu hỏi nối tiếp; đó chính là mục đích của chế độ phỏng vấn thử. Các bộ câu hỏi theo ngôn ngữ và vai trò khác được tập hợp tại câu hỏi phỏng vấn theo vai trò và chủ đề.
Trợ lý phỏng vấn AI có thể hỗ trợ câu hỏi .NET không?
Trong các vòng phỏng vấn hội thoại thì có, trong phạm vi giới hạn đã nêu. Ứng dụng desktop native cho macOS và Windows của SubcueAI thu âm thanh hệ thống cùng micrô của bạn rồi hiển thị gợi ý trả lời ngắn trong lớp phủ cục bộ. Vì vậy, khi người phỏng vấn hỏi tại sao context scoped bên trong singleton lại là lỗi, cơ chế sẽ hiện trên màn hình để bạn giải thích bằng lời của mình. Tiện ích trình duyệt hỗ trợ cuộc gọi trong tab trình duyệt trên Chrome và Edge bằng cách chỉ thu âm thanh của tab cuộc họp. Không có bot nào tham gia cuộc gọi và không có gì được chèn vào trang cuộc họp; hướng dẫn thiết lập nằm trên trang hướng dẫn.
Các giới hạn: bài đánh giá có giám sát, màn hình bị ghi lại, laptop do công ty quản lý hoặc bài lập trình trực tiếp mà bạn gõ C# dưới sự quan sát đều không thuộc phạm vi hỗ trợ; trợ lý cũng yếu nhất khi buổi phỏng vấn yêu cầu bạn viết code. Công cụ phát huy hiệu quả nhất với các câu hỏi về runtime, framework và sự đánh đổi ở trên. Hãy cung cấp CV của bạn trước để các gợi ý phản ánh đúng những hệ thống bạn thực sự đã xây dựng; hồ sơ đó nằm trong trình tạo CV.
Câu hỏi thường gặp
Tại sao bộ thu gom rác .NET có nhiều thế hệ?
Singleton, scoped và transient khác nhau thế nào trong ASP.NET Core?
await thực sự làm gì?
Vấn đề N+1 trong EF Core là gì?
SubcueAI có thể hỗ trợ trong bài kiểm tra lập trình .NET có giám sát không?
Câu hỏi liên quan
- Tôi nên chuẩn bị những câu hỏi phỏng vấn Databricks nào?
- Tôi nên chuẩn bị những câu hỏi phỏng vấn kỹ sư chất lượng nào?
- Tôi nên dự kiến những câu hỏi nào trong phỏng vấn định lượng?
- Tôi nên chuẩn bị những câu hỏi phỏng vấn Snowflake nào?
- Tôi nên chuẩn bị cho những câu hỏi phỏng vấn giáo viên nào?
- Tôi nên chuẩn bị cho những câu hỏi phỏng vấn Terraform nào?