-
Які системи контролю версій ви знаєте?
Git, SVN, Bazaar, Mercurial
-
Чим відрізняються SVN та Git?
-
GIT – розподілена ВКВ, а SVN – ні. Іншими словами, якщо є кілька розробників, що працюють з репозиторієм, у кожного на локальній машині буде ПОВНА копія цього репозиторію. Зрозуміло, є і центральна машина, з якої можна клонувати репозиторій. Це нагадує SVN. Основний плюс Git у тому, що якщо раптом у вас немає доступу до інтернету, зберігається можливість працювати з репозиторієм. Потім лише один раз зробити синхронізацію і всі інші розробники отримають повну історію.
-
GIT зберігає метадані змін, а SVN – цілі файли. Це економить місце та час.
-
-
Що таке GitHub? У вас є проекти на GitHub?
GitHub — веб-сервіс хостингу проектів із використанням системи контролю версій git, а також як соціальна мережа для розробників. Користувачі можуть створювати необмежену кількість репозиторіїв, для кожного з яких надається wiki, система issue tracking-а, є можливість проводити code review тощо. Крім Git, сервіс підтримує отримання та редагування коду через SVN та Mercurial.
-
Для чого потрібні системи контролю версій?
ВКВ дає можливість повертати окремі файли до колишнього вигляду, повертати до колишнього стану весь проект, переглядати зміни, що відбуваються з часом, визначати, хто останнім вносив зміни в модуль, який раптово перестав працювати, хто і коли вніс до коду якусь помилку, тощо. .. Взагалі, якщо, користуючись ВКВ, ви все зіпсуєте або втратите файли, все можна буде легко відновити.
-
Що таке 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, ...)
Як я зрозумів, якщо в якості типу в сигнатурі методу використовуються параметри, необхідно перед типом значення їх перерахувати. Чи правильно це?
Більш детальну інформацію можна переглянути за такими посиланнями:
-
Що таке стирання типів?
Усередині класу-дженерика не зберігається інформація про його тип параметра. Це і називається стиранням типів. На стадії компіляції відбувається приведення об'єкта класу до типу, який було вказано під час оголошення.
Приклад:
![Рівень 35. Відповіді на запитання до співбесіди на тему рівня - 2]()
-
Що таке wildcard?
Wildcard — це дженер виду <?>, що означає, що тип може бути чим завгодно. Використовується, наприклад, колекціях, де для всіх колекцій базовим типом є Сollection<?>.
-
Розкажіть про extends та super у Generic'ах?
Щоб накласти обмеження на wildcard, необхідно використовувати конструкції типу:
? extends SomeClass— означає, що може бути використаний будь-який клас-спадкоємець SomeClass? super SomeClass— означає, що може бути використаний клас SomeClass або клас-батько (або інтерфейс) SomeClass
Це називається bounded wildcard.
Для того, щоб визначитися з вибором між
extendsіsuperбув придуманий метод PECS.Детально про це можна прочитати за посиланням нижче: Використання generic wildcards для підвищення зручності Java API
-
Як використовувати wildcard?
Приклад використання wildcard:
List<?> numList = new ArrayList<Integer>();Питання я не зрозумів, але в принципі використання wildcard'ів розглядається в матеріалах за посиланнями вище.
-
У чому відмінність ArrayList і ArrayList?
Запис виду ArrayList називається raw type (звичайний тип). Вона еквівалентна запису виду ArrayList<T> і використовується зворотної сумісності, т.к. до Java 1.5 не було колекцій дженерик. По можливості такої форми запису слід уникати.
ArrayList є супертипом для ArrayList.

ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ