سوالات جدید مصاحبه کاری برای مهندسین نرم افزار

در این مقاله، مجموعه ای از سوالاتی که در مصاحبات کاری برای مهندسین نرم افزار مطرح می‌شود را جمع ‌آوری کرده ایم . این سوالات بیشتر روی طراحی نرم ‌افزار تمرکز دارند.

این مقاله درباره " چگونگی داشتن یک مصاحبه کاری خوب " نیست ، بلکه هدف از ارائه این مقاله آشنایی با سوالاتی است که ممکن است در مصاحبه های کاری برای مهندسان نرم افزار مطرح شود :

در زیر چیزی که برای شما جمع‌آوری کردیم را مشاهده می‌کنید :

- به عنوان یک developer ، چه کار اساسی ای برای بهبود دادن زندگی حرفه ای خود ، کرده اید ؟!
- آیا خودت رو به عنوان یک استادکار قبول داری ، و این چه معنی برای تو دارد ؟!
- پیاده سازی یک Data Structure ساده با یک زبان برنامه نویسی بر روی کاغذ ، تخته یا notepad .
- SOLID چیست ؟!
- به چه دلیل اصل مسئولیت پذیری مهم است ؟
- Inversion of Control چیست ؟ و چه رابطه ای با Dependency Injection دارد ؟
- چند مثال در مورد anti-patternها ارائه دهید .
- چه رابطه ای بین MVC , MVp و MVVm وجود دارد ؟ و چه زمانی از اینها استفاده میکنیم ؟
- مفهوم Concern of Separation را توضیح دهید .
- نام سه Attribute اصلی طراحی شی گرا را نام ببرید . مفهوم انها را توضیح دهید و بگویید چرا آنها مهم می‌باشند . 
- یک pattern که Factory Pattern نیست را ، شرح دهید . چه زمانی و چگونه از آن استفاده می‌کنیم . 
- شما در یک پروژه مشکلات نگهداری از کد را خواهید داشت . چه کاری برای بهبود این امر انجام خواهید داد ؟
- فهرستی از پروژه هایی که روی آن کار کردید را ارائه دهید ، و درباره انها توضیح دهید . 
- چه راه های جایگزینی غیر از  پایگاه داده رابطه ای برای ذخیره داده ها وجود دارد ؟ 
- concept of convention در Configuration را توضیح دهید و در مورد convention هایی که تا کنون مشاهده کرده اید ، توضیحاتی را ارائه دهید . 
- تفاوت بین سیستم های Stateless و Stateful را شرح دهید . 
- تفاوت بین Mocks و Stubs/Fakes را شرح دهید . 
- در مورد concept of YAGNI بحث کنید .
- مفهوم Sandbox را توضیح دهید و دلیل استفاده از آن را نیز شرح دهید . 
- همزمانی :
• چه تفاوتی بین Locking و  Lockless در مدل های همزمانی چیست ؟
• ما در استفاده از مدل های Locking با مشکلاتی مواجه خواهیم شد ؟ در مورد Lockless چگونه است ؟!
• برای منابع رقابتی چه چیز هایی را سبک سنگین میکنید ؟
• چه تفاوت هایی بین asynchrony و concurrency وجود دارد ؟

- هنوز کد مینویسید ؟ آیا علاقه ای به آن دارید ؟
- زمانی که با در پروژه باید از تکنولوژی  استفاده کنید که با آن آشنایی ندارید ، کار را چگونه شروع میکنید ؟
- افزونه Service Orientation چگونه باعث تغییر در سیستم می‌شود ؟ چه زمانی فرصت استفاده از آن است ؟
- چه کار هایی برای بروز نگه داشتن خود در مورد تکنولوژی ها و ابزار ها می‌کنید . 
- چه تفاوت هایی بین منطق "set" و منطق "procedular" وجود دارد ،در چه زمانی از کدام منطق استفاده می‌کنید؟
- با چه سیستم های کنترل منابعی کار کرده اید ؟
-  همبندی پیوسته (Continuous Integration) چیست ؟ تجربه استفاده ازآن را دارید ؟ به چه دلیلی مهم است ؟
- چرخه تولید یک نرم افزاری که آن را مدیریت کرده اید را شرح دهید . 
- در برابر انتقادات مردم به کدها و برنامه هایتان چه واکنشی نشان می‌دهید ؟
- کدام blogها و  podcastها رادنبال می‌کنید ؟
- درباره پروژه هایی که برای سرگرمی انجام داده اید توضیح دهید ؟
- آخرین کتاب مرتبط با برنامه نویسی ای که مطالعه کرده اید ، چی بوده است ؟
- درباره ی ساختار و محتوای یک design document توضیح دهید . 
- چه مطلب جالبی در مورد تکنولوژی های روز دنیا میدانید ؟
- زمانی که به یک مشکل بر میخورید که توانایی حل آن را ندارید ، چه واکنشی نشان می‌دهید ؟
- اگر پایگاه داده شما تحت فشار سخت باشد ، اولین کاری که برای بالا بردن سرعت آن میکنید ، چیست ؟
- SQL Injection چیست ؟
- چه تفاوت هایی بین unit test و integration test وجود دارد ؟
- در مورد سه شکستی که در پروژه هایتان داشته اید ، مطالبی را بیان کنید . 
- Refactoring  چیست ؟ تا بحال تجربه استفاده از آن را داشته اید ؟ نام سه تا از Refactoring را بیان کنید . 
-شما دو کامپیوتر دارید و میخواهید اطلاعاتی را از این سیستم به دیگری منتقل کنید ، از چه روشی استفاده می‌کنید ؟
- تفاوت های بین web server, web farm و web garden را بیان کنید . برای هر کدام برنامه شما نیاز به چه تغییراتی دارد . 
- کدام مولفه های OO design مستعد و آماده آسیب رساندن هستند ؟ برای کم کردن این آسیب ها چه باید کرد ؟
- چگونه متوجه می‌شوید که کدهای شما برای محصول نهایی آماده است ؟
- YAGNI چیست ؟ 
- ویژگی های یک کد بد که دیده اید را توضیح دهید .