مرور سریع C#
جمعبندی نکات کلیدی C# برای مرور شب قبل مصاحبه — از انواع داده تا Async/Await، LINQ و اصول OOP.
این جزوه مهمترین نکات C# را که در مصاحبههای برنامهنویسی پرتکرارند، در یک صفحه جمع کرده تا در کمترین زمان مرور کنید. نکات ⭐ (طلایی) پرتکرارترین سؤالات مصاحبه هستند — اگر وقت کم دارید، فقط همانها را بخوانید.
فهرست بخشها
انواع داده: Value Type در برابر Reference Type0/4
پرتکرارترین سؤال پایهای مصاحبههای C# — تفاوت رفتار حافظه و کپیشدن مقادیر.
int a = 5;
int b = a; // کپی مقدار
b = 10; // a همچنان 5 است
اگر پرسیدند «رشته Reference Type است یا Value؟» بگویید Reference Type است، ولی چون Immutable است رفتارش شبیه Value Type به نظر میرسد.
فکر کردن به اینکه همهٔ Reference Type ها کند هستند؛ در عمل Garbage Collector نسل صفر بسیار سریع عمل میکند.
object o = 5; // Boxing
int i = (int)o; // Unboxing
دلیل اصلی وجود Generic ها همین است: جلوگیری از Boxing/Unboxing غیرضروری در کالکشنها.
استفاده از struct بزرگ با چند فیلد سنگین، باعث کپیهای پرهزینه در هر انتساب یا پاسدادن به متد میشود.
int? age = null;
if (age.HasValue) Console.WriteLine(age.Value);
Async / Await0/5
دومین موضوع پرتکرار مصاحبه — درک درست از عدممسدودسازی (non-blocking) و مدیریت Thread.
تأکید کنید: async/await به معنای Multithreading نیست، بلکه I/O غیرمسدودکننده است.
فکرکردن به اینکه هر متد async روی یک Thread جداگانه اجرا میشود.
نوشتن متدهای async void بهجای async Task برای متدهای عادی.
راهحل: «async all the way» باشید — همهجا await کنید، یا از ConfigureAwait(false) استفاده کنید.
await SomeAsyncMethod().ConfigureAwait(false);
await Task.WhenAll(task1, task2);
LINQ0/4
الگوی یکپارچهٔ کوئری روی مجموعهها، آرایهها و دیتابیس در C#.
var query = list.Where(x => x > 5); // هنوز اجرا نشده
list.Add(10);
foreach (var x in query) { } // حالا اجرا میشود
فراموشکردن اینکه تغییر منبع داده بعد از تعریف کوئری، روی نتیجهٔ نهایی هم اثر میگذارد.
اگر فیلتر روی IQueryable قبل از ToList نوشته شود در دیتابیس اجرا میشود؛ بعد از ToList در حافظه.
var allOrders = customers.SelectMany(c => c.Orders);
OOP و اصول SOLID0/4
پایهٔ طراحی شیءگرا و سؤالات مفهومی طراحی نرمافزار.
این دو را با هم اشتباه نگیرید — یکی اصل طراحی است، دیگری تکنیک/الگو.
مدیریت خطا (Exception Handling)0/3
catch (Exception ex)
{
throw; // درست
// throw ex; // نادرست
}
نوشتن throw ex در catch block که دیباگ خطاهای Production را سخت میکند.
Collections0/3
برای جستجوهای مکرر بر اساس کلید، همیشه Dictionary را به List ترجیح دهید.
