سوالات مصاحبه استخدامی برنامه نویس اندروید همراه با جواب(قسمت اول)
مصاحبه استخدامی برنامه نویس اندروید، یکی از مراحل مهم در فرایند استخدام است که میتواند برای شرکتها و کارفرمایان، فرصتی برای ارزیابی تواناییها و مهارتهای فنی فرد باشد. در این مصاحبهها، سوالات مختلفی در مورد مهارتهای فنی، تجربه کاری، روش کار و غیره پرسیده میشود.
در این مقاله از سری مقالات برنامه نویسی اندروید می خواهیم شما را با چند تا از مهم ترین سوالاتی که ممکن است در روز مصاحبه از شما پرسیده شود آشنا کنیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
مصاحبه استخدامی برنامه نویس اندروید میتواند یک فرصت بسیار خوب برای نمایش مهارتها و تواناییهای فنی فرد باشد. در این مصاحبه، ممکن است سوالاتی پرسیده شود که به طور مستقیم به مهارتهای فنی فرد و همچنین تجربههای کاری او ارتباط دارند. برخی از مهمترین سوالات مصاحبه استخدامی برنامه نویسی اندروید عبارتند از:
۱. کلاس اپلیکیشن چیست؟
در برنامههای اندروید، کلاس اپلیکیشن (Application) به عنوان پایهایترین کلاس در برنامه تعریف میشود که شامل تمامی کامپوننتهای برنامه مانند اکتیویتی (Activity)، سرویس (Service) و … میباشد. این کلاس به صورت پیش فرض هرگاه برنامه اجرا شود، قبل از هر کلاس دیگری اجرا میشود.
همچنین، در صورت نیاز به تغییرات و تنظیمات قبل از شروع پروسهی کار پکیج، میتوانید یک کلاس زیرکلاس (subclass) از کلاس اپلیکیشن تعریف کنید و متدهای آن را override کنید. به عنوان مثال، میتوانید در متد onCreate() این کلاس، تنظیمات مورد نیاز برنامهی خود را انجام دهید. همچنین، با استفاده از این کلاس، میتوانید اطلاعات وضعیت برنامهی خود را نگهداری کنید و از اطلاعات ذخیره شده در آن در سایر کامپوننتهای برنامه استفاده کنید.
۲. Context چیست؟
در برنامهنویسی اندروید، Context به عنوان یک کنترل کننده و رابط بین برنامه و سیستم عامل عمل میکند و امکان دسترسی به منابع مختلفی مانند منابع دیتابیس، فایلها، پیشتریفها و … را فراهم میکند.
در اندروید، دو نوع کانتکست وجود دارد: کانتکست اپلیکیشن (Application Context) و کانتکست اکتیویتی (Activity Context).
کانتکست اپلیکیشن در طول زمان حیات کلاس اپلیکیشن در دسترس قرار میگیرد و زمانی استفاده میشود که نیاز به دسترسی به کانتکستی خارج از scope فعلی دارید و یا میخواهید کانتکستی را به خارج از scope کلاس فعلی ارسال کنید.
کانتکست اکتیویتی در طول حیات یک اکتیویتی در دسترس قرار میگیرد و به lifeCycle کلاس اکتیویتی وابسته است. این نوع کانتکست تنها زمانی باید استفاده شود که شما نیاز دارید کانتکست را در lifeCycle یک اکتیویتی درخواست کنید.
به طور کلی، استفاده از کانتکست اپلیکیشن به دلیل اینکه در طول زمان حیات کلاس اپلیکیشن در دسترس است، بهتر است. اما در برخی موارد، ممکن است نیاز به دسترسی به کانتکست اکتیویتی وابسته به lifeCycle کلاس اکتیویتی باشد.
۳. ArmV7 چیست؟
در سیستمعامل اندروید، سه نوع معماری مختلف مورد استفاده قرار میگیرند: ArmV7، Arm64 و x86.
معماری ArmV7 بیشترین استفاده را در اندروید دارد و به دلیل بهینهتر بودن در مصرف باتری، برای بیشتر دستگاههای اندروید توصیه میشود.
معماری Arm64، نسخه تکامل یافتهی معماری ArmV7 است که علاوه بر پشتیبانی از پردازش ۶۴ بیتی، در قدرت پردازشی نیز بهبود چشمگیری دارد.
اما معماری x86 کمترین استفاده را در اندروید دارد و در مصرف باتری بهترین عملکرد را ارائه نمیدهد. با این حال، این معماری در قدرت پردازشی بیشتری نسبت به دو معماری دیگر دارد.
در کل، در صورتی که برنامهی شما به صورت پردازشی سنگین عمل میکند، استفاده از معماری Arm64 یا x86 ممکن است بهترین گزینه باشد. اما در صورتی که برنامهی شما برای استفاده روزمرهی کاربران طراحی شده است، استفاده از معماری ArmV7 به دلیل بهینهتر بودن در مصرف باتری، توصیه میشود.
۴. چرا byteCode ها قابل اجرا روی اندروید نیستند؟
در اندروید، برنامههای جاوا به صورت کد بایت (Bytecode) اجرا میشوند. اما به دلیل استفاده از ماشین مجازی Dalvik (DVM) به جای ماشین مجازی جاوا (JVM)، کدهای بایت جاوا قابل اجرا مستقیم بر روی سیستمعامل اندروید نیستند.
ماشین مجازی Dalvik، به طور خاص برای اندروید طراحی شده است و برای بهینهسازی عملکرد در دستگاههای با منابع محدود، مانند تلفنهای همراه، از ساختارهای دیگری نسبت به JVM استفاده میکند. به همین دلیل، کدهای بایت جاوا در DVM قابل اجرا هستند، اما به صورت مستقیم بر روی سیستمعامل اندروید اجرا نمیشوند.
در اندروید 5 و بعد از آن، ماشین مجازی ART (Android RunTime) به جای DVM استفاده میشود. ART از معماری AOT (Ahead-Of-Time) استفاده میکند و در زمان نصب برنامه، کدهای بایت جاوا را به کد ماشین قابل اجرا ترجمه میکند. بنابراین، با استفاده از ART، برنامههای جاوا به صورت مستقیم بر روی سیستمعامل اندروید قابل اجرا هستند.
۵. buildType در gradle چیست و چرا استفاده میشود؟
در Gradle، تنظیمات buildType برای تعریف نوع بیلد کردن پروژه استفاده میشود. به صورت خاص، buildType تعیین میکند که چه نوع بیلدی از یک ماژول ایجاد شود، مثلاً اینکه آیا از ProGuard استفاده کنید یا خیر.
در مقابل، Product flavor (نسخه های مختلفی از یک محصول)، تنظیماتی است که تعیین میکند کدام ماژول باید بیلد شود. به عبارت دیگر، product flavor تعیین میکند کدام resource ها و تنظیمات باید در بیلد استفاده شوند.
در نهایت، Gradle یک build variant (نوع بیلد) ایجاد میکند که ترکیبی از buildType و product flavor است. به عبارت دیگر، build variant تعیین میکند کدام buildType و product flavor باید برای بیلد استفاده شود. به این ترتیب، با ترکیب مختلف buildType و product flavor، میتوانید نسخههای مختلفی از برنامه را برای مختلف بازارها و نیازهای کاربران تولید کنید.
۶. پروسه ی بیلد شدن یک اپلیکیشن اندروید رو توضیح بدید؟
فرایند بیلد کردن یک اپلیکیشن اندروید در مراحلی انجام میشود. در مرحله اول، پوشه res شامل منابعی مانند تصاویر، فایلهای xml و … توسط Android Asset Packaging Tool (aapt) کامپایل میشود و به یک فایل به نام R.java تبدیل میشود. این کلاس شامل مقادیر ثابتی است که به کمک آن میتوان به منابع دسترسی پیدا کرد.
در مرحله دوم، سورس جاوا به فایلهای class کامپایل میشود. این کار توسط کامپایلر جاوا (javac) انجام میشود. سپس، فایلهای class به Dalvik bytecode با فرمت dex تبدیل میشوند. این کار با استفاده از ابزار dx انجام میشود که در ابزارهای SDK اندروید قرار دارد. نتیجه این عملیات، فایل classes.dex است.
در مرحله نهایی، apkBuilder تمام ورودیهای مختلف را گرفته و آنها را در کنار هم قرار میدهد. سپس، با استفاده از یک کلید بسته بندی، فایل apk را ایجاد میکند. فایل apk حاوی تمام فایلها و منابع مورد نیاز برای اجرای اپلیکیشن است. بنابراین، با نصب فایل apk روی دستگاه اندرویدی، میتوان اپلیکیشن را اجرا کرد.
۷. معماری یک اپلیکیشن اندروید به چه شکل است؟
یکی دیگر از سوالات مصاحبه استخدامی برنامه نویس اندروید توضیح در مورد معماری یک اپلیکیشن اندروید است.
معماری اپلیکیشن اندروید شامل چندین کامپوننت است که هر کدام مسئولیتهای خاص خود را در سیستم دارند.
اولین کامپوننت، سرویسها (Services) هستند که فعالیتهای پسزمینه اپلیکیشن را انجام میدهند. سرویسها برای اجرای فعالیتهایی که باید در پسزمینه انجام شوند، مانند دانلود فایل، پخش موسیقی و … استفاده میشوند.
کامپوننت بعدی، Intent هست که مسئول برقراری ارتباط داخلی بین اکتیویتیها و مکانیزم انتقال داده (data passing mechanism) هست. با استفاده از Intent، میتوان دادهها را بین اکتیویتیها منتقل کرد و همچنین برنامههای دیگر را فراخوانی کرد.
کامپوننت بعدی، Resource externalization هست که شامل string ها و گرافیک هست. این کامپوننت، مسئول مدیریت و استفاده از منابعی است که در اپلیکیشن استفاده میشوند، مانند متنها، تصاویر و آیکونها.
کامپوننت بعدی، Notification هست که شامل نور (LED)، صدا، آیکون، نوتیفیکیشن، dialog box و توست (Toast) هست. این کامپوننت، برای نمایش اعلانهای مورد نیاز در اپلیکیشن استفاده میشود.
کامپوننت بعدی، Broadcast Receivers مسئول دریافت و پردازش پیامهای برنامه هستند. این پیامها میتوانند از داخل برنامه یا از سیستم عامل ارسال شوند و Broadcast Receivers میتوانند بر اساس نوع پیام، عملیات خاصی انجام دهند مانند نمایش پیغام، شروع یک سرویس و غیره.
کامپوننت بعدی، Fragments نیز به عنوان یک کامپوننت برای رابط کاربری در اندروید به کار میروند. Fragments به عنوان یک قسمت کوچکتر از یک صفحه اکتیویتی در نظر گرفته میشوند و میتوانند در یک اکتیویتی، چندین Fragment قرار گیرند. این کامپوننت برای ساختاردهی بهتر صفحات برنامه و انجام عملیاتی مانند جابجایی بین صفحات، استفاده میشود.
و در نهایت، کامپوننت Content Providers هست که اطلاعات را بین اپلیکیشنها منتشر میکند. این کامپوننت به اپلیکیشنها اجازه میدهد تا به اطلاعات دیگر اپلیکیشنها دسترسی پیدا کنند و از آنها استفاده کنند، مانند دفترچه تلفن و پیامرسانها.
۸. اکتیویتی ها را توضیح دهید؟
اکتیویتی ها در اندروید، کامپوننت های اصلی برنامه نویسی هستند و به عنوان پنجره هایی برای رابط کاربری (UI) عمل میکنند. هر اکتیویتی میتواند یک صفحه از برنامه را نمایش دهد و از طریق Intent ها با دیگر اکتیویتی ها و سایر کامپوننت ها ارتباط برقرار کند.
عملکرد اکتیویتی ها بر اساس چرخه حیاتی آنها انجام میشود. اولین مرحله، onCreate است که در آن اکتیویتی ایجاد شده و در صورت نیاز، UI آن نیز ساخته میشود. سپس، در مرحله onStart، اکتیویتی به حالت آماده به کار در میآید و در مرحله onResume، کاربر میتواند با آن تعامل داشته باشد. در صورتی که کاربر به یک اکتیویتی دیگر منتقل شود، اکتیویتی فعلی در مرحله onPause قرار میگیرد و در صورتی که اکتیویتی دیگر به پشت آن برگردد، در مرحله onResume قرار میگیرد.
در نهایت، در صورتی که اکتیویتی از بین برود، در مرحله onStop قرار میگیرد و منابع مربوط به آن آزاد شده و در صورت نیاز، در مرحله onDestroy نیز به صورت کامل حذف میشود. اکتیویتی ها در اندروید به عنوان یکی از اصلیترین کامپوننتها برای نمایش رابط کاربری و ارتباط با کاربر، استفاده میشوند.
اگر میخوای با سوالای بیشتری آشنا بشی قسمت دوم مقاله رو از دست نده…
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
دیدگاهتان را بنویسید