سوالات مصاحبه استخدامی برنامه نویس اندروید همراه با جواب(قسمت دهم)
مصاحبه برنامه نویس اندروید، یکی از مراحل مهم در فرایند استخدام است که میتواند برای شرکتها و کارفرمایان، فرصتی برای ارزیابی تواناییها و مهارتهای فنی فرد باشد. در این مصاحبهها، سوالات مختلفی در مورد مهارتهای فنی، تجربه کاری، روش کار و غیره پرسیده میشود.
در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم شما رو با قسمت دهم مهم ترین سوالات مصاحبه برنامه نویس اندروید آشنا کنیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
مصاحبه برنامه نویس اندروید میتواند یک فرصت بسیار خوب برای نمایش مهارتها و تواناییهای فنی فرد باشد. در این مصاحبه، ممکن است سوالاتی پرسیده شود که به طور مستقیم به مهارتهای فنی فرد و همچنین تجربههای کاری او ارتباط دارند. برخی از مهمترین سوالات مصاحبه استخدامی برنامه نویسی اندروید عبارتند از:
1. مولتی تردینگ (multi threading) چیست؟
Multi-threading به معنی اجرای چندین فرآیند یا وظیفه به صورت همزمان در یک برنامه است. در این روش، برنامهای میتواند با همزمان اجرای چندین وظیفه، عملکرد بهتر و پویاتری داشته باشد. به عبارت دیگر، هر وظیفه به صورت جداگانه و بهصورت همزمان و در کنار یکدیگر اجرا میشود.
استفاده از multi-threading میتواند بهبود سرعت واکنش برنامه، کاهش زمان اجرای آن و بهبود کارایی در برخی موارد مانند پردازش تصاویر، دادههای بزرگ و شبکه کمک کند. با این حال، برای استفاده از این قابلیت باید به دقت برنامهریزی شود تا مشکلاتی مانند خطاهای همگامسازی و تداخل دادهها جلوگیری شود.
2. معنی کلمه کلیدی synchronized چیست؟
یکی از سوالات مصاحبه برنامه نویس اندروید توضیح در مورد synchronized است.
Synchronized به معنای همگامسازی است و در زبان برنامهنویسی جاوا، به عنوان یک کلیدواژه به کار میرود. وقتی دو یا چند thread به یک منبع مشترک دسترسی دارند، احتمال تداخل در دسترسی و تغییرات متقابل به منبع وجود دارد. برای جلوگیری از این مشکل، synchronized مورد استفاده قرار میگیرد.
زمانی که یک بلاک کد synchronized توسط یک thread فراخوانی میشود، آن بلاک کد به صورت خودکار به حالت همگامسازی وارد میشود و تا زمانی که thread قبلی که به آن بلاک دسترسی داشته، اجرای خود را به پایان نرسانده، هیچ thread دیگری قادر به دسترسی و اجرای آن نخواهد بود. به این ترتیب، تداخل در دسترسی به منابع مشترک، جلوگیری میشود و امکان تغییرات ناهمزمان در منابع مشترک بین چندین thread کاهش مییابد.
3. معنی کلمه کلیدی volatile چیست؟
Volatile به معنای متغیری است که باید به صورت مستقیم از حافظه اصلی خوانده و نوشته شود و نباید در کش ذخیره شود. هدف از استفاده از volatile، جلوگیری از مشکلات همگامسازی در مورد دسترسی و تغییرات به متغیر در محیط چند نخی است.
در برنامههای چند نخی، وقتی که دو یا چند thread به یک متغیر دسترسی دارند، ممکن است به مشکلات همگامسازی برخورد کنیم. در اینجا، استفاده از کلمهی کلیدی volatile میتواند به ما کمک کند تا تداخلاتی که ناشی از دسترسی همزمان به متغیر ایجاد میشود، رفع شود. برای مثال، وقتی که یک thread مقدار یک متغیر را تغییر میدهد، میتوان با استفاده از volatile، تضمین کرد که تغییرات به صورت مستقیم در حافظه اصلی انجام میشود و هر نخی که به متغیر دسترسی دارد، مقدار جدید را بهدرستی مشاهده خواهد کرد.
4. ساختمان داده چیست؟
ساختمان داده به معنای آرایش اطلاعاتی است که برای ذخیره و مدیریت دادهها در برنامههای کامپیوتری استفاده میشود. این ساختمانها میتوانند به صورت پایهای و یا ترکیبی از ساختمانهای پایهای باشند.
پنج رفتار اساسی برای ساختمان دادهها تعریف شده که عبارتند از:
- دسترسی (Access)
- افزودن (Insert)
- حذف کردن (Delete)
- یافتن (Find)
- مرتب سازی (Sort)
دسترسی به دادهها به معنای دستیابی و خواندن اطلاعات در ساختمان داده است. افزودن داده به ساختمان داده، حذف دادهها، یافتن دادهها و مرتبسازی ساختمان داده، عملیات دیگری هستند که در بسیاری از ساختمانهای دادهای پیادهسازی میشوند. هر ساختمان داده دارای ویژگیها و قابلیتهای خاص خود است که برای انتخاب ساختمان مناسب برای برنامه، باید با آنها آشنا باشیم.
5. پشته ها (Stack):
پشتهها (Stack)، ساختمان دادهای هستند که از سیاست LIFO (Last In First Out) پیروی میکنند. در پشته، آیتمها به ترتیبی که به آن افزوده شدهاند، حذف میشوند. تابع push یک آیتم را به بالای پشته اضافه میکند و تابع pop یک آیتم را از بالای پشته حذف میکند.
پشتهها، محدودیت اندازه دارند و در صورتی که پشته پر باشد و سعی کنیم مقداری جدید push کنیم، به این معنی است که حالت overflow در پشته رخ داده است. همچنین، اگر پشته خالی باشد و سعی کنیم یک مقدار از آن pop کنیم، این عملیات انجام نمیشود و به این معنی است که حالت underflow در پشته رخ داده است.
نکتهای که در مورد پشتهها مهم است، این است که زمان اجرای توابع پشتهها به تعداد مقادیر موجود در آنها ربطی ندارد و تنها به تعداد عملیات push و pop بستگی دارد. به همین دلیل، پشتهها در بسیاری از موارد بسیار کارآمد هستند و از جمله ساختمانهای دادهای پرکاربرد در برنامهنویسی هستند.
6. صف ها (Queues):
صفها (Queues)، ساختمان دادهای هستند که از سیاست FIFO (First In First Out) پیروی میکنند. در صف، آیتمها به ترتیب ورود به صف، خارج میشوند. تابع enqueue یک آیتم را به انتهای صف اضافه میکند و تابع dequeue یک آیتم را از جلوی صف حذف میکند. تابع front نیز جلوترین مقدار در صف را باز میگرداند.
صفها، محدودیت اندازه دارند و در صورتی که صف پر باشد و سعی کنیم مقداری جدید enqueue کنیم، به این معنی است که حالت overflow در صف رخ داده است. همچنین، اگر صف خالی باشد و سعی کنیم یک مقدار از آن dequeue کنیم، این عملیات انجام نمیشود و به این معنی است که حالت underflow در صف رخ داده است.
صفها با توجه به نیاز برنامهنویسی، میتوانند نوعهای مختلفی داشته باشند. به عنوان مثال، صف دوطرفه، که میتوان در آن مورد جدید را به ابتدای یا انتهای صف اضافه کرد و یا مورد جدیدی را از ابتدا یا انتها حذف کرد. صف دوطرفه با محدودیت ورودی که در آن حذف از دو طرف قابل انجام است اما اضافه کردن فقط در یک طرف قابل انجام شدن است و صف دوطرفه با محدودیت خروجی که در آن اضافه کردن از دو طرف قابل انجام است اما حذف فقط در یک طرف قابل انجام شدن است، همچنین صفهای الویت دار نیز وجود دارند که در آن موارد با الویت بالاتر، در اولویت خروج قرار میگیرند.
در کل، صفها از جمله ساختمانهای دادهای پرکاربرد و کارآمد در برنامهنویسی هستند، به خصوص وقتی که نیاز به پردازش دادهها به صورت یکدست و به ترتیب ورود به برنامه داریم.
7. Blocking Queue:
یکی دیگر از سوالات مصاحبه برنامه نویس اندروید توضیح در مورد Blocking Queue است.
صف بلوکهشونده (Blocking Queue) یک نوع صف است که در زمانی که شما میخواهید در هنگام خالی بودن آن چیزی از آن حذف کنید یا در هنگامی که میخواهید در هنگام پر بودن آن چیزی به آن اضافه کنید، نخهای شما را بلاک میکند تا زمانی که توسط یک نخ دیگر پر شود (اگر در حالت خالی بودن بود) یا خالی شود (اگر در حالت پر بودن بود). به این ترتیب، نخها در صف بلاکه شونده منتظر میمانند تا عنصری به صف اضافه یا از آن حذف شود، تا بتوانند از بلاک خود خارج شوند و به کار خود ادامه دهند. عملکرد این نوع صف برای هماهنگسازی بین نخها در برنامههای چندنخی بسیار مفید است.
8. تفاوت های صف و پشته چیست؟
تفاوتهای اصلی بین صف و پشته عبارتند از:
- سیاست کاری: در پشته (Stack) سیاست کاری LIFO (Last In First Out) است که به این معنی است که آخرین موردی که به پشته اضافه شده، اولین موردی است که از پشته حذف میشود. اما در صف (Queue) سیاست کاری FIFO (First In First Out) است که به این معنی است که اولین موردی که به صف اضافه شده، اولین موردی است که از صف حذف میشود.
- انواع عملیات: برای افزودن و حذف در پشته از یک انتها استفاده میشود، اما در صف یک انتها برای حذف و انتهای دیگر برای افزودن استفاده میشود.
- تعداد اشارهگرها: در صف از یک اشارهگر برای اشاره به ابتدای صف و استفاده میشود، اما در پیادهسازی پیچیدهتری از دو اشارهگر برای اشاره به ابتدا و انتهای صف استفاده میشود.
- شرایط خالی بودن و پر بودن: در پشته برای شرط خالی بودن به شرط top == -1 نیاز داریم، اما در صف شرط خالی بودن میتواند front == -1 باشد یا front == rear + 1. همچنین شرط پر بودن در پشته top == max -1 است، اما در صف rear == max – 1 است.
- انواع: تنها یک نوع پشته وجود دارد اما در صف انواع مختلفی وجود دارد، از جمله صف دایرهای، صف دوطرفه و صف الویتدار.
- سادگی پیادهسازی: پیادهسازی پشته نسبت به صف، سادهتر است.
9. DeadLock در جاوا چیست؟
Deadlock یک شرایط بحرانی در برنامهنویسی چندنخی است که در آن دو یا بیشتر نخ در حال انتظار برای دسترسی به یک منبع مشترک هستند. این شرایط بحرانی زمانی رخ میدهد که هر نخ تلاش میکند منبع را به دست آورد، اما منابعی که برای ادامه کار خود نیاز دارند در دسترس نیستند و در حال انتظار برای آن هستند که منابع را آزاد کنند.
به طور معمول، Deadlock در برنامههای چندنخی رخ میدهد که از منابع مشترک استفاده میکنند، مانند فایلها، دیتابیسها و سایر منابع دسترسی مشترک. در جاوا، Deadlock رخ میدهد زمانی که دو یا بیشتر نخ در حال انتظار برای دسترسی به منابع مشترک هستند و منابع برای ادامه کار نخها در دسترس نیستند. در این حالت، نخها به صورت بینهایت منتظر میمانند و برنامه به بالا میرود. برای جلوگیری از Deadlock در برنامههای جاوا، باید از روشهای همگامسازی و قفلها استفاده کرد و منابع را به صورت مناسب به نخها اختصاص داد.
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.