سوالات مصاحبه استخدامی برنامه نویسی اندروید همراه با جواب(قسمت هشتم)
مصاحبه استخدامی برنامه نویسی اندروید، یکی از مراحل مهم در فرایند استخدام است که میتواند برای شرکتها و کارفرمایان، فرصتی برای ارزیابی تواناییها و مهارتهای فنی فرد باشد. در این مصاحبهها، سوالات مختلفی در مورد مهارتهای فنی، تجربه کاری، روش کار و غیره پرسیده میشود.
در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم شما رو با قسمت هشتم مهم ترین سوالات مصاحبه استخدام برنامه نویسی اندروید آشنا کنیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
مصاحبه استخدام برنامه نویسی اندروید میتواند یک فرصت بسیار خوب برای نمایش مهارتها و تواناییهای فنی فرد باشد. در این مصاحبه، ممکن است سوالاتی پرسیده شود که به طور مستقیم به مهارتهای فنی فرد و همچنین تجربههای کاری او ارتباط دارند. برخی از مهمترین سوالات مصاحبه استخدامی برنامه نویسی اندروید عبارتند از:
1. مفهوم برنامه نویسی شئ گرا را توضیح دهید؟
برنامهنویسی شیءگرا یک روش برنامهنویسی است که در آن، برنامهها بر اساس شیءها (Objects) و کلاسها (Classes) طراحی و پیادهسازی میشوند. این روش برنامهنویسی بر اساس چند مفهوم کلیدی شکل گرفته است:
- کلاسها: کلاسها مانند قالبهایی هستند که برای ایجاد اشیاء استفاده میشوند. هر کلاس از ویژگیها (Properties) و توابع (Methods) تشکیل شده است که مشخص میکند از چه ویژگیها و عملکردهایی این کلاس تشکیل شده است.
- اشیاء: اشیاء نمونههایی از کلاسها هستند که در حین اجرای برنامه نمایانگر وضعیت و عملکرد آن کلاس هستند. به عنوان مثال، یک شیء از کلاس دانشجو، میتواند نمایانگر یک دانشجو باشد که ویژگیهایی مانند نام، نام خانوادگی، سن و رشتهی تحصیلی را دارد.
- انتزاع: این مفهوم به معنای جداسازی ویژگیهای مهم از ویژگیهای جزئی تر است. در برنامهنویسی شیءگرا، انتزاع به کار میرود تا به برنامهنویسان این امکان را بدهد که بتوانند مفاهیم پیچیده را با سادگی بیشتری مدلسازی کنند.
- کپسوله سازی: کپسوله سازی به معنای پنهان کردن جزئیات پیادهسازی یک کلاس است. با کپسوله سازی، برنامهنویسان میتوانند ویژگیها و روشهای خود را از دید کاربران و سایر بخشهای برنامه محافظت کنند.
- چندریختی: چندریختی به معنای توانایی اشیاء برای پاسخگویی به روشهای مختلف است. به عنوان مثال، اگر یک شیء از کلاس پرنده باشد، میتواند به عنوان یک پرنده، یک حیوان و یا یک شیء با پرواز باشد.
استفاده از برنامهنویسی شیءگرا به برنامهنویسان این امکان را میدهد که برنامههای پویا، قابل توسعه و با کارایی بالا را پیادهسازی کنند.
2. ارث بری (inheritance) چیست؟
یکی از سوالات مصاحبه استخدامی برنامه نویسی اندروید توضیح در مورد ارث بری (inheritance) است.
ارثبری یکی از مفاهیم اصلی برنامهنویسی شیءگرا است که به برنامهنویسان این امکان را میدهد که کلاسها را از کلاسهای دیگر به ارث ببرند و ویژگیها و متدهای آنها را به کلاسهای خود اضافه یا تغییر دهند.
با استفاده از ارثبری، کلاسهای مشابه با اشتراک ویژگیها و عملکردها را میتوان به یکدیگر وصل کرد و از تکرار کد جلوگیری کرد. به عنوان مثال، فرض کنید که در یک برنامهی موبایل، دو کلاس دستگاه همراه و تبلت وجود دارند. این دو کلاس دارای ویژگیهایی مشابه مانند سیستم عامل، اندازه صفحه نمایش و پردازنده هستند. با استفاده از ارثبری، میتوانیم این دو کلاس را به کلاس پدری دستگاههای الکترونیکی متصل کرده و ویژگیهای مشترک آنها را در کلاس پدری تعریف کنیم.
با استفاده از ارثبری، برنامهنویسان میتوانند کد خود را بهتر سازماندهی کنند و از تکرار و اشتباهات پیشگیری کنند. همچنین، این مفهوم به برنامهنویسان این امکان را میدهد که کلاسهای پیچیده را با سادگی بیشتری مدل کنند و قابلیت توسعه و تغییر را بهبود بخشند.
3. آیا در جاوا می توان از چند جا ارث بری کرد؟
در زبان برنامهنویسی جاوا، امکان چند ارثبری از کلاسها وجود ندارد. یعنی هر کلاس فقط میتواند از یک کلاس پدر بهرهمند شود. این محدودیت به منظور جلوگیری از پیچیدگیهایی که در مدلهای چنداندازه و پیچیده باعث میشود، تعبیه شده است.
اما در جاوا، امکان پیادهسازی چندین اینترفیس برای یک کلاس وجود دارد. این به این معناست که یک کلاس میتواند ویژگیهای مرتبط با چندین اینترفیس را پیادهسازی کند و از قابلیتهای آنها بهرهمند شود. برای پیادهسازی اینترفیسها در جاوا، از کلمه کلیدی implements استفاده میشود.
به عنوان مثال، فرض کنید که دو اینترفیس Printable و Savable را تعریف کردهایم. حال میتوانیم یک کلاس به نام Document را تعریف کنیم که این دو اینترفیس را پیادهسازی کند. در این صورت، کلاس Document قادر است از ویژگیهای Printable و Savable استفاده کند و آنها را پیادهسازی کند. به صورت کلی، این روش به برنامهنویسان این امکان را میدهد که ویژگیهای متفاوتی را در یک کلاس یکجا مدیریت کنند و از قابلیت چندریختی برای کلاسهای خود استفاده کنند.
4. کپسوله سازی (Encapsulation) چیست؟
کپسوله سازی (Encapsulation) یکی از اصول اصلی برنامهنویسی شیءگرا است که به برنامهنویسان اجازه میدهد تا دادهها و رفتارهای یک شیء را در یک واحد منطقی گروهبندی کنند و از دسترسی مستقیم به آنها جلوگیری کنند. برای کپسوله سازی، متغیرهای داخلی یک کلاس را با استفاده از کلمه کلیدی private تعریف کرده و به جای دسترسی مستقیم به آنها، از روشهای getter و setter استفاده میشود.
به عنوان مثال، فرض کنید که یک کلاس دارای متغیرهای name و age است. با استفاده از کپسوله سازی، متغیرهای داخلی این کلاس را به صورت private تعریف میکنیم تا از دسترسی مستقیم به آنها جلوگیری شود. سپس برای دسترسی به این متغیرها، دو روش getter و setter را تعریف میکنیم. به این صورت که با استفاده از setter، مقدار دلخواه را در متغیرهای داخلی کلاس قرار میدهیم و با استفاده از getter، مقدار متغیرهای داخلی را به دست میآوریم.
با استفاده از کپسوله سازی، امنیت و قابلیت توسعه کد بهبود مییابد و از تغییرات ناخواسته در دادههای داخلی کلاس جلوگیری میشود. همچنین، به برنامهنویسان این امکان را میدهد که تعامل با شیء را از طریق روشهای مشخص شده و بهینهسازی شده انجام دهند و از پیچیدگیهای ناشی از دسترسی مستقیم به دادهها جلوگیری کنند.
5. کلاس Abstract چیست؟
یکی دیگر از سوالات مصاحبه استخدامی برنامه نویسی اندروید توضیح در مورد کلاس Abstract است.
کلاس Abstract در جاوا، یک کلاس است که حداقل یک تابع Abstract دارد. یک تابع Abstract تابعی است که تعریف میشود اما هیچ پیادهسازیای برای آن ارائه نمیشود. این به این معناست که تابع فقط با نام و نوع برگشتی تعریف میشود و برنامهنویس باید در زمان پیادهسازی کلاس، این تابع را با پیادهسازی مناسب در کلاسهای زیرمجموعه ارائه دهد.
هر کلاس Abstract میتواند شامل یک یا چند تابع Abstract باشد. اگر یک کلاس حداقل یک تابع Abstract داشته باشد، خود کلاس نیز باید Abstract باشد. بنابراین، یک کلاس میتواند به عنوان یک قالب برای کلاسهای زیرمجموعه استفاده شود و میتوان این کلاس را بدون نمونه ساختن استفاده کرد.
از آنجایی که یک تابع Abstract هیچ پیادهسازی ندارد، هیچگاه نمیتوان آن را فراخوانی کرد. برای استفاده از تابع Abstract، باید آن را در یک کلاس زیرمجموعه پیادهسازی کرد.
نکته مهم دیگری که در رابطه با کلاس Abstract وجود دارد، این است که نمیتوانید یک کلاس را همزمان هم Abstract و هم final کنید. همچنین، متدهای غیر Abstract میتوانند به متدهای Abstract دسترسی داشته باشند و از آنها استفاده کنند.
6.اینترفیس (interface) چیست؟
اینترفیس (Interface) در جاوا، یک قالب برنامهنویسی است که شامل تعریف متدهایی است که یک کلاس باید آنها را پیادهسازی کند. این به این معناست که یک اینترفیس میتواند حاوی تعریفهای متدهایی باشد که برای استفاده در کلاسهای دیگر مورد استفاده قرار میگیرند.
یکی از ویژگیهای اینترفیس این است که نمیتوان به صورت مستقیم از آن نمونه سازی کرد. به عبارت دیگر، یک اینترفیس فقط به عنوان یک قالب برای تعریف متدها و نوع دادهها بهکار میرود و برای استفاده از آن، باید یک کلاس زیرمجموعه از آن را پیادهسازی کند.
از آنجایی که یک کلاس میتواند از چندین اینترفیس استفاده کند، اینترفیسها به برنامهنویسان این امکان را میدهند که تعدادی متد با نامهای یکسان و با پیادهسازیهای متفاوت در کلاسهای مختلف را بهکار ببرند.
یک نوع خاص از اینترفیسها، معروف به Marker Interface هستند که شامل تعریف تابعی نیستند، بلکه برای نشاندادن ویژگی خاصی از یک کلاس استفاده میشوند. به عنوان مثال، اینترفیس java.io.Serializable یک Marker Interface است که برای نشان دادن اینکه یک کلاس قابلیت سریالایز کردن دادههای خود را دارد، استفاده میشود.
7. تفاوت های Abstract Class و interface چیستند؟
در جاوا، Abstract Class و Interface دو مفهوم مهم در برنامهنویسی شیءگرا هستند که برای تعریف قالبهایی برای کلاسهای زیرمجموعه به کار میروند. این دو مفهوم به شرح زیر میباشند:
- Abstract Class و Interface هر دو به عنوان یک قالب برای تعریف توابع و متدها بهکار میروند. با این حال، Abstract Class میتواند شامل عضو دادهای (پراپرتی) نیز باشد، در حالی که Interface فقط توابع را تعریف میکند.
- یکی از تفاوتهای اصلی بین Abstract Class و Interface این است که Abstract Class میتواند از ارثبری چندگانه پشتیبانی کند، در حالی که Interface این امکان را ندارد.
- در Abstract Class میتوان تابع سازنده داشت، اما در Interface این امکان وجود ندارد.
- علاوه بر توابع غیرکامل (abstract)، Interface فقط میتواند توابع کامل (non-abstract) را نیز تعریف کند، در حالی که Abstract Class میتواند هر دو نوع تابع را در خود داشته باشد.
- با استفاده از modifier ها، میتوان در Abstract Class به زیرکلاسها، توابع و … دسترسی داد، در حالی که در Interface این امکان وجود ندارد.
- عضو یک Interface نمیتواند static باشد؛ در حالی که در Abstract Class، تنها عضوهای کامل میتوانند static باشند.
به طور کلی، Abstract Class برای تعریف یک کلاس پایه با قابلیت ارثبری استفاده میشود، در حالی که Interface برای تعریف قابلیتهای مشترک بین کلاسهای مختلف استفاده میشود.
8. انتزاعی بودن یعنی چه؟
انتزاعی بودن در برنامهنویسی به مفهوم تخصیص چندین معنی برای یک شیء برای استفادههای مختلف اشاره دارد. به عبارت دیگر، انتزاعی بودن به ما اجازه میدهد که یک شیء را با چندین روش مختلف استفاده کنیم، بدون این که از جزئیات پیادهسازی آن آگاهی کامل داشته باشیم.
در جاوا، انتزاعی بودن در دو مرحله کامپایل و اجرا قابل تشخیص است. در مرحله کامپایل، انتزاعی بودن به وسیلهی overload کردن توابع قابل کنترل است. به علاوه، انتزاعی بودن در مرحله اجرا از طریق ارثبری و استفاده از اینترفیسها قابل کنترل است. به عنوان مثال، با استفاده از overriding و قابلیت ارثبری، میتوانیم یک تابع با همان نام در زیرکلاسها با نحوهی پیادهسازی متفاوت داشته باشیم و در نتیجه، انتزاعی بودن در مرحله اجرا را داشته باشیم.
انتزاعی بودن در برنامهنویسی به ما این امکان را میدهد که به جای تکرار پیادهسازی یک کد در چندین نقطهی برنامه، از یک تابع یا کلاس انتزاعی استفاده کنیم و این کار باعث میشود کد برنامه بهبود یابد و کدنویسی از پیچیدهترین موارد و خطاهای زیادی که ممکن است در پیادهسازی تکراری رخ دهد، جلوگیری شود.
اگر میخوای با سوالای بیشتری آشنا بشی قسمت نهم مقاله رو از دست نده…
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.