JavaRush /وبلاگ جاوا /Random-FA /سطح 35. پاسخ به سؤالات مصاحبه در مورد موضوع سطح
Afli
مرحله
Санкт-Петербург

سطح 35. پاسخ به سؤالات مصاحبه در مورد موضوع سطح

در گروه منتشر شد
سوالات / اضافات / انتقاد پذیرفته می شود. سطح 35. پاسخ به سوالات مصاحبه با موضوع سطح - 1
  1. چه سیستم های کنترل نسخه را می شناسید؟

    Git، SVN، بازار، مرکوریال

  2. SVN و Git چگونه متفاوت هستند؟

    1. GIT یک VCS توزیع شده است، اما SVN نیست. به عبارت دیگر، اگر چندین توسعه دهنده با یک مخزن کار می کنند، هر کدام یک کپی کامل از این مخزن را در ماشین محلی خود خواهند داشت. البته یک ماشین مرکزی نیز وجود دارد که می توانید از آن مخزن را کلون کنید. این یادآور SVN است. مزیت اصلی Git این است که اگر به طور ناگهانی به اینترنت دسترسی ندارید، همچنان می توانید با مخزن کار کنید. سپس کافی است یک بار همگام سازی را انجام دهید و سایر توسعه دهندگان تاریخچه کامل را دریافت خواهند کرد.

    2. ذخیره‌های GIT ابرداده‌ها را تغییر می‌دهند، در حالی که SVN کل فایل‌ها را ذخیره می‌کند. این باعث صرفه جویی در فضا و زمان می شود.

  3. GitHub چیست؟ آیا پروژه هایی در GitHub دارید؟

    GitHub یک سرویس میزبانی پروژه مبتنی بر وب با استفاده از سیستم کنترل نسخه git و همچنین یک شبکه اجتماعی برای توسعه دهندگان است. کاربران می توانند تعداد نامحدودی مخزن ایجاد کنند که برای هر کدام یک ویکی ارائه می شود، یک سیستم ردیابی مشکل ارائه می شود، امکان بررسی کدها و غیره وجود دارد. علاوه بر Git، این سرویس از دریافت و ویرایش کد از طریق SVN و Mercurial نیز پشتیبانی می کند.

  4. چرا به سیستم های کنترل نسخه نیاز داریم؟

    VCS این امکان را فراهم می کند که فایل های فردی را به شکل قبلی خود بازگردانید، کل پروژه را به حالت قبلی خود برگردانید، تغییراتی را که در طول زمان رخ می دهد مشاهده کنید، تعیین کنید که آخرین کسی که تغییراتی را در ماژولی ایجاد کرده است که به طور ناگهانی کار نمی کند، چه کسی و چه زمانی به نوعی معرفی شده است. خطا در کد و غیره... به طور کلی، اگر با استفاده از VCS همه چیز را خراب کنید یا فایل ها را از دست بدهید، همه چیز به راحتی قابل بازیابی است.

  5. عمومی چیست؟ چگونه در جاوا پیاده سازی می شوند؟

    ژنریک ها انواع پارامتری هستند. با کمک آنها می توانید کلاس ها، رابط ها و متدهایی را که نوع داده به عنوان پارامتر مشخص می شود، اعلام کنید. Generics ایمنی نوع را به زبان اضافه کرد.

    اجرای مثال:

    class MyClass<T>{
      T obj;
      public MyClass(T obj){
        this.obj = obj;
      }
    }
    class MyClass<T>

    براکت های زاویه از T ، نام پارامتر نوع استفاده می کنند. این نام به عنوان یک مکان نگهدار برای نام نوع واقعی ارسال شده به کلاس MyClassهنگام ایجاد انواع واقعی استفاده می شود. یعنی Tهر زمان که پارامتر type مورد نیاز باشد از پارامتر type در کلاس استفاده می شود. براکت های زاویه نشان می دهد که پارامتر را می توان تعمیم داد. خود کلاس یک کلاس عمومی یا نوع پارامتری نامیده می شود.

    در مرحله بعد، از نوع Tبرای اعلام یک شی با نام استفاده می شود obj:

    T obj;

    در عوض، Tنوع واقعی جایگزین خواهد شد، که هنگام ایجاد یک شی از کلاس مشخص می شود MyClass. شی objیک شی از نوع ارسال شده در پارامتر type خواهد بود T. اگر Tنوع را به عنوان پارامتر ارسال کنید String، نمونه objدارای نوع خواهد بود String.

    سازنده را در نظر بگیرید MyClass():

    public MyClass(T obj){
      this.obj = obj;
    }

    Параметр obj имеет тип T. Это значит, что реальный тип параметра obj определяется типом, переданным параметром типа T при создании an object класса MyClass.

    Параметр типа T также может быть использован для указания типа возвращаемого значения метода.

    В именах переменных типа принято использовать заглавные буквы. Обычно для коллекций используется буква E, буквами K и V — типы ключей и meaning (Key/Value), а буквой T (и при необходимости буквы S и U) — любой тип.

    Обобщения работают только с an objectми. Поэтому нельзя использовать в качестве параметра elementрные типы вроде int or char.

    *Так же считаю нужным упомянуть generic методы. Это методы вида:

    модификаторы <T, ...> возвращаемыйТип method name(T t, ...)

    Как я понял, если в качестве типа в сигнатуре метода используются параметры, необходимо перед типом возвращаемого значения их перечислить. Верно ли это?

    Более подробную информацию можно посмотреть по следующим linkм:

  6. What такое стирание типов?

    Внутри класса-дженерика не хранится информация о его типе параметре. Это и называется стиранием типов. На стадии компиляции происходит приведение an object класса к типу, который был указан при объявлении.

    Пример:

    سطح 35. پاسخ به سوالات مصاحبه با موضوع سطح - 2
  7. What такое wildcard?

    Wildcard — это дженерик вида <?>, что означает, что тип может быть чем угодно. Используется, например, в коллекциях, где для всех коллекций базовым типом является Сollection<?>.

    Полезная link: Теория и практика Java. Эксперименты с generic-методами

  8. Расскажите про extends и super в Generic'ах?

    Whatбы наложить ограничение на wildcard необходимо использовать конструкции типа:

    • ? extends SomeClass — означает, что может быть использован любой класс-наследник SomeClass
    • ? super SomeClass — означает, что может быть использован класс SomeClass, либо класс-родитель (or интерфейс) SomeClass

    Это называется bounded wildcard.

    Для того, чтобы определиться с выбором между extends и super был придуман метод PECS.

    Подробно про это можно прочитать по ссылке ниже: Использование generic wildcards для повышения удобства Java API

  9. Как использовать wildcard?

    Пример использования wildcard:

    List<?> numList = new ArrayList<Integer>();

    Вопрос я не понял, но в принципе использование wildcard’ов рассматривается в материалах по linkм выше.

  10. В чем отличие ArrayList и ArrayList<?>

    Запись вида ArrayList называется raw type (обычный тип). Она эквивалентна записи вида ArrayList<T> и используется для обратной совместимости, т.к. до Java 1.5 не было дженерик коллекций. По возможности такой формы записи следует избегать.

    ArrayList<?> является супертипом для ArrayList.

نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION