1. Nền Tảng C# và .NET
Giới thiệu
Phần này trình bày các kiến thức nền tảng về ngôn ngữ C# và .NET Runtime, bao gồm:
Nội dung chính
C# Cơ bản
- Cú pháp cơ bản - Kiểu dữ liệu, biến, toán tử, luồng điều khiển, phương thức
Lập trình hướng đối tượng
- OOP - Class, Inheritance, Polymorphism, Encapsulation, Interface
Hệ thống kiểu & Generics
- Types & Generics - Generic types, nullable types, type conversion, boxing/unboxing
Delegates, Events & Lambda
- Delegates & Events - Func, Action, events, lambda expressions
Collections
- Collections - Arrays, List, Dictionary, HashSet và các collection interfaces
Xử lý chuỗi
- Strings - String vs StringBuilder, string interpolation, string methods
Async/Await & LINQ
- Async/Await - Cơ chế bất đồng bộ trong C#
- IEnumerable vs IAsyncEnumerable - So sánh synchronous và asynchronous enumeration
- LINQ - Language Integrated Query (IEnumerable vs IQueryable)
Exception Handling & IDisposable
- Exception Handling & IDisposable - Try-catch-finally, IDisposable pattern, tương tác giữa chúng
Pattern Matching, Records & Reflection
- Pattern Matching - Pattern Matching
- Records - C# 9+ Records
- Attributes & Reflection - Metadata và runtime type inspection
- Tính năng mới C# 12 - C# 12 New Features
CLR & Bộ nhớ
- Garbage Collection - Hoạt động của GC
- Thế hệ GC - Generations (Gen 0, 1, 2)
- Tối ưu GC - Cách giảm áp lực lên GC
- Value Types vs Reference Types - So sánh struct và class
- ref, out, in - Các từ khóa ref modifiers
Câu hỏi phỏng vấn (Sắp xếp từ dễ đến khó)
Mức độ: Dễ (Junior)
- Sự khác biệt giữa
value typesvàreference typestrong C#? constvàreadonlykhác nhau như thế nào?StringvsStringBuilder- khi nào nên dùng cái nào?- Sự khác biệt giữa
for,while, vàforeachloops? break,continue, vàreturnkhác nhau như thế nào?ArrayvàList<T>khác nhau gì?ref,out,inparameters khác nhau như thế nào?null-coalescing operator(??) vànull-conditional operator(?.) dùng để làm gì?
Mức độ: Trung bình (Mid-level)
abstract classvàinterfacekhác nhau như thế nào? Khi nào dùng cái nào?- Giải thích
inheritance,polymorphism, vàencapsulationtrong OOP? - Sự khác biệt giữa
delegate,event, vàlambda expression? - So sánh
List<T>,Dictionary<TKey, TValue>, vàHashSet<T>- khi nào dùng cái nào? - Khi nào nên sử dụng
generic typesvà cách áp dụng constraints? BoxingvàUnboxinglà gì? Tại sao nên tránh?Deferred Executiontrong LINQ là gì?- Sự khác biệt giữa
IEnumerablevàIQueryable- khi nào dùng cái nào? - Giải thích
try-catch-finallyhoạt động thế nào?throwvàthrow exkhác nhau gì? IDisposablelà gì? Tại sao cần implement nó?usingstatement hoạt động như thế nào với IDisposable?
Mức độ: Khó (Senior)
- Giải thích
async/awaithoạt động thế nào dưới the hood? - Sự khác biệt giữa
IEnumerablevàIAsyncEnumerable? - Cách tối ưu truy vấn LINQ trên tập dữ liệu lớn?
- Garbage Collection (GC) hoạt động như thế nào?
- Các thế hệ (Generations) trong GC là gì?
- Cách tối ưu để giảm áp lực lên GC?
- Value Types (
struct) vs Reference Types (class) – cách lưu trữ trên Stack/Heap và tác động đến hiệu năng? Reflectionlà gì và khi nào nên sử dụng? Performance considerations?Attributestrong C# dùng để làm gì? Cho ví dụ về custom attribute.- Pattern Matching trong C# 9+ có gì mới?
RecordskhácClassesnhư thế nào? Khi nào nên dùng Records?- Tương tác giữa try-catch-finally và IDisposable -
usingstatement tương đương với try-finally như thế nào? - Tại sao không nên throw exception từ Dispose method?
ConfigureAwait(false)dùng để làm gì? Khi nào nên sử dụng?