سوالات مصاحبه استخدامی برنامه نویس اندروید همراه با جواب(قسمت سوم)
مصاحبه استخدامی برنامه نویس اندروید، یکی از مراحل مهم در فرایند استخدام است که میتواند برای شرکتها و کارفرمایان، فرصتی برای ارزیابی تواناییها و مهارتهای فنی فرد باشد. در این مصاحبهها، سوالات مختلفی در مورد مهارتهای فنی، تجربه کاری، روش کار و غیره پرسیده میشود.
در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم شما رو با قسمت سوم مهم ترین سوالات مصاحبه استخدامی برنامه نویس اندروید آشنا کنیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
مصاحبه استخدامی برنامه نویس اندروید میتواند یک فرصت بسیار خوب برای نمایش مهارتها و تواناییهای فنی فرد باشد. در این مصاحبه، ممکن است سوالاتی پرسیده شود که به طور مستقیم به مهارتهای فنی فرد و همچنین تجربههای کاری او ارتباط دارند. برخی از مهمترین سوالات مصاحبه استخدامی برنامه نویسی اندروید عبارتند از:
1. واکنش اکتیویتی وقتی که کاربر صفحه گوشی را می چرخاند چیست؟
وقتی صفحه چرخش میکند، instance فعلی از اکتیویتی نابود میشود و یک instance جدید با جهت جدید ساخته میشود. هنگامی که چرخش صفحه انجام میشود، ابتدا متد onRestart فراخوانی میشود و سپس متدهای جدیدی که برای چرخه حیات جدید اکتیویتی باید فراخوانی شوند، مانند یک جریان (flow) که اکتیویتی از ابتدا با آن ساخته شده بود، فراخوانی میشوند.
2. چگونه از reload شدن داده ها و reset شدن صفحه هنگام چرخش جلوگیری کنیم؟
برای جلوگیری از reload شدن دادهها و reset شدن صفحه هنگام چرخش، میتوان از ترکیب ViewModel و onSavedInstanceState استفاده کرد.
ViewModel ها در زمان تغییر تنظیمات مانند چرخش صفحه، نابود نمیشوند، بلکه instance جدید صاحب آنها به ViewModel وصل میشود. بنابراین، اگر چندین بار در یک اکتیویتی صفحه را بچرخانید، تنها یک ViewModel دارید که اطلاعات را برای همه instance های اکتیویتی نگه میدارد.
برای ذخیره دادهها هنگام تغییر تنظیمات، میتوان از ViewModel استفاده کرده و دادهها را درون آن نگهداری کرد. همچنین، برای ذخیره دادههای کوچکتر مانند مقدار ورودی کاربر در یک EditText، میتوان از onSavedInstanceState استفاده کرد.
به عنوان مثال، اگر یک صفحه جستجو داشته باشیم که کاربر متنی را درون EditText وارد کرده و نتایج جستجو در یک RecyclerView نمایش داده شده باشد، بهترین روش برای جلوگیری از ریست شدن دادهها، استفاده از ViewModel برای نگهداری لیست نتایج جستجو و استفاده از onSavedInstanceState برای ذخیره مقدار ورودی کاربر در EditText است.
3. دو روش برای پاکسازی پشته اکتیویتی های پیشین هنگامی که اکتیویتی جدید توسط intent فراخوانی می شود را نام ببرید:
برای پاکسازی پشته اکتیویتی های پیشین هنگامی که اکتیویتی جدید توسط intent فراخوانی میشود، دو روش متداول عبارتند از:
1. استفاده از FLAG_ACTIVITY_CLEAR_TOP: با استفاده از این روش، همه اکتیویتی های بالاتر در پشته پاک میشوند و تنها instance فعلی اکتیویتی با جهت جدید در پشته میماند. برای استفاده از این روش، باید به intent فراخوانی شده، FLAG_ACTIVITY_CLEAR_TOP را اضافه کنیم.
2. استفاده از FLAG_ACTIVITY_CLEAR_TASK و FLAG_ACTIVITY_NEW_TASK به صورت پیوسته: با استفاده از این روش، همه اکتیویتی های بالاتر در پشته پاک میشوند و یک instance جدید از اکتیویتی با جهت جدید ساخته میشود. برای استفاده از این روش، باید به intent فراخوانی شده، FLAG_ACTIVITY_CLEAR_TASK و FLAG_ACTIVITY_NEW_TASK را اضافه کنیم.
هر دو روش برای پاکسازی پشته اکتیویتی های پیشین مناسب هستند و بسته به شرایط و نیاز، یکی از آنها را میتوانید انتخاب کنید.
4. فرق FLAG_ACTIVITY_CLEAR_TOP و FLAG_ACTIVITY_CLEAR_TASK چیست؟
FLAG_ACTIVITY_CLEAR_TASK و FLAG_ACTIVITY_CLEAR_TOP هر دو برای پاک کردن اکتیویتی های قبلی در task استفاده میشوند، اما دارای تفاوتهایی هستند:
1. با استفاده از FLAG_ACTIVITY_CLEAR_TASK، تمام اکتیویتی های موجود در task، از جمله instance های کلاسی که فراخوانی شده، پاک میشوند و یک ریشه جدید برای task ساخته میشود. برای استفاده از این فلگ، باید همراه با FLAG_ACTIVITY_NEW_TASK استفاده شود.
2. با استفاده از FLAG_ACTIVITY_CLEAR_TOP، تمام اکتیویتی های قبلی در task پاک نمیشوند و فقط اکتیویتی مورد نظر به عنوان ریشه task قرار میگیرد. اگر instance ای از اکتیویتی که میخواهد فراخوانی شود در task موجود نباشد، یک instance جدید از آن ساخته میشود و به عنوان ریشه task قرار میگیرد. استفاده از FLAG_ACTIVITY_NEW_TASK پس از این فلگ، اختیاری است.
بنابراین، هر دو فلگ برای پاک کردن اکتیویتی های قبلی استفاده میشوند، اما با استفاده از FLAG_ACTIVITY_CLEAR_TASK، تمام اکتیویتی های موجود در task پاک میشوند و با استفاده از FLAG_ACTIVITY_CLEAR_TOP، فقط اکتیویتی مورد نظر به عنوان ریشه task قرار میگیرد.
5. Content provider ها را توضیح دهید.
یکی از سوالات مصاحبه استخدامی برنامه نویس اندروید توضیح در مورد Content Provider است.
Content Provider در اندروید، سرویسی است که به اپلیکیشن های دیگر اجازه دسترسی به داده های شما را میدهد. با استفاده از Content Provider، میتوانید داده های خود را به دیگر اپلیکیشن ها در اختیار بگذارید. مثال هایی از داده هایی که میتواند توسط Content Provider ارائه شود، شامل داده های مربوط به مخاطبین، تقویم، رسانه ها و … است.
وقتی کاربر یک درخواست به Content Provider میدهد، این درخواست توسط Content Resolver در اپلیکیشن کاربر ارسال میشود. سپس Content Provider اطلاعات مورد نیاز را از دیتابیس یا منبع داده دیگری که در اختیار دارد، برای کاربر برمیگرداند.
Content Provider ها به دلیل قابلیت امنیتی و سازماندهی داده ها، بسیار مفید هستند. آنها به اپلیکیشن های دیگر اجازه دسترسی به داده های شما را میدهند، اما در عین حال فقط داده هایی که شما به طور صریح به آنها دسترسی دادهاید را در اختیار آنها قرار میدهند. این باعث میشود که داده های شما برای اپلیکیشن های دیگر قابل دسترسی نباشند و امنیت بیشتری داشته باشند.
6. دسترسی به داده ها توسط Content Provider:
برای دسترسی به دادهها از طریق Content Provider در اندروید، ابتدا باید مجوز خواندن اطلاعات را برای اپلیکیشن دریافت کنید. سپس با استفاده از فراخوانی متد getContentResolver روی ابجکت Context، به ContentResolver دسترسی پیدا میکنید. با استفاده از متد ContentResolver.query میتوانید دادههای مورد نیاز خود را دریافت کنید.
متد ContentResolver.query یک cursor برمیگرداند که شامل دادههای مورد نظر است. با استفاده از cursor میتوانید به ستونهای مختلف دادهها دسترسی پیدا کنید و از آنها استفاده کنید. مثلا برای دسترسی به دادههای مربوط به مخاطبین، میتوانید از ContentProvider مربوطه استفاده کنید و با فراخوانی متد ContentResolver.query روی آن، cursor حاوی اطلاعات مخاطبین را دریافت کنید. با استفاده از cursor میتوانید به ستونهای مختلف مخاطبین دسترسی پیدا کرده و از آنها استفاده کنید. به عنوان مثال، میتوانید شماره تلفن و نام مخاطب را از cursor دریافت کنید و در اپلیکیشن خود به نمایش بگذارید.
7. از دیگر سوالات مصاحبه استخدامی برنامه نویس اندروید توضیح درباره سرویس ها ( Service ) است.
سرویسها (Service) در اندروید، یک کامپوننت اصلی برای اجرای عملیاتهای طولانی مدت در پسزمینه هستند. سرویسها برای انجام عملیاتهایی که به صورت مستقیم به رابط کاربری نیاز ندارند و میتوانند در پس زمینه انجام شوند، استفاده میشوند.
در اندروید، سه نوع سرویس وجود دارد:
– Foreground Service: این نوع سرویس عملیاتهایی را در پسزمینه اجرا میکند که نیاز به توجه کاربر دارند، برای مثال اجرای فایلهای صوتی. در این نوع سرویس، باید یک نوتیفیکیشن به کاربر نمایش داده شود تا او بداند که چه عملیاتی در پسزمینه اجرا میشود.
– Background Service: این نوع سرویس عملیاتهایی را در پسزمینه اجرا میکند که به صورت مستقیم نیاز به توجه کاربر ندارند. با ارائه API 26، محدودیتهایی برای استفاده از این نوع سرویس وجود دارد و توصیه میشود در این موارد از WorkManager استفاده شود.
– Bound Service: این نوع سرویس وقتی که یک کامپوننت اپلیکیشن، مانند یک Activity، با فراخوانی متد bindService آن را فراخوانی میکند، شروع به فعالیت میکند. این نوع سرویس یک رابط client-server در اختیار میگذارد که این رابط توسط ارسال request و دریافت result، اجازه تعامل با سرویس را میدهد. این نوع سرویس تنها تا زمانی که کامپوننت به آن متصل است، اجرا میشود.
8. فرق Service و Intent Service چیست؟
یکی از سوالات مصاحبه استخدامی برنامه نویس اندروید فرق بین Service و Intent Service است.
سرویس (Service) و Intent Service، هر دو کلاسهایی هستند که در اندروید برای اجرای عملیاتهای طولانی مدت در پسزمینه استفاده میشوند. اما فرق اصلی بین آنها در نحوه اجرای عملیاتها و مدیریت نخها (Threads) است.
کلاس Service یک کلاس اصلی در اندروید است که میتواند به هر نوع سرویسی گسترش پیدا کند. عملیاتهایی که در کلاس Service اجرا میشوند، بر روی نخ اصلی (Main Thread) پردازش میشوند. به همین علت، برای اجرای عملیاتهای طولانی مدت، نباید از این کلاس استفاده کرد یا برای اجرای آنها در یک نخ دیگر، باید کلاس Service را در یک نخ جداگانه اجرا کرد.
کلاس Intent Service نیز یک کلاس مشتق شده از کلاس Service است، اما با یک مزیت اساسی که در آن استفاده میشود، یعنی اجرای عملیاتها در یک نخ جداگانه. وقتی که یک کلاینت با فراخوانی متد start Service یک Intent را به Intent Service ارسال میکند، این کلاس یک نخ جداگانه برای هر Intent ایجاد میکند و عملیاتهای آن را در آن نخ اجرا میکند. همچنین، بعد از اتمام هر Intent، نخ مربوط به آن Intent به طور خودکار توسط سیستم مدیریت میشود.
بنابراین، در کلاس Intent Service نیازی به مدیریت نخها نیست و همه چیز به صورت خودکار انجام میشود. این کلاس برای اجرای عملیاتهای طولانی مدت در پسزمینه، به خصوص در صورتی که عملیاتها از هم مستقل هستند، بسیار مناسب است.
حرف آخر
مصاحبه استخدامی برنامه نویس اندروید یک فرصت عالی برای شماست تا نشان دهید چقدر آمادگی و توانایی برای کار در این حوزه را دارید. در این مصاحبه باید نشان دهید که به عنوان یک برنامهنویس اندروید، به چه مهارتهایی نیاز دارید و چگونه میتوانید آنها را به کار ببندید. همچنین، باید نشان دهید که چگونه با مشکلات و چالشهای مختلفی که در فرایند توسعه برنامهها وجود دارد، برخورد میکنید و آنها را حل میکنید. در نهایت، موفقیت در یک مصاحبه استخدامی برنامهنویس اندروید، نیازمند تمرکز، خلاقیت، توانایی همکاری با تیم و یادگیری مداوم است.
اگر میخوای با سوالای بیشتری آشنا بشی قسمت چهارم مقاله رو از دست نده…
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.