سوالات مصاحبه استخدام برنامه نویس اندروید همراه با جواب(قسمت هفتم)
مصاحبه استخدام برنامه نویسی اندروید، یکی از مراحل مهم در فرایند استخدام است که میتواند برای شرکتها و کارفرمایان، فرصتی برای ارزیابی تواناییها و مهارتهای فنی فرد باشد. در این مصاحبهها، سوالات مختلفی در مورد مهارتهای فنی، تجربه کاری، روش کار و غیره پرسیده میشود.
در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم شما رو با قسمت هفتم مهم ترین سوالات مصاحبه استخدام برنامه نویسی اندروید آشنا کنیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
مصاحبه استخدام برنامه نویسی اندروید میتواند یک فرصت بسیار خوب برای نمایش مهارتها و تواناییهای فنی فرد باشد. در این مصاحبه، ممکن است سوالاتی پرسیده شود که به طور مستقیم به مهارتهای فنی فرد و همچنین تجربههای کاری او ارتباط دارند. برخی از مهمترین سوالات مصاحبه استخدامی برنامه نویسی اندروید عبارتند از:
1. تفاوت های RecyclerView و ListView چیستند؟
RecyclerView و ListView هر دو برای نمایش لیست اطلاعات در اندروید استفاده میشوند، اما RecyclerView دارای ویژگیهای و قابلیتهای بیشتری است که در ListView وجود ندارد.
یکی از ویژگیهای اصلی RecyclerView استفاده از الگوی ViewHolder است. ViewHolder به عنوان یک آبجکت، ویوهای کامپوننتی را درون یک لیاوت تگدار ذخیره میکند. در ListView، این الگوی ViewHolder اجباری نیست و ممکن است در برخی موارد از آن صرف نظر شود. استفاده از الگوی ViewHolder در RecyclerView باعث بهبود عملکرد ویو شده و سرعت نمایش لیست افزایش مییابد.
همچنین در RecyclerView، از LayoutManager برای نمایش لیست استفاده میشود. LayoutManager به شما اجازه میدهد تا آیتمهای لیست را در container های مختلف مانند Linear یا Grid نمایش دهید. در ListView، تنها نوع نمایش عمودی در دسترس است.
در این بخش، RecyclerView همچنین دارای قابلیت Item Animator است که به شما اجازه میدهد انیمیشنهای مختلفی را برای آیتمهای لیست اعمال کنید. در ListView، تعداد انیمیشن های پشتیبانی شده محدود است و این میتواند منجر به کاهش جذابیت و جذابیت کاربری لیست شود.
به طور کلی، RecyclerView به دلیل قابلیتهای بیشترش در مورد نمایش لیست ها، به عنوان یک کامپوننت UI پیشنهاد میشود. با استفاده از RecyclerView، میتوانید لیست های پیچیده تری را با سرعت بیشتری نمایش دهید و تجربه کاربری بهتری را به کاربران خود ارائه دهید.
2. چگونه انیمیشن swipe را در اندروید پیاده سازی می کنید؟
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator=”false”> <translate android:fromXDelta=”-100%” android:toXDelta=”0%” android:fromYDelta=”0%” android:toYDelta=”0%” android:duration=”700"/> </set>
3. چگونه حجم فایل apk را کم کنیم؟
برای کاهش حجم فایل APK در اندروید، میتوانید اقدامات زیر را انجام دهید:
- فعال کردن پروگارد (ProGuard): پروگارد یک ابزار است که به شما کمک میکند کدهای غیرضروری و بدرد نخور را حذف کنید. به عنوان مثال، این ابزار میتواند کلاسهایی که در برنامه استفاده نشدهاند را پاک کرده و به کاهش حجم فایل APK کمک کند.
- فعال کردن shrinkResources: با فعال کردن این تنظیم، ریسورسهای غیرضروری حذف خواهند شد. به عنوان مثال، تصاویری که در برنامه استفاده نشدهاند، از فایل APK حذف میشوند.
- حذف ریسورسهای اضافی: با اضافه کردن نام ریسورسهای مورد نیاز به resConfigs، میتوانید ریسورسهای اضافی را از پروژه حذف کنید.
- استفاده از تصاویر بهینهسازی شده: تصاویر بزرگ و با کیفیت بالا میتوانند به حجم فایل APK اضافه شوند. برای کاهش حجم فایل، میتوانید تصاویر را به فرمت webp یا vector drawable تبدیل کنید. این فرمتها بهینهترین فرمت برای تصاویر در اندروید هستند و باعث کاهش حجم فایل APK میشوند.
با انجام این اقدامات، میتوانید حجم فایل APK را بهبود ببخشید و کاربرانتان را دریافت و نصب آن راحتتر کنید.
4. کامپوننت های Architecture اندروید را نام ببرید:
- Room
- LiveData
- ViewModel
- Data Binding
- Lifecycles
- Navigation
- Paging
- WorkManager
- Hilt
5. تفاوت معماری های MVC و MVP و MVVM در اندروید چیست؟
MVC، MVP و MVVM معماری های مختلفی هستند که برای طراحی برنامه های اندروید استفاده میشوند. هرکدام از این معماریها، رویکرد خاص خود را در مورد جداسازی کدها، طراحی و مدیریت UI، و ارتباط بین کامپوننتها دارند. در زیر تفاوتهای اصلی این سه معماری در اندروید توضیح داده شده است:
- MVC (Model-View-Controller):
در این معماری، برنامه به سه بخش Model، View و Controller تقسیم میشود. Model مسئول مدیریت دادهها است، View مسئول نمایش دادهها و Controller مسئول برقراری ارتباط بین Model و View است. در MVC، View به Controller و Model وابسته است. این رویکرد باعث شده است که کد برنامهنویسی پیچیده و سخت قابل نگهداری باشد. - MVP (Model-View-Presenter):
در این معماری، برنامه به سه بخش Model، View و Presenter تقسیم میشود. Model مسئول مدیریت دادهها است، View مسئول نمایش دادهها و Presenter مسئول برقراری ارتباط بین Model و View است. در MVP، View به Presenter وابسته است و Model به هیچ کدام از آنها وابسته نیست. این رویکرد باعث میشود که کد برنامهنویسی سادهتر و قابل نگهداری تر باشد. - MVVM (Model-View-ViewModel):
در این معماری، برنامه به سه بخش Model، View و ViewModel تقسیم میشود. Model مسئول مدیریت دادهها است، View مسئول نمایش دادهها و ViewModel مسئول برقراری ارتباط بین Model و View است. در MVVM، ViewModel به هیچ کدام از View و Model وابسته نیست ولی View به ViewModel وابسته است. با استفاده از این رویکرد، کد برنامهنویسی میتواند سادهتر و قابل نگهداری تر باشد و همچنین ارتباط بین کامپوننتها را بهبود بخشد.
در کل، هرکدام از این معماریها مزایا و معایب خود را دارند و انتخاب یکی از آنها بستگی به نیازهای برنامه و تجربه برنامهنویس دارد.
6.قوانین S.O.L.I.D در توسعه نرم افزار چیستند؟
قوانین S.O.L.I.D یک مجموعه از قواعد طراحی برای توسعه نرمافزارهای قابل نگهداری، گسترشپذیر و با قابلیت استفاده مجدد هستند. این قواعد توسط رابرت مارتین (Robert C. Martin) پیشنهاد شدهاند و شامل پنج اصل زیر هستند:
- Single Responsibility Principle (SRP): هر ماژول یا کلاس باید تنها یک مسئولیت را داشته باشد و باید تنها به یک دلیل تغییر کند. این اصل از تکرار کد جلوگیری میکند و به افزایش خوانایی، قابلیت نگهداری و تستپذیری کد کمک میکند.
- Open-Closed Principle (OCP): کلاسها و ماژولها باید برای توسعه باز باشند، اما برای تغییر بسته. به عبارت دیگر، باید بتوان آنها را گسترش داد اما نباید کد قبلی را تغییر داد.
- Liskov Substitution Principle (LSP): شیء جایگزینی قابل استفاده برای شیء اصلی خود باشد، بدون اینکه عملکرد کل برنامهی را تحت تاثیر قرار دهد. بدین ترتیب، کد باید قابل استفاده و قابل قبول برای شیءهای جایگزین باشد.
- Interface Segregation Principle (ISP): کلاسها نباید به تعداد زیادی از روابط وابسته باشند، بلکه باید فقط به آنها که نیاز دارند وابسته باشند. به این ترتیب، کد شما ساده تر، خوانا تر و قابل نگهداری تر است.
- Dependency Inversion Principle (DIP): برای جلوگیری از وابستگی بین کلاسها، کلاسها باید به واسطه تعامل با abstraction (مثل interface) وابستگی داشته باشند، نه به دیتای ورودی یا کلاسهای دیگر. به این ترتیب، کد شما قابلیت گسترش و تغییر را دارا میباشد.
این قوانین ساده و قابل استفاده در هر زبان برنامهنویسی هستند و میتوانند بهبود قابل توجهی در ساختار و کیفیت کد شما ایجاد کنند.
7. Garbage Collector چیست و چگونه کار میکند؟
Garbage Collector یکی از اجزای مهم ماشین مجازی جاوا (JVM) است که برای مدیریت حافظه در برنامههای جاوا استفاده میشود. وظیفه اصلی Garbage Collector، شناسایی و حذف شیءهایی است که دیگر در برنامه مورد استفاده قرار نمیگیرند و فضای حافظهای که آنها اشغال کردهاند را آزاد میکند. این کار باعث بهبود عملکرد برنامه، بهبود کیفیت کد و کاهش خطاهای حافظه میشود.
Garbage Collector در JVM به صورت خودکار و به منظور بهینهسازی مصرف حافظه کار میکند. در زمان اجرای برنامه، Garbage Collector نشانههایی را که به شیءهایی که دیگر در برنامه استفاده نمیشوند، اشاره دارند، شناسایی میکند. این نشانهها عبارتند از شیءهایی که با اشارهگرهایی که به آنها اشاره میکنند، دسترسی ندارند. بعد از شناسایی این شیءها، Garbage Collector فضای حافظه را که توسط آنها اشغال شده است، آزاد میکند.
Garbage Collector در JVM دارای سه نوع مختلف است که شامل Serial، Parallel و Concurrent هستند. هر یک از این نوعها، در شرایط مختلفی از برنامه میتوانند بهبود عملکرد را ایجاد کنند. برای مثال، Garbage Collector نوع Serial در برنامههایی با حجم کمتر از حافظه و یک Thread بهترین عملکرد را دارد. اما در برنامههایی با حجم بیشتر از حافظه و چندین Thread، نوع Parallel و Concurrent میتوانند عملکرد بهتری داشته باشند.
در کل، Garbage Collector یکی از مهمترین قطعات ماشین مجازی جاوا است که به برنامهنویسان جاوا کمک میکند تا از منابع حافظه بهینه استفاده کنند و خطاهای حافظه را به حداقل برسانند.
8. تفاوت حافظه heap و stack چیست؟
در زبان برنامهنویسی جاوا، حافظه به دو بخش Stack و Heap تقسیم میشود. متغیرهایی که در Stack جای میگیرند، در زمان کامپایل کد به آنها حافظه اختصاص مییابد و دسترسی به آنها بسیار سریع است. همچنین، به دلیل ترتیب LIFO (Last In First Out) که در Stack وجود دارد، مدیریت حافظه بسیار سادهتر است. اما در Heap، متغیرها در زمان اجرا به آنها حافظه اختصاص مییابد و دسترسی به آنها کندتر است. حافظه Heap محدود به حافظه ماشین مجازی است و المانهای درون آن هیچ وابستگی به هم ندارند. به همین دلیل، مدیریت حافظه در Heap کمی پیچیدهتر است.
در فعالیتهای multi-threading، هر Thread حافظه Stack مختص خود را دارد، اما همه Threadها یک Heap مشترک دارند. اشیاءی که درون Heap ذخیره میشوند، همه جا قابل دسترسی هستند، اما متغیرهای موجود در Stack، فقط در محدوده مربوط به خودشان قابل دسترسی هستند.
همچنین، حافظه Heap به دستههای مختلفی مانند “Old Generation” و “Young Generation” تقسیم میشود که جزئیات بیشتری در مورد آنها در قسمت Garbage Collector موجود است.
در صورتی که حافظه Stack پر شود، خطای java.lang.StackOverFlowError و در صورتی که حافظه Heap پر شود، خطای java.lang.OutOfMemoryError: Java Heap Space رخ میدهد. برای استفاده از حافظه Stack، اگر اندازه دقیق حافظه مورد نیاز مشخص است و حجم دادهها کم است، میتوان از آن استفاده کرد، در غیر این صورت باید از حافظه Heap استفاده کرد.
اگر میخوای با سوالای بیشتری آشنا بشی قسمت هشتم مقاله رو از دست نده…
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.