VieLang
Lộ trình nghềPhỏng vấnCông cụViệc làm IT
  • Góc học tập
Tải app
  • Thư viện
  • Luyện thi
  • Cẩm nang
  • Góc học tập
Cẩm nang · Phỏng vấn

Câu hỏi phỏng vấn C# và .NET thường gặp (kèm đáp án)

Các câu hỏi C#, OOP và ASP.NET Core hay gặp ở vòng fresher và junior, kèm đáp án ngắn đủ ý.

Cập nhật 27/09/2026.

Checklist: 0/6 đã xong
Nội dung bài · 6 mục
  1. 1.Chuẩn bị trước buổi phỏng vấn
  2. 2.C# cơ bản
  3. 3.OOP
  4. 4.Collection và LINQ
  5. 5.Async và bộ nhớ
  6. 6.ASP.NET Core

Đáp án dưới đây là phần cốt lõi cần nói được. Khi trả lời, nói ý chính trước rồi thêm một ví dụ từ dự án của mình.

Chuẩn bị trước buổi phỏng vấn

C# cơ bản

Value type và reference type khác nhau thế nào?

Biến value type (int, bool, struct, enum) chứa trực tiếp giá trị; gán sang biến khác là sao chép giá trị. Biến reference type (class, string, array) chứa tham chiếu tới object; gán sang biến khác thì cả hai cùng trỏ một object.

var a = new Product { Name = "Pen" };
var b = a;
b.Name = "Book";
Console.WriteLine(a.Name); // Book — a và b cùng một object

string là reference type, sao gán xong sửa không ảnh hưởng nhau?

string là immutable: mọi thao tác "sửa" đều tạo string mới. Nối chuỗi nhiều lần trong vòng lặp nên dùng StringBuilder.

== và Equals khác nhau thế nào?

Với reference type, mặc định cả hai so sánh tham chiếu. Class có thể override Equals (và overload ==) để so sánh theo giá trị; string và record đã làm sẵn việc đó.

const và readonly khác nhau thế nào?

const là hằng lúc biên dịch, phải gán ngay khi khai báo. readonly được gán khi khai báo hoặc trong constructor, sau đó không đổi được.

Nullable reference type là gì?

Khi bật <Nullable>enable</Nullable>, string nghĩa là không được null, string? là có thể null. Compiler cảnh báo khi bạn dùng biến có thể null mà chưa kiểm tra.

OOP

Nêu bốn tính chất của OOP.

  • Đóng gói: giấu dữ liệu bên trong, chỉ cho sửa qua method/property.
  • Kế thừa: class con nhận lại thành viên của class cha.
  • Đa hình: cùng một lời gọi, mỗi class con thực hiện theo cách riêng.
  • Trừu tượng: chỉ lộ ra những gì cần dùng, giấu chi tiết cài đặt.

Abstract class và interface khác nhau thế nào?

Một class kế thừa được một abstract class nhưng implement được nhiều interface. Abstract class có thể chứa field và constructor. Dùng interface để mô tả "làm được gì", abstract class khi các class con dùng chung code.

SOLID là gì? Năm nguyên tắc thiết kế: Single responsibility, Open/closed, Liskov substitution, Interface segregation, Dependency inversion. Nên chuẩn bị ví dụ cho ít nhất S và D. Xem khoá OOP và thiết kế.

Collection và LINQ

IEnumerable và IQueryable khác nhau thế nào?

IEnumerable lọc dữ liệu trong bộ nhớ. IQueryable (EF Core) giữ biểu thức truy vấn để dịch sang SQL, phần lọc chạy ở database.

Deferred execution là gì?

Câu LINQ chỉ chạy khi được duyệt (foreach, ToList(), Count()…), không chạy lúc khai báo. Duyệt hai lần là chạy hai lần.

Khi nào dùng List, khi nào dùng Dictionary?

List khi cần giữ thứ tự và duyệt tuần tự. Dictionary khi cần tìm theo khoá, trung bình O(1) thay vì O(n).

Async và bộ nhớ

async/await giải quyết vấn đề gì?

Không giữ thread trong lúc chờ I/O (gọi database, gọi HTTP). Trong web API, thread rảnh được dùng để phục vụ request khác.

Vì sao tránh .Result và .Wait()?

Chúng chặn thread cho tới khi task xong, mất lợi ích của async và có thể gây deadlock ở một số môi trường. Dùng await xuyên suốt.

Garbage collector làm gì?

Tự thu hồi bộ nhớ của object không còn được tham chiếu. Tài nguyên không phải bộ nhớ (kết nối database, file) phải giải phóng bằng Dispose, thường qua using.

ASP.NET Core

Dependency injection là gì, ba lifetime khác nhau thế nào?

Class nhận phụ thuộc qua constructor thay vì tự new. Container tạo và truyền vào.

  • Transient: mỗi lần yêu cầu tạo mới.
  • Scoped: một instance cho mỗi request. DbContext mặc định là scoped.
  • Singleton: một instance cho cả ứng dụng.

Middleware là gì?

Các bước xử lý request xếp thành chuỗi (pipeline). Mỗi middleware xử lý rồi gọi middleware tiếp theo hoặc trả response luôn. Thứ tự đăng ký quyết định thứ tự chạy.

Trả về status code nào khi tạo mới thành công, khi không tìm thấy, khi dữ liệu gửi lên sai? 201 Created, 404 Not Found, 400 Bad Request.

JWT hoạt động thế nào?

Sau khi đăng nhập, server ký một token chứa thông tin user. Client gửi token trong header Authorization: Bearer <token> ở mỗi request; server kiểm chữ ký mà không cần tra session.

Nguồn

  • Microsoft Learn — Value types (C# reference) learn.microsoft.com
  • Microsoft Learn — Asynchronous programming with async and await learn.microsoft.com
  • Microsoft Learn — Fundamentals of garbage collection learn.microsoft.com
  • Microsoft Learn — Dependency injection in ASP.NET Core learn.microsoft.com

Nội dung bài

  1. 1.Chuẩn bị trước buổi phỏng vấn
  2. 2.C# cơ bản
  3. 3.OOP
  4. 4.Collection và LINQ
  5. 5.Async và bộ nhớ
  6. 6.ASP.NET Core