JavaRush /Java блог /Random UA /Рівень 35. Відповіді на запитання до співбесіди на тему р...
Afli
41 рівень
Санкт-Петербург

Рівень 35. Відповіді на запитання до співбесіди на тему рівня

Стаття з групи Random UA
Запитання/доповнення/критика вітаються. Рівень 35. Відповіді на запитання до співбесіди на тему рівня - 1
  1. Які системи контролю версій ви знаєте?

    Git, SVN, Bazaar, Mercurial

  2. Чим відрізняються SVN та Git?

    1. GIT – розподілена ВКВ, а SVN – ні. Іншими словами, якщо є кілька розробників, що працюють з репозиторієм, у кожного на локальній машині буде ПОВНА копія цього репозиторію. Зрозуміло, є і центральна машина, з якої можна клонувати репозиторій. Це нагадує SVN. Основний плюс Git у тому, що якщо раптом у вас немає доступу до інтернету, зберігається можливість працювати з репозиторієм. Потім лише один раз зробити синхронізацію і всі інші розробники отримають повну історію.

    2. GIT зберігає метадані змін, а SVN – цілі файли. Це економить місце та час.

  3. Що таке GitHub? У вас є проекти на GitHub?

    GitHub — веб-сервіс хостингу проектів із використанням системи контролю версій git, а також як соціальна мережа для розробників. Користувачі можуть створювати необмежену кількість репозиторіїв, для кожного з яких надається wiki, система issue tracking-а, є можливість проводити code review тощо. Крім Git, сервіс підтримує отримання та редагування коду через SVN та Mercurial.

  4. Для чого потрібні системи контролю версій?

    ВКВ дає можливість повертати окремі файли до колишнього вигляду, повертати до колишнього стану весь проект, переглядати зміни, що відбуваються з часом, визначати, хто останнім вносив зміни в модуль, який раптово перестав працювати, хто і коли вніс до коду якусь помилку, тощо. .. Взагалі, якщо, користуючись ВКВ, ви все зіпсуєте або втратите файли, все можна буде легко відновити.

  5. Що таке generic? Як вони реалізовані Java?

    Generics – це параметризовані типи. З їхньою допомогою можна оголошувати класи, інтерфейси та методи, де тип даних вказаний у вигляді параметра. Узагальнення додали до мови безпеку типів.

    Приклад реалізації:

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

    У кутових дужках використовується T – ім'я параметра типу. Це ім'я використовується як заповнювач, куди буде підставлено ім'я реального типу, переданого класу MyClassпри створенні реальних типів. Тобто параметр типу Tзастосовується у класі щоразу, коли потрібно параметр типу. Кутові дужки вказують, що параметр може бути узагальнено. Сам клас у своїй називається узагальненим класом чи параметризованим типом.

    Далі тип Tвикористовується для оголошення об'єкта на ім'я obj:

    T obj;

    Замість Tпідставиться реальний тип, який буде вказано під час створення об'єкта класу MyClass. Об'єкт objбуде об'єктом типу, переданого у параметрі типу T. Якщо параметр Tпередати тип String, то екземпляр objматиме тип String.

    Розглянемо конструктор MyClass():

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

    Параметр objмає тип T. Це означає, що реальний тип параметра objвизначається типом, переданим параметром типу Tпід час створення об'єкта класу MyClass.

    Параметр типу Tтакож може бути використаний для вказівки типу методу, що повертається.

    У іменах змінних типу прийнято використовувати великі літери. Зазвичай для колекцій використовується літера E, літерами Kі Vтипи ключів і значення (Key/Value), а літерою T(і за необхідності літери Sі U) - будь-який тип.

    Узагальнення працюють лише з об'єктами. Тому не можна використовувати як параметр елементарні типи на кшталт intабо char.

    *Так само вважаю за потрібне згадати generic методи. Це методи виду:

    модифікатори <T, ...> повертаєтьсяТип ім'яМетода(T t, ...)

    Як я зрозумів, якщо в якості типу в сигнатурі методу використовуються параметри, необхідно перед типом значення їх перерахувати. Чи правильно це?

    Більш детальну інформацію можна переглянути за такими посиланнями:

  6. Що таке стирання типів?

    Усередині класу-дженерика не зберігається інформація про його тип параметра. Це і називається стиранням типів. На стадії компіляції відбувається приведення об'єкта класу до типу, який було вказано під час оголошення.

    Приклад:

    Рівень 35. Відповіді на запитання до співбесіди на тему рівня - 2
  7. Що таке wildcard?

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

    Теорія та практика Java. Експерименти із generic-методами

  8. Розкажіть про extends та super у Generic'ах?

    Щоб накласти обмеження на wildcard, необхідно використовувати конструкції типу:

    • ? extends SomeClass— означає, що може бути використаний будь-який клас-спадкоємець SomeClass
    • ? super SomeClass— означає, що може бути використаний клас SomeClass або клас-батько (або інтерфейс) SomeClass

    Це називається bounded wildcard.

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

    Детально про це можна прочитати за посиланням нижче: Використання generic wildcards для підвищення зручності Java API

  9. Як використовувати wildcard?

    Приклад використання wildcard:

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

    Питання я не зрозумів, але в принципі використання wildcard'ів розглядається в матеріалах за посиланнями вище.

  10. У чому відмінність ArrayList і ArrayList?

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

    ArrayList є супертипом для ArrayList.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ