سوالات مصاحبه استخدامی برنامه نویسی اندروید همراه با جواب(قسمت نهم)
مصاحبه برنامه نویسی اندروید، یکی از مراحل مهم در فرایند استخدام است که میتواند برای شرکتها و کارفرمایان، فرصتی برای ارزیابی تواناییها و مهارتهای فنی فرد باشد. در این مصاحبهها، سوالات مختلفی در مورد مهارتهای فنی، تجربه کاری، روش کار و غیره پرسیده میشود.
در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم شما رو با قسمت نهم مهم ترین سوالات مصاحبه برنامه نویسی اندروید آشنا کنیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
مصاحبه برنامه نویسی اندروید میتواند یک فرصت بسیار خوب برای نمایش مهارتها و تواناییهای فنی فرد باشد. در این مصاحبه، ممکن است سوالاتی پرسیده شود که به طور مستقیم به مهارتهای فنی فرد و همچنین تجربههای کاری او ارتباط دارند. برخی از مهمترین سوالات مصاحبه استخدامی برنامه نویسی اندروید عبارتند از:
1. overload کردن توابع در جاوا چه معنی دارد؟
Overloading یکی از ویژگی های زبان برنامه نویسی جاوا است که به معنای داشتن دو یا چند تابع با همان نام در یک کلاس با ورودی های مختلف است. در واقع، توابع overload شده باید نام یکسانی داشته باشند، اما تعداد و نوع ورودی هایشان باید متفاوت باشد. همچنین، توابع overload شده میتوانند نوع خروجی، سطح دسترسی و گستره خطاهای احتمالی را نیز تغییر دهند. Overloading میتواند در همان کلاس یا در یک زیرکلاس انجام شود.
2. override کردن توابع به چه معناست؟
یکی از سوالات مصاحبه برنامه نویسی اندروید توضیح در مورد override کردن توابع است.
Override کردن تابع به معنای تعریف مجدد یک تابع با همان نام، لیست ورودی ها و نوع خروجی در یک زیرکلاس است که در ابرکلاس تعریف شده است. با استفاده از Override، میتوانیم عملکرد یک تابع را در کلاسهای زیرکلاس تغییر دهیم. در صورتی که نام تابع، لیست ورودی ها و نوع خروجی در کلاس زیرکلاس با ابرکلاس یکسان نباشد، Override کردن شناخته نمیشود. همچنین، نمیتوان تابعهای با سطح دسترسی public را به صورت protected و یا private در کلاسهای زیرکلاس override کرد. همچنین، توابع final و static نیز امکان override کردن را ندارند. به علاوه، توابع overload شده نیز میتوانند در کلاس زیرکلاس override شوند.
3. چرا نباید متد های abstract را در متد سازنده (constructor) فراخوانی کرد؟
دلیل اینکه متدهای abstract را در constructor فراخوانی نمیکنیم، این است که constructor در هنگام ساختن یک شیء، ابتدا باید اطلاعات تمامی فیلدهای کلاس را تهیه کند تا شیء به درستی ساخته شود. با فراخوانی متدهای abstract، به دلیل عدم تعریف آنها در کلاس جاری، شیء کاملی ساخته نشده است و این باعث مشکلاتی مانند NullPointerException و یا به صورت کلی خطاهای runtime مرتبط با null reference می شود. برای اینکه از این خطاها جلوگیری شود، باید متدهای abstract را در constructor فراخوانی نکرد. بهترین روش برای فراخوانی متدهای abstract، تعریف کردن یک متد non-abstract در کلاس و فراخوانی آن متد است.
4. تفاوت Encapsulation و Abstraction چیست؟
Abstraction و Encapsulation دو مفهوم مهم در برنامهنویسی شیءگرا هستند که با هم تفاوت دارند. Abstraction بیشتر به نمای خارجی یک کلاس و یا اشیا تمرکز دارد و به کاربر این اجازه را میدهد که با استفاده از آنها، عملیات مورد نیاز خود را انجام دهد. این به معنی پنهان کردن جزئیات پیچیده از کاربر است که باعث ساده شدن استفاده از آنها میشود. برای مثال، میتوانیم یک کلاس برای نمایش اطلاعات یک فایل ایجاد کنیم که کاربر با استفاده از این کلاس، میتواند اطلاعات فایل را بخواند و یا نوشته شدهای را برای آن بنویسد.
در مقابل، Encapsulation به معنی مخفی کردن جزئیات داخلی یک کلاس و جلوگیری از دسترسی به آنها میباشد. به عبارت دیگر، Encapsulation در واقع یک مکانیزم است که با استفاده از آن، اطلاعات داخلی یک کلاس محافظت میشود و برای دسترسی به آنها، باید از روشهای مشخص شده توسط کلاس استفاده کرد. برای مثال، یک کلاس میتواند دارای فیلدهایی باشد که تنها با استفاده از متدهای مشخص شده در آن کلاس، میتوان به آنها دسترسی داشت و از این طریق از دسترسی غیرمجاز و تغییرات ناخواسته جلوگیری کند.
5. تفاوت متد سازنده (constructor) و دیگر متد ها در چیست؟
متد سازنده و دیگر متدهای کلاس، تفاوتهایی دارند که باید در نظر گرفته شوند.
ابتدا، متد سازنده باید همان نام کلاس را داشته باشد و هیچ نوع خروجیای نداشته باشد. همچنین، وظیفهی متد سازنده، ایجاد و مقدماتی کردن اجزای کلاس است تا کلاس به درستی ساخته شود. در حالی که متدهای دیگر، به عنوان عضوی از کلاس عمل میکنند و وظیفهی خاصی را برای کلاس انجام میدهند.
در ادامه، متدهای سازنده نمیتوانند ارثبری شوند، اما اگر کلاس مشتق شده باشد، میتوانند متد سازنده ابرکلاس خود را فراخوانی کنند. همچنین، متدهای سازنده میتوانند از تابع this برای دسترسی به متدهای سازندهی دیگر در همان کلاس استفاده کنند و از تابع super برای دسترسی به متد سازنده ابرکلاس خود استفاده کنند.
در مقابل، متدهای غیر سازنده برای فراخوانی، نیاز به نمونهای از کلاس دارند که با استفاده از کلیدواژهی new ساخته میشود. همچنین، متدهای کلاسی، متدهایی هستند که به صورت استاتیک تعریف میشوند و برای فراخوانی آنها، نیازی به نمونهگیری از کلاس نیست. به عبارت دیگر، متدهای کلاسی به صورت مستقل از نمونههای کلاس وجود دارند.
6. داده ها در جاوا pass by reference هستند یا pass by value؟
در جاوا، دادهها به صورت pass by value (با ارسال مقدار) به توابع ارسال میشوند. این به این معنی است که جاوا یک کپی از مقدار متغیر را به تابع میدهد و سپس هرگونه عملیاتی که روی این کپی انجام میشود، تنها روی آن کپی تاثیر میگذارد و هیچ تغییری در متغیر اصلی اعمال نمیشود. به این ترتیب، متغیر اصلی همچنان دارای مقدار اولیه خود باقی میماند.
به عبارت دیگر، در جاوا، هر زمان که یک متغیر به یک تابع ارسال میشود، مقدار آن متغیر به صورت کپی در تابع ایجاد میشود و تغییراتی که در آن کپی اعمال میشود، تنها تاثیری بر روی آن کپی دارد. در نهایت، بعد از اتمام عملیات در تابع، مقدار متغیر اصلی همچنان دارای مقدار اولیهاش است.
در جاوا، آدرس متغیر اصلی نیز به تابع ارسال میشود، اما تغییراتی که در تابع انجام میشود، تنها بر روی آدرس این متغیر تاثیر میگذارد و متغیر اصلی همچنان دارای مقدار اولیهاش باقی میماند. به عبارت دیگر، پارامتر ورودی یک تابع، به همان متغیر اصلی اشاره میکند، اما تغییرات در همان تابع باقی میماند و به تابع فراخوانی شده خارج از تابع انجام نمیشود.
7. انواع Final؟
در جاوا، میتوان از کلمه کلیدی final برای تعریف متغیرها، توابع و کلاسها استفاده کرد. هرکدام از این استفادهها، خصوصیات خاصی را به شیء یا اجزای کد اضافه میکند.
1- متغیرهای final: متغیرهای final بعد از مقداردهی اولیه، دیگر قابل تغییر نیستند. به این ترتیب، این نوع متغیرها ثابتهایی هستند که مقدارشان در زمان کامپایل ثابت میماند و در طول اجرای برنامه نمیتوان آنها را تغییر داد. برای مثال:
final int x = 5;
2- کلاسهای final: یک کلاس final نمیتواند زیرکلاس داشته باشد. به این ترتیب، این نوع کلاسها نمیتوانند به عنوان پدر کلاسی برای کلاسهای دیگر استفاده شوند. برای مثال:
final class MyClass { ... }
3- توابع final: یک تابع final نمیتواند در یک کلاس زیرکلاس override شود. با استفاده از این ویژگی، میتوان تضمین کرد که تابع مورد نظر در تمام زیرکلاسها یکسان است و نمیتواند تغییر کند. برای مثال:
class MyClass { final void myMethod() { ... } }
8. کلمه کلیدی Finalize؟
یکی دیگر از سوالات مصاحبه برنامه نویسی اندروید توضیح در مورد کلمه کلیدی Finalize است.
در جاوا، هر شیء که با new ایجاد میشود، در حافظه به صورت داینامیک ذخیره میشود. برای جلوگیری از اشباع حافظه، جاوا از یک مکانیزم خودکار برای جمعآوری زباله (Garbage Collection) استفاده میکند. در این مکانیزم، شیءهایی که دیگر قابل دسترسی نیستند، به طور خودکار از حافظه حذف میشوند.
در اینجا، تابع finalize به کار میآید. تابع finalize، یک تابع پیشفرض در هر شیء در جاوا است که قبل از حذف هر شیء، به طور خودکار فراخوانی میشود. این تابع به برنامهنویس اجازه میدهد تا قبل از حذف یک شیء، عملیاتهای خاصی را انجام دهد. به عبارت دیگر، تابع finalize عمل پاککردن حافظه را دقیقا قبل از این که شیء garbage collect شود، به انجام میرساند.
توجه داشته باشید که استفاده از تابع finalize به علت مشکلات احتمالی در کنترل حافظه و کارایی برنامه، توصیه نمیشود و باید از روشهای دیگری برای پایان دادن به شیءها استفاده کنید. به عنوان مثال، میتوانید از روشهایی مانند try-with-resources در جاوا استفاده کنید تا برنامه به صورت خودکار پایان داده شود و نیازی به تابع finalize نباشد.
اگر میخوای با سوالای بیشتری آشنا بشی قسمت دهم مقاله رو از دست نده…
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.