مقالات

سوالات مصاحبه استخدامی برنامه نویس اندروید همراه با جواب(قسمت دوم)

مصاحبه استخدامی برنامه نویس اندروید، یکی از مراحل مهم در فرایند استخدام است که می‌تواند برای شرکت‌ها و کارفرمایان، فرصتی برای ارزیابی توانایی‌ها و مهارت‌های فنی فرد باشد. در این مصاحبه‌ها، سوالات مختلفی در مورد مهارت‌های فنی، تجربه کاری، روش کار و غیره پرسیده می‌شود.

در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم شما رو با قسمت دوم مهم ترین سوالات مصاحبه استخدامی برنامه نویس اندروید آشنا کنیم. پس با سایت ترولرن همراه باش.

“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”

 مصاحبه استخدامی برنامه نویس اندروید می‌تواند یک فرصت بسیار خوب برای نمایش مهارت‌ها و توانایی‌های فنی فرد باشد. در این مصاحبه، ممکن است سوالاتی پرسیده شود که به طور مستقیم به مهارت‌های فنی فرد و همچنین تجربه‌های کاری او ارتباط دارند. برخی از مهم‌ترین سوالات مصاحبه استخدامی برنامه نویسی اندروید عبارتند از:

1. Intent چیست؟

 Intent ها در اندروید برای انتقال اطلاعات و اجرای عملیات مختلفی همچون باز کردن یک Activity، انجام یک عملیات در سرویس، ارسال یک پیام و غیره استفاده می‌شوند. دو نوع است:

 نوع اول یعنی Implicit Intent ها، زمانی استفاده می‌شوند که نیازمند اجرای یک عملیات خاص هستیم، اما نمی‌دانیم کدام کامپوننت در سیستم اندروید قابلیت اجرای آن را داراست. به عنوان مثال، برای ارسال یک پیام می‌توان از Intent استفاده کرد و سیستم اندروید با توجه به نوع پیام از برنامه‌هایی که قابلیت ارسال پیام را دارند، یکی را انتخاب می‌کند و آن را باز می‌کند.

اما نوع دوم یعنی Explicit Intent ها، زمانی استفاده می‌شوند که می‌خواهیم یک کامپوننت خاصی از برنامه خودمان را فراخوانی کنیم. به عنوان مثال، اگر در برنامه‌ای دکمه‌ای داریم که با کلیک بر روی آن، یک Activity دیگر از همان برنامه باز شود، باید از یک Explicit Intent استفاده کنیم که شامل نام کلاس Activity هدف و بسته‌ی مربوط به آن باشد.

2. فرگمنت ها چیست؟

فرگمنت‌ها در اندروید یک بخش از رابط کاربری هستند که به اکتیویتی‌ها متصل می‌شوند و در صورت نیاز می‌توانند دوباره با اتصال به اکتیویتی‌های دیگر از آن‌ها استفاده کنند. هر فرگمنت دارای یک چرخه حیات(Lifecycle) است که به اکتیویتی میزبان آن وابسته است.

در برخی موارد، اجزای مختلف رابط کاربری می‌توانند در یک اکتیویتی قرار گیرند، اما با استفاده از فرگمنت‌ها می‌توانیم اجزای مختلف رابط کاربری را به صورت جداگانه پیاده‌سازی کنیم. همچنین، هر اکتیویتی می‌تواند به چندین فرگمنت متصل باشد و این فرگمنت‌ها می‌توانند به صورت همزمان در حال اجرا باشند.

یکی از مزایای استفاده از فرگمنت‌ها، این است که می‌توانیم کدهای مربوط به هر فرگمنت را به صورت مجزا و جداگانه پیاده‌سازی کنیم و این کدها را در زمان اجرای برنامه به صورت داینامیک به اکتیویتی اضافه کنیم. همچنین، با استفاده از فرگمنت‌ها، می‌توانیم به راحتی و بدون نیاز به ایجاد اکتیویتی جدید، قابلیت‌های جدید را به برنامه اضافه کنیم.

3. چرخه حیات فرگمنت را توضیح دهید.

  •  onAttach()

در این متد، فرگمنت به اکتیویتی مربوطه اتصال پیدا می‌کند. در این مرحله، نمونه ای از اکتیویتی مربوطه برای انجام کارهای اولیه دریافت می‌شود.

  •  onCreate():

در این متد، فرگمنت ساخته می‌شود و اولین کارهای لازم برای پیاده‌سازی آن انجام می‌شود. در این مرحله، شما باید کارهای اولیه‌ای که باید در روند pause و stop و سپس resume نگه داری شوند را پیاده‌سازی کنید.

  •  onCreateView():

در اینجا، سیستم می‌خواهد رابط کاربری فرگمنت را طراحی کند. برای طراحی رابط کاربری برای فرگمنت، شما باید ریشه (root) لی‌اوت خود را به صورت view از این تابع بازگردانی (return) کنید. اگر فرگمنت رابط کاربری ای ندارد، می‌توانید null برگردانید.

  •  onActivityCreated():

اینجا، پس از اجرای متد onCreateView در اکتیویتی مربوطه، سلسله مراتب ساخت نمونه از فرگمنت و اکتیویتی اجرا می‌شود. در این مرحله، شما می‌توانید با استفاده از تابع findViewById به ویوها دسترسی داشته باشید و از آن‌ها استفاده کنید.

  •  onStart():

 این متد، فرگمنت نمایان (visible) می‌شود و سیستم این متد را فراخوانی می‌کند.

  •  onResume():

در این، فرگمنت فعالیت خود را شروع می‌کند و سیستم این متد را فراخوانی می‌کند.

  •  onPause():

فرگمنت ترک می‌شود و سیستم این متد را فراخوانی می‌کند. در این مرحله، شما باید کارهایی که باید فراتر از session فعلی کاربر، فعالیت خود را انجام دهند، را ثبت کنید.

  •  onStop():

فرگمنت فعالیتش متوقف می‌شود و سیستم این متد را فراخوانی می‌کند.

  •  onDestroyView():

در اینجا، ویو فرگمنت نابود می‌شود.

  •  onDestroy():

 این متد، state فرگمنت به کلی نابود می‌شود.

در کل، چرخه حیات فرگمنت شامل این متدها است که به ترتیب اجرا می‌شوند. هر متد در این چرخه حیات دارای وظایف خاصی است که باید در آن‌ها پیاده‌سازی شوند. با استفاده از این متدها، شما می‌توانید فرگمنت خود را به درستی پیاده‌سازی کنید و کارایی بهتری در برنامه‌ی خود داشته باشید.

 

 

فرگمنت ها در اندروید

 

4. تفاوت اکتیویتی و فرگمنت چیست؟ ارتباطشان رو توضیح دهید.

یکی دیگر از سوالات مصاحبه استخدامی برنامه نویس اندروید تفاوت میان اکتیویتی و فرگمنت است.

فرگمنت و اکتیویتی هر دو به عنوان کامپوننت‌های اصلی پلتفرم اندروید استفاده می‌شوند، اما کاربردها و وظایف آن‌ها متفاوت هستند.

اکتیویتی یک کامپوننت اصلی اندروید است که صفحه ای را به کاربر ارائه می‌دهد و تعامل کاربر با برنامه را مدیریت می‌کند. هر اکتیویتی در واقع یک صفحه اصلی برنامه است و می‌تواند شامل چندین کامپوننت مختلف مانند فرگمنت، سرویس و … باشد. اکتیویتی‌ها بیشتر برای ارائه صفحات اصلی برنامه، جابه‌جایی بین صفحات و مدیریت تعامل با کاربر استفاده می‌شوند.

فرگمنت‌ها به عنوان بخشی از کامپوننت‌های اکتیویتی استفاده می‌شوند و یک بخش یا رفتارهایی از رابط کاربری درون یک اکتیویتی را مدیریت می‌کنند. یک اکتیویتی می‌تواند شامل چندین فرگمنت باشد که هر کدام وظایف خود را دارند. فرگمنت‌ها دارای چرخه حیات خاص و رخدادهای ورودی خاص خودشان هستند و می‌توانند در هر زمان دلخواهی حذف یا اضافه شوند.

یکی از ویژگی‌های اصلی فرگمنت‌ها، استفاده از یک فضای نمایش (view) مشترک با اکتیویتی است. به این صورت که فرگمنت می‌تواند قسمتی از صفحه اصلی اکتیویتی را به عنوان فضای نمایش خود در نظر بگیرد و در آن بخش رفتارها و تعاملات خود را نمایش دهد. همچنین فرگمنت‌ها به صورت مستقل قابل استفاده و توسعه هستند و می‌توانند در چندین اکتیویتی استفاده شوند.

به طور کلی، اکتیویتی و فرگمنت هر دو کامپوننت‌های مهم در ساختار برنامه‌نویسی اندروید هستند که برای ارائه و مدیریت صفحات و رفتارهای رابط کاربری استفاده می‌شوند. فرگمنت‌ها به عنوان بخشی از اکتیویتی می‌توانند نقش مهمی در توسعه‌ی برنامه‌های اندروید بازی کنند.

5. در چه مواقعی باید استفاده از فرگمنت را به استفاده از اکتیویتی ترجیح دهیم؟

  • هنگامی که کامپوننت‌های در رابط کاربری داریم که باید در چند اکتیویتی استفاده شوند: در صورتی که بخشی از رابط کاربری، مانند یک فرم ورود به سیستم یا منوی کاربری، باید در بیش از یک صفحه از برنامه‌ی ما نمایش داده شود، می‌توانیم از فرگمنت استفاده کنیم تا این کامپوننت را یکبار برای همه صفحات نمایش دهیم.
  • هنگامی که چندین ویو هستند که باید در کنار هم استفاده شوند: فرگمنت این امکان را به ما می‌دهد که چندین ویو را در کنار هم قرار دهیم و در صورت نیاز، به راحتی تغییر دهیم. به عنوان مثال، می‌توانیم یک صفحه‌ی شامل لیستی از آیتم‌ها و جزئیات هر آیتم را با استفاده از دو فرگمنت مجزا پیاده‌سازی کنیم.
  • هنگامی که داده‌هایی دارید که باید هنگام restart شدن اکتیویتی‌ها نگهداری شوند: در برخی موارد، ممکن است بخواهیم داده‌هایی را که در حین استفاده از برنامه توسط کاربر وارد شده‌اند، در حافظه‌ی دستگاه نگهداری کنیم تا هنگام restart شدن برنامه، اطلاعات از دست نرود. در این موارد، می‌توانیم از فرگمنت‌ها استفاده کنیم تا داده‌های مربوط به یک بخش خاص از رابط کاربری را در حافظه‌ی دستگاه نگهداری کنیم و در صورت نیاز به داده‌ها دسترسی داشته باشیم.

به طور کلی، استفاده از فرگمنت یا اکتیویتی به وابستگی به نیازهای برنامه و ساختار رابط کاربری آن بستگی دارد. در برخی موارد ممکن است بهتر باشد از فرگمنت استفاده کنیم و در برخی موارد دیگر بهتر است از اکتیویتی استفاده کنیم.

6. Handler ها چیست؟

هندلر‌ها (Handler) در اندروید، ابزاری برای کنترل و مدیریت Thread ها هستند. این هندلر‌ها پیام‌هایی را که از طریق MessageQueue دریافت می‌کنند، پردازش و کدهایی را برای رسیدگی به آن پیام‌ها اجرا می‌کنند.

یکی از ویژگی‌های مهم هندلر‌ها، اجرا شدن آن‌ها خارج از چرخه حیات اکتیویتی‌ها است، به این معنی که هندلر‌ها مستقل از اکتیویتی‌ها و در پس زمینه اجرا می‌شوند. بنابراین، اگر از هندلر‌ها استفاده می‌کنیم، باید پس از اتمام کار، آن‌ها را به درستی پاک کنیم، وگرنه ممکن است باعث بروز مشکلاتی مانند Thread leak شوند.

یکی از کاربردهای اصلی هندلر‌ها، ارتباط بین Thread پس‌زمینه و Thread اصلی است. با استفاده از هندلر، می‌توانیم اطلاعاتی را که در Thread پس‌زمینه پردازش می‌شوند، به Thread اصلی منتقل کنیم.

هندلر‌ها در برنامه‌نویسی اندروید، به عنوان یکی از ابزارهای مهم برای کنترل Thread ها شناخته می‌شوند. به عنوان مثال، در صورتی که بخواهیم یک کار پس‌زمینه‌ای را هر x ثانیه تکرار کنیم، می‌توانیم از هندلر استفاده کنیم.

7. Job Scheduling چیست؟

یکی از سوالات مصاحبه استخدامی برنامه نویس اندروید توضیح در مورد Job Scheduling است.

Job Scheduling در اندروید، قابلیت برنامه‌ریزی و مدیریت کارها را به صورت بهینه‌سازی شده ارائه می‌دهد. با استفاده از Job Scheduling می‌توانیم مجموعه‌ای از کارهای برنامه‌ریزی شده را پشتیبانی کنیم و سیستم اندروید می‌تواند این کارها را به صورت بهینه ترکیب کند تا مصرف باتری را کاهش دهد.

JobScheduler قابلیت برنامه‌ریزی کارها را به صورت بهینه انجام می‌دهد و JobManager، کار بارگذاری را به راحتی انجام می‌دهد. همچنین، اپلیکیشن را از خطر restart شدن نجات می‌دهد.

با استفاده از Job Scheduling می‌توانیم کارهایی را هنگامی که گوشی به شارژ وصل می‌شود، انجام دهیم. همچنین، می‌توانیم کارهایی را که نیاز به اتصال به شبکه یا Wi-Fi دارند، انجام دهیم. همچنین، می‌توانیم کارهایی را که باید به صورت مرتب انجام شوند اما بحرانی نیستند، انجام دهیم.

با کمک Job Scheduling، می‌توانیم برنامه‌هایی را پیاده‌سازی کنیم که در کنار بهینه‌سازی مصرف باتری، به صورت خودکار و در زمان‌های مناسب، کارهای خود را انجام دهند و این امکان را به ما می‌دهد که برنامه‌های خود را بهبود دهیم و به صورت بهینه‌تر عمل کنیم.

8. کار onSavedInstanceState و onRestoreInstanceState در اکتیویتی چیست؟

در اکتیویتی‌های اندروید، متدهای onSavedInstanceState و onRestoreInstanceState برای ذخیره و بازیابی وضعیت اکتیویتی استفاده می‌شوند.

متد onSavedInstanceState برای ذخیره داده‌ها قبل از pause شدن اکتیویتی استفاده می‌شود. به طور معمول، وقتی یک اکتیویتی pause می‌شود (مثلا برای نمایش یک پیغام یا یک تماس تلفنی)، سیستم ممکن است این اکتیویتی را در حافظه خارجی ذخیره کند. با استفاده از متد onSavedInstanceState، ما می‌توانیم وضعیت فعلی اکتیویتی را (مانند مقادیر متغیرها) در یک bundle ذخیره کنیم تا هنگام از سرگیری اکتیویتی، بتوانیم به این وضعیت دسترسی پیدا کنیم.

متد onRestoreInstanceState هنگامی فراخوانی می‌شود که یک اکتیویتی پس از destroy شدن، دوباره ساخته شود. در این حین، سیستم یک bundle شامل وضعیت قبلی اکتیویتی را به این متد پاس می‌دهد. با استفاده از این bundle، می‌توانیم وضعیت قبلی اکتیویتی را بازیابی کنیم و ادامه دهیم.

به عبارت دیگر، با استفاده از این دو متد، می‌توانیم داده‌های مورد نیاز را ذخیره و بازیابی کنیم تا بتوانیم اکتیویتی را با حفظ وضعیت قبلی آن، مجدداً بازسازی کنیم.

 

اگر میخوای با سوالای بیشتری آشنا بشی قسمت سوم مقاله رو از دست نده…

و همچنین ممنون میشم از طریق ستاره‌های این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.

‫5/5 ‫(6 نظر)
عاطفه امیری

View Comments

Recent Posts

چگونه دوره آموزشی کاتلین پیشرفته می‌تواند مهارت‌های شما را ارتقاء دهد؟

دوره آموزشی کاتلین پیشرفته می‌تواند مهارت‌های شما را با بهره‌گیری از ابزارها و فناوری‌های مدرن…

4 ماه ago

مزیت‌های کاتلین نسبت به سایر زبان‌های برنامه نویسی اندروید

مزیت‌های کاتلین نسبت به سایر زبان‌های برنامه نویسی اندروید این است که سایر زبان‌ها، از…

5 ماه ago

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید: راهنمای جامع و کاربردی

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید یکی از مهم‌ترین فاکتورهایی است که برای کاربران در دنیای امروز…

10 ماه ago

سوالات مصاحبه‌ی استخدامی کاتلین همراه با جواب(قسمت چهارم)

مصاحبه‌ی استخدامی کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

11 ماه ago

سوالات مصاحبه استخدام زبان کاتلین همراه با جواب(قسمت سوم)

مصاحبه استخدام زبان کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه…

11 ماه ago

سوالات مصاحبه استخدام کاتلین همراه با جواب(قسمت دوم)

مصاحبه استخدام کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

11 ماه ago