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

سلام و خسته نباشید خدمت همهقسمت سیزدهم ( آخر ) از مجموعه تقلب مصاحبه شغلی برنامه نویس اندروید رو در پیش داریم که میتونید از طریق لینک های زیر به توضیحات و قسمت های قبلی دسترسی داشته باشید ، امروز میریم سراغ دوازده سوال آخر...مجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت اولمجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت دوممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت سوممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت چهارممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت پنجممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت ششممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت هفتممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت هشتممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت نهممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت دهممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت یازدهممجموعه تقلب مصاحبه شغلی برنامه نویس اندروید - قسمت دوازدهم ۱۲۱. درخت دودویی ( binary tree ) :نوعی درخت که هر المان آن حداکثر دو شاخه ( فرزند ) دارد که به اسم شاخه راست و چپ شناخته می شوند را درخت دودویی می گویندمقدار شاخه چپ همیشه کم تر از مقدار والد است.مقدار شاخه راست همیشه بزرگتر یا مساوی مقدار والد است.اگر دو شرط فوق برقرار باشند می گویند که درخت در حالت تعادل است.مزیت های درخت دودویی نسبت به فهرست پیوندی : در فهرست پیوندی موارد تنها با یک اشاره گر next به هم متصل هستند اما در درخت دودویی تا وقتی که درخت در تعادل باشد همیشه مسیر کوتاه تری برای جستجو طی می شودنقطه ضعف آن ها هم این است که گاهی اوقات از نظر کارآمد بودن به اندازه فهرست پیوندی نزول پیدا می کنند.۱۲۲. پشته ها ( Stack ) :پشته ها مجموعه هایی هستند که از سیاست LIFO ( مخفف Last Input First Output ) استفاده می کنند.از توابع اساسی آن ها می توان موارد زیر را نام برد :تابع Push : موجودی جدیدی به بالای پشته می افزایدتابع Pop : یک موجودی از بالای پشته حذف می کندپشته ها محدودیت اندازه دارند و اگر پشته ای پر باشد و ما مقدار جدید push کنیم در این حالت می گوییم که overflow در پشته رخ داده استاگر پشته خالی باشد و سعی کنیم مقداری را pop کنیم این کار انجام نمی شود و در این حالت می گوییم که underflow در پشته رخ داده است.از نظر کارآمدی : زمان اجرای توابع پشته به تعداد مقادیر درون آن ربطی ندارند به همین علت بسیار کار آمد است و اُ بزرگ آن ۱ است.۱۲۳. صف ها ( Queues ) :صف ها مجموعه هایی هستند که از سیاست FIFO استفاده می کنند. از توابع اساسی آن ها می توان موارد زیر را نام برد :تابع enqueue : یک مورد جدید به انتهای صف اضافه می کندتابع dequeue : یک مورد جدید از جلوی صف حذف می کندتابع front : جلو ترین مقدار صف را باز میگرداندصف ها محدودیت اندازه دارند و اگر پشته ای پر باشد و ما مقدار جدید enqueue کنیم در این حالت می گوییم که overflow در صف رخ داده است اگر صف خالی باشد و سعی کنیم مقداری را dequeue کنیم این کار انجام نمی شود و در این حالت می گوییم که underflow در صف رخ داده است.از نظر کارآمدی : زمان اجرای توابع صف به تعداد مقادیر درون آن ربطی ندارند به همین علت بسیار کار آمد است و اُ بزرگ آن ۱ است.صف دوطرفه : نوعی از صف است که می توان مورد جدید را به انتها یا ابتدای آن اضافه کرد یا مورد جدیدی را از انتها یا ابتدای آن حذف کرد.صف دو طرفه با محدودیت ورودی : نوعی صف دو طرفه است که در آن حذف از دو طرف قابل انجام است اما اضافه کردن فقط در یک طرف قابل انجام شدن استصف دو طرفه با محدودیت خروجی : نوعی صف دو طرفه است که در آن اضافه کردن از دو طرف قابل انجام است اما حذف فقط در یک طرف قابل انجام شدن استصف الویت دار : نوعی صف است که در آن موارد علاوه بر مقدار با الویت افزوده می شوند و هنگام خروج بر اساس الویت خارج می شوند.۱۲۴. Blocking Queue :نوعی صف است که هنگامی که شما می خواهید در هنگام خالی بودن آن چیزی از آن حذف کنید یا در هنگامی که شما می خوهید در هنگام پر بودن آن چیزی به آن اضافه کنید thread شما را بلاک می کند تا زمانی که توسط یک بلاک دیگر پر شود ( اگر خالی بود ) یا خالی شود ( اگر پر بود )مثال برای پیاده سازی Blocking Queue۱۲۵. تفاوت های صف و پشته چیست :سیاست کاری صف LIFO است اما سیاست صف FIFO استبرای افزودن یا حذف در پشته از یک انتها استفاده می شود اما در صف یک انتها برای حذف و انتهای دیگر برای افزودن استفاده می شوددر صف از یک اشاره گر استفاده می شود اما در یک صف ساده از دو اشاره گر استفاده می شودعملیات های push و pop در پشته وجود دارند و معادل آن ها در صف enqueue و dequeue را داریمشرط خالی بودن پشته top == -1 است اما در صف یا front == -1 باشد یا front == rear + 1شرط پر بودن در پشته top == max -1 است اما در صف rear == max -1تنها یک نوع پشته وجود دارد اما انواع صف وجود دارد مانند صف دایره ای ، صف دو طرفه ، صف الویت دارپیاده سازی پشته در مقایسه با صف ساده تر است۱۲۵ـ DeadLock در جاوا چیست ؟هنگامی که یک thread منبعی از سیستم درخواست می کند و آن منبع در روند انتظار دیگری درگیر است یک DeadLock رخ می دهد و Thread منتظر تمام شدن روند انتظار و دریافت منبع از سیستم می ماند.مثال برای مواقعی که DeadLock رخ می دهدمثال برای جلوگیری از رخ دادن DeadLock۱۲۶ـ List Interface و Set Interface چیست ؟List Interface مجموعه ای از اشیاء که ممکن است تکرار داشته باشند را پشتیبانی می کند و Set Interface یک روش ریاضی برای دسترسی به عناصر موجود در مجموعه را برای جلوگیری از تکرار در اختیار شما می گذارد. ۱۲۷. فرق ArrayList و Vector چیست ؟وکتور ها بر خلاف ArrayList ها Thread safe یا همان Synchronized هستند. به همین علت کارایی ArrayList ها بهتر از Vector هاست.در ArrayList برای جستجو باید از عنصر ابتدایی شروع به جستجو کنید اما در وکتور ها می توانید از یک موقعیت مشخص شروع به جستجو کنید. به همین علت عملیات جستجو در وکتور ها سریع تر انجام می شود.وکتور ها دارای اندازه پیش فرض ۱۰ هستند در حالی که ArrayList ها می توانند اندازه های متغیر داشته باشند.۱۲۸. چرا عملیات افزودن و حذف کردن در ArrayList کند تر از فهرست های پیوندی است؟ساختار ArrayList ها به شکلی است که در درون خود آرایه ای برای نگهداری داده ها دارند و هر زمانی که این آرایه پر شد آرایه ی جدیدی به اندازه ۱.۵ برابر آرایه قبلی ساخته می شود و داده های قبلی در آرای جدید کپی می شوند.هنگام عملیات حذف باید تمامی عناصر آرایه یک خانه به عقب کشیده شوند تا جای خالی عنصری که پاک شده است را پر کنند. در فهرست پیوندی داده ها در گره های متصل به هم ذخیره می شوند و عملیات حذف تنها با تغییر دو اشاره گر امکان پذیر است و عملیات افزودن در آن ها تنها با ساخت یک گره جدید و تغییر دو اشاره گر سریع تر انجام می شود.۱۲۹. انواع پیاده سازی برای Map ها :پیاده سازی TreeMap : ذخیره سازی در آن بر اساس کلید ها به صورت صعودی می باشد. برای افزودن ،‌ حذف و یافتن عناصر بهترین جایگزین برای آن HashMap است.پیاده سازی HashTable : مقادیر null را پشتیبانی نمی کند . fail-safe نیست sychronized است در صورتی که hashmap مقادیر null را پشتیبانی می کند . fail-safe است و synchronized نیست.پیاده سازی LinkedHashMap : یک زیر کلاس از HashMap است با این تفاوت که ترتیب عناصر را از حالت LinkedList حفظ می کند.۱۳۰. فرق Enumeration و Iterator ها چیست ؟Enumeration متد remove ندارند در صورتی که iterator ها دارند. رفتار Enumerator ها به صورتی است که تنها عملیات خواندن را انجام می دهند.ـ ListIterator : مانند Iterator ها هستند با این تفاوت که اجازه دسترسی به مجموعه را به صورت پیش رونده یا عقب رونده را می دهند.۱۳۱. HashMap در جاوا چگونه فعالیت می کنند؟HashMap ها با سیاسیت Hash کردن کار میکنند. یک ساختمان داده است که به ما اجازه می دهد به داده در زمانی ثابت دسترسی داشته باشیم ( اگر کلید آن را بدانیم ) وقتی که ما از تابع put استفاده می کنیم متد hashcode بر روی آبجکت کلیدی فراخوانی می شود تا تابع hash در map بتواند سطلی برای ذخیره سازی مقدار پیدا کند.وقتی دو شئ مختلف دارای hashcode یکسان باشند یک فهرست پیوندی در آن سطل ساخته می شود و مقدار دوم به مقدار اول متصل می شود. در هنگام جستجو بعد از پیدا کردن سطل مربوط به hashMap از تابع key.equals برای تشخیص گره درست در فهرست پیوندی استفاده می کنیم و مقدار آن گره را باز میگردانیم.۱۳۲. ژنتیک در جاوا :با استفاده از ژنتیک در جاوا می توان برنامه نویس را مجبور کرد تا تنها انوع مشخصی از مقادیر را ذخیره سازی کند.نوع Type-Safety : تنها می توانیم یک نوع خاص از مقادیر را ذخیره کنیم و نمی توانیم مقادیر جدید را نگه داریمنوع مشخص نشده : نوعی مشخص نشده و می توانیم هر نوعی را ذخیره سازی کنیمبررسی در هنگام کامپایل : این موارد در هنگام کامپایل بررسی می شوند و دیگر کار به زمان اجرا نخواهد رسید که از نظر حرفه ای بسیار بهتر است.برای مثال قبل از ژنتیک باید از cast کردن انواع استفاده می کردیم :List list = new ArrayList(); list.add(&quothello&quot); String s = (String) list.get(0); //typecastingاما بعد از ژنتیک دیگر نیازی به cast کردن انواع نبود :List<String> list = new ArrayList<String>(); list.add(&quothello&quot); String s = list.get(0); کلاسی که به همه انواع ارجاع دارد به عنوان کلاس generic شناخته می شود. ما اینجا از پارامتر T استفاده کردیم. پارامتر T به هر نوعی اشاره دارد به عنوان مثال : String و Double و Strudent و ...علامت‌ ؟ ( علامت سوال ) به عنوان المان whildcard شناخته می شود. این علامت به معنی هر نوعی می باشد برای مقال اگر ما نوشتیم <extends Number ? > به معنی این است که هر زیر کلاسی از کلاس Number به عنوان مثال Integer یا Double یا Float.حرف آخر :دم همتون گرم که تا اینجا این مقله سریالی رو دنبال کردید ،‌ مطمئنا خودتون سود کردید و نتیجه اش هم می بینیدبا نوشتن این ترجمه خیلی انتقاد بهم شد ، خیلی هاشون واقعا انتقاد درست و حسابی بودن و خیلی هاشون هم فقط بهونه یا حسادت یا ...ولی من نه هدفم بزرگ کردن اسمم بود و نه چیز مشابهی...صرفا خودمم میخواستم این مقاله ی بلند و بالا رو بخونم ، خوندن ۵۰ صفحه مقاله انگلیسی برام واقعا حوصله سر بر بود ولی نیازش داشتم ، دلم نمیخواست بعد از من کسی وجود داشته باشه که حوصله ی خوندن ۵۰ صفحه مقاله انگلیسی رو نداشته باشه ، خواستم همه از این اطلاعات استفاده کنن و تنها راهی که به ذهنم می رسید تا خیلی ها رو تشویق کنم برای خوندن همچین مقاله ای ترجمه اش به فارسی بود تشکر از Anitaa Murthy بابت مقاله فوق العاده خفنش.لینک نسخه انگلیسی مقاله هم براتون پایین میذارم استفاده ببرید قسمت اول برگه تقلب مصاحبه برنامه نویسی اندرویدقسمت دوم برگه تقلب مصاحبه برنامه نویسی اندرویدتشکر بابت مطالعه پستلایک و حمایت یادتون نرهسوالی بود درخدمتمنوشته شده با ❤️ توسط کوچیکتون حمیدرضا شجراوی =)))