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
| Keyword | 1 dòng |
|---|---|
var | Suy luận kiểu compile-time |
dynamic | Bỏ qua type check runtime |
const | Compile-time, primitive, inline |
readonly | Set trong ctor, mỗi instance |
static readonly | Set 1 lần, share toàn app |
sealed | Không cho kế thừa |
abstract | Không tạo instance được |
virtual | Cho override |
override | Redefine virtual của cha |
new (method) | Ẩn method cha (no polymorphism) |
out | Phải gán bên trong, không cần init |
ref | Truyền theo tham chiếu 2 chiều |
in | Read-only reference (struct lớn) |
params | Số tham số biến thiên |
using | Auto Dispose, hoặc import namespace |
yield return | Sinh iterator lazy |
lock | Critical 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:
| Interface | Abstract | |
|---|---|---|
| Multiple | ✅ | ❌ |
| Field | ❌ | ✅ |
| Ctor | ❌ | ✅ |
| Mục đích | Capability | Bả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
| Access | Search | Insert | Delete | |
|---|---|---|---|---|
List<T> | O(1) | O(n) | O(1)* | O(n) |
Dictionary | — | O(1) avg | O(1) avg | O(1) avg |
HashSet | — | O(1) avg | O(1) avg | O(1) avg |
Queue | — | — | O(1) | O(1) |
Stack | — | — | O(1) | O(1) |
LinkedList | O(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
| Method | Idempotent | Safe |
|---|---|---|
| GET | ✅ | ✅ |
| POST | ❌ | ❌ |
| PUT | ✅ | ❌ |
| PATCH | usually ✅ | ❌ |
| DELETE | ✅ | ❌ |
| Code | Khi nào |
|---|---|
| 200 | OK có body |
| 201 | Created (POST) + Location header |
| 204 | No Content (DELETE, PUT) |
| 400 | Bad Request — data sai |
| 401 | Chưa auth |
| 403 | Đã auth, không quyền |
| 404 | Không tìm thấy |
| 409 | Conflict (duplicate) |
| 422 | Validation business rule |
| 500 | Server 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)
- Value type vs Reference type — ví dụ?
- Interface vs Abstract class — khi nào dùng?
- SOLID — viết tắt + giải thích D.
async/awaitcó tạo thread mới?- Singleton/Scoped/Transient — DbContext gì?
- INNER vs LEFT JOIN — khi nào dùng?
- INDEX là gì? Khi nào không nên?
IEnumerablevsIQueryable?- JWT 3 phần là gì?
- 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.