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

سلام و خسته نباشید خدمت همهقسمت نهم از مجموعه تقلب مصاحبه شغلی برنامه نویس اندروید رو در پیش داریم که میتونید از طریق لینک های زیر به توضیحات و قسمت های قبلی دسترسی داشته باشید ، امروز میریم سراغ ده سوال بعدی...مجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت اولمجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت دوممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت سوممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت چهارممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت پنجممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت ششممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت هفتممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت هشتم۸۱. چرا متد 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تشکر بابت مطالعه پستلایک و حمایت یادتون نرهسوالی بود درخدمتمنوشته شده با ❤️ توسط کوچیکتون حمیدرضا شجراوی =)))