زمانی که وارد مصاحبههای شغلی در زمینه برنامه نویسی میشویم سوالات متداول و تکراری بسیار زیادی وجود دارد که هدف نهایی همه آنها این است که میزان دانش شما در زمینه برنامه نویسی را تست کرده و بسنجد. برای اینکه شما روی این دسته از سوالات تسلط پیدا کنید نیاز است که با این سوالات قبل از مصاحبههای کاری روبرو شده و جوابهای شخصی و البته استانداردی را برای آنها تعریف کنید.
به همین دلیل است که در این مقاله از وبسایت راکت قصد داریم شما را با لیستی از این سوالات همراه کنیم. در واقع این پنج سوال در مصاحبههای کاری بیشتر شرکتهای اروپایی در زمینه برنامه نویسی مطرح شده و نیاز است که شما نیز روی این موارد تسلط داشته باشید. بیایید شروع کنیم.
سوال اول: تفاوت یک Stack (پشته) و Queue (صف) چیست؟
پشتهها و صفها دو مفهوم بسیار مهم و پایهای در ساختمان دادهها به شما میروند. از این دو در دستهبندی و دستکاری دادهها استفاده میشود. با وجود اینکه این دو مورد در بعضی موارد شبیه همدیگر هستند اما از حیث کاربرد متفاوت هستند. پشته از اصول LIFO یعنی Last-In و First-Out پشتیبانی میکند به این معنی که آخرین آیتمی که به پشته اضافه میشود، اولین موردیست که حذف خواهد شد. در مقابل صف به شکل FIFO کار میکند یعنی First-In و First-Out: اولین موردی که اضافه شود همان مورد نیز اولین آیتمی خواهد بود که حذف خواهد شد.
سوال دوم: تفاوت یک متغیر و یک ثابت چیست؟
متغیرها و ثابتها از اولین و مهمترین مفاهیمی هستند که هر کسی در ابتدای ورود به دنیای برنامه نویسی نیاز دارد که با آنها آشنایی پیدا کند. هر کدام از این موارد نماینده نوع مختلفی از داده هستند.
یک متغیر، یک مکان ذخیره سازی نام پذیر در حافظه است که مقداری را نگهداری کرده و میتواند در فرایند اجرای برنامه و در خطوط بعدی کدها تغییر کند. از متغیر زمانی استفاده میشود که ما بخواهیم دادههایی را در آن قرار دهیم که قرار است تغییر بکند و در بازههای زمانی خاص در آن تغییر ایجاد شود. از طرفی دیگر یک ثابت، نوعی از دادهست که مانند متغیر نامگذاری میشود و مقداری نیز در آن ذخیره میشود اما تفاوت اصلی که با متغیر دارد این است که در خلال اجرای برنامه تغییر نکرده و مقدار آن عوض نمیشود. اگر شما هم بخواهید این تغییر را اعمال کنید خود کامپایلر به شما خطا نشان میدهد. در نتیجه زمانی از ثابت باید استفاده شود که شما مقدار مشخصی از یک داده را در آن ذخیره میکنید و مطمئنید که این مقدار باید ثابت بماند و تغییری در آن اتفاق نیافتد.
سوال سوم: تفاوت برنامه نویسی رویهای و برنامه نویسی شئگرا در چیست؟
برنامه نویسی رویهای یک پارادایم برنامه نویسی است که روی نوشتن رویهها و توابعی که روی داده اعمال میشوند تمرکز دارد. این شکل از برنامه نویسی روی بلاک-کدهایی تمرکز دارد که در فرایند برنامه فراخوانی خواهند شد. البته نحوه نوشتن و منطق کلی این برنامه به صورت خطی است. توابع در این شکل از برنامه نویسی میتوانند به صورت مستقیم روی دادهها اعمال نفوذ کرده و آنها را تغییر دهند.
از طرفی دیگر برنامه نویسی شئگرا یا Object Oriented Programming برنامه را به صورت کلاسبندی شده تعریف میکند. برنامه نویسی در این شکل براساس اشیاء یا Objectها پیش میروند و هر شئ نیز نماینده یک موجودیت است که رفتارها و خصوصیات خودش را دارد. هر شئ فرزند یک کلاس است که در واقع شکل کلی اشیاء را در خود قرار میدهد. هر کلاس در واقع کمک میکند تا برنامه بزرگ شما به بخشهای مستقل جدای از همدیگر تقسیم شود تا در نهایت برنامه شما به صورت خطی و در یک فایل حجیم نباشد بلکه دستهبندی مناسبی صورت گرفته تا همه چیز به خوبی و با مدیریت بهتر صورت بگیرد. بیشتر زبانهای برنامه نویسی براساس این الگو پیش خواهند رفت.
سوال چهارم: تفاوت میان کامپایلر و مفسر چیست؟
کامپایلرها و مفسرها هر دو نرم افزارهایی هستند که در نهایت هدفشان این است که کدهای یک زبان برنامه نویسی را به اجرا در بیاورند. اما فرایند انجام این کار در این دو ابزار متفاوت است. یک کامپایلر کل سورس کد یک برنامه را به صورت همزمان و یکجا به برنامه اصلی/اجرایی تبدیل میکند (ماشین کد یا بایت کد). در این فرایند نیز کامپایلر سورس کد را وارد مراحل مختلفی میکند:
- آنالیز سینتکس
- آنالیز واژگانی
- تولید کد
- آنالیز مفهومی
- بهینه سازی
- تولید فایل یا بایت کد اجرایی
بنابراین کامپایلر مراحل بسیار زیادی را برای اجرای کدها انجام میدهد. از طرفی دیگر، مفسر سورس کد برنامه را به صورت خط به خط تفسیر و اجرا کرده و آنها را به صورت آنی به کد ماشین یا بایت کد تبدیل میکند. پروسهای که مفسر آن را دنبال میکند به این شکل است که هر خط از برنامه به صورت نوبتی تفسیر شده و بدون وقفه تا نهایت سورس کد پیش میرود. مفسر فایل اجرایی تولید نمیکند بلکه به صورت مستقیم برنامه را اجرا کرده و خروجی را مطابق با آنچه در سورس کد نوشتهاید تولید میکند.
سوال پنجم: تفاوت میان Shallow Copy (کپی سطحی) و Deep Copy (کپی عمیق) چیست؟
زمانی که به کپی کردن دادهها میرسیم، دو رویکرد کلی برای انجام این کار وجود دارد: کپی سطحی و کپی عمیق. در کپی سطحی ما یک آبجکت جدید میسازیم که به داده اصلی متصل شده و به آن اشاره میکند. در این حالت داده اصلی تکرار یا Duplicate نمیشود. اگر در داده اصلی تغییری اتفاق بیافتد، آبجکت جدید نیز به این تغییرات اشاره خواهد کرد. در مقابل کپی کردن عمیق یک آبجکت جدید ایجاد کرده و محتوای داده اصلی را درون خودش تکرار میکند. اگر تغییری در داده اصلی نیز صورت بگیرد، آبجکت جدید این تغییرات را به صورت بدون واسطه قبول نمیکند بلکه باید آنها را نیز یکبار دیگر کپی کنید. یادگیری چگونگی انجام این دو شکل از کپی کردن بسیار مهم بوده و پیشنهاد میکنم با این دو حالت آشنایی پیدا کنید.
در پایان
به عنوان کسی که برنامه نویسی یاد میگیرید و در نهایت قرار است در یک شرکت استخدام شده و در آنجا کار بکنید بسیار مهم است که پیش از هر چیزی با سوالات استخدامی آشنایی پیدا کرده و آنها را مطالعه بکنید. مواردی که در این مقاله گفته شد بسیار تکرار شده و در بخش سوالات تکنیکی/غیر عملی بسیار پرسیده میشوند. البته باید بدانید که حجم این سوالات بسیار بیشتر بوده و به این پنج مورد خلاصه نمیشود. به همین دلیل پیشنهاد میکنم مطالبی از این دست را بیشتر مطالعه کنید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید