-
Які системи контролю версій ви знаєте?
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, ...)
Як я зрозумів, якщо в якості типу в сигнатурі методу використовуються параметри, необхідно перед типом значення їх перерахувати. Чи правильно це?
Більш детальну інформацію можна переглянути за такими посиланнями:
-
Що таке стирання типів?
Усередині класу-дженерика не зберігається інформація про його тип параметра. Це і називається стиранням типів. На стадії компіляції відбувається приведення об'єкта класу до типу, який було вказано під час оголошення.
Приклад:
-
Що таке 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.
Рівень 35. Відповіді на запитання до співбесіди на тему рівня
Запитання/доповнення/критика вітаються.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ