پرسش ها و پاسخ های مصاحبه های شغلی برای توسعه دهندگان #C

یکشنبه 7 شهریور 1395

مسئولان گزینش بخش های توسعه نرم افزار و همچنین افراد جویای کار، پرسش و پاسخ های زیر را مفید و کاربردی دانسته اند. مرور این سوالات می تواند برای افرادی که می خواهند در مصاحبه های شغلی شرکت کنند، مفید خواهد بود.

پرسش ها و پاسخ های مصاحبه های شغلی برای توسعه دهندگان #C

یافتن یک فرد ایده آل ، کار دشواری است. این مساله که شما بتوانید توسعه دهنده ای را پیدا کنید که از لحاظ شخصیتی و ارزش های کاری با سازمان شما هماهنگ باشد، یک هنر و ارزش محسوب می شود. زیرا محک زدن مهارت های تکنیکی یک فرد در مقایسه با سایر موارد، کار ساده تری است.

در برخی از سازمان ها ، مدیران بخش توسعه ، افراد کاندید برای مصاحبه های شغلی را هم به صورت شفاهی (با سوال هایی پیرامون syntax دستورات و زبان های خاص) و هم به صورت کتبی مورد آزمایش و مصاحبه قرار می دهند که این روند، برای متقاضی، استرس زا و دشوار است. اما در برخی سازمان ها ، افراد از پرسیدن سوالاتی نظیر syntax دستورات و زبان های خاص خودداری می کنند زیرا ممکن است فرد متقاضی در لحظه ی مصاحبه راجع به این گونه موارد، حضور ذهن نداشته باشد.

در مصاحبه های اولیه، اغلب سازمان ها ترجیح می دهند سوالاتی بپرسند که فرد متقاضی بتواند مفاهیم و روش های مقابله با مشکلات را در آن ها توضیح بدهد. برخی از شرکت ها نیز تست هایی را از متقاضیان می گیرند و یا تکه کدهایی را در اختیار آن ها قرار می دهند تا مشکلات موجود در کدها را پیدا کنند، که روش خوب و مناسبی محسوب می شود.

این مقاله ، بخش اول از سری مقالات پرسش و پاسخ پیرامون  زبان های خاص است. در اینجا لیستی از سوالات و پاسخ های آن ها آورده شده است که به شما کمک میکند دید بهتری نسبت به سوالاتی که ممکن است در یک مصاحبه شغلی در حوزه C# از شما پرسیده شود، می دهد.

Namespace ها (فضای نام ها) چیستند و چگونه به کار گرفته می شوند؟

Namespace ها برای سازماندهی کلاس ها در درون فریم ورک .NET به کار می روند. تنظیم ساختار منطقی کد بر عهده این Namespace ها است. Namespace ها مشابه Java package ها هستند، با این تفاوت اساسی که Java package ها ، قالب فیزیکی source file ها را شکل می دهند، ولی Namespace های .NET  این کار را انجام نمی دهند. با این وجود ، اغلب توسعه دهندگان این روش را دنبال می کنند و C# source file هایشان را در دایرکتوری هایی سازماندهی می کنند که با این فضای نام ها در ارتباط باشند.

فریم ورک .NET برای کلاس های زیادی که دارد، فضای نام هایی را در نظر گرفته است مانند System.Xml . فضای نام ها با استفاده از کلمه کلیدی namespace به کلاس های اختصاص داده می شوند.

Constructor چیست؟

یک Constructor (سازنده) یک عضو کلاس است که زمانی که کلاس ایجاد می شود، اجرا می شود. Constructor نامی مشابه نام کلاس دارد و می تواند با signature های مختلف، overload بشود. Constructor ها برای مقداردهی های اولیه به کار می روند.

GAC چیست  و کجا واقع شده است؟

GAC مخفف عبارت Global Assembly Cache است. Assembly های به اشتراک گذاری شده در GAC قرار می گیرند. که این ویژگی به برنامه اجازه می دهد به جای این که در هر برنامه Assembly ها را به صورت جداگانه به کار بگیرد، آن ها را میان برنامه ها به اشتراک بگذارد. Versioning (نسخه بندی) اجازه می دهد تا نسخه های مختلف assembly در GAC بتوانند وجود داشته باشند. (برنامه ها می توانند تعداد نسخه ها را در فایل config مشخص کنند. ) از ابزار gacutil command line برای مدیریت GAC استفاده می شود.

کدام string ها در C# ، immutable هستند؟

Immutable به این معنی است که مقادیر رشته نمی توانند پس از ایجاد شدن، تغییر کنند. هر گونه تغییر موجب ایجاد یک نمونه کاملا جدید از رشته می شود که این کار باعث به هدر رفتن حافظه و افزایش اطلاعات مازاد می شود. زمانی که مقادیر رشته ها می خواهند تغییر کنند، باید از کلاس System.Text.StringBuilder استفاده شود.

(DLL Hell) جهنم DLL به چه معنی است و .NET چگونه این موضوع را حل می کند؟

(DLL Hell) جهنم DLL دشواری مدیریت DLL ها بر روی یک سیستم را توصیف می کند، زمانی که چندین کپی با نسخه های مختلف از یک DLL در اختیار داریم و مشکلات بی شماری ممکن است به همین دلیل اتفاق بیفتند. زمانی که یک DLL (یا یک assembly) در .NET بارگذاری می شود، به همراه نام، نسخه و همچنین سایر مشخصات در سیستم بارگذاری می شود. Assembly همه ی اطلاعات همراه با metadata را در خودش دارد. GAC راه حل این مشکل را برای شما فراهم می کند، به این ترتیب که شما می توانید نسخه های مختلف از یک DLL را بدون هیچ مشکلی کنار هم داشته باشید.

متدها چگونه overload می شوند؟

متدها با قواعد مختلفی overload می شوند. بنابراین ، شما می توانید یک متد را با دادن نوع داده های مختلف، تعداد پارامتر های غیریکسان و یا تغییر ترتیب پارامتر ها overload کنید.

چگونه از ارث بری از یک کلاس جلوگیری کنیم؟

کلمه کلیدی sealed، امکان ارث بری از کلاس را از بین می برد.

نقطه ورودی در یک برنامه ی C# console application چیست؟

Main method.

چگونه یک رشته را بدون نیاز به حذف backslash  تعریف کنیم؟

یک @ در ابتدای رشته ای که در درون دبل کوتیشن قرار دارد، می گذاریم.

تفاوت بین struct  و کلاس چیست؟

struct   ها نمی توانند ارث بری شوند. struct   ها به وسیله مقدار پاس داده می شوند نه به وسیله reference ها. struct   ها در یک پشته ذخیره می شوند نه در یک heap. نتیجه نهایی ای که با struct   ها به دست می آید، از نظر راندمان ،بهینه تر است.

 Singleton چیست؟

Singleton یک design pattern (الگوی طراحی) است که زمانی که بخواهیم تنها یک نمونه از یک شی ساخته و به اشتراک گذاشته شده شود، از آن استفاده می کنیم. Singleton تنها اجازه ساخت یک نمونه از خودش را می دهد. هر تلاشی که برای ساختن نمونه های جدید انجام شود، به سادگی به نمونه قبلی reference داده می شود.

کلاس های Singleton به صورتی تعریف می شوند که همه ی constructor های مربوط به کلاس ها به صورت private هستند. علاوه بر آن، در این روش یک عضو private static ،مشابه یک کلاس ایجاد می شود تنها با این تفاوت که یک عضو public static دارد که یک نمونه از کلاس را به عنوان خروجی برمی گرداند. یک مثال ساده را می توانید در زیر ببینید:

public class SingletonExample {

 private static SingletonExample _Instance;

 private SingletonExample () { }

 public static SingletonExample GetInstance() {

  if (_Instance == null)  {

    _Instance = new SingletonExample ();

   }

   return _Instance;

  }

}

Boxing چیست؟

Boxing فرآیند تبدیل یک نوع مقدار(یک نوع Value ) به یک نوع reference مشابه است. به صورت پایه، این کار شامل ایجاد یک نمونه جدید بر روی heap و قرار دادن مقدار در آن است. معکوس این فرآیند توسط unboxing به سادگی انجام می شود، که مقدار را در یک شی از نوع reference که بر روی heap قرار دارد ، بر روی  یک نوع مقدار مرتبط که بر روی stack می ریزد. فرآیند unboxing به این صورت آغاز می شود که ابتدا بررسی می شود آیا نوع مقدار دریافت شده با مقدار box شده یکسان است یا خیر. اگر پاسخ، مثبت بود و عملیات اجازه اجرا شدن پیدا  کرد، مقدار مورد نظر در پشته (Stack) کپی می شود.

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 14k بازدید
  • 7 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید