مجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت نهم

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


۸۱. چرا متد Main در جاوا static است ؟

این متد استاتیک است تا معلوم بشود کدام متد باید اجرا شود ؛ اگر شما کلمه کلیدی static را استفاده نکنید برنامه شما کامپایل می شود اما با یک ران تایم ارور NoSuchMethodError مواجه می شوید

شما می توانید تابع Main را overload کنید اما این تابع توسط سیستم اجرا نمی شود و راه حل این مشکل این است که در تابع Main اصلی تابع overload شده را فراخوانی کنید.

برای جلوگیری از ارور NoSuchMethodError می توانید بعد از تابع Main از یک System.exit استفاده کنید.

نکته : هر متد استاتیک قبل از متد Main اجرا ( execute ) می شود


۸۲ـ Garbage Collector چیست و چگونه کار میکند ؟

تمامی اشیائی که در حافظه هیپ جای دارند توسط JVM مدیریت می شوند. تا وقتی از یک آبجکت استفاده کنیم JVM آن را زنده در نظر می گیرد هر موقع از یک آبجکت استفاده نکنیم و دیگر توسط کد ما قابل دسترسی نباشد Garbage Collector آن راه از بین می برد و حافظه اشغال شده توسط آن آبجکت را باز میگرداند.


۸۳. تفاوت حافظه heap و stack چیست ؟

ـ stack برای تخصیص حافظه static استفاده می شود اما heap برای تخصیص حافظه dynamic استفاده می شود و جایگاه هردو حافظه در RAM است.

ما به متغیر هایی که در stack جای دارند مستقیما دسترسی داریم و سرعت استفاده از آن ها بسیار بالا است و این حافظه زمان کامپایل کد به آن ها اختصاص می یابد. وقتی یک تابع ، تابع دیگری را فراخوانی می کند و آن تابع ، تابع دیگری را فراخوانی می کند و... اجرای همه تابع ها متوقف می شود تا وقتی که تابع آخر نتیجه را بازگرداند. حافظه stack یک ترتیب LIFO ( که مخفف Last In First Out است ) را آماده می کند و آخرین بلاکی که وارد حافظه می شود اولین بلاکی است که آزاد می شود و این مورد دنبال کردن فعالیت stack را بسیار ساده می کند. آزادسازی یک بلاک چیزی جز تنظیم یک اشاره گر در حافظه نیست.

متغیر هایی که در heap جای دارند جایگاهشان در زمان اجرا تخصیص می یابد و دسترسی حافظه به آن ها کمی کند تر از stack است اما اندازه حافظه Heap فقط محدود به حافظه ماشین مجازی ما است. المان های درون حافظه Heap هیچ وابستگی ای به هم ندارند و می توانید هر لحظه به هر المان دلخواه دسترسی داشته باشید یک بلاک می تواند هر موقع کار خود را شروع کرده و هر موقع دیگری کار خود را تمام کند و این مورد دنبال کردن فعالیت های بلاک های درون Heap را کمی سخت می کند.

شما می توانید اگر اندازه دقیق حافظه مورد نیاز را می دانید و میزان حافظه مورد نیاز شما زیاد نیست از stack استفاده کنید و اگر اندازه دقیق حافظه مورد نیاز را نمی دانید و داده های شما زیاد است باید از Heap استفاده کنید.

در فعالیت های multi threading هر Thread حافظه stack مختص خود را دارد اما همه Thread ها heap مشترکی دارند به عبارت دیگر stack حافظه ای خاص هر Thread است و heap حافظه خاص هر اپلیکیشن است حافظه stack باید هنگام رسیدگی به خطا ها و اجرای Thread ها در نظر گرفته شود.طز

وقتی یک شئ ساخته می شود از فضای Heap برای ذخیره سازی آن استفاده می شود و مرجع آن در stack ذخیره می شود حافظه stack شامل متغیر های محلی گذرا و مراجع اشیاء درون heap است.

اشیاء ذخیره شده درون هیپ همه جا قابل دسترسی هستند اما stack ها فقط در Thread مربوطه خود قابل دسترسی هستند.

حافظه هیپ به دسته های " OLD-Generation " و " Young-Generation " و... تقسیم می شود؛ اطلاعات بیش تر در قسمت Garbage Collector جاوا...

حافظه stack کوتاه مدت است در صورتی که حافظه Heap از شروع اپلیکیشن یا پایان آن دوام دارد.

زمانی که stack پر شود جاوا خطای java.lang.StackOverFlowError را باز میگرداند در صورتی که وقتی حافظه Heap پر شود جاوا خطای java.lang.OutOfMemoryError: Java Heap Space error را باز می گرداند.


۸۳. مفهوم برنامه نویسی شئ گرا را توضیح دهید؟

برنامه نویسی شئ گرا یک نوع استایل برنامه نویسی است که مفاهیم کلاس ها ( classes ) ، اشیاء ( Objects ) ، انتزاعی بودن ( Abstraction ) ، کپسولی سازی ( Encapsulation ) و چند ریختی بودن ( Polymorphism ) را در بر دارد


۸۴. ارث بری ( inheritance ) چیست ؟

ارث بری پروسه ای است که در آن یک کلاس دارای توابع یا آبجکت های یک کلاس دیگر است و به دو جهت از آن استفاده می شود الف) استفاده چند باره از یک کد ب) انتزاعی کردن کد


۸۵. آیا در جاوا می توان از چند جا ارث بری کرد ؟

ارث بری چندگاه فقط برای interface ها مورد استفاده است و شما می توانید چند اینترفیس را توسط یک کلاس پیاده سازی کنید اما یک کلاس نمی تواند توسط چند کلاس دیگر مشتق شود.


۸۶. کپسولی سازی چیست ؟

  • کپسولی سازی شامل واحد سازی یک کد و داده ها می باشد
  • کپسولی سازی یک تکنیک برای پنهان سازی تنظیمات و رفتار های یک شئ و آماده سازی راه مناسب برای دسترسی به آن ها از بیرون می باشد و از تغییر یا دسترسی به شئ به صورت مستقیم جلوگیری می کند.
  • برای نمونه یک کلاس می تواند با تعریف همه متغیر های درون آن به صورت private و استفاده از getter و setter کپسولی سازی شود


۸۷. کلاس Abstract چیست ؟

  • کلاس Abstract نوعی کلاس است که شامل یک یا چند تابع Abstract است. یک تابع Abstract تابعی است که تعریف می شود اما هیچ پیاده سازی ای ندارد.
  • اگر حتی یک متد Abstract باشد کل کلاس Abstract محسوب می شود
  • کلاس های Abstract ممکن است بدون نمونه گیری شوند و برای اجرای متد های Abstract باید از زیرکلاس استفاده شود
  • شما نمی توانید یک کلاس را همزمان هم Abstract و هم final کنید
  • متد هایی که Abstract نیستند می توانند به متد های Abstract دسترسی داشته باشند


۸۸. اینترفیس ( interface ) چیست ؟

  • اینترفیس تنها شامل تعاریف متد هایی است که یک کلاس باید آن ها را پیاده سازی کند
  • اینترفیس ها نمی توانند final باشند اما متغیر های اینترفیس بیاد یا static یا final باشد
  • نمی توان مستقیما از اینترفیس ها نمونه گیری شود
  • ـ Marker Interface : این نوع اینترفیس ها شامل هیچ تعریف توابع نیستند. برای مثال اینترفیس java.io.Serializable یک marker interface است اما استفاده می شود تا مشخص شود کلاس قابلیست serialize شدن را دارد یا نه.


۸۹. تفاوت های Abstract Class و interface چیستند ؟

  • اینترفیس ها ارث بری چندگانه را پشتیبانی نمی کنند اما کلاس های Abstract می کنند.
  • اینترفیس شامل عضو داده ای نیست و فقط تابع را دارد اما کلاس های Abstract شامل عضو های داده ای هم هستند
  • اینترفیس ها تابع سازنده ندارند اما کلاس های Abstract تابع سازنده دارند
  • اینترفیس ها تنها شامل اعضای غیر کامل هستند ( فقط signature از اعضا دارد ) اما کلاس های Abstract شامل هر دو اعضای کامل و غیر کامل هستند.
  • در اینترفیس ها شما نمی توانید به صورت پیش فرض از modifier ها بر روی همه چیز استفاده کنید اما در کلاس های Abstract می توانید از modifier ها برای زیر کلاس ها و توابع و... استفاده کنید.
  • عضو یک اینترفیس نمی تواند static باشد اما در کلاس های Abstract تنها اعضای کامل می توانند static باشند


۹۰. انتزاعی بودن یعنی چه ؟

انتزاعی بودن وقتی اتفاق می افتد که یک شئ دارای چند حالت باشد برای مثال String یک زیرکلاس از Object است.

مفهوم انتزاعی بودن خود در جاوا نیز آشکار شده. شما می توانید چندین تابع با یک نام اما با آرگومان های متفاوت داشته باشید ( overload کردن توابع ) و در مواردی می توانید چندین تابع با یک نام و نوع خروجی یکسان داشته باشید ( override کردن توابع ).

انتزاعی بودن مشخصه ای است برای تخصیص چندین معنی برای یک شئ برای استفاده های متفاوت و این شئ می تواند متغیر یا تابع یا کلاس باشد...

دو نوع انتزاعی بودن داریم :

  • انزاعی بودن compile time : جریان انتزاعی بودن هنگام کامپایل کنترل می شود. مانند overload کردن توابع
  • انتزاعی بودن Run time : توسط ارث بری و اینترفیس ها انجام می شود. کنترل این نوع انتزاعی بودن هنگام اجرا انجام می شود برای مثال Overriding که برای آن در یک زیر کلاس می توانیم تابعی به همان نام در ابرکلاس داشته باشیم.



ترجمه متنی از Anitaa Murthy

تشکر بابت مطالعه پست
لایک و حمایت یادتون نره
سوالی بود درخدمتم
نوشته شده با ❤️ توسط کوچیکتون حمیدرضا شجراوی =)))