سوالات مصاحبه کاری برنامه نویس در شرکت‌های بزرگ

شرکت‌های بزرگ مانند آمازون، گوگل، مایکروسافت و فیسبوک همیشه در جستجوی برنامه‌نویسان و مهندسین با استعداد نرم افزار برای پیوستن و به تیم توسعه‌شان هستند. بنابراین برای بدست آوردن فرصت شغلی عالی و سودآور در چنین شرکت‌هایی، باید حدالمقدور دانش و مهارت خود را افزایش داد. در این مقاله به جمع آوری برخی از مهم‌ترین سوالات مصاحبه کاری برنامه نویس که هر برنامه‌نویس باید بداند، پرداختیم.سوالات مصاحبه کاری برنامه نویسسوال: لطفا چیزی که برنامه نویسی کامپیوتر درک میکنید را توضیح دهید.پاسخ: برنامه نویسی کامپیوتر پروسه کدنویسی یک الگوریتم، معمولا در یک کامپیوتر با استفاده از زبان‌های برنامه نویسی است که بتوان آن را توسط یک کامپیوتر اجرا کرد. هر زبان برنامه‌‌نویسی شامل مجموعه‌ای از دستوراتی است که کامپیوتر با اساس آنها، کارهایی را اجرا میکند. برنامه نویسی یک پروسه پیچیده است که شامل طراحی الگوریتم، کدنویسی و پیاده‌سازی آن الگوریتم در یک زبان برنامه‌نویسی، دیباگ و رفع اشکال، نگهداری و پشتیبانی و بروزرسانی کد میباشد.سوال: آیا میتوانید انواع مختلف error ها را که ممکن است در هنگام اجرای یک برنامه کامپیوتر بوجود بیایند، شمرده و توضیح دهید؟پاسخ: سه نوع error ممکن است هنگام اجرای یک برنامه کامپیوتر بوجود بیایند:Logical errors یا خطاهای منطقی – این نوع از خطا زمانی که در برنامه کامپیوتر، یک منطق نادرست پیاده سازی شده باشد، بروز میدهد. از آنجایی که هیچ گزارش برایشان تعریف نشده، این error ها پیچیده‌ترین نوع خطاها برای مقابله و تصحیح میباشد.Runtime errors – زمانی که برنامه شامل عملیات غیر مجاز باشد بروز میدهد. برای مثال، تقسیم یک عدد به صفر. اینها تنها نوع از error ها هستند که هنگام اجرای برنامه مستقیما نمایش داده میشوند. هنگام بروز خطای runtime، اجرای برنامه متوقف شده و پیام تشخیص آن خطا نمایش داده میشود.Syntax errors یا خطاهای سینتکس – زمانی بوجود می‌آیند که یک یا چند قانون دستوری زبان برنامه‌نویسی مورد استفاده، نقض شود. چنین خطاهایی در زمان کامپایل برنامه شناسایی میشوند.سوال: الگوریتم چیست و برخی از مهم‌ترین ویژگی‌های آن را توضیح دهید؟پاسخ: الگوریتم مجموعه‌ای محدود از مراحلی میباشد که برای انجام یک کار خاص از آن پیروی میشود. تمیزی، کارایی و ظرافت از ویژگی‌های مهم یک الگوریتم خوب میباشد.سوال: درک شما از مفهوم نگهداری و بروزرسانی یک برنامه کامپیوتر چیست؟پاسخ: مراحل نگهداری و بروزرسانی یک برنامه کامپیوتری پس از نصب موفقیت آمیز آن آغاز میشود. در حالی که نگهداری (maintenance) از برنامه یک پروسه مستمر مانیتورینگ برنامه کامپیوتر برای شناسایی باگ‌ها و خطاهاست، بروزرسانی برنامه کامپیوتر به معنی بهینه سازی آن با تغییرات جزئی و اساسی در طول زمان میباشد.سوال: لطفاً توضیح مختصری در مورد متغیرها ارائه دهید.پاسخ: متغیرها برای ذخیره کردن ورودی یک برنامه و همچنین نتایج محاسباتی در حین اجرای برنامه بکار میروند. مقدار ذخیره شده در یک متغیر میتواند در طول اجرای برنامه تغییر کند.سوال: هر زبان برنامه‌نویسی دارای کلمات رزرو شده میباشد. آنها چی هستند؟ با مثال توضیح دهید.پاسخ: کلمات رزرو شده که به عنوان (keywords) یا کلمات کلیدی نیز شناخته میشوند، کلماتی هستند که معانی از پیش تعریف شده در یک زبان برنامه‌نویسی خاص دارند. این کلمات مجاز برای استفاده به عنوان نام متغیرها، کلاسها و … اهداف دیگر یا تعریف مجدد نیستند. برخی از کلمات رزرو شده:C – کلمات break, case, char, default, else, float, if و intJava – کلمات abstract, boolean, catch, class, const, double, enum, finally, implements, instanceof, throws, transient و volatilePython – کلمات and, assert, continue, def, del, global, not, lambda, raise و yieldسوال: درک شما از حلقه‌های تکرار چیست؟ انواع حلقه تکرار را بطور مختصر توضیح دهید.پاسخ: حلقه تکرار یک ساختار در برنامه‌نویسی است که میتواند دستورات تعریف شده را به تعداد معین یا تا زمان تحقق یک شرط پایان حلقه، اجرا کند. سه نوع مهم از حلقه‌های تکرار:FOR…NEXT Loop – موثرترین نوع از حلقه تکرار برای زمانی که تعداد پایانی تکرار دستورات داخل حلقه را میدانید.WHILE…WEND Loop – این حلقه تا زمانی که شزط پایانی حلقه نادرست شود، به تکرار دستورات درونش ادامه میدهد. این حلقه خصوصا برای زمانی که تعداد کل تکرارهای حلقه نامشخص است، موثر میباشد.Nested Loop – زمانی که یک حلقه تکرار درون حلقه دیگر مورد استفاده قرار بگیرد، به آن Nested Loop گفته میشود.سوالات مصاحبه کاری برنامه نویسسوال: اهمیت مستندسازی برنامه را توضیح دهید؟پاسخ: مستندات برنامه، توضیحات نوشته شده برای الگوریتم‌‌(ها)، نحوه کدنویسی، تست طراحی و استفاده مناسب از یک برنامه کامپیوتری خاص میباشد. مستندسازی برای کسانی که بصورت روزانه قصد استفاده از برنامه را دارند و همچنین برای برنامه‌نویس(هایی) که قصد اصلاح و بروزرسانی برنامه را دارند، بسیار ارزشمند و هائز اهمیت است.سوال: ثواپت (constant) ها چیستند؟ انواع آنها را توضیح دهید.پاسخ: constant یک موجودیت در برنامه‌نویسی میباشد طوری که مقدار آن در هنگام اجرای برنامه قابل تغییر یا ویرایش نیست. ثوابت ۲ نوع اصلی دارند:Numeric constants – ثواپت عددی: شامل اعداد صحیح (Integer)، اعشاری (Double) و … میشوند. برای مثال اعداد ۲۲، ۲۴، ۸۹۸، ۴٫۵ و ۷۳٫۴۵String constants – ثوابت رشته‌ای: شامل دنباله‌ای از کاراکترهای الفبایی محصور در علائم نقل قول (quotation). حداکثر طول یک رشته ۲۵۵ کاراکتر میباشد. برای مثال، “CodeFriend is the best” یا “We love coding”.سوال: عملگرها (operators) را توضیح دهید.پاسخ: عملگرها برای اجرای عملیات معین روی داده‌ها در یک برنامه کامپیوتری بکار میروند. عملگرها با استفاده از علامت‌هایی نشان داده میشوند. مانند: / نشان‌دهنده عملیات تقسیم در ریاضی، * نشان‌دهنده عملیات ضرب در ریاضی. ۴ نوع اصلی از عملگرها به شکل زیر میباشند:Arithmetic – حسابی: برای محاسبه عملیات ریاضی استفاده میشوند.Assignment – واگذاری: برای ذخیره نتایج محاسبات درون متغیرها استفاده میشود.Logical – منطقی: امکان تصمیم‌گیری بر اساس شرایط مختلف را برای کامپیوتر فراهم میکند.Relational – رابطه‌ای: برای تعریف یا testing نوعی رابطه بین دو موجودیت بکار میرود. این عملگرها true یا false را ارزیابی میکنند و مقدار غیر صفر تولید میکنندسوال: آرایه‌ها را توضیح دهید.پاسخ: آرایه‌ یک ساختار برنامه‌نویسی است که مجموعه‌ای از داده‌های هم نوع را در آن ذخیره میکنیم. از نظر حافظه، یک آرایه گروهی مستمر از لوکیشن‌های حافظه است که داده‌ها هم نوع را به هر تعداد میتوان در آن ذخیره کرد.سوال: منظور از machine code چیست؟پاسخ: machine code یک زبان برنامه‌نویسی سطح پایین است. بر حلاف زبان‌های برنامه‌نویسی سطح بالا که بواسطه کامپایلر کدهای سطح بالا را برای اجرا به کدهای ماشین یا machine code تبدیل میکنند، میکرو پردازنده‌ها کدهای ماشینی را بصورت مستقیم و بدون کامپایل و تبدیل پردازش میکنند.سوال: Testing نرم افزار را توضیح دهید؟ چرا به انجام اینکار نیاز داریم؟پاسخ: همچون برنامه‌نویسی، تست نرم‌افزار هم یک جنبه بسیار مهم از چرخه توسعه نرم‌افزار میباشد. تحت پروسه تست نرم‌ افزار، نرم‌ افزار در شزایط معین جهت بررسی کیفیت تست میشود. یکی دیگر از جنبه‌های مهم تست کردن نرم‌ افزار کامپیوتر، ارزیابی تجربه کاربری نرم افزار میباشد. سایر جنبه‌های تست نرم افزار شامل موارد زیر میشود:بررسی جهت پیشرفت و توسعهاطمینان از کارایی مناسبپاسخ به نیازهای کاربرسوال: منظور از ورژن “beta” از یک برنامه کامپیوتری چیست؟پاسخ: انتشار نسخه بتا از برنامه کامپیوتری به معنی آماده بودن آن جهت انتشار بصورت public نیست بلکه به منظور ایجاد تغییرات و بروزرسانی برنامه بر اساس بازخوردهای کاربران دریافت شده در تست بتا، در نسخه‌های بعدی است.سوالات مصاحبه کاری برنامه نویسسوال: شیوه طراحی top-down را بطور مختصر توضیح دهید.پاسخ: شیوه طراحی top-down روشی است برای تجزیه و تحلیل نرم افزار. طوری که بجای تلاش برای رفع مشکلات بصورت کلی، آن مشکل به مشکلات کوجک‌تر تقسیم میشود. سپس هر کدام از آنها بصورت جداگانه حل میشوند. نهایتا راه حل‌ ها ترکیب میشوند تا بهترین راه حل بدست بیاید.سوال: درک شما از پیاده سازی برنامه چیست؟پاسخ: پس از تکمیل توسعه و تست‌های برنامه، باید آنرا روی کامپیوترهای هدف نصب کنیم. پروسه نصب و تنظیم برنامه کامپیوتری که توسط کاربران نهایی استفاده خواهد شد، پیاده سازی برنامه نامیده میشود.سوال: لطفا اجرا (execution) برنامه را بصورت مختصر توضیح دهید.پاسخ: اجرای برنامه پروسه انجام دستورالعملهای برنامه توسط کامپیوتر است. قبل از اجرا، برنامه کامپیوتری، باید برنامه در حافظه (RAM) کامپیوتر بارگذاری شود.سوال: منظور از کامپایلر (Compiler) چیست؟پاسخ: کامپایلر یک برنامه کامپیوتری است که کد نوشته شده در یک زبان برنامه‌نویسی را به یک زبان دیگر ترجمه میکند. معمولا، کامپایلر به برنامه‌ای اشاره دارد که یک زبان برنامه‌نویسی سطح بالا را به زبان برنامه‌نویسی سطح پائین ترجمه و تبدیل کند تا یک برنامه قابل اجرا تولید شود.سوال: منظور از دیباگ (Debugging) چیست و چگونه با تست برنامه مرتبط است؟پاسخ: هنگام تست کردن برنامه کامپیوتری، مشکلاتی درون برنامه کشف میشود که به آنها error یا bug گفته میشود. debugging پروسه تصحیح آنها میباشد. به عبارت دیگر debugging پروسه اصلاح خطاها و مشکلاتی است که در کد نوشته شده پیدا میشوند.سوال: چرا استفاده از کامنت‌ها در کد بسیار پیشنهاد میشود؟پاسخ: یک برنامه کامپیوتری معمول، شامل صدها تا هزاران خط کد است. افزودن کامنت‌ها به کد روشی مناسب برای ساده کردن تجربه تست کردن و یا پیدا کردن چیزی درون کد برای دیگران میباشد و همچنین به سازمان دهی کدها کمک میکند.سوال: لطفا اصل DRY را در برنامه نویسی توضیح دهید.پاسخ: DRY مخفف Don’t Repeat Yourself است. یک اصل توسعه نرم افزار میباشد با هدف کاهش تکرار الگوهای نرم افزار. برای دستیابی به این هدف، باید الگوهای نرم افزاری تکراری با انتزاعات جایگزین شوند یا از نرمال‌سازی داده‌ها (data normalization) استفاده شود.سوال: به نقض‌های اصل DRY چه چیزی گفته میشود و آنها بطور معمول کجا یافت میشوند؟پاسخ: به آنها WET solutions یا راه حل‌ های WET گفته میشود. با اینکه WET مخفف Write Everything Twice (نوشتن دوباره هرچیزی) است، اما گاهی اوقات میتواند معنی We Enjoy Typing (از نوشتن لذت میبریم) یا Waste Everyone’s Time (اصراف زمان همه) را نیز داشته باشد. راه حل های WET معمولاً در معماری‌های چند لایه پذیرفته میشوند.سوال: مرتب سازی حبابی (bubble sorting) را توضیح دهید.پاسخ: Bubble sorting یک الگوریتم ساده مرتب سازی است که در آن عناصر متوالی و همجوار در یک ساختار داده مانند یک آرایه، بطور مستمر و تا دستیابی به ترتیب صحیح، با یکدیگر مقایسه میشوند. عناصر مقایسه شده تنها زمانی که ترتیب نادرست داشته باشند، تعویض میشوند.سوال: لطفا ساختمان داده‌ها (data structures) را توضیح دهید.پاسخ: ساختمان داده‌ها روشی خاص برای سازماندهی و به کار بردن داده‌ها است. ساختمان داده‌ها امکان دسترس کارآمد به داده‌ها و همچنین ویرایش داده‌ها را فراهم میکند.یک ساختمان داده همچنین میتواند به عنوان مجموعه‌ای از داده، توابع قابل اجرا برای آنها و ارتباط میان آنها، تعریف شود. آرایه‌ها، linked lists ،heaps ،graphs و stacks برخی از مثالهای ساختمان داده‌ها هستند.سوال: ساختمان داده‌ها (data structures) کجاها کاربرد دارند؟پاسخ: ساختمان داده‌ها در هرجایی که با داده‌ها سر و کار داشته باشیم، مورد نیاز و کاربردی هستند. با این حال برخی از مثال‌های قابل توجه:هوش مصنوعیطراحی کامپایلرمدیریت دیتابیسگرافیکتحلیل عددیسیستم عامل‌هاتحلیل آماریسوال: درک شما از مرتب سازی (sorting) چیست؟ برخی از تکنیک‌های معروف مرتب سازی را بنامید.پاسخ: Sorting پروسه مرتب‌سازی عناصر یک آرایه هم بصورت صعودی و هم بصورت نزولی میباشد. برخی از معروف‌ترین تکنیک‌های مرتب سازی به شکل زیر میباشد:Bubble sortHeap sortInsertion sortMerge sortQuick sortSelection sortسوال: جستجوی دودویی (binary search) را توضیح دهید. بهترین سناریو برای استفاده از باینری سرچ چیست؟پاسخ: باینری سرچ کاربردی ترین روش جستجو برای عناصری اس که قبلا مرتب شدند. باینری سرچ، جستجو را از وسط لیست شروع میکند. اگر عنصر میانی عنصر هدفمند نباشد، به جستجو در نیمه پایین یا نیمه بالایی لیست ادامه میدهد. این پروسه تا زمان پیدا شدن عنصر هدف ادامه پیدا میکند.سوال: منظور از graph چیست؟پاسخ: نوعی ساختمان داده که دارای مجموعه‌ای از جفت‌های مرتب شده است، graph نامیده میشود. این جفت‌های مرتب همچنین arcs و edges نامیده میشوند. آنها برای اتصال node ها استفاده میشوند؛ محلی که داده‌ها در آن ذخیره و بازیابی میشوند.سوال: تفاوت میان ساختمان داده خطی (linear) و غیر خطی (non-linear) چیست؟پاسخ: در ساختمان داده خطی، عناصر داده در کنار یکدیگر قرار میگیرند. آرایه‌ها، linked lists ،queues و stacks برخی از ساختمان داده‌ها خطی هستند.در ساختمان داده غیر خطی، این امکان برای عناصر داده وجود دارد تا به بیش از دو عنصر داده دیگر متصل باشند. برای مثال ساختمان داده‌های graph و درختی (tree)سوال: تفاوت میان Null و VOID را توضیح دهید.پاسخ: با اینکه NULL یک مقدار را نشان میدهد، VOID نشان‌دهنده data type identifier است. یک متغیر با مقدار NULL، یک مقدار خالی را نشان میدهد. Pointer هایی که مقدار اولیه ندارند، بوسیله VOID مشخص میشوند.در این مقاله به بررسی برخی از سوالات مصاحبه کاری برنامه نویس در شرکت‌های بزرگ پرداختیم.دوره های آموزشی برنامه نویسی و علم داده https://codefriend.ir/2019/11/01/سوالات-مصاحبه-کاری-برنامه-نویس-در-شرکت/