Tai Lieu

Cheat Sheet — ôn nhanh trước phỏng vấn

Tóm tắt 1 trang các khái niệm quan trọng nhất cho fresher .NET — đọc 30 phút sáng trước khi đi phỏng vấn.
Đọc lướt 30 phút sáng trước phỏng vấn. Không học cái mới — chỉ refresh.

A. C# keywords cần thuộc

Keyword1 dòng
varSuy luận kiểu compile-time
dynamicBỏ qua type check runtime
constCompile-time, primitive, inline
readonlySet trong ctor, mỗi instance
static readonlySet 1 lần, share toàn app
sealedKhông cho kế thừa
abstractKhông tạo instance được
virtualCho override
overrideRedefine virtual của cha
new (method)Ẩn method cha (no polymorphism)
outPhải gán bên trong, không cần init
refTruyền theo tham chiếu 2 chiều
inRead-only reference (struct lớn)
paramsSố tham số biến thiên
usingAuto Dispose, hoặc import namespace
yield returnSinh iterator lazy
lockCritical section đơn luồng

B. Value vs Reference

Value type:     int, double, bool, char, struct, enum, DateTime
                → Stack, copy giá trị, default = 0

Reference type: class, string, array, delegate, interface
                → Heap, copy địa chỉ, default = null

string: REFERENCE nhưng IMMUTABLE — so sánh == bằng nội dung

C. OOP & SOLID

4 tính chất: Encapsulation, Abstraction, Inheritance, Polymorphism.

SOLID:

  • S — Single Responsibility — 1 class 1 lý do đổi
  • O — Open/Closed — mở mở rộng, đóng sửa
  • L — Liskov Substitution — con thay được cha
  • I — Interface Segregation — interface nhỏ, chuyên biệt
  • D — Dependency Inversion — depend abstraction

Interface vs Abstract:

InterfaceAbstract
Multiple
Field
Ctor
Mục đíchCapabilityBản chất

D. Async / Task

async/await KHÔNG tạo thread mới.
await giải phóng thread hiện tại, schedule continuation.

I/O bound  → async/await trực tiếp
CPU bound  → Task.Run(...) offload thread pool

Tránh: .Result, .Wait()  → deadlock trong WPF/ASP.NET classic
Tránh: async void        → trừ event handler

E. LINQ — IEnumerable vs IQueryable

IEnumerable<T>: LINQ to Objects, query trên memory
IQueryable<T> : LINQ to SQL/EF, dịch sang SQL chạy ở DB

Trong EF Core: dùng IQueryable đến cuối cùng rồi mới .ToList()

F. Collection độ phức tạp

AccessSearchInsertDelete
List<T>O(1)O(n)O(1)*O(n)
DictionaryO(1) avgO(1) avgO(1) avg
HashSetO(1) avgO(1) avgO(1) avg
QueueO(1)O(1)
StackO(1)O(1)
LinkedListO(n)O(n)O(1)O(1)

*Add cuối O(1) amortized.

G. DI lifetimes

Singleton → 1 instance toàn app    | Logger, Cache, Config
Scoped    → 1 instance/request      | DbContext, Repository, Service
Transient → mỗi lần inject          | Stateless helper nhẹ

⚠️ Không inject Scoped vào Singleton → captive dependency.

H. HTTP method & status

MethodIdempotentSafe
GET
POST
PUT
PATCHusually ✅
DELETE
CodeKhi nào
200OK có body
201Created (POST) + Location header
204No Content (DELETE, PUT)
400Bad Request — data sai
401Chưa auth
403Đã auth, không quyền
404Không tìm thấy
409Conflict (duplicate)
422Validation business rule
500Server error

I. SQL — JOIN

INNER JOIN  → giao 2 bảng (chỉ rows match)
LEFT JOIN   → tất cả rows trái + matched phải (NULL nếu không match)
RIGHT JOIN  → ngược lại LEFT
FULL OUTER  → tất cả hai bên
CROSS JOIN  → tích Descartes
SELF JOIN   → join với chính mình

⚠️ LEFT JOIN + WHERE trên bảng phải → biến thành INNER!
   Đặt điều kiện vào ON.

J. INDEX

Clustered     : sắp xếp vật lý dữ liệu, MỖI bảng 1, PK default
Non-clustered : B-tree riêng trỏ về row, có nhiều
Composite     : INDEX(A,B,C) — left-most prefix rule
Covering      : INCLUDE thêm cột, không cần seek về bảng

Không nên index:

  • Cột thay đổi nhiều
  • Cột selectivity thấp (Status, Gender)
  • Bảng nhỏ

Non-sargable (không dùng được index):

WHERE YEAR(date) = 2026          ❌
WHERE UPPER(email) = '...'       ❌
WHERE date >= '2026-01-01' AND   ✅
      date <  '2027-01-01'

K. ACID + Isolation Level

A — Atomicity   : all or nothing
C — Consistency : DB always valid
I — Isolation   : transactions independent
D — Durability  : commit persist forever

Level                  | Dirty | Non-rep | Phantom
Read Uncommitted       | ✅    | ✅       | ✅
Read Committed (def)   | ❌    | ✅       | ✅
Repeatable Read        | ❌    | ❌       | ✅
Serializable           | ❌    | ❌       | ❌

L. EF Core loading

Lazy    : load khi truy cập (cần proxy + virtual). Risk: N+1
Eager   : .Include(...) → 1 query JOIN
Explicit: .Entry().Collection().Load()
Projection (BEST): .Select(u => new UserDto {...}) — chỉ cột cần
AsNoTracking() → read-only, nhanh hơn 20-30%
SaveChanges() → 1 transaction cho mọi change

M. Big O cheat

O(1)         constant      Dictionary lookup
O(log n)     log           Binary search
O(n)         linear        Duyệt mảng
O(n log n)   linear-log    MergeSort, QuickSort avg
O(n²)        quadratic     Nested loop, BubbleSort
O(2ⁿ)        exponential   Fib naive, subset
O(n!)        factorial     Permutations

N. JWT cấu trúc

header.payload.signature   (3 phần, base64url)

header   : { alg, typ }
payload  : claims (sub, exp, iat, role, …)
signature: HMAC/RSA(header + payload + secret)

Authentication = bạn là ai      → UseAuthentication
Authorization  = bạn được làm gì → UseAuthorization

O. Pipeline ASP.NET Core (thứ tự!)

1. Exception handling
2. HTTPS redirect
3. Static files
4. Routing
5. CORS
6. Authentication  ← phải TRƯỚC
7. Authorization
8. Endpoints (MapControllers)

P. 10 câu thường được hỏi (ôn cuối)

  1. Value type vs Reference type — ví dụ?
  2. Interface vs Abstract class — khi nào dùng?
  3. SOLID — viết tắt + giải thích D.
  4. async/await có tạo thread mới?
  5. Singleton/Scoped/Transient — DbContext gì?
  6. INNER vs LEFT JOIN — khi nào dùng?
  7. INDEX là gì? Khi nào không nên?
  8. IEnumerable vs IQueryable?
  9. JWT 3 phần là gì?
  10. Big O của Two Sum với HashMap?

Q. 5 từ khoá khi bí

Khi không nhớ rõ — vẫn nói được bằng cách dùng:

  • "Theo em nhớ thì..."
  • "Em xin 30s suy nghĩ..."
  • "Em chưa được học sâu chỗ này, nhưng em đoán..."
  • "Em nghĩ có 2 cách, em đi cách này trước..."
  • "Anh/chị có thể cho em ví dụ cụ thể hơn không?"

Trung thực + chủ động > Im lặng / đoán bừa.


Chúc may mắn! Sau phỏng vấn nhớ gửi email cảm ơn trong 24h.

© 2026 .NET Fresher Guide. All rights reserved.

Về Trang Web

Hướng dẫn toàn diện để chuẩn bị phỏng vấn vị trí .NET Fresher với nội dung từ lý thuyết đến thực hành.